diff --git a/sh_backmate_theme_adv_enterprise/controllers/__init__.py b/sh_backmate_theme_adv_enterprise/controllers/__init__.py index eed18c782..932bd3816 100644 --- a/sh_backmate_theme_adv_enterprise/controllers/__init__.py +++ b/sh_backmate_theme_adv_enterprise/controllers/__init__.py @@ -2,3 +2,4 @@ from . import main from . import sh_firebase_notification from . import home +from . import login \ No newline at end of file diff --git a/sh_backmate_theme_adv_enterprise/controllers/login.py b/sh_backmate_theme_adv_enterprise/controllers/login.py new file mode 100644 index 000000000..683b3e6a3 --- /dev/null +++ b/sh_backmate_theme_adv_enterprise/controllers/login.py @@ -0,0 +1,72 @@ +# -*- encoding: utf-8 -*- +import hashlib +import odoo +from odoo import http +from odoo.tools import pycompat +from odoo.tools.translate import _ +from odoo.http import request +from odoo.addons.web.controllers.home import Home as WebHome +from odoo.addons.web.controllers.utils import ensure_db, _get_login_redirect_url + +# Shared parameters for all login/signup flows +SIGN_UP_REQUEST_PARAMS = {'db', 'login', 'debug', 'token', 'message', 'error', + 'scope', 'mode', 'redirect', 'redirect_hostname', + 'email', 'name', 'partner_id', 'password', + 'confirm_password', 'city', 'country_id', 'lang'} + + +class Home(WebHome): + @http.route(route='/web/login', type='http', auth="none") + def web_login(self, redirect=None, **kw): + """Override web_login function to add features of this module.""" + ensure_db() + request.params['login_success'] = False + if request.httprequest.method == 'GET' and redirect and request.session.uid: + return request.redirect(redirect) + if not request.uid: + request.update_env(user=odoo.SUPERUSER_ID) + values = {val: item for val, item in request.params.items() if + val in SIGN_UP_REQUEST_PARAMS} + try: + values['databases'] = http.db_list() + except odoo.exceptions.AccessDenied: + values['databases'] = None + + if request.httprequest.method == 'POST': + old_uid = request.update_env(user=request.session.uid) + + try: + uid = request.session.authenticate(request.session.db, + request.params['login'], + request.params['password']) + request.params['login_success'] = True + return request.redirect( + self._login_redirect(uid, redirect=redirect)) + except odoo.exceptions.AccessDenied as e: + request.update_env = old_uid + if e.args == odoo.exceptions.AccessDenied().args: + values['error'] = _("错误的用户名和密码!") + else: + values['error'] = e.args[0] + else: + if 'error' in request.params and request.params.get( + 'error') == 'access': + values['error'] = _("只有员工才能访问此数据库。请联系管理员。") + if 'login' not in values and request.session.get('auth_login'): + values['login'] = request.session.get('auth_login') + if not odoo.tools.config['list_db']: + values['disable_database_manager'] = True + + response = request.render('sh_backmate_theme_adv_enterprise.sh_backmate_theme_web_login_main_template', values) + + response.headers['X-Frame-Options'] = 'DENY' + return response + + + +class Website(Home): + + # override + @http.route(website=True, auth="public", sitemap=False) + def web_login(self, *args, **kw): + return super().web_login(*args, **kw) \ No newline at end of file diff --git a/sh_backmate_theme_adv_enterprise/views/login_layout.xml b/sh_backmate_theme_adv_enterprise/views/login_layout.xml index 76d065c94..02e7dec47 100644 --- a/sh_backmate_theme_adv_enterprise/views/login_layout.xml +++ b/sh_backmate_theme_adv_enterprise/views/login_layout.xml @@ -1,7 +1,90 @@ - -