Skip to content

Commit 83a0485

Browse files
author
allegroai
committed
Fix user credentials reset on apiserver restart
1 parent f3491cc commit 83a0485

File tree

2 files changed

+43
-20
lines changed

2 files changed

+43
-20
lines changed

apiserver/mongo/initialize/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def init_mongo_data():
7373
}
7474
internal_user_emails.add(email.lower())
7575
revoke = fixed_mode and credentials.get("revoke_in_fixed_mode", False)
76-
user_id = _ensure_auth_user(user_data, company_id, log=log, revoke=revoke)
76+
user_id = _ensure_auth_user(user_data, company_id, log=log, revoke=revoke, internal_user=True)
7777
if credentials.role == Role.user:
7878
_ensure_backend_user(user_id, company_id, credentials.display_name)
7979

apiserver/mongo/initialize/user.py

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@
1010

1111

1212
def _ensure_user_credentials(
13-
user: AuthUser, key: str, secret: str, log: Logger, revoke: bool = False
13+
user: AuthUser,
14+
key: str,
15+
secret: str,
16+
log: Logger,
17+
revoke: bool = False,
18+
internal_user: bool = False,
1419
) -> None:
1520
if revoke:
1621
log.info(f"Revoking credentials for existing user {user.id} ({user.name})")
@@ -19,19 +24,34 @@ def _ensure_user_credentials(
1924
return
2025

2126
if not (key and secret):
22-
log.info(f"Resetting credentials for existing user {user.id} ({user.name})")
23-
user.credentials = []
24-
user.save()
27+
if internal_user:
28+
log.info(f"Resetting credentials for existing user {user.id} ({user.name})")
29+
user.credentials = []
30+
user.save()
2531
return
2632

2733
new_credentials = Credentials(key=key, secret=secret)
28-
log.info(f"Setting credentials for existing user {user.id} ({user.name})")
29-
user.credentials = [new_credentials]
30-
user.save()
31-
return
34+
if internal_user:
35+
log.info(f"Setting credentials for existing user {user.id} ({user.name})")
36+
user.credentials = [new_credentials]
37+
user.save()
38+
return
39+
40+
if user.credentials is None:
41+
user.credentials = []
42+
if not any((cred.key, cred.secret) == (key, secret) for cred in user.credentials):
43+
log.info(f"Adding credentials for existing user {user.id} ({user.name})")
44+
user.credentials.append(new_credentials)
45+
user.save()
3246

3347

34-
def _ensure_auth_user(user_data: dict, company_id: str, log: Logger, revoke: bool = False) -> str:
48+
def _ensure_auth_user(
49+
user_data: dict,
50+
company_id: str,
51+
log: Logger,
52+
revoke: bool = False,
53+
internal_user: bool = False,
54+
) -> str:
3555
user_id = user_data.get("id", f"__{user_data['name']}__")
3656
role = user_data["role"]
3757
email = user_data["email"]
@@ -40,12 +60,15 @@ def _ensure_auth_user(user_data: dict, company_id: str, log: Logger, revoke: boo
4060

4161
user: AuthUser = AuthUser.objects(id=user_id).first()
4262
if user:
43-
_ensure_user_credentials(user=user, key=key, secret=secret, log=log, revoke=revoke)
44-
if (
45-
user.role != role
46-
or user.email != email
47-
or user.autocreated != autocreated
48-
):
63+
_ensure_user_credentials(
64+
user=user,
65+
key=key,
66+
secret=secret,
67+
log=log,
68+
revoke=revoke,
69+
internal_user=internal_user,
70+
)
71+
if user.role != role or user.email != email or user.autocreated != autocreated:
4972
user.email = email
5073
user.role = role
5174
user.autocreated = autocreated
@@ -54,9 +77,7 @@ def _ensure_auth_user(user_data: dict, company_id: str, log: Logger, revoke: boo
5477
return user.id
5578

5679
credentials = (
57-
[Credentials(key=key, secret=secret)]
58-
if not revoke and key and secret
59-
else []
80+
[Credentials(key=key, secret=secret)] if not revoke and key and secret else []
6081
)
6182
log.info(f"Creating user: {user_data['name']}")
6283

@@ -108,7 +129,9 @@ def ensure_fixed_user(user: FixedUser, log: Logger, emails: set):
108129
try:
109130
log.info(f"Updating user name: {user.name}")
110131
given_name, _, family_name = user.name.partition(" ")
111-
db_user.update(name=user.name, given_name=given_name, family_name=family_name)
132+
db_user.update(
133+
name=user.name, given_name=given_name, family_name=family_name
134+
)
112135
except Exception:
113136
pass
114137
else:

0 commit comments

Comments
 (0)