43 lines
2.3 KiB
Python
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
|