Skip to content

Commit 06c8ab5

Browse files
committed
Fixes of naming and code style
Signed-off-by: m.nabokikh <[email protected]>
1 parent 91de99d commit 06c8ab5

File tree

7 files changed

+37
-35
lines changed

7 files changed

+37
-35
lines changed

cmd/dex/config.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,8 +305,8 @@ type Expiry struct {
305305
// DeviceRequests defines the duration of time for which the DeviceRequests will be valid.
306306
DeviceRequests string `json:"deviceRequests"`
307307

308-
// RefreshToken defines refresh tokens expiry policy
309-
RefreshToken RefreshTokenExpiry `json:"refreshTokens"`
308+
// RefreshTokens defines refresh tokens expiry policy
309+
RefreshTokens RefreshTokenExpiry `json:"refreshTokens"`
310310
}
311311

312312
// Logger holds configuration required to customize logging for dex.

cmd/dex/serve.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -317,12 +317,12 @@ func runServe(options serveOptions) error {
317317
logger.Infof("config device requests valid for: %v", deviceRequests)
318318
serverConfig.DeviceRequestsValidFor = deviceRequests
319319
}
320-
refreshTokenPolicy, err := server.NewRefreshTokenPolicyFromConfig(
320+
refreshTokenPolicy, err := server.NewRefreshTokenPolicy(
321321
logger,
322-
c.Expiry.RefreshToken.DisableRotation,
323-
c.Expiry.RefreshToken.ValidIfNotUsedFor,
324-
c.Expiry.RefreshToken.AbsoluteLifetime,
325-
c.Expiry.RefreshToken.ReuseInterval,
322+
c.Expiry.RefreshTokens.DisableRotation,
323+
c.Expiry.RefreshTokens.ValidIfNotUsedFor,
324+
c.Expiry.RefreshTokens.AbsoluteLifetime,
325+
c.Expiry.RefreshTokens.ReuseInterval,
326326
)
327327
if err != nil {
328328
return fmt.Errorf("invalid refresh token expiration policy config: %v", err)

server/handlers.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,12 @@ func (s *Server) handleRefreshToken(w http.ResponseWriter, r *http.Request, clie
10421042
return
10431043
}
10441044
if refresh.Token != token.Token {
1045-
if !s.refreshTokenPolicy.AllowedToReuse(refresh.LastUsed) || refresh.ObsoleteToken != token.Token {
1045+
switch {
1046+
case !s.refreshTokenPolicy.AllowedToReuse(refresh.LastUsed):
1047+
fallthrough
1048+
case refresh.ObsoleteToken != token.Token:
1049+
fallthrough
1050+
case refresh.ObsoleteToken == "":
10461051
s.logger.Errorf("refresh token with id %s claimed twice", refresh.ID)
10471052
s.tokenErrHelper(w, errInvalidRequest, "Refresh token is invalid or has already been claimed by another client.", http.StatusBadRequest)
10481053
return

server/rotation.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,13 +185,13 @@ type RefreshTokenPolicy struct {
185185
validIfNotUsedFor time.Duration // interval from last token update to the end of its life
186186
reuseInterval time.Duration // interval within which old refresh token is allowed to be reused
187187

188-
Clock func() time.Time
188+
now func() time.Time
189189

190190
logger log.Logger
191191
}
192192

193-
func NewRefreshTokenPolicyFromConfig(logger log.Logger, rotation bool, validIfNotUsedFor, absoluteLifetime, reuseInterval string) (*RefreshTokenPolicy, error) {
194-
r := RefreshTokenPolicy{Clock: time.Now, logger: logger}
193+
func NewRefreshTokenPolicy(logger log.Logger, rotation bool, validIfNotUsedFor, absoluteLifetime, reuseInterval string) (*RefreshTokenPolicy, error) {
194+
r := RefreshTokenPolicy{now: time.Now, logger: logger}
195195
var err error
196196

197197
if validIfNotUsedFor != "" {
@@ -231,19 +231,19 @@ func (r *RefreshTokenPolicy) CompletelyExpired(lastUsed time.Time) bool {
231231
if r.absoluteLifetime == 0 {
232232
return false // expiration disabled
233233
}
234-
return r.Clock().After(lastUsed.Add(r.absoluteLifetime))
234+
return r.now().After(lastUsed.Add(r.absoluteLifetime))
235235
}
236236

237237
func (r *RefreshTokenPolicy) ExpiredBecauseUnused(lastUsed time.Time) bool {
238238
if r.validIfNotUsedFor == 0 {
239239
return false // expiration disabled
240240
}
241-
return r.Clock().After(lastUsed.Add(r.validIfNotUsedFor))
241+
return r.now().After(lastUsed.Add(r.validIfNotUsedFor))
242242
}
243243

244244
func (r *RefreshTokenPolicy) AllowedToReuse(lastUsed time.Time) bool {
245245
if r.reuseInterval == 0 {
246246
return false // expiration disabled
247247
}
248-
return !r.Clock().After(lastUsed.Add(r.reuseInterval))
248+
return !r.now().After(lastUsed.Add(r.reuseInterval))
249249
}

server/rotation_test.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,19 +110,18 @@ func TestRefreshTokenPolicy(t *testing.T) {
110110
Level: logrus.DebugLevel,
111111
}
112112

113-
r, err := NewRefreshTokenPolicyFromConfig(l, true, "1m", "1m", "1m")
113+
r, err := NewRefreshTokenPolicy(l, true, "1m", "1m", "1m")
114114
require.NoError(t, err)
115115

116116
t.Run("Allowed", func(t *testing.T) {
117-
r.Clock = func() time.Time { return lastTime }
117+
r.now = func() time.Time { return lastTime }
118118
require.Equal(t, true, r.AllowedToReuse(lastTime))
119119
require.Equal(t, false, r.ExpiredBecauseUnused(lastTime))
120120
require.Equal(t, false, r.CompletelyExpired(lastTime))
121121
})
122122

123123
t.Run("Expired", func(t *testing.T) {
124-
r.Clock = func() time.Time { return lastTime.Add(2 * time.Minute) }
125-
time.Sleep(1 * time.Second)
124+
r.now = func() time.Time { return lastTime.Add(2 * time.Minute) }
126125
require.Equal(t, false, r.AllowedToReuse(lastTime))
127126
require.Equal(t, true, r.ExpiredBecauseUnused(lastTime))
128127
require.Equal(t, true, r.CompletelyExpired(lastTime))

server/server_test.go

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,14 @@ func newTestServer(ctx context.Context, t *testing.T, updateConfig func(c *Confi
117117
t.Fatal(err)
118118
}
119119
server.skipApproval = true // Don't prompt for approval, just immediately redirect with code.
120+
121+
// Default rotation policy
122+
server.refreshTokenPolicy, err = NewRefreshTokenPolicy(logger, false, "", "", "")
123+
if err != nil {
124+
t.Fatalf("failed to prepare rotation policy: %v", err)
125+
}
126+
server.refreshTokenPolicy.now = config.Now
127+
120128
return s, server
121129
}
122130

@@ -677,13 +685,6 @@ func TestOAuth2CodeFlow(t *testing.T) {
677685
})
678686
defer httpServer.Close()
679687

680-
policy, err := NewRefreshTokenPolicyFromConfig(s.logger, false, "", "", "")
681-
if err != nil {
682-
t.Fatalf("failed to prepare rotation policy: %v", err)
683-
}
684-
policy.Clock = now
685-
s.refreshTokenPolicy = policy
686-
687688
mockConn := s.connectors["mock"]
688689
conn = mockConn.Connector.(*mock.Callback)
689690

@@ -1515,13 +1516,6 @@ func TestOAuth2DeviceFlow(t *testing.T) {
15151516
})
15161517
defer httpServer.Close()
15171518

1518-
policy, err := NewRefreshTokenPolicyFromConfig(s.logger, false, "", "", "")
1519-
if err != nil {
1520-
t.Fatalf("failed to prepare rotation policy: %v", err)
1521-
}
1522-
policy.Clock = now
1523-
s.refreshTokenPolicy = policy
1524-
15251519
mockConn := s.connectors["mock"]
15261520
conn = mockConn.Connector.(*mock.Callback)
15271521

storage/sql/migrate.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,6 @@ var migrations = []migration{
176176
alter table refresh_token
177177
add column token text not null default '';`,
178178
`
179-
alter table refresh_token
180-
add column obsolete_token text default '';`,
181-
`
182179
alter table refresh_token
183180
add column created_at timestamptz not null default '0001-01-01 00:00:00 UTC';`,
184181
`
@@ -277,4 +274,11 @@ var migrations = []migration{
277274
add column code_challenge_method text not null default '';`,
278275
},
279276
},
277+
{
278+
stmts: []string{
279+
`
280+
alter table refresh_token
281+
add column obsolete_token text default '';`,
282+
},
283+
},
280284
}

0 commit comments

Comments
 (0)