mirror of
https://github.com/guohuadeng/app-odoo.git
synced 2025-02-23 04:11:36 +02:00
opt app_saas
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -57,10 +57,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt16 o_settings_container" id="odooai_cloud_saas_common_token">
|
||||
<label class="col-4" for="app_saas_db_token"/>
|
||||
<field name="app_saas_db_token" password="True"/>
|
||||
</div>
|
||||
<div id="app_slot2" class="o_hidden"></div>
|
||||
</div>
|
||||
</xpath>
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<data noupdate="1">
|
||||
<record id="provider_app_saas" model="auth.oauth.provider">
|
||||
<field name="name">Ai Passport of odooapp.cn</field>
|
||||
<field name="body">Ai通行证-Odoo中文应用商店</field>
|
||||
<field name="body">Ai Passport of odooapp.cn</field>
|
||||
<field name="auth_endpoint">https://www.odooapp.cn/oauth/authorize</field>
|
||||
<field name="code_endpoint">https://www.odooapp.cn/oauth/token</field>
|
||||
<field name="scope">odoo,profile</field>
|
||||
|
||||
@@ -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 "<strong>Save</strong> to Install Chinese PO App if downloaded."
|
||||
msgstr "<strong>保存</strong> 后即可安装Odoo中文云翻译模块。本模块可至Odoo中文应用商店下载。"
|
||||
msgstr "<strong>保存</strong> 后可以安装本地的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/"
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -1,28 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<!-- <record id="app_res_config_settings_view_form" model="ir.ui.view">-->
|
||||
<!-- <field name="name">res.config.settings.view.form.inherit.app_common</field>-->
|
||||
<!-- <field name="model">res.config.settings</field>-->
|
||||
<!-- <field name="inherit_id" ref="base.res_config_settings_view_form"/>-->
|
||||
<!-- <field name="arch" type="xml">-->
|
||||
<!-- <xpath expr="//setting[@id='odooai_cloud_saas_ok']" position="after">-->
|
||||
<!-- <setting string="SaaS Chinese PO" help="Checked to Sync Odoo Chinese from www.odooapp.cn" id="module_app_cn_po">-->
|
||||
<!-- <field name="module_app_cn_po"/>-->
|
||||
<!-- <div class="content-group mt16" invisible="not module_app_cn_po" id="msg_module_app_cn_po">-->
|
||||
<!-- <div class="mt16 text-warning">-->
|
||||
<!-- <strong>Save</strong> to Install Chinese PO App if downloaded.-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="text-warning">-->
|
||||
<!-- Or get the app from-->
|
||||
<!-- <a href="https://www.odooapp.cn/apps/modules/app_cn_po" class="o_doc_link ml8"-->
|
||||
<!-- target="_blank">https://www.odooapp.cn/apps/modules/app_cn_po-->
|
||||
<!-- </a>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </setting>-->
|
||||
<!-- </xpath>-->
|
||||
<!-- </field>-->
|
||||
<!-- </record>-->
|
||||
<record id="app_res_config_settings_view_form" model="ir.ui.view">
|
||||
<field name="name">res.config.settings.view.form.inherit.app_common</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@id='odooai_cloud_saas_ok']" position="after">
|
||||
<div class="col-lg-6 col-12 o_setting_box">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_app_cn_po"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_app_cn_po"/>
|
||||
<div class="content-group" id="msg_module_app_cn_po">
|
||||
<div class="mt16 text-warning">
|
||||
<strong>Save</strong> to Install Chinese PO App if downloaded.
|
||||
</div>
|
||||
<div class="text-warning">
|
||||
Or get the app from
|
||||
<a href="https://www.odooapp.cn/apps/modules/app_cn_po" class="o_doc_link ml8"
|
||||
target="_blank">https://www.odooapp.cn/apps/modules/app_cn_po
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6 col-12 o_setting_box" id="set_app_saas_db_token">
|
||||
<div class="o_setting_left_pane"/>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="app_saas_db_token"/>
|
||||
<field name="app_saas_db_token" style="width:100%!important"/>
|
||||
<div class="content-group">
|
||||
<div class="text-warning">
|
||||
The odooapp SaaS Token. You can get it after first time Login via Ai Passport of odooapp.cn. Also you can set from
|
||||
<a href="https://www.odooapp.cn/my/" class="o_doc_link ml8"
|
||||
target="_blank">https://www.odooapp.cn/my/
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
Reference in New Issue
Block a user