diff --git a/app_common/models/res_config_settings.py b/app_common/models/res_config_settings.py index dd172894..87164de9 100644 --- a/app_common/models/res_config_settings.py +++ b/app_common/models/res_config_settings.py @@ -13,9 +13,3 @@ class ResConfigSettings(models.TransientModel): app_saas_ok = fields.Boolean('Enable CN SaaS', default=True, config_parameter='app_saas_ok', help="Checked to Enable www.odooapp.cn cloud service.") - app_saas_db_token = fields.Char('SaaS DB Token', config_parameter='app_saas_db_token') - - def set_values(self): - res = super().set_values() - self.env['ir.config_parameter'].set_param('app_saas_db_token', self.app_saas_db_token) - return res diff --git a/app_common/views/res_config_settings_views.xml b/app_common/views/res_config_settings_views.xml index c2265751..55247c94 100644 --- a/app_common/views/res_config_settings_views.xml +++ b/app_common/views/res_config_settings_views.xml @@ -57,10 +57,6 @@ -
-
diff --git a/app_saas/__manifest__.py b/app_saas/__manifest__.py index cf3d07b1..6e8f70b3 100644 --- a/app_saas/__manifest__.py +++ b/app_saas/__manifest__.py @@ -26,7 +26,7 @@ { 'name': 'odooapp.cn SaaS Client-Ai Passport.Odoo中文应用商店SaaS云服务客户端', - 'version': '16.24.12.06', + 'version': '16.0.25.01.06', 'author': 'odooai.cn', 'category': 'Base', 'website': 'https://www.odooai.cn', diff --git a/app_saas/data/auth_oauth_data.xml b/app_saas/data/auth_oauth_data.xml index 851af0c7..c623212c 100644 --- a/app_saas/data/auth_oauth_data.xml +++ b/app_saas/data/auth_oauth_data.xml @@ -3,7 +3,7 @@ Ai Passport of odooapp.cn - Ai通行证-Odoo中文应用商店 + Ai Passport of odooapp.cn https://www.odooapp.cn/oauth/authorize https://www.odooapp.cn/oauth/token odoo,profile diff --git a/app_saas/i18n/zh_CN.po b/app_saas/i18n/zh_CN.po index 51835a3a..e49364d2 100644 --- a/app_saas/i18n/zh_CN.po +++ b/app_saas/i18n/zh_CN.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0+e-20241031\n" +"Project-Id-Version: Odoo Server 16.0+e-20241226\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-11-08 10:21+0000\n" -"PO-Revision-Date: 2024-11-08 10:21+0000\n" +"POT-Creation-Date: 2025-01-06 10:11+0000\n" +"PO-Revision-Date: 2025-01-06 10:11+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -18,19 +18,43 @@ msgstr "" #. module: app_saas #: model_terms:ir.ui.view,arch_db:app_saas.app_res_config_settings_view_form msgid "Save to Install Chinese PO App if downloaded." -msgstr "保存 后即可安装Odoo中文云翻译模块。本模块可至Odoo中文应用商店下载。" +msgstr "保存 后可以安装本地的Odoo中文翻译模块,安装时会自动用最新 .po 文件覆盖本地的文件。" + +#. module: app_saas +#: model:auth.oauth.provider,body:app_saas.provider_app_saas +msgid "Ai Passport of odooapp.cn" +msgstr "Ai通行证-Odoo中文应用商店" #. module: app_saas #: model:ir.model.fields,help:app_saas.field_res_config_settings__module_app_cn_po -#: model_terms:ir.ui.view,arch_db:app_saas.app_res_config_settings_view_form msgid "Checked to Sync Odoo Chinese from www.odooapp.cn" msgstr "勾选后即可启用Odoo中文云翻译,相关服务由 www.odooapp.cn 提供" +#. module: app_saas +#: model:ir.model.fields,field_description:app_saas.field_res_config_settings__app_saas_db_token +msgid "Cloud DB Token" +msgstr "数据库令牌" + #. module: app_saas #: model:ir.model,name:app_saas.model_res_config_settings msgid "Config Settings" msgstr "设置" +#. module: app_saas +#: model:ir.model.fields,help:app_saas.field_auth_oauth_provider__code_endpoint +msgid "Get Token from Code. Only for Code response type." +msgstr "通过Code获取Access Token。仅在 Code 响应模式下生效" + +#. module: app_saas +#: model:ir.model.fields,field_description:app_saas.field_auth_oauth_provider__user_template_id +msgid "New User Template" +msgstr "新用户模板" + +#. module: app_saas +#: model:ir.model,name:app_saas.model_auth_oauth_provider +msgid "OAuth2 provider" +msgstr "OAuth2服务商" + #. module: app_saas #: model_terms:ir.ui.view,arch_db:app_saas.app_res_config_settings_view_form msgid "Or get the app from" @@ -38,11 +62,39 @@ msgstr "您可以在此获取本应用模块" #. module: app_saas #: model:ir.model.fields,field_description:app_saas.field_res_config_settings__module_app_cn_po -#: model_terms:ir.ui.view,arch_db:app_saas.app_res_config_settings_view_form msgid "SaaS Chinese PO" msgstr "中文云翻译PO" +#. module: app_saas +#: model:ir.model.fields,help:app_saas.field_res_config_settings__app_saas_db_token +msgid "" +"The odooapp SaaS Token for this Odoo Database. You can reset in " +"https://www.odooapp.cn" +msgstr "本数据库实例的令牌。首次使用Ai通行证时自动生成,您也可以在我们的网站上重新生成。请访问 https://www.odooapp.cn" + +#. module: app_saas +#: model_terms:ir.ui.view,arch_db:app_saas.app_res_config_settings_view_form +msgid "" +"The odooapp SaaS Token. You can get it after first time Login via Ai " +"Passport of odooapp.cn. Also you can set from" +msgstr "本数据库实例的令牌。首次使用Ai通行证时自动生成,您也可以在我们的网站上重新生成。请访问 https://www.odooapp.cn" + +#. module: app_saas +#: model:ir.model.fields,field_description:app_saas.field_auth_oauth_provider__code_endpoint +msgid "Token by Code Endpoint" +msgstr "Code取Token入口" + +#. module: app_saas +#: model:ir.model,name:app_saas.model_res_users +msgid "User" +msgstr "用户" + #. module: app_saas #: model_terms:ir.ui.view,arch_db:app_saas.app_res_config_settings_view_form msgid "https://www.odooapp.cn/apps/modules/app_cn_po" msgstr "https://www.odooapp.cn/apps/modules/app_cn_po" + +#. module: app_saas +#: model_terms:ir.ui.view,arch_db:app_saas.app_res_config_settings_view_form +msgid "https://www.odooapp.cn/my/" +msgstr "https://www.odooapp.cn/my/" diff --git a/app_saas/models/res_config_settings.py b/app_saas/models/res_config_settings.py index 86f4e239..e570ada0 100644 --- a/app_saas/models/res_config_settings.py +++ b/app_saas/models/res_config_settings.py @@ -10,7 +10,7 @@ _logger = logging.getLogger(__name__) class ResConfigSettings(models.TransientModel): _inherit = 'res.config.settings' - + module_app_cn_po = fields.Boolean('SaaS Chinese PO', help="Checked to Sync Odoo Chinese from www.odooapp.cn") - app_saas_db_token = fields.Boolean('Ai Cloud Token', default=True, config_parameter='app_saas_db_token', - help="The odooapp SaaS Token for this Odoo Database. You can reset in https://www.odooapp.cn") + app_saas_db_token = fields.Char('Cloud DB Token', default=True, config_parameter='app_saas_db_token', + help="The odooapp SaaS Token for this Odoo Database. You can reset in https://www.odooapp.cn") diff --git a/app_saas/models/res_users.py b/app_saas/models/res_users.py index abf4aa5f..2a14cffe 100644 --- a/app_saas/models/res_users.py +++ b/app_saas/models/res_users.py @@ -9,26 +9,19 @@ try: except: from urllib import request as urllib2 - - from odoo import api, fields, models, _ -from odoo.exceptions import AccessDenied, UserError -from odoo.addons.auth_signup.models.res_users import SignupError -from odoo.http import request, Response - -from ast import literal_eval -import json import requests -from datetime import timedelta -import random import logging + _logger = logging.getLogger(__name__) + class OauthBindError(Exception): # 增加一种错误类型 pass + class ResUsers(models.Model): _inherit = 'res.users' @@ -50,9 +43,13 @@ class ResUsers(models.Model): response = requests.get(oauth_provider.code_endpoint, params=params, timeout=30) if response.ok: ret = response.json() - # todo: 客户机首次连接时,取到的 server 端 key 写入 provider 的 client_secret - if ret.get('push_client_secret') and hasattr(oauth_provider, 'client_secret'): - oauth_provider.write({'client_secret': ret.get('push_client_secret')}) + # 客户机首次连接时,取到的 server 端 key 写入 provider 的 client_secret + push_client_secret = ret.pop('push_client_secret', False) + if push_client_secret: + ICP = self.env['ir.config_parameter'].sudo() + ICP.set_param('app_saas_db_token', push_client_secret) + if hasattr(oauth_provider, 'client_secret') and not oauth_provider.client_secret: + oauth_provider.write({'client_secret': push_client_secret}) self._cr.commit() return ret return {} @@ -68,18 +65,18 @@ class ResUsers(models.Model): ret = self.sudo().get_token_from_code(provider, params) kw.update(ret) kw.pop('code', False) - + self = self.with_context(auth_extra=kw) res = super(ResUsers, self).auth_oauth(provider, kw) return res - + def _auth_oauth_signin(self, provider, validation, params): # 用户绑定的额外处理,如果有同 login 用户则直接绑定 # todo: 当前不管多公司,在 social_login 里有更细节判断,后续优化 # todo: 当前同名就写 oauth 信息,不安全,要优化 oauth_provider = self.env['auth.oauth.provider'].sudo().browse(provider) if oauth_provider and oauth_provider.scope.find('odoo') >= 0: - oauth_uid =validation.get('user_id') + oauth_uid = validation.get('user_id') if oauth_uid: odoo_user = self.sudo().search([('login', '=', oauth_uid)], limit=1) if odoo_user and not (odoo_user.oauth_access_token and odoo_user.oauth_provider_id and odoo_user.oauth_uid): @@ -125,7 +122,7 @@ class ResUsers(models.Model): # raise SignupError(str(e)) res = super(ResUsers, self)._create_user_from_template(values) return res - + @api.model def _generate_signup_values(self, provider, validation, params): # 此处生成 创建 odoo user 的初始值,增加字段如头像 @@ -136,7 +133,7 @@ class ResUsers(models.Model): if validation.get('headimgurl'): res['image_1920'] = self.sudo()._get_image_from_url(validation.get('headimgurl')) return res - + def _rpc_api_keys_only(self): # 可直接使用 oauth_access_token 作为 password 登录 self.ensure_one() diff --git a/app_saas/views/res_config_settings_views.xml b/app_saas/views/res_config_settings_views.xml index 1d9d03d2..79157b01 100644 --- a/app_saas/views/res_config_settings_views.xml +++ b/app_saas/views/res_config_settings_views.xml @@ -1,28 +1,48 @@ - - - - - - - - - - - - - - - - - - - - - - - + + res.config.settings.view.form.inherit.app_common + res.config.settings + + + +
+
+ +
+
+
+
+
+
+
+
+
+ + +