Skip to content

Commit b460921

Browse files
committed
feat: add injected params at token when user use reset_password
Signed-off-by: ImMin5 <[email protected]>
1 parent 9111ceb commit b460921

File tree

4 files changed

+53
-10
lines changed

4 files changed

+53
-10
lines changed

src/spaceone/identity/manager/token_manager/base.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,12 @@ def issue_token(
9393
return {"access_token": access_token, "refresh_token": refresh_token}
9494

9595
def issue_temporary_token(
96-
self, user_id: str, domain_id: str, private_jwk: dict, timeout: int
96+
self,
97+
user_id: str,
98+
domain_id: str,
99+
private_jwk: dict,
100+
timeout: int,
101+
injected_params: dict,
97102
) -> dict:
98103
permissions = [
99104
"identity:UserProfile",
@@ -108,7 +113,11 @@ def issue_temporary_token(
108113

109114
# Issue token
110115
access_token = key_gen.generate_token(
111-
"ACCESS_TOKEN", timeout=timeout, role_type="USER", permissions=permissions
116+
"ACCESS_TOKEN",
117+
timeout=timeout,
118+
role_type="USER",
119+
permissions=permissions,
120+
injected_params=injected_params,
112121
)
113122

114123
return {"access_token": access_token}

src/spaceone/identity/model/user_profile/request.py

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class UserProfileUpdatePasswordRequest(BaseModel):
3131
user_id: str
3232
current_password: Union[str, None] = None
3333
new_password: str
34+
required_actions: Union[list, None] = None
3435
domain_id: str
3536

3637

src/spaceone/identity/service/user_profile_service.py

+16-3
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ def update_password(
9191
params (UserProfileUpdatePasswordRequest): {
9292
'current_password': 'str',
9393
'new_password': 'str', # required
94+
'required_actions': 'list', # injected from auth (required)
9495
'user_id': 'str', # injected from auth (required)
9596
'domain_id': 'str' # injected from auth (required)
9697
}
@@ -101,6 +102,11 @@ def update_password(
101102
user_vo = self.user_mgr.get_user(params.user_id, params.domain_id)
102103

103104
required_actions = list(user_vo.required_actions)
105+
106+
if params.required_actions:
107+
required_actions.extend(params.required_actions)
108+
user_vo.required_actions = list(set(required_actions))
109+
104110
if "UPDATE_PASSWORD" not in required_actions and not params.current_password:
105111
raise ERROR_REQUIRED_PARAMETER(key="current_password")
106112

@@ -209,7 +215,8 @@ def reset_password(self, params: UserProfileResetPasswordRequest) -> None:
209215
reset_password_type = config.get_global("RESET_PASSWORD_TYPE", "ACCESS_TOKEN")
210216
email_manager = EmailManager()
211217
if reset_password_type == "ACCESS_TOKEN":
212-
token = self._issue_temporary_token(user_id, domain_id)
218+
injected_params = {"required_actions": ["UPDATE_PASSWORD"]}
219+
token = self._issue_temporary_token(user_id, domain_id, injected_params)
213220
reset_password_link = self._get_console_sso_url(
214221
domain_id, token["access_token"]
215222
)
@@ -488,7 +495,9 @@ def _get_domain_name(self, domain_id: str) -> str:
488495
domain_vo = self.domain_mgr.get_domain(domain_id)
489496
return domain_vo.name
490497

491-
def _issue_temporary_token(self, user_id: str, domain_id: str) -> dict:
498+
def _issue_temporary_token(
499+
self, user_id: str, domain_id: str, injected_params: dict
500+
) -> dict:
492501
identity_conf = config.get_global("IDENTITY") or {}
493502
token_conf = identity_conf.get("token", {})
494503
timeout = token_conf.get("temporary_token_timeout", 86400)
@@ -497,7 +506,11 @@ def _issue_temporary_token(self, user_id: str, domain_id: str) -> dict:
497506

498507
local_token_manager = LocalTokenManager()
499508
return local_token_manager.issue_temporary_token(
500-
user_id, domain_id, private_jwk=private_jwk, timeout=timeout
509+
user_id,
510+
domain_id,
511+
private_jwk=private_jwk,
512+
timeout=timeout,
513+
injected_params=injected_params,
501514
)
502515

503516
def _get_console_sso_url(self, domain_id: str, token: str) -> str:

src/spaceone/identity/service/user_service.py

+25-5
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,12 @@ def create_user(self, params: dict) -> User:
114114
user_id = user_vo.user_id
115115

116116
email_manager.send_temporary_password_email_when_user_added(
117-
domain_display_name, user_id, email, console_link, temp_password, language
117+
domain_display_name,
118+
user_id,
119+
email,
120+
console_link,
121+
temp_password,
122+
language,
118123
)
119124
else:
120125
user_vo = self.user_mgr.create_user(params)
@@ -127,13 +132,20 @@ def create_user(self, params: dict) -> User:
127132
email_mgr = EmailManager()
128133

129134
domain_name = self._get_domain_name(domain_id)
130-
domain_display_name = self._get_domain_display_name(domain_id, domain_name)
135+
domain_display_name = self._get_domain_display_name(
136+
domain_id, domain_name
137+
)
131138

132139
console_link = self._get_console_url(domain_name)
133140
external_auth_provider = self._get_external_auth_provider(domain_id)
134141

135142
email_mgr.send_invite_email_when_external_user_added(
136-
domain_display_name, user_id, user_id, console_link, language, external_auth_provider
143+
domain_display_name,
144+
user_id,
145+
user_id,
146+
console_link,
147+
language,
148+
external_auth_provider,
137149
)
138150

139151
return user_vo
@@ -468,7 +480,11 @@ def _get_domain_name(self, domain_id: str) -> str:
468480
return domain_vo.name
469481

470482
def _issue_temporary_token(
471-
self, user_id: str, domain_id: str, timeout: int = None
483+
self,
484+
user_id: str,
485+
domain_id: str,
486+
timeout: int = None,
487+
injected_params: dict = None,
472488
) -> dict:
473489
if timeout is None:
474490
identity_conf = config.get_global("IDENTITY", {}) or {}
@@ -479,7 +495,11 @@ def _issue_temporary_token(
479495

480496
local_token_manager = LocalTokenManager()
481497
return local_token_manager.issue_temporary_token(
482-
user_id, domain_id, private_jwk, timeout=timeout
498+
user_id,
499+
domain_id,
500+
private_jwk,
501+
timeout=timeout,
502+
injected_params=injected_params,
483503
)
484504

485505
@staticmethod

0 commit comments

Comments
 (0)