1 package clustersecrets
2
3 import (
4 "context"
5 "database/sql"
6
7 "edge-infra.dev/pkg/edge/api/types"
8
9 "edge-infra.dev/pkg/edge/api/graph/model"
10 "edge-infra.dev/pkg/edge/api/services"
11 cc "edge-infra.dev/pkg/sds/clustersecrets/common"
12 )
13
14
15 type ClusterSecretService interface {
16 VerifySecretAndLeaseExist(ctx context.Context, clusterEdgeID string, secret cc.Secret) error
17
18 ObtainLease(ctx context.Context, clusterEdgeID string) (bool, error)
19 ReleaseLease(ctx context.Context, clusterEdgeID string) error
20 RevokeLease(ctx context.Context, clusterEdgeID string, username string) error
21 RemoveUserFromLease(ctx context.Context, clusterSecretLeaseEdgeID string) error
22 FetchLease(ctx context.Context, clusterEdgeID string) (model.ClusterSecretLease, error)
23 FetchLeaseID(ctx context.Context, clusterEdgeID string) (string, error)
24 CreateLease(ctx context.Context, clusterEdgeID string) (string, error)
25 VerifyLeaseExists(ctx context.Context, clusterEdgeID string) (string, error)
26
27 AddClusterSecret(ctx context.Context, secret cc.ClusterSecret) error
28 UpdateClusterSecret(ctx context.Context, clusterSecretEdgeID string, clusterSecretType model.ClusterSecretType, version string) error
29 FetchClusterSecret(ctx context.Context, clusterEdgeID string, secretType model.ClusterSecretType) (cc.ClusterSecret, error)
30 ExpireClusterSecrets(ctx context.Context, clusterSecretLeaseEdgeID string) error
31 FetchClusterSecretVersions(ctx context.Context, clusterEdgeID string, secretType model.ClusterSecretType) ([]*model.ClusterSecretVersionInfo, error)
32 VerifyClusterSecretExists(ctx context.Context, clusterEdgeID string, secret cc.Secret, leaseID string) error
33 CheckSecretIsExpired(ctx context.Context, clusterEdgeID string, clusterSecretType model.ClusterSecretType) (bool, error)
34
35 FetchLatestTerminalClusterSecrets(ctx context.Context, clusterEdgeID string) ([]cc.TerminalClusterSecret, error)
36 }
37
38 type clusterSecretService struct {
39 SQLDB *sql.DB
40 GCPService services.GCPService
41 *types.Config
42 }
43
44 type SecuritySettings struct {
45 EdgeSecurityCompliance bool
46 MaxLeasePeriod string
47 MaxSecretValidityPeriod string
48 }
49
50
51 func NewClusterSecretService(sqlDB *sql.DB, gcpService services.GCPService, cfg *types.Config) *clusterSecretService {
52 return &clusterSecretService{
53 SQLDB: sqlDB,
54 GCPService: gcpService,
55 Config: cfg,
56 }
57 }
58
59
60 func (s *clusterSecretService) VerifySecretAndLeaseExist(ctx context.Context, clusterEdgeID string, secret cc.Secret) error {
61 leaseID, err := s.VerifyLeaseExists(ctx, clusterEdgeID)
62 if err != nil {
63 return err
64 }
65 return s.VerifyClusterSecretExists(ctx, clusterEdgeID, secret, leaseID)
66 }
67
View as plain text