Files

43 lines
2.3 KiB
Python

import logging
from odoo.addons.databases.api import OdooDatabaseXmlrpcApi, OdooDatabaseApi
_logger = logging.getLogger(__name__)
def set_user_oauth_xmlrpc(self, db_user):
_logger.info('Call xmlrpc set_user_oauth retrieving user_ids on %s, %s', self.host, db_user)
user_ids = self.execute_kw('res.users', 'search', [('share', '=', False), ('login', '=', db_user.login)])
if len(user_ids) > 1:
# The only way to be in that position is having website installed and having done some shenanigans.
# To mitigate that, we try harder to reduce the number of user.
user_ids = self.execute_kw('res.users', 'search', [('share', '=', False), ('website_id', '=', False), ('login', '=', db_user.login)])
user_ids = user_ids[:1] # This shouldn't be necessary but we may never know 🤷‍♂️
if not user_ids:
_logger.info('Call xmlrpc set_user_oauth no user_ids found on %s for %s', self.host, db_user)
return
_logger.info('Call xmlrpc set_user_oauth on %s, %s, user_ids: %s', self.host, db_user, user_ids)
return self.execute_kw('res.users', 'write', user_ids, {'oauth_uid': db_user.local_user_id.databases_sso_uid})
OdooDatabaseXmlrpcApi.set_user_oauth = set_user_oauth_xmlrpc
@OdooDatabaseApi.fallback_to_xmlrpc
def set_user_oauth(self, db_user):
_logger.info('Call json2 set_user_oauth retrieving user_ids on %s, %s', self.host, db_user)
user_ids = self.post_json2('res.users', 'search', domain=[('share', '=', False), ('login', '=', db_user.login)])
if len(user_ids) > 1:
# The only way to be in that position is having website installed and having done some shenanigans.
# To mitigate that, we try harder to reduce the number of user.
user_ids = self.post_json2('res.users', 'search', domain=[('share', '=', False), ('website_id', '=', False), ('login', '=', db_user.login)])
user_ids = user_ids[:1] # This shouldn't be necessary but we may never know 🤷‍♂️
if not user_ids:
_logger.info('Call json2 set_user_oauth no user_ids found on %s for %s', self.host, db_user)
return
_logger.info('Call json2 set_user_oauth on %s, %s, user_ids: %s', self.host, db_user, user_ids)
return self.post_json2('res.users', 'write', ids=user_ids, vals={'oauth_uid': db_user.local_user_id.databases_sso_uid})
OdooDatabaseApi.set_user_oauth = set_user_oauth