@@ -236,6 +236,8 @@ Define Auth Challenge | `data_classes.cognito_user_pool_event.DefineAuthChalleng
236236Create Auth Challenge | ` data_classes.cognito_user_pool_event.CreateAuthChallengeTriggerEvent ` 
237237Verify Auth Challenge | ` data_classes.cognito_user_pool_event.VerifyAuthChallengeResponseTriggerEvent ` 
238238
239+ #### Post Confirmation Example  
240+ 
239241=== "app.py"
240242
241243    ```python 
@@ -248,6 +250,201 @@ Verify Auth Challenge | `data_classes.cognito_user_pool_event.VerifyAuthChalleng
248250        do_something_with(user_attributes) 
249251    ``` 
250252
253+ #### Define Auth Challenge Example  
254+ 
255+ !!! warning "NOTE "
256+     In this example we are modifying the wrapped dict response fields, so we need to return the json serializable wrapped event in ` event.raw_event ` 
257+ 
258+ !!! info "NOTE "
259+     This example is based on the AWS Cognito docs for [ Define Auth Challenge Lambda Trigger] ( https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-define-auth-challenge.html ) {target="_ blank"}
260+ 
261+ === "app.py"
262+ 
263+     ```python 
264+     from aws_lambda_powertools.utilities.data_classes.cognito_user_pool_event import DefineAuthChallengeTriggerEvent 
265+ 
266+     def handler(event: dict, context) -> dict: 
267+         event: DefineAuthChallengeTriggerEvent = DefineAuthChallengeTriggerEvent(event) 
268+         if ( 
269+             len(event.request.session) == 1 
270+             and event.request.session[0].challenge_name == "SRP_A" 
271+         ): 
272+             event.response.issue_tokens = False 
273+             event.response.fail_authentication = False 
274+             event.response.challenge_name = "PASSWORD_VERIFIER" 
275+         elif ( 
276+             len(event.request.session) == 2 
277+             and event.request.session[1].challenge_name == "PASSWORD_VERIFIER" 
278+             and event.request.session[1].challenge_result 
279+         ): 
280+             event.response.issue_tokens = False 
281+             event.response.fail_authentication = False 
282+             event.response.challenge_name = "CUSTOM_CHALLENGE" 
283+         elif ( 
284+             len(event.request.session) == 3 
285+             and event.request.session[2].challenge_name == "CUSTOM_CHALLENGE" 
286+             and event.request.session[2].challenge_result 
287+         ): 
288+             event.response.issue_tokens = True 
289+             event.response.fail_authentication = False 
290+         else: 
291+             event.response.issue_tokens = False 
292+             event.response.fail_authentication = True 
293+ 
294+         return event.raw_event 
295+     ``` 
296+ === "SPR_A response"
297+ 
298+     ```json hl_lines="25-27" 
299+     { 
300+         "version": "1", 
301+         "region": "us-east-1", 
302+         "userPoolId": "us-east-1_example", 
303+         "userName": "UserName", 
304+         "callerContext": { 
305+             "awsSdkVersion": "awsSdkVersion", 
306+             "clientId": "clientId" 
307+         }, 
308+         "triggerSource": "DefineAuthChallenge_Authentication", 
309+         "request": { 
310+             "userAttributes": { 
311+                 "sub": "4A709A36-7D63-4785-829D-4198EF10EBDA", 
312+                 "email_verified": "true", 
313+                 "name": "First Last", 
314+ 315+             }, 
316+             "session": [ 
317+                 { 
318+                     "challengeName": "SRP_A", 
319+                     "challengeResult": true 
320+                 } 
321+             ] 
322+         }, 
323+         "response": { 
324+             "issueTokens": false, 
325+             "failAuthentication": false, 
326+             "challengeName": "PASSWORD_VERIFIER" 
327+         } 
328+     } 
329+     ``` 
330+ === "PASSWORD_VERIFIER success response"
331+ 
332+     ```json hl_lines="30-32" 
333+     { 
334+         "version": "1", 
335+         "region": "us-east-1", 
336+         "userPoolId": "us-east-1_example", 
337+         "userName": "UserName", 
338+         "callerContext": { 
339+             "awsSdkVersion": "awsSdkVersion", 
340+             "clientId": "clientId" 
341+         }, 
342+         "triggerSource": "DefineAuthChallenge_Authentication", 
343+         "request": { 
344+             "userAttributes": { 
345+                 "sub": "4A709A36-7D63-4785-829D-4198EF10EBDA", 
346+                 "email_verified": "true", 
347+                 "name": "First Last", 
348+ 349+             }, 
350+             "session": [ 
351+                 { 
352+                     "challengeName": "SRP_A", 
353+                     "challengeResult": true 
354+                 }, 
355+                 { 
356+                     "challengeName": "PASSWORD_VERIFIER", 
357+                     "challengeResult": true 
358+                 } 
359+             ] 
360+         }, 
361+         "response": { 
362+             "issueTokens": false, 
363+             "failAuthentication": false, 
364+             "challengeName": "CUSTOM_CHALLENGE" 
365+         } 
366+     } 
367+ 
368+     ``` 
369+ === "CUSTOM_CHALLENGE success response"
370+ 
371+     ```json hl_lines="34 35" 
372+     { 
373+         "version": "1", 
374+         "region": "us-east-1", 
375+         "userPoolId": "us-east-1_example", 
376+         "userName": "UserName", 
377+         "callerContext": { 
378+             "awsSdkVersion": "awsSdkVersion", 
379+             "clientId": "clientId" 
380+         }, 
381+         "triggerSource": "DefineAuthChallenge_Authentication", 
382+         "request": { 
383+             "userAttributes": { 
384+                 "sub": "4A709A36-7D63-4785-829D-4198EF10EBDA", 
385+                 "email_verified": "true", 
386+                 "name": "First Last", 
387+ 388+             }, 
389+             "session": [ 
390+                 { 
391+                     "challengeName": "SRP_A", 
392+                     "challengeResult": true 
393+                 }, 
394+                 { 
395+                     "challengeName": "PASSWORD_VERIFIER", 
396+                     "challengeResult": true 
397+                 }, 
398+                 { 
399+                     "challengeName": "CUSTOM_CHALLENGE", 
400+                     "challengeResult": true 
401+                 } 
402+             ] 
403+         }, 
404+         "response": { 
405+             "issueTokens": true, 
406+             "failAuthentication": false 
407+         } 
408+     } 
409+     ``` 
410+ 
411+ #### Create Auth Challenge Example  
412+ 
413+ !!! info "NOTE "
414+     This example is based on the AWS Cognito docs for [ Create Auth Challenge Lambda Trigger] ( https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-create-auth-challenge.html ) {target="_ blank"}
415+ 
416+ === "app.py"
417+ 
418+     ```python 
419+     from aws_lambda_powertools.utilities.data_classes.cognito_user_pool_event import CreateAuthChallengeTriggerEvent 
420+ 
421+     def handler(event: dict, context) -> dict: 
422+         event: CreateAuthChallengeTriggerEvent = CreateAuthChallengeTriggerEvent(event) 
423+         if event.request.challenge_name == "CUSTOM_CHALLENGE": 
424+             event.response.public_challenge_parameters = {"captchaUrl": "url/123.jpg"} 
425+             event.response.private_challenge_parameters = {"answer": "5"} 
426+             event.response.challenge_metadata = "CAPTCHA_CHALLENGE" 
427+         return event.raw_event 
428+     ``` 
429+ 
430+ #### Verify Auth Challenge Response Example  
431+ 
432+ !!! info "NOTE "
433+     This example is based on the AWS Cognito docs for [ Verify Auth Challenge Response Lambda Trigger] ( https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-verify-auth-challenge-response.html ) {target="_ blank"}
434+ 
435+ === "app.py"
436+ 
437+     ```python 
438+     from aws_lambda_powertools.utilities.data_classes.cognito_user_pool_event import VerifyAuthChallengeResponseTriggerEvent 
439+ 
440+     def handler(event: dict, context) -> dict: 
441+         event: VerifyAuthChallengeResponseTriggerEvent = VerifyAuthChallengeResponseTriggerEvent(event) 
442+         event.response.answer_correct = ( 
443+             event.request.private_challenge_parameters.get("answer") == event.request.challenge_answer 
444+         ) 
445+         return event.raw_event 
446+     ``` 
447+ 
251448### Connect Contact Flow  
252449
253450=== "app.py"
0 commit comments