@@ -22,12 +22,14 @@ const (
22
22
// SecretsRoutes defines the routes for the secrets API.
23
23
type SecretsRoutes struct {
24
24
configProvider config.Provider
25
+ provider secrets.Provider
25
26
}
26
27
27
28
// NewSecretsRoutes creates a new SecretsRoutes with the default config provider
28
- func NewSecretsRoutes () * SecretsRoutes {
29
+ func NewSecretsRoutes (provider secrets. Provider ) * SecretsRoutes {
29
30
return & SecretsRoutes {
30
31
configProvider : config .NewDefaultProvider (),
32
+ provider : provider ,
31
33
}
32
34
}
33
35
@@ -39,8 +41,8 @@ func NewSecretsRoutesWithProvider(provider config.Provider) *SecretsRoutes {
39
41
}
40
42
41
43
// SecretsRouter creates a new router for the secrets API.
42
- func SecretsRouter () http.Handler {
43
- routes := NewSecretsRoutes ()
44
+ func SecretsRouter (provider secrets. Provider ) http.Handler {
45
+ routes := NewSecretsRoutes (provider )
44
46
return secretsRouterWithRoutes (routes )
45
47
}
46
48
@@ -233,15 +235,7 @@ func (s *SecretsRoutes) getSecretsProvider(w http.ResponseWriter, _ *http.Reques
233
235
return
234
236
}
235
237
236
- // Get provider capabilities
237
- provider , err := s .getSecretsManager ()
238
- if err != nil {
239
- logger .Errorf ("Failed to create secrets provider: %v" , err )
240
- http .Error (w , "Failed to access secrets provider" , http .StatusInternalServerError )
241
- return
242
- }
243
-
244
- capabilities := provider .Capabilities ()
238
+ capabilities := s .provider .Capabilities ()
245
239
246
240
w .Header ().Set ("Content-Type" , "application/json" )
247
241
resp := getSecretsProviderResponse {
@@ -274,24 +268,14 @@ func (s *SecretsRoutes) getSecretsProvider(w http.ResponseWriter, _ *http.Reques
274
268
// @Failure 500 {string} string "Internal Server Error"
275
269
// @Router /api/v1beta/secrets/default/keys [get]
276
270
func (s * SecretsRoutes ) listSecrets (w http.ResponseWriter , r * http.Request ) {
277
- provider , err := s .getSecretsManager ()
278
- if err != nil {
279
- if errors .Is (err , secrets .ErrSecretsNotSetup ) {
280
- http .Error (w , "Secrets provider not setup" , http .StatusNotFound )
281
- return
282
- }
283
- logger .Errorf ("Failed to get secrets manager: %v" , err )
284
- http .Error (w , "Failed to access secrets provider" , http .StatusInternalServerError )
285
- return
286
- }
287
271
288
272
// Check if provider supports listing
289
- if ! provider .Capabilities ().CanList {
273
+ if ! s . provider .Capabilities ().CanList {
290
274
http .Error (w , "Secrets provider does not support listing keys" , http .StatusMethodNotAllowed )
291
275
return
292
276
}
293
277
294
- secretDescriptions , err := provider .ListSecrets (r .Context ())
278
+ secretDescriptions , err := s . provider .ListSecrets (r .Context ())
295
279
if err != nil {
296
280
logger .Errorf ("Failed to list secrets: %v" , err )
297
281
http .Error (w , "Failed to list secrets" , http .StatusInternalServerError )
@@ -343,34 +327,23 @@ func (s *SecretsRoutes) createSecret(w http.ResponseWriter, r *http.Request) {
343
327
return
344
328
}
345
329
346
- provider , err := s .getSecretsManager ()
347
- if err != nil {
348
- if errors .Is (err , secrets .ErrSecretsNotSetup ) {
349
- http .Error (w , "Secrets provider not setup" , http .StatusNotFound )
350
- return
351
- }
352
- logger .Errorf ("Failed to get secrets manager: %v" , err )
353
- http .Error (w , "Failed to access secrets provider" , http .StatusInternalServerError )
354
- return
355
- }
356
-
357
330
// Check if provider supports writing
358
- if ! provider .Capabilities ().CanWrite {
331
+ if ! s . provider .Capabilities ().CanWrite {
359
332
http .Error (w , "Secrets provider does not support creating secrets" , http .StatusMethodNotAllowed )
360
333
return
361
334
}
362
335
363
336
// Check if secret already exists (if provider supports reading)
364
- if provider .Capabilities ().CanRead {
365
- _ , err := provider .GetSecret (r .Context (), req .Key )
337
+ if s . provider .Capabilities ().CanRead {
338
+ _ , err := s . provider .GetSecret (r .Context (), req .Key )
366
339
if err == nil {
367
340
http .Error (w , "Secret already exists" , http .StatusConflict )
368
341
return
369
342
}
370
343
}
371
344
372
345
// Create the secret
373
- if err := provider .SetSecret (r .Context (), req .Key , req .Value ); err != nil {
346
+ if err := s . provider .SetSecret (r .Context (), req .Key , req .Value ); err != nil {
374
347
logger .Errorf ("Failed to create secret: %v" , err )
375
348
http .Error (w , "Failed to create secret" , http .StatusInternalServerError )
376
349
return
@@ -423,34 +396,23 @@ func (s *SecretsRoutes) updateSecret(w http.ResponseWriter, r *http.Request) {
423
396
return
424
397
}
425
398
426
- provider , err := s .getSecretsManager ()
427
- if err != nil {
428
- if errors .Is (err , secrets .ErrSecretsNotSetup ) {
429
- http .Error (w , "Secrets provider not setup" , http .StatusNotFound )
430
- return
431
- }
432
- logger .Errorf ("Failed to get secrets manager: %v" , err )
433
- http .Error (w , "Failed to access secrets provider" , http .StatusInternalServerError )
434
- return
435
- }
436
-
437
399
// Check if provider supports writing
438
- if ! provider .Capabilities ().CanWrite {
400
+ if ! s . provider .Capabilities ().CanWrite {
439
401
http .Error (w , "Secrets provider does not support updating secrets" , http .StatusMethodNotAllowed )
440
402
return
441
403
}
442
404
443
405
// Check if secret exists (if provider supports reading)
444
- if provider .Capabilities ().CanRead {
445
- _ , err := provider .GetSecret (r .Context (), key )
406
+ if s . provider .Capabilities ().CanRead {
407
+ _ , err := s . provider .GetSecret (r .Context (), key )
446
408
if err != nil {
447
409
http .Error (w , "Secret not found" , http .StatusNotFound )
448
410
return
449
411
}
450
412
}
451
413
452
414
// Update the secret
453
- if err := provider .SetSecret (r .Context (), key , req .Value ); err != nil {
415
+ if err := s . provider .SetSecret (r .Context (), key , req .Value ); err != nil {
454
416
logger .Errorf ("Failed to update secret: %v" , err )
455
417
http .Error (w , "Failed to update secret" , http .StatusInternalServerError )
456
418
return
@@ -486,25 +448,14 @@ func (s *SecretsRoutes) deleteSecret(w http.ResponseWriter, r *http.Request) {
486
448
return
487
449
}
488
450
489
- provider , err := s .getSecretsManager ()
490
- if err != nil {
491
- if errors .Is (err , secrets .ErrSecretsNotSetup ) {
492
- http .Error (w , "Secrets provider not setup" , http .StatusNotFound )
493
- return
494
- }
495
- logger .Errorf ("Failed to get secrets manager: %v" , err )
496
- http .Error (w , "Failed to access secrets provider" , http .StatusInternalServerError )
497
- return
498
- }
499
-
500
451
// Check if provider supports deletion
501
- if ! provider .Capabilities ().CanDelete {
452
+ if ! s . provider .Capabilities ().CanDelete {
502
453
http .Error (w , "Secrets provider does not support deleting secrets" , http .StatusMethodNotAllowed )
503
454
return
504
455
}
505
456
506
457
// Delete the secret
507
- if err := provider .DeleteSecret (r .Context (), key ); err != nil {
458
+ if err := s . provider .DeleteSecret (r .Context (), key ); err != nil {
508
459
logger .Errorf ("Failed to delete secret: %v" , err )
509
460
// Check if it's a "not found" error
510
461
if err .Error () == "cannot delete non-existent secret: " + key {
@@ -518,23 +469,6 @@ func (s *SecretsRoutes) deleteSecret(w http.ResponseWriter, r *http.Request) {
518
469
w .WriteHeader (http .StatusNoContent )
519
470
}
520
471
521
- // getSecretsManager is a helper function to get the secrets manager
522
- func (s * SecretsRoutes ) getSecretsManager () (secrets.Provider , error ) {
523
- cfg := s .configProvider .GetConfig ()
524
-
525
- // Check if secrets setup has been completed
526
- if ! cfg .Secrets .SetupCompleted {
527
- return nil , secrets .ErrSecretsNotSetup
528
- }
529
-
530
- providerType , err := cfg .Secrets .GetProviderType ()
531
- if err != nil {
532
- return nil , err
533
- }
534
-
535
- return secrets .CreateSecretProvider (providerType )
536
- }
537
-
538
472
// Request and response type definitions
539
473
540
474
// setupSecretsRequest represents the request for initializing a secrets provider
0 commit comments