Files
enterprise-addons/databases_auth/wizard/databases_manage_users_wizard.py

40 lines
1.7 KiB
Python

import logging
from odoo import models
from odoo.addons.databases.api import ApiError
from odoo.addons.databases.models.project_project import get_database_api_keys
# import from databases_auth.api to ensure the monkey patch is applied
from odoo.addons.databases_auth.api import OdooDatabaseApi
_logger = logging.getLogger(__name__)
class DatabasesInviteUsersWizard(models.TransientModel):
_inherit = 'databases.manage_users.wizard'
def _set_oauth_to_remote_dbs(self):
db_users = self.database_ids.database_user_ids & self.user_ids.database_user_ids
database_api_keys = get_database_api_keys(db_users.project_id)
for db, db_users in db_users.grouped('project_id').items():
database_api_key = database_api_keys.get(db.id, '')
args = [db.database_url, db.database_name, db.database_api_login, database_api_key]
if not all(args):
# stay smooth as this flow is ran when the user click on 'connect' button
continue
db_api = OdooDatabaseApi(*args)
self._set_remote_oauth_id(db, db_api, db_users)
def _set_remote_oauth_id(self, db, db_api, db_users):
db.ensure_one()
if db.database_hosting != 'saas': # only make sense for saas which is guaranteed to have the field `oauth_uid`
return
for db_user in db_users:
if not db_user.local_user_id.databases_sso_uid:
continue
try:
db_api.set_user_oauth(db_user)
except ApiError as e:
_logger.warning('ApiError: Error while setting oauth_uid on user %s on %s: %s', db_user, db_api.database, e.args[0])