Skip to content

Commit 67eaa56

Browse files
authored
Merge pull request #4610 from gulyasgergely902/sync-group-permissions
[feat] Sync group permissions with login provider to prevent out-of-sync groups.
2 parents 83e02ff + adb3095 commit 67eaa56

1 file changed

Lines changed: 34 additions & 1 deletion

File tree

web/server/codechecker_server/session_manager.py

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@ def __try_personal_access_token(self, auth_string):
592592

593593
return {
594594
'username': personal_access_token.user_name,
595-
'groups': personal_access_token.groups
595+
'groups': str(personal_access_token.groups).split(";")
596596
}
597597

598598
def __try_auth_dictionary(self, auth_string):
@@ -616,6 +616,8 @@ def __try_auth_dictionary(self, auth_string):
616616
'groups' in method_config and \
617617
username in method_config['groups'] else []
618618

619+
self.__update_personal_access_token_groups(username, group_list)
620+
619621
return {
620622
'username': username,
621623
'groups': group_list
@@ -648,10 +650,39 @@ def __try_auth_ldap(self, auth_string):
648650
if cc_ldap.auth_user(ldap_conf, username, password):
649651
groups = cc_ldap.get_groups(ldap_conf, username, password)
650652
self.__update_groups(username, groups)
653+
self.__update_personal_access_token_groups(
654+
username,
655+
groups
656+
)
651657
return {'username': username, 'groups': groups}
652658

653659
return False
654660

661+
def __update_personal_access_token_groups(self, user_name, groups):
662+
"""
663+
Update the groups assigned to a personal access token.
664+
"""
665+
if not self.__database_connection:
666+
return None
667+
668+
transaction = None
669+
try:
670+
transaction = self.__database_connection()
671+
transaction.query(PersonalAccessToken) \
672+
.filter(PersonalAccessToken.user_name == user_name) \
673+
.update({PersonalAccessToken.groups: ';'.join(groups)})
674+
transaction.commit()
675+
return True
676+
except Exception as e:
677+
LOG.error(
678+
f"Couldn't find personal access token for user "
679+
f"{user_name}: {str(e)}")
680+
finally:
681+
if transaction:
682+
transaction.close()
683+
684+
return False
685+
655686
def __update_groups(self, user_name, groups):
656687
"""
657688
Updates group field of the users tokens.
@@ -839,6 +870,8 @@ def create_session_oauth(self, provider: str,
839870

840871
self.__sessions.append(local_session)
841872

873+
self.__update_personal_access_token_groups(username, groups)
874+
842875
# Store the session in the database.
843876
transaction = None
844877
if self.__database_connection:

0 commit comments

Comments
 (0)