...
1
16
17 package bootstrap
18
19 import (
20 "context"
21 "time"
22
23 "k8s.io/klog/v2"
24
25 "k8s.io/api/core/v1"
26 bootstrapapi "k8s.io/cluster-bootstrap/token/api"
27 bootstrapsecretutil "k8s.io/cluster-bootstrap/util/secrets"
28 )
29
30 func validateSecretForSigning(ctx context.Context, secret *v1.Secret) (tokenID, tokenSecret string, ok bool) {
31 logger := klog.FromContext(ctx)
32 nameTokenID, ok := bootstrapsecretutil.ParseName(secret.Name)
33 if !ok {
34 logger.V(3).Info("Invalid secret name, must be of the form "+bootstrapapi.BootstrapTokenSecretPrefix+"<secret-id>", "secretName", secret.Name)
35 return "", "", false
36 }
37
38 tokenID = bootstrapsecretutil.GetData(secret, bootstrapapi.BootstrapTokenIDKey)
39 if len(tokenID) == 0 {
40 logger.V(3).Info("No key in Secret", "key", bootstrapapi.BootstrapTokenIDKey, "secret", klog.KObj(secret))
41 return "", "", false
42 }
43
44 if nameTokenID != tokenID {
45 logger.V(3).Info("Token ID doesn't match secret name", "tokenID", tokenID, "secretName", secret.Name)
46 return "", "", false
47 }
48
49 tokenSecret = bootstrapsecretutil.GetData(secret, bootstrapapi.BootstrapTokenSecretKey)
50 if len(tokenSecret) == 0 {
51 logger.V(3).Info("No key in secret", "key", bootstrapapi.BootstrapTokenSecretKey, "secret", klog.KObj(secret))
52 return "", "", false
53 }
54
55
56
57
58 if bootstrapsecretutil.HasExpired(secret, time.Now()) {
59 return "", "", false
60 }
61
62
63 okToSign := bootstrapsecretutil.GetData(secret, bootstrapapi.BootstrapTokenUsageSigningKey)
64 if okToSign != "true" {
65 return "", "", false
66 }
67
68 return tokenID, tokenSecret, true
69 }
70
View as plain text