11import os
22from lib .authlete_sdk import AuthleteSdk
33from lib .exceptions import ValidationError , AuthleteApiError
4+ from lib .cognito_user_pool import CognitoUserPool
45from lib .utils import response_builder , logger , verify_supported_media_type
56
67
78def handler (event , context ):
9+ token = {}
10+
811 try :
9- logger .info (event )
1012 if verify_supported_media_type (event ['headers' ]) is False :
1113 return response_builder (415 , {
1214 'error_message' : "This API only support 'content-type: application/x-www-form-urlencoded' media type"
@@ -26,6 +28,7 @@ def handler(event, context):
2628 body = event ['body' ]
2729 )
2830
31+ # トークン取得処理
2932 if grant_type == 'authorization_code' :
3033 if data .get ('client_secret' ) is None :
3134 token = authlete .get_access_token_from_code (
@@ -38,7 +41,6 @@ def handler(event, context):
3841 client_id = data ['client_id' ],
3942 client_secret = data ['client_secret' ]
4043 )
41- return response_builder (200 , token )
4244 elif grant_type == 'refresh_token' :
4345 if data .get ('client_secret' ) is None :
4446 token = authlete .get_access_token_from_refresh_token (
@@ -51,7 +53,6 @@ def handler(event, context):
5153 client_id = data ['client_id' ],
5254 client_secret = data ['client_secret' ]
5355 )
54- return response_builder (200 , token )
5556 else :
5657 return response_builder (400 , {
5758 'error_message' : 'invalid grant_type'
@@ -70,3 +71,35 @@ def handler(event, context):
7071 return response_builder (500 , {
7172 'error_message' : 'Internal Server Error'
7273 })
74+
75+ try :
76+ congito_user_pool = CognitoUserPool (
77+ user_pool_id = os .environ ['COGNITO_USER_POOL_ID' ]
78+ )
79+
80+ authlete = AuthleteSdk (
81+ api_key = os .environ ['AUTHLETE_API_KEY' ],
82+ api_secret = os .environ ['AUTHLETE_API_SECRET' ]
83+ )
84+
85+ access_token = token .get ('access_token' )
86+ response_content = authlete .get_user_info (access_token = access_token )
87+ attributes = congito_user_pool .get_user_attributes (username = response_content ['sub' ])
88+ phone_number_verified = 'false'
89+
90+ for attribute in attributes :
91+ if attribute ['Name' ] == 'phone_number_verified' :
92+ phone_number_verified = attribute ['Value' ]
93+
94+ if phone_number_verified == 'true' :
95+ return response_builder (200 , token )
96+ else :
97+ return response_builder (403 , {
98+ 'error_message' : 'phone_number must be verified'
99+ })
100+
101+ except Exception as e :
102+ logger .error (e )
103+ return response_builder (500 , {
104+ 'error_message' : 'Internal Server Error'
105+ })
0 commit comments