Skip to content

Commit 25f319d

Browse files
authored
fix!: have nonce checker make decisions on absence of nonces in signature (#107)
1 parent 3b259a5 commit 25f319d

5 files changed

Lines changed: 38 additions & 24 deletions

File tree

mock_nonce_checker_test.go

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nonce.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,12 @@ func (ng NonceGetterFunc) GetNonce(ctx context.Context) (string, error) { return
2323
// e.g. to prevent replay attacks, or to verify that the nonce is the expected one, like
2424
// if requested using the Accept-Signature header.
2525
type NonceChecker interface {
26-
CheckNonce(ctx context.Context, nonce string) error
26+
CheckNonce(ctx context.Context, nonce NonceValue) error
27+
}
28+
29+
type NonceValue struct {
30+
Present bool
31+
Value string
2732
}
2833

2934
type NonceCheckerFunc func(ctx context.Context, nonce string) error
@@ -32,7 +37,7 @@ func (nc NonceCheckerFunc) GetNonce(ctx context.Context, nonce string) error { r
3237

3338
type noopNonceChecker struct{}
3439

35-
func (n noopNonceChecker) CheckNonce(_ context.Context, _ string) error { return nil }
40+
func (n noopNonceChecker) CheckNonce(_ context.Context, _ NonceValue) error { return nil }
3641

3742
type nonceGetter struct{}
3843

serializer_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ func TestNewSerializer(t *testing.T) {
127127
t.Helper()
128128

129129
require.NoError(t, err)
130+
130131
ser, ok := s.(*strictSerializer)
131132
require.True(t, ok)
132133
assert.Equal(t, "foo", ser.key)

verifier.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,15 +286,17 @@ func (e *expectations) assert(
286286
nc NonceChecker,
287287
) error {
288288
var (
289-
nonce string
290289
missingComponents []string
291290
cmv compositeMessageVerifier
292291
mv messageVerifier
293292
)
294293

294+
nonce := NonceValue{}
295+
295296
nonceValue, noncePresent := params.Params.Get(string(Nonce))
296297
if noncePresent {
297-
nonce = nonceValue.(string) //nolint: forcetypeassert
298+
nonce.Value = nonceValue.(string) //nolint: forcetypeassert
299+
nonce.Present = true
298300
}
299301

300302
if err := nc.CheckNonce(msg.Context, nonce); err != nil {

verifier_test.go

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ func TestExpectationsAssertParameters(t *testing.T) {
7474
now := time.Now().UTC()
7575
falseVal := false
7676
trueVal := true
77+
noNonce := NonceValue{Present: false, Value: ""}
7778

7879
for _, tc := range []struct {
7980
uc string
@@ -97,7 +98,11 @@ func TestExpectationsAssertParameters(t *testing.T) {
9798
configure: func(t *testing.T, nc *NonceCheckerMock) {
9899
t.Helper()
99100

100-
nc.EXPECT().CheckNonce(mock.Anything, "test").Return(errors.New("test error"))
101+
nonce := NonceValue{
102+
Present: true,
103+
Value: "test",
104+
}
105+
nc.EXPECT().CheckNonce(mock.Anything, nonce).Return(errors.New("test error"))
101106
},
102107
assert: func(t *testing.T, err error) {
103108
t.Helper()
@@ -121,7 +126,7 @@ func TestExpectationsAssertParameters(t *testing.T) {
121126
configure: func(t *testing.T, nc *NonceCheckerMock) {
122127
t.Helper()
123128

124-
nc.EXPECT().CheckNonce(mock.Anything, "").Return(nil)
129+
nc.EXPECT().CheckNonce(mock.Anything, noNonce).Return(nil)
125130
},
126131
assert: func(t *testing.T, err error) {
127132
t.Helper()
@@ -145,7 +150,7 @@ func TestExpectationsAssertParameters(t *testing.T) {
145150
configure: func(t *testing.T, nc *NonceCheckerMock) {
146151
t.Helper()
147152

148-
nc.EXPECT().CheckNonce(mock.Anything, "").Return(nil)
153+
nc.EXPECT().CheckNonce(mock.Anything, noNonce).Return(nil)
149154
},
150155
assert: func(t *testing.T, err error) {
151156
t.Helper()
@@ -173,7 +178,7 @@ func TestExpectationsAssertParameters(t *testing.T) {
173178
configure: func(t *testing.T, nc *NonceCheckerMock) {
174179
t.Helper()
175180

176-
nc.EXPECT().CheckNonce(mock.Anything, "").Return(nil)
181+
nc.EXPECT().CheckNonce(mock.Anything, noNonce).Return(nil)
177182
},
178183
assert: func(t *testing.T, err error) {
179184
t.Helper()
@@ -199,7 +204,7 @@ func TestExpectationsAssertParameters(t *testing.T) {
199204
configure: func(t *testing.T, nc *NonceCheckerMock) {
200205
t.Helper()
201206

202-
nc.EXPECT().CheckNonce(mock.Anything, "").Return(nil)
207+
nc.EXPECT().CheckNonce(mock.Anything, noNonce).Return(nil)
203208
},
204209
assert: func(t *testing.T, err error) {
205210
t.Helper()
@@ -221,7 +226,7 @@ func TestExpectationsAssertParameters(t *testing.T) {
221226
configure: func(t *testing.T, nc *NonceCheckerMock) {
222227
t.Helper()
223228

224-
nc.EXPECT().CheckNonce(mock.Anything, "").Return(nil)
229+
nc.EXPECT().CheckNonce(mock.Anything, noNonce).Return(nil)
225230
},
226231
assert: func(t *testing.T, err error) {
227232
t.Helper()
@@ -249,7 +254,7 @@ func TestExpectationsAssertParameters(t *testing.T) {
249254
configure: func(t *testing.T, nc *NonceCheckerMock) {
250255
t.Helper()
251256

252-
nc.EXPECT().CheckNonce(mock.Anything, "").Return(nil)
257+
nc.EXPECT().CheckNonce(mock.Anything, noNonce).Return(nil)
253258
},
254259
assert: func(t *testing.T, err error) {
255260
t.Helper()
@@ -275,7 +280,7 @@ func TestExpectationsAssertParameters(t *testing.T) {
275280
configure: func(t *testing.T, nc *NonceCheckerMock) {
276281
t.Helper()
277282

278-
nc.EXPECT().CheckNonce(mock.Anything, "").Return(nil)
283+
nc.EXPECT().CheckNonce(mock.Anything, noNonce).Return(nil)
279284
},
280285
assert: func(t *testing.T, err error) {
281286
t.Helper()
@@ -297,7 +302,7 @@ func TestExpectationsAssertParameters(t *testing.T) {
297302
configure: func(t *testing.T, nc *NonceCheckerMock) {
298303
t.Helper()
299304

300-
nc.EXPECT().CheckNonce(mock.Anything, "").Return(nil)
305+
nc.EXPECT().CheckNonce(mock.Anything, noNonce).Return(nil)
301306
},
302307
assert: func(t *testing.T, err error) {
303308
t.Helper()
@@ -319,7 +324,7 @@ func TestExpectationsAssertParameters(t *testing.T) {
319324
configure: func(t *testing.T, nc *NonceCheckerMock) {
320325
t.Helper()
321326

322-
nc.EXPECT().CheckNonce(mock.Anything, "").Return(nil)
327+
nc.EXPECT().CheckNonce(mock.Anything, noNonce).Return(nil)
323328
},
324329
assert: func(t *testing.T, err error) {
325330
t.Helper()
@@ -336,7 +341,7 @@ func TestExpectationsAssertParameters(t *testing.T) {
336341
configure: func(t *testing.T, nc *NonceCheckerMock) {
337342
t.Helper()
338343

339-
nc.EXPECT().CheckNonce(mock.Anything, "").Return(nil)
344+
nc.EXPECT().CheckNonce(mock.Anything, noNonce).Return(nil)
340345
},
341346
assert: func(t *testing.T, err error) {
342347
t.Helper()
@@ -353,7 +358,7 @@ func TestExpectationsAssertParameters(t *testing.T) {
353358
configure: func(t *testing.T, nc *NonceCheckerMock) {
354359
t.Helper()
355360

356-
nc.EXPECT().CheckNonce(mock.Anything, "").Return(nil)
361+
nc.EXPECT().CheckNonce(mock.Anything, noNonce).Return(nil)
357362
},
358363
assert: func(t *testing.T, err error) {
359364
t.Helper()
@@ -395,7 +400,8 @@ func TestExpectationsAssertParameters(t *testing.T) {
395400
configure: func(t *testing.T, nc *NonceCheckerMock) {
396401
t.Helper()
397402

398-
nc.EXPECT().CheckNonce(mock.Anything, "foo").Return(nil)
403+
nonce := NonceValue{Present: true, Value: "foo"}
404+
nc.EXPECT().CheckNonce(mock.Anything, nonce).Return(nil)
399405
},
400406
assert: func(t *testing.T, err error) {
401407
t.Helper()

0 commit comments

Comments
 (0)