Skip to content

Commit 0b23610

Browse files
lynnemorrisongrs
authored andcommitted
Add expiry time to token. When token is being used to create
link verify the token hasn't expired. If it has log a warning, but continue trying to bring up link. fixes #1415
1 parent 310372a commit 0b23610

File tree

3 files changed

+40
-8
lines changed

3 files changed

+40
-8
lines changed

client/connector_create.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"os"
88
"reflect"
99
"strconv"
10+
"time"
1011

1112
"github.com/skupperproject/skupper/pkg/domain"
1213
domainkube "github.com/skupperproject/skupper/pkg/domain/kube"
@@ -113,6 +114,17 @@ func (cli *VanClient) ConnectorCreateSecretFromData(ctx context.Context, options
113114
return nil, fmt.Errorf("Claims not supported. %s", err)
114115
}
115116
}
117+
if expirationStr, ok := secret.ObjectMeta.Annotations[types.ClaimExpiration]; ok {
118+
expiration, timeErr := time.Parse(time.RFC3339, expirationStr)
119+
if timeErr == nil {
120+
if expiration.Before(time.Now()) {
121+
fmt.Printf("Warning: token may have expired, expiration time: %s\n", expiration)
122+
}
123+
} else {
124+
fmt.Printf("Warning: cannot parse token expiration %s", timeErr)
125+
}
126+
}
127+
116128
secret.ObjectMeta.SetOwnerReferences([]metav1.OwnerReference{
117129
kube.GetDeploymentOwnerReference(current),
118130
})

pkg/kube/claims/claim_create.go

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ func NewClaimFactory(clients kube.Clients, namespace string, siteContext SiteCon
7373
}
7474

7575
func (m *ClaimFactory) CreateTokenClaim(name string, password []byte, expiry time.Duration, uses int) (*corev1.Secret, error) {
76+
var expiryStr string
7677
options, err := checkOptions(name, password, expiry, uses)
7778
if err != nil {
7879
return nil, err
@@ -82,11 +83,15 @@ func (m *ClaimFactory) CreateTokenClaim(name string, password []byte, expiry tim
8283
return nil, fmt.Errorf("Edge configuration cannot accept connections")
8384
}
8485

85-
claim, err := m.createClaimToken(options.Name, options.Password)
86+
if expiry > 0 {
87+
expiration := time.Now().Add(expiry)
88+
expiryStr = expiration.Format(time.RFC3339)
89+
}
90+
claim, err := m.createClaimToken(options.Name, options.Password, expiryStr)
8691
if err != nil {
8792
return nil, err
8893
}
89-
err = m.createClaimRecord(options.Name, options.Password, options.Expiry, options.Uses)
94+
err = m.createClaimRecord(options.Name, options.Password, expiryStr, options.Uses)
9095
if err != nil {
9196
return nil, err
9297
}
@@ -95,6 +100,7 @@ func (m *ClaimFactory) CreateTokenClaim(name string, password []byte, expiry tim
95100
}
96101

97102
func (m *ClaimFactory) RecreateTokenClaim(name string) (*corev1.Secret, error) {
103+
var expiryStr string
98104
secret, err := m.clients.GetKubeClient().CoreV1().Secrets(m.namespace).Get(m.ctx, name, metav1.GetOptions{})
99105
if errors.IsNotFound(err) {
100106
return nil, nil
@@ -104,11 +110,14 @@ func (m *ClaimFactory) RecreateTokenClaim(name string) (*corev1.Secret, error) {
104110
return nil, nil
105111
}
106112
password := secret.Data[types.ClaimPasswordDataKey]
107-
token, err := m.createClaimToken(name, password)
113+
if secret.ObjectMeta.Annotations[types.ClaimExpiration] != "" {
114+
expiryStr = secret.ObjectMeta.Annotations[types.ClaimExpiration]
115+
}
116+
token, err := m.createClaimToken(name, password, expiryStr)
108117
return token, err
109118
}
110119

111-
func (m *ClaimFactory) createClaimRecord(name string, password []byte, expiry time.Duration, uses int) error {
120+
func (m *ClaimFactory) createClaimRecord(name string, password []byte, expiry string, uses int) error {
112121
record := corev1.Secret{
113122
TypeMeta: metav1.TypeMeta{
114123
APIVersion: "v1",
@@ -128,9 +137,8 @@ func (m *ClaimFactory) createClaimRecord(name string, password []byte, expiry ti
128137
},
129138
}
130139
record.ObjectMeta.OwnerReferences = m.siteContext.GetOwnerReferences()
131-
if expiry > 0 {
132-
expiration := time.Now().Add(expiry)
133-
record.ObjectMeta.Annotations[types.ClaimExpiration] = expiration.Format(time.RFC3339)
140+
if expiry != "" {
141+
record.ObjectMeta.Annotations[types.ClaimExpiration] = expiry
134142
}
135143
if uses > 0 {
136144
record.ObjectMeta.Annotations[types.ClaimsRemaining] = strconv.Itoa(uses)
@@ -139,7 +147,7 @@ func (m *ClaimFactory) createClaimRecord(name string, password []byte, expiry ti
139147
return err
140148
}
141149

142-
func (m *ClaimFactory) createClaimToken(name string, password []byte) (*corev1.Secret, error) {
150+
func (m *ClaimFactory) createClaimToken(name string, password []byte, expiry string) (*corev1.Secret, error) {
143151
hostPort, err := m.siteContext.GetHostPortForClaims()
144152
if err != nil {
145153
return nil, err
@@ -171,6 +179,11 @@ func (m *ClaimFactory) createClaimToken(name string, password []byte) (*corev1.S
171179
types.ClaimCaCertDataKey: caSecret.Data["tls.crt"],
172180
},
173181
}
182+
claim.ObjectMeta.OwnerReferences = m.siteContext.GetOwnerReferences()
183+
if expiry != "" {
184+
claim.ObjectMeta.Annotations[types.ClaimExpiration] = expiry
185+
}
186+
174187
return &claim, nil
175188
}
176189

pkg/kube/claims/claim_create_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,13 @@ func TestCreateTokenClaim(t *testing.T) {
196196
assert.Equal(t, token.Annotations[types.SiteVersion], ctxt.siteVersion)
197197
assert.Equal(t, token.Annotations[types.TokenGeneratedBy], ctxt.siteId)
198198
assert.Assert(t, bytes.Equal(token.Data[types.ClaimPasswordDataKey], test.password))
199+
// expect claim Expiration if expiry time is configured
200+
_, ok := token.Annotations[types.ClaimExpiration]
201+
if test.expiration != 0 {
202+
assert.Assert(t, ok == true)
203+
} else {
204+
assert.Assert(t, ok == false)
205+
}
199206
if test.name != "" {
200207
assert.Equal(t, token.Annotations[types.ClaimUrlAnnotationKey], fmt.Sprintf("https://%s:%d/%s", ctxt.claimsHostPort.Host, ctxt.claimsHostPort.Port, test.name))
201208
} else {

0 commit comments

Comments
 (0)