Skip to content
Snippets Groups Projects
Commit 8bc1ff4f authored by Benjami's avatar Benjami
Browse files

Refactor oauth provider onchanges :recycle:

* Rename: ResUsers._create_user --> ResUsers._create_kc_user
parent 3add5584
No related branches found
No related tags found
2 merge requests!253[REL] Release 06/11/23,!191V1 imrpvements to CompanyEasyCreation wizard (CRM Lead execution)🙋‍
......@@ -34,20 +34,23 @@ class OAuthProvider(models.Model):
if not self.superuser_pwd:
raise UserError("Admin provider doesn't have a valid superuser password")
@api.onchange("root_endpoint")
def _onchange_root_endpoint(self):
# TODO: Duplicated code? 🤔
def _update_urls(self):
if self.is_keycloak_provider and self.root_endpoint and self.realm_name:
self.admin_user_endpoint = URL_ADMIN_USERS.format(**{'root_endpoint': self.root_endpoint,
'realm_name': self.realm_name})
self.auth_endpoint = URL_AUTH.format(**{'root_endpoint': self.root_endpoint,
'realm_name': self.realm_name})
self.validation_endpoint = URL_VALIDATION.format(**{'root_endpoint': self.root_endpoint,
'realm_name': self.realm_name})
self.token_endpoint = URL_TOKEN.format(**{'root_endpoint': self.root_endpoint,
'realm_name': self.realm_name})
self.jwks_uri = URL_JWKS.format(**{'root_endpoint': self.root_endpoint,
'realm_name': self.realm_name})
self.admin_user_endpoint = URL_ADMIN_USERS.format(**{
'root_endpoint': self.root_endpoint, 'realm_name': self.realm_name
})
self.auth_endpoint = URL_AUTH.format(**{
'root_endpoint': self.root_endpoint, 'realm_name': self.realm_name
})
self.validation_endpoint = URL_VALIDATION.format(**{
'root_endpoint': self.root_endpoint, 'realm_name': self.realm_name
})
self.token_endpoint = URL_TOKEN.format(**{
'root_endpoint': self.root_endpoint, 'realm_name': self.realm_name
})
self.jwks_uri = URL_JWKS.format(**{
'root_endpoint': self.root_endpoint, 'realm_name': self.realm_name
})
self.reset_password_endpoint = URL_RESET_PASSWORD.format(
root_endpoint=self.root_endpoint,
realm_name=self.realm_name,
......@@ -56,27 +59,13 @@ class OAuthProvider(models.Model):
cliend_id=self.client_id,
)
@api.onchange("realm_name")
@api.onchange('root_endpoint')
def _onchange_root_endpoint(self):
self._update_urls()
@api.onchange('realm_name')
def _onchange_realm_name(self):
# TODO: Duplicated code? 🤔
if self.is_keycloak_provider and self.root_endpoint and self.realm_name:
self.admin_user_endpoint = URL_ADMIN_USERS.format(**{'root_endpoint': self.root_endpoint,
'realm_name': self.realm_name})
self.auth_endpoint = URL_AUTH.format(**{'root_endpoint': self.root_endpoint,
'realm_name': self.realm_name})
self.validation_endpoint = URL_VALIDATION.format(**{'root_endpoint': self.root_endpoint,
'realm_name': self.realm_name})
self.token_endpoint = URL_TOKEN.format(**{'root_endpoint': self.root_endpoint,
'realm_name': self.realm_name})
self.jwks_uri = URL_JWKS.format(**{'root_endpoint': self.root_endpoint,
'realm_name': self.realm_name})
self.reset_password_endpoint = URL_RESET_PASSWORD.format(
root_endpoint=self.root_endpoint,
realm_name=self.realm_name,
kc_uid='{kc_uid}',
odoo_url=self.redirect_admin_url,
cliend_id=self.client_id,
)
self._update_urls()
def get_auth_link(self):
self.ensure_one()
......
......@@ -60,23 +60,19 @@ class ResUsers(models.Model):
if user.oauth_uid:
# already sync'ed somewhere else
continue
keycloak_user = self._get_or_create_user(token, provider_id, user)
keycloak_key = self._LOGIN_MATCH_KEY.split(":")[0]
keycloak_login_provider = self.env.ref(
"energy_communities.keycloak_login_provider"
)
user.update(
{
"oauth_uid": keycloak_user[keycloak_key],
"oauth_provider_id": keycloak_login_provider.id,
}
)
keycloak_user = self._get_or_create_kc_user(token, provider_id, user)
keycloak_key = self._LOGIN_MATCH_KEY.split(':')[0]
keycloak_login_provider = self.env.ref('energy_communities.keycloak_login_provider')
user.update({
'oauth_uid': keycloak_user[keycloak_key],
'oauth_provider_id': keycloak_login_provider.id,
})
# action = self.env.ref('base.action_res_users').read()[0]
# action['domain'] = [('id', 'in', self.user_ids.ids)]
logger.debug("Create keycloak users STOP")
return True
def _get_users(self, token, provider_id, **params):
def _get_kc_users(self, token, provider_id, **params):
"""Retrieve users from Keycloak.
:param token: a valida auth token from Keycloak
......@@ -120,7 +116,7 @@ class ResUsers(models.Model):
except JSONDecodeError:
raise exceptions.UserError(_("Something went wrong. Please check logs."))
def _get_or_create_user(self, token, provider_id, odoo_user):
def _get_or_create_kc_user(self, token, provider_id, odoo_user):
"""Lookup for given user on Keycloak: create it if missing.
:param token: valid auth token from Keycloak
......@@ -137,7 +133,7 @@ class ResUsers(models.Model):
return keycloak_user[0]
else:
values = self._create_user_values(odoo_user)
keycloak_user = self._create_user(token, provider_id, **values)
keycloak_user = self._create_kc_user(token, provider_id, **values)
return keycloak_user
def _create_user_values(self, odoo_user):
......@@ -176,7 +172,7 @@ class ResUsers(models.Model):
firstname, lastname = name_parts[0], " ".join(name_parts[1:])
return firstname, lastname
def _create_user(self, token, provider_id, **data):
def _create_kc_user(self, token, provider_id, **data):
"""Create a user on Keycloak w/ given data."""
logger.info("CREATE Calling %s" % provider_id.admin_user_endpoint)
headers = {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment