Skip to content

Commit 96788d5

Browse files
committed
[IMP] auth_oidc: Add _auth_oauth_signing to (un)link from groups
Thanks to 4204bd8 @hbrunn & @26hpredraglazarevic
1 parent 62a5bdd commit 96788d5

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

auth_oidc/models/res_users.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
from odoo import api, models
1010
from odoo.exceptions import AccessDenied
11+
from odoo.fields import Command
1112
from odoo.http import request
1213

1314
_logger = logging.getLogger(__name__)
@@ -44,6 +45,41 @@ def _auth_oauth_get_tokens_auth_code_flow(self, oauth_provider, params):
4445
# https://openid.net/specs/openid-connect-core-1_0.html#TokenResponse
4546
return response_json.get("access_token"), response_json.get("id_token")
4647

48+
@api.model
49+
def _auth_oauth_signin(self, provider, validation, params):
50+
"""
51+
retrieve and sign in the user corresponding to provider and validated
52+
access token
53+
54+
:param provider: oauth provider id (int)
55+
:param validation: result of validation of access token (dict)
56+
:param params: oauth parameters (dict)
57+
:return: user login (str)
58+
:raise: AccessDenied if signin failed
59+
"""
60+
login = super()._auth_oauth_signin(provider, validation, params)
61+
user = self.search([("login", "=", login)])
62+
oauth_provider = self.env["auth.oauth.provider"].browse(provider)
63+
# Assume the groups are exclusively managed via OAuth 'groups'
64+
if user and oauth_provider.groups_field in validation:
65+
group_updates = []
66+
for group_line in oauth_provider.group_line_ids:
67+
if group_line.oauth_group_name in validation.get(
68+
oauth_provider.groups_field
69+
):
70+
_logger.debug(
71+
f"Add user {user.id} to the group {group_line.group_id.id}"
72+
)
73+
group_updates.append((Command.LINK, group_line.group_id.id))
74+
else:
75+
_logger.debug(
76+
f"Remove user {user.id} from the group {group_line.group_id.id}"
77+
)
78+
group_updates.append((Command.UNLINK, group_line.group_id.id))
79+
if group_updates:
80+
user.write({"groups_id": group_updates})
81+
return login
82+
4783
@api.model
4884
def auth_oauth(self, provider, params):
4985
oauth_provider = self.env["auth.oauth.provider"].browse(provider)

0 commit comments

Comments
 (0)