@@ -131,6 +131,36 @@ describe('generateRandomHandle', () => {
131131 } )
132132} )
133133
134+ function makeCallbackParams ( overrides : Partial < CallbackParams > = { } ) {
135+ return {
136+ request_uri : 'urn:ietf:params:oauth:request_uri:test' ,
137+ email : 'alice@example.com' ,
138+ approved : '1' ,
139+ new_account : '1' ,
140+ ...overrides ,
141+ } satisfies CallbackParams
142+ }
143+
144+ function expectSignedCallbackToVerify ( callbackParams : CallbackParams ) {
145+ const secret = 'test-secret'
146+ const { sig, ts } = signCallback ( callbackParams , secret )
147+ expect ( verifyCallback ( callbackParams , ts , sig , secret ) ) . toBe ( true )
148+ }
149+
150+ function expectTamperedHandleModeToFail ( callbackParams : CallbackParams ) {
151+ const secret = 'test-secret'
152+ const { sig, ts } = signCallback ( callbackParams , secret )
153+ expect ( verifyCallback ( callbackParams , ts , sig , secret ) ) . toBe ( true )
154+ expect (
155+ verifyCallback (
156+ { ...callbackParams , epds_handle_mode : 'random' } ,
157+ ts ,
158+ sig ,
159+ secret ,
160+ ) ,
161+ ) . toBe ( false )
162+ }
163+
134164describe ( 'signCallback / verifyCallback' , ( ) => {
135165 const secret = 'test-secret-32bytes-padding-here'
136166 const params : CallbackParams = {
@@ -190,35 +220,22 @@ describe('signCallback / verifyCallback', () => {
190220 expect ( verifyCallback ( params , staleTs , staleSig , secret ) ) . toBe ( false )
191221 } )
192222
193- it ( 'signs and verifies callback with epds_handle_mode param' , ( ) => {
194- const secret = 'test-secret'
195- const params : CallbackParams = {
196- request_uri : 'urn:ietf:params:oauth:request_uri:test' ,
197- email : 'alice@example.com' ,
198- approved : '1' ,
199- new_account : '1' ,
200- handle : 'alice' ,
201- epds_handle_mode : 'picker' ,
202- }
203- const { sig, ts } = signCallback ( params , secret )
204- expect ( verifyCallback ( params , ts , sig , secret ) ) . toBe ( true )
205- } )
223+ it . each ( [
224+ { name : 'with handle' , handle : 'alice' } ,
225+ { name : 'without handle' , handle : undefined } ,
226+ ] ) (
227+ 'signs and verifies callback with epds_handle_mode $name' ,
228+ ( { handle } ) => {
229+ expectSignedCallbackToVerify (
230+ makeCallbackParams ( { handle, epds_handle_mode : 'picker' } ) ,
231+ )
232+ } ,
233+ )
206234
207235 it ( 'rejects tampered epds_handle_mode' , ( ) => {
208- const secret = 'test-secret'
209- const params : CallbackParams = {
210- request_uri : 'urn:ietf:params:oauth:request_uri:test' ,
211- email : 'alice@example.com' ,
212- approved : '1' ,
213- new_account : '1' ,
214- epds_handle_mode : 'picker' ,
215- }
216- const { sig, ts } = signCallback ( params , secret )
217- const tamperedParams : CallbackParams = {
218- ...params ,
219- epds_handle_mode : 'random' ,
220- }
221- expect ( verifyCallback ( tamperedParams , ts , sig , secret ) ) . toBe ( false )
236+ expectTamperedHandleModeToFail (
237+ makeCallbackParams ( { epds_handle_mode : 'picker' } ) ,
238+ )
222239 } )
223240
224241 it ( 'rejects future timestamp' , async ( ) => {
@@ -332,37 +349,6 @@ describe('signCallback / verifyCallback with handle', () => {
332349 }
333350 expect ( verifyCallback ( tamperedParams , ts , sig , secret ) ) . toBe ( false )
334351 } )
335-
336- it ( 'signs and verifies callback with epds_handle_mode param' , ( ) => {
337- const secret = 'test-secret'
338- const params : CallbackParams = {
339- request_uri : 'urn:ietf:params:oauth:request_uri:test' ,
340- email : 'alice@example.com' ,
341- approved : '1' ,
342- new_account : '1' ,
343- handle : 'alice' ,
344- epds_handle_mode : 'picker' ,
345- }
346- const { sig, ts } = signCallback ( params , secret )
347- expect ( verifyCallback ( params , ts , sig , secret ) ) . toBe ( true )
348- } )
349-
350- it ( 'rejects tampered epds_handle_mode' , ( ) => {
351- const secret = 'test-secret'
352- const params : CallbackParams = {
353- request_uri : 'urn:ietf:params:oauth:request_uri:test' ,
354- email : 'alice@example.com' ,
355- approved : '1' ,
356- new_account : '1' ,
357- epds_handle_mode : 'picker' ,
358- }
359- const { sig, ts } = signCallback ( params , secret )
360- const tamperedParams : CallbackParams = {
361- ...params ,
362- epds_handle_mode : 'random' ,
363- }
364- expect ( verifyCallback ( tamperedParams , ts , sig , secret ) ) . toBe ( false )
365- } )
366352} )
367353
368354describe ( 'signCallback / verifyCallback with client_id' , ( ) => {
0 commit comments