Skip to content

Commit 2446ba6

Browse files
authored
Merge pull request #436 from keillera/ALIS-5909
ALIS-5909: Fix a bug that caused deletion when run by an existing user.
2 parents 459257d + b04c122 commit 2446ba6

2 files changed

Lines changed: 44 additions & 25 deletions

File tree

src/handlers/me/external_provider_user/create/me_external_provider_user_create.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,17 @@ def exec_main_proc(self):
3232
UserUtil.check_try_to_register_as_yahoo_user(body['user_id']) or \
3333
UserUtil.check_try_to_register_as_facebook_user(body['user_id']):
3434
raise ValidationError('This username is not allowed')
35+
36+
# ログインしているユーザが本処理対象の external_provider_user であること
37+
external_provider_user_id = params['requestContext']['authorizer']['claims']['cognito:username']
38+
if not UserUtil.check_try_to_register_as_line_user(external_provider_user_id) and \
39+
not UserUtil.check_try_to_register_as_twitter_user(external_provider_user_id) and \
40+
not UserUtil.check_try_to_register_as_yahoo_user(external_provider_user_id) and \
41+
not UserUtil.check_try_to_register_as_facebook_user(external_provider_user_id):
42+
raise ValidationError('This login user is not eligible.')
43+
3544
users_table = self.dynamodb.Table(os.environ['USERS_TABLE_NAME'])
3645
external_provider_users_table = self.dynamodb.Table(os.environ['EXTERNAL_PROVIDER_USERS_TABLE_NAME'])
37-
external_provider_user_id = params['requestContext']['authorizer']['claims']['cognito:username']
3846

3947
# usersテーブルのユーザIDの重複チェック
4048
already_user_exists_in_users_table = users_table.get_item(Key={'user_id': body['user_id']}).get('Item') is not None

tests/handlers/me/external_provider_user/create/test_me_external_provider_user_create.py

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import json
33
from unittest import TestCase
44
from me_external_provider_user_create import MeExternalProviderUserCreate
5-
from unittest.mock import patch
5+
from unittest.mock import patch, MagicMock
66
from tests_util import TestsUtil
77
from record_not_found_error import RecordNotFoundError
88

@@ -56,9 +56,22 @@ def setUp(self):
5656
def tearDown(self):
5757
TestsUtil.delete_all_tables(dynamodb)
5858

59+
@patch('me_external_provider_user_create.UserUtil.delete_external_provider_id_cognito_user',
60+
MagicMock(return_value=True))
61+
@patch('me_external_provider_user_create.UserUtil.force_non_verified_phone', MagicMock(return_value=None))
62+
@patch('me_external_provider_user_create.CryptoUtil', MagicMock(return_value='password'))
5963
def test_main_ok(self):
60-
with patch('me_external_provider_user_create.UserUtil') as user_mock, \
61-
patch('me_external_provider_user_create.CryptoUtil') as crypto_mock:
64+
with patch('me_external_provider_user_create.UserUtil.create_external_provider_user') as create_external_mock, \
65+
patch('me_external_provider_user_create.UserUtil.get_cognito_user_info') as get_cognito_user_mock:
66+
create_external_mock.return_value = {
67+
'AuthenticationResult': {
68+
'AccessToken': 'aaaaa',
69+
'IdToken': 'bbbbb',
70+
'RefreshToken': 'ccccc'
71+
}
72+
}
73+
get_cognito_user_mock.side_effect = RecordNotFoundError('Record Not Found')
74+
6275
event = {
6376
'body': {
6477
'user_id': 'username01',
@@ -71,29 +84,8 @@ def test_main_ok(self):
7184
}
7285
}
7386
}
74-
7587
event['body'] = json.dumps(event['body'])
7688

77-
user_mock.check_try_to_register_as_twitter_user.return_value = False
78-
user_mock.check_try_to_register_as_line_user.return_value = False
79-
user_mock.check_try_to_register_as_yahoo_user.return_value = False
80-
user_mock.check_try_to_register_as_facebook_user.return_value = False
81-
crypto_mock.decrypt_password.return_value = 'password'
82-
user_mock.create_external_provider_user.return_value = {
83-
'AuthenticationResult': {
84-
'AccessToken': 'aaaaa',
85-
'IdToken': 'bbbbb',
86-
'RefreshToken': 'ccccc'
87-
}
88-
}
89-
90-
user_mock.force_non_verified_phone.return_value = None
91-
user_mock.add_user_id_to_external_provider_user.return_value = None
92-
user_mock.delete_external_provider_id_cognito_user.return_value = True
93-
user_mock.has_user_id.return_value = True
94-
user_mock.add_user_profile.return_value = None
95-
user_mock.get_cognito_user_info.side_effect = RecordNotFoundError('Record Not Found')
96-
9789
response = MeExternalProviderUserCreate(event=event, context="", dynamodb=dynamodb).main()
9890
self.assertEqual(response['statusCode'], 200)
9991
self.assertEqual(
@@ -237,3 +229,22 @@ def test_invalid_yahoo_user_id(self):
237229

238230
response = MeExternalProviderUserCreate(event=event, context="", dynamodb=dynamodb).main()
239231
self.assertEqual(response['statusCode'], 400)
232+
233+
def test_main_ng_not_target_user(self):
234+
event = {
235+
'body': {
236+
'user_id': 'username01',
237+
},
238+
'requestContext': {
239+
'authorizer': {
240+
'claims': {
241+
'cognito:username': 'username01',
242+
}
243+
}
244+
}
245+
}
246+
247+
event['body'] = json.dumps(event['body'])
248+
249+
response = MeExternalProviderUserCreate(event=event, context="", dynamodb=dynamodb).main()
250+
self.assertEqual(response['statusCode'], 400)

0 commit comments

Comments
 (0)