@@ -261,3 +261,77 @@ func (sr *swarmRouter) getTask(ctx context.Context, w http.ResponseWriter, r *ht
261261
262262 return httputils .WriteJSON (w , http .StatusOK , task )
263263}
264+
265+ func (sr * swarmRouter ) getSecrets (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
266+ if err := httputils .ParseForm (r ); err != nil {
267+ return err
268+ }
269+ filter , err := filters .FromParam (r .Form .Get ("filters" ))
270+ if err != nil {
271+ return err
272+ }
273+
274+ secrets , err := sr .backend .GetSecrets (basictypes.SecretListOptions {Filter : filter })
275+ if err != nil {
276+ logrus .Errorf ("Error getting secrets: %v" , err )
277+ return err
278+ }
279+
280+ return httputils .WriteJSON (w , http .StatusOK , secrets )
281+ }
282+
283+ func (sr * swarmRouter ) createSecret (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
284+ var secret types.SecretSpec
285+ if err := json .NewDecoder (r .Body ).Decode (& secret ); err != nil {
286+ return err
287+ }
288+
289+ id , err := sr .backend .CreateSecret (secret )
290+ if err != nil {
291+ logrus .Errorf ("Error creating secret %s: %v" , id , err )
292+ return err
293+ }
294+
295+ return httputils .WriteJSON (w , http .StatusCreated , & basictypes.SecretCreateResponse {
296+ ID : id ,
297+ })
298+ }
299+
300+ func (sr * swarmRouter ) removeSecret (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
301+ if err := sr .backend .RemoveSecret (vars ["id" ]); err != nil {
302+ logrus .Errorf ("Error removing secret %s: %v" , vars ["id" ], err )
303+ return err
304+ }
305+
306+ return nil
307+ }
308+
309+ func (sr * swarmRouter ) getSecret (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
310+ secret , err := sr .backend .GetSecret (vars ["id" ])
311+ if err != nil {
312+ logrus .Errorf ("Error getting secret %s: %v" , vars ["id" ], err )
313+ return err
314+ }
315+
316+ return httputils .WriteJSON (w , http .StatusOK , secret )
317+ }
318+
319+ func (sr * swarmRouter ) updateSecret (ctx context.Context , w http.ResponseWriter , r * http.Request , vars map [string ]string ) error {
320+ var secret types.SecretSpec
321+ if err := json .NewDecoder (r .Body ).Decode (& secret ); err != nil {
322+ return err
323+ }
324+
325+ rawVersion := r .URL .Query ().Get ("version" )
326+ version , err := strconv .ParseUint (rawVersion , 10 , 64 )
327+ if err != nil {
328+ return fmt .Errorf ("Invalid secret version '%s': %s" , rawVersion , err .Error ())
329+ }
330+
331+ id := vars ["id" ]
332+ if err := sr .backend .UpdateSecret (id , version , secret ); err != nil {
333+ return fmt .Errorf ("Error updating secret: %s" , err )
334+ }
335+
336+ return nil
337+ }
0 commit comments