@@ -672,17 +672,21 @@ def add_oidc_provider(cnx, database_type, provider_values):
672672 INSERT INTO "OIDCProviders"
673673 (ProviderName, ClientID, ClientSecret, AuthorizationURL,
674674 TokenURL, UserInfoURL, ButtonText, Scope,
675- ButtonColor, ButtonTextColor, IconSVG)
676- VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
675+ ButtonColor, ButtonTextColor, IconSVG, NameClaim, EmailClaim,
676+ UsernameClaim, RolesClaim, UserRole, AdminRole)
677+ VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
678+ %s, %s, %s)
677679 RETURNING ProviderID
678680 """
679681 else: # MySQL
680682 add_provider_query = """
681683 INSERT INTO OIDCProviders
682684 (ProviderName, ClientID, ClientSecret, AuthorizationURL,
683685 TokenURL, UserInfoURL, ButtonText, Scope,
684- ButtonColor, ButtonTextColor, IconSVG)
685- VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
686+ ButtonColor, ButtonTextColor, IconSVG, NameClaim, EmailClaim,
687+ UsernameClaim, RolesClaim, UserRole, AdminRole)
688+ VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
689+ %s, %s, %s)
686690 """
687691 cursor.execute(add_provider_query, provider_values)
688692
@@ -734,16 +738,18 @@ def list_oidc_providers(cnx, database_type):
734738 if database_type == "postgresql":
735739 list_query = """
736740 SELECT ProviderID, ProviderName, ClientID, AuthorizationURL,
737- TokenURL, UserInfoURL, ButtonText,
738- Scope, ButtonColor, ButtonTextColor, IconSVG, Enabled, Created, Modified
741+ TokenURL, UserInfoURL, ButtonText, Scope, ButtonColor,
742+ ButtonTextColor, IconSVG, NameClaim, EmailClaim, UsernameClaim,
743+ RolesClaim, UserRole, AdminRole, Enabled, Created, Modified
739744 FROM "OIDCProviders"
740745 ORDER BY ProviderName
741746 """
742747 else:
743748 list_query = """
744749 SELECT ProviderID, ProviderName, ClientID, AuthorizationURL,
745- TokenURL, UserInfoURL, ButtonText,
746- Scope, ButtonColor, ButtonTextColor, IconSVG, Enabled, Created, Modified
750+ TokenURL, UserInfoURL, ButtonText, Scope, ButtonColor,
751+ ButtonTextColor, IconSVG, NameClaim, EmailClaim, UsernameClaim,
752+ RolesClaim, UserRole, AdminRole, Enabled, Created, Modified
747753 FROM OIDCProviders
748754 ORDER BY ProviderName
749755 """
@@ -777,6 +783,18 @@ def list_oidc_providers(cnx, database_type):
777783 normalized["button_text_color"] = value
778784 elif normalized_key == "iconsvg":
779785 normalized["icon_svg"] = value
786+ elif normalized_key == "nameclaim":
787+ normalized["name_claim"] = value
788+ elif normalized_key == "emailclaim":
789+ normalized["email_claim"] = value
790+ elif normalized_key == "usernameclaim":
791+ normalized["username_claim"] = value
792+ elif normalized_key == "rolesclaim":
793+ normalized["roles_claim"] = value
794+ elif normalized_key == "userrole":
795+ normalized["user_role"] = value
796+ elif normalized_key == "adminrole":
797+ normalized["admin_role"] = value
780798 else:
781799 normalized[normalized_key] = value
782800 providers.append(normalized)
@@ -794,9 +812,15 @@ def list_oidc_providers(cnx, database_type):
794812 'button_color': row[8],
795813 'button_text_color': row[9],
796814 'icon_svg': row[10],
797- 'enabled': row[11],
798- 'created': row[12],
799- 'modified': row[13]
815+ 'name_claim': row[11],
816+ 'email_claim': row[12],
817+ 'username_claim': row[13],
818+ 'roles_claim': row[14],
819+ 'user_role': row[15],
820+ 'admin_role': row[16],
821+ 'enabled': row[17],
822+ 'created': row[18],
823+ 'modified': row[19]
800824 })
801825 else:
802826 columns = [col[0] for col in cursor.description]
@@ -827,6 +851,18 @@ def list_oidc_providers(cnx, database_type):
827851 normalized["button_text_color"] = value
828852 elif normalized_key == "iconsvg":
829853 normalized["icon_svg"] = value
854+ elif normalized_key == "nameclaim":
855+ normalized["name_claim"] = value
856+ elif normalized_key == "emailclaim":
857+ normalized["email_claim"] = value
858+ elif normalized_key == "usernameclaim":
859+ normalized["username_claim"] = value
860+ elif normalized_key == "rolesclaim":
861+ normalized["roles_claim"] = value
862+ elif normalized_key == "userrole":
863+ normalized["user_role"] = value
864+ elif normalized_key == "adminrole":
865+ normalized["admin_role"] = value
830866 elif normalized_key == "enabled":
831867 # Convert MySQL TINYINT to boolean
832868 normalized["enabled"] = bool(value)
@@ -14664,13 +14700,13 @@ def get_oidc_provider(cnx, database_type, client_id):
1466414700 try:
1466514701 if database_type == "postgresql":
1466614702 query = """
14667- SELECT ProviderID, ClientID, ClientSecret, TokenURL, UserInfoURL
14703+ SELECT ProviderID, ClientID, ClientSecret, TokenURL, UserInfoURL, NameClaim, EmailClaim, UsernameClaim, RolesClaim, UserRole, AdminRole
1466814704 FROM "OIDCProviders"
1466914705 WHERE ClientID = %s AND Enabled = true
1467014706 """
1467114707 else:
1467214708 query = """
14673- SELECT ProviderID, ClientID, ClientSecret, TokenURL, UserInfoURL
14709+ SELECT ProviderID, ClientID, ClientSecret, TokenURL, UserInfoURL, NameClaim, EmailClaim, UsernameClaim, RolesClaim, UserRole, AdminRole
1467414710 FROM OIDCProviders
1467514711 WHERE ClientID = %s AND Enabled = true
1467614712 """
@@ -14683,7 +14719,13 @@ def get_oidc_provider(cnx, database_type, client_id):
1468314719 result['clientid'],
1468414720 result['clientsecret'],
1468514721 result['tokenurl'],
14686- result['userinfourl']
14722+ result['userinfourl'],
14723+ result['nameclaim'],
14724+ result['emailclaim'],
14725+ result['usernameclaim'],
14726+ result['rolesclaim'],
14727+ result['userrole'],
14728+ result['adminrole']
1468714729 )
1468814730 return result
1468914731 return None
@@ -14721,49 +14763,10 @@ def get_user_by_email(cnx, database_type, email):
1472114763 finally:
1472214764 cursor.close()
1472314765
14724- def create_oidc_user(cnx, database_type, email, fullname, base_username ):
14766+ def create_oidc_user(cnx, database_type, email, fullname, username ):
1472514767 cursor = cnx.cursor()
1472614768 try:
14727- print(f"Starting create_oidc_user for email: {email}, fullname: {fullname}, base_username: {base_username}")
14728- # Check if username exists and find a unique one
14729- username = base_username
14730- counter = 1
14731- while True:
14732- # Check if username exists
14733- check_query = """
14734- SELECT COUNT(*) FROM "Users" WHERE Username = %s
14735- """ if database_type == "postgresql" else """
14736- SELECT COUNT(*) FROM Users WHERE Username = %s
14737- """
14738- print(f"Checking if username '{username}' exists")
14739- cursor.execute(check_query, (username,))
14740- result = cursor.fetchone()
14741- print(f"Username check result: {result}, type: {type(result)}")
14742-
14743- count = 0
14744- if isinstance(result, tuple):
14745- count = result[0]
14746- elif isinstance(result, dict):
14747- count = result.get('count', 0)
14748- else:
14749- # Try to extract the count value safely
14750- try:
14751- count = int(result)
14752- except (TypeError, ValueError):
14753- print(f"Unable to extract count from result: {result}")
14754- count = 1 # Assume username exists to be safe
14755-
14756- print(f"Username count: {count}")
14757- if count == 0:
14758- print(f"Username '{username}' is unique, proceeding")
14759- break # Username is unique
14760-
14761- # Try with incremented counter
14762- print(f"Username '{username}' already exists, trying next")
14763- username = f"{base_username}{counter}"
14764- counter += 1
14765- if counter > 10: # Limit attempts
14766- raise Exception("Could not find a unique username")
14769+ print(f"Starting create_oidc_user for email: {email}, fullname: {fullname}, username: {username}")
1476714770
1476814771 # Create a random salt using base64 (which is what Argon2 expects)
1476914772 salt = base64.b64encode(secrets.token_bytes(16)).decode('utf-8')
0 commit comments