6
6
from decimal import Decimal
7
7
from db_util import DBUtil
8
8
from boto3 .dynamodb .conditions import Key
9
+ from botocore .exceptions import ClientError
9
10
from private_chain_util import PrivateChainUtil
10
11
from time_util import TimeUtil
11
12
from jsonschema import validate
@@ -23,8 +24,10 @@ def get_schema(self):
23
24
'properties' : {
24
25
'recipient_eth_address' : settings .parameters ['eth_address' ],
25
26
'send_value' : settings .parameters ['token_send_value' ],
27
+ 'access_token' : settings .parameters ['access_token' ],
28
+ 'pin_code' : settings .parameters ['pin_code' ]
26
29
},
27
- 'required' : ['recipient_eth_address' , 'send_value' ]
30
+ 'required' : ['recipient_eth_address' , 'send_value' , 'access_token' , 'pin_code' ]
28
31
}
29
32
30
33
def validate_params (self ):
@@ -35,6 +38,10 @@ def validate_params(self):
35
38
self .params ['send_value' ] = int (self .params ['send_value' ])
36
39
except ValueError :
37
40
raise ValidationError ('send_value must be numeric' )
41
+
42
+ # pinコードを検証
43
+ self .__validate_pin_code (self .params ['access_token' ], self .params ['pin_code' ])
44
+
38
45
validate (self .params , self .get_schema ())
39
46
40
47
def exec_main_proc (self ):
@@ -197,3 +204,26 @@ def __update_send_info_with_send_status(self, sort_key, user_id, send_status):
197
204
':send_status' : send_status ,
198
205
}
199
206
)
207
+
208
+ def __validate_pin_code (self , access_token , pin_code ):
209
+ try :
210
+ self .__verify_user_attribute (access_token , pin_code )
211
+ except ClientError as client_error :
212
+ code = client_error .response ['Error' ]['Code' ]
213
+ if code == 'NotAuthorizedException' :
214
+ raise ValidationError ('Access token is invalid' )
215
+ elif code == 'CodeMismatchException' :
216
+ raise ValidationError ('Pin code is invalid' )
217
+ elif code == 'ExpiredCodeException' :
218
+ raise ValidationError ('Pin code is expired' )
219
+ elif code == 'LimitExceededException' :
220
+ raise ValidationError ('Verification limit is exceeded' )
221
+ else :
222
+ raise client_error
223
+
224
+ def __verify_user_attribute (self , access_token , pin_code ):
225
+ self .cognito .verify_user_attribute (
226
+ AccessToken = access_token ,
227
+ AttributeName = 'phone_number' ,
228
+ Code = pin_code
229
+ )
0 commit comments