40 lines
1.7 KiB
Python
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])
|