diff --git a/odex25_mobile/odex_web_app/controllers/authentication.py b/odex25_mobile/odex_web_app/controllers/authentication.py index 9a69130e9..fd281ff20 100644 --- a/odex25_mobile/odex_web_app/controllers/authentication.py +++ b/odex25_mobile/odex_web_app/controllers/authentication.py @@ -3,6 +3,7 @@ import werkzeug from odoo import http, tools from odoo.http import request, Response from odoo.addons.auth_signup.models.res_users import SignupError +from odoo.addons.web.controllers.main import ensure_db from odoo.exceptions import UserError import base64 from ..validator import validator @@ -20,44 +21,47 @@ class AuthenticationController(http.Controller): @http.route('/rest_api/web/login', type='http', auth='none', csrf=False, cors='*', methods=['POST']) def login_phone(self, **kw): + if not kw: + kw = json.loads(http.request.httprequest.data) + db = kw.get('db') login = kw.get('login') password = kw.get('password') - if not login: - return http_helper.response(code=400, message=_('username or email is missing'), success=False) + # Check for required fields + if not login: + return http_helper.response(code=400, message=_('Username or email is missing'), success=False) if not password: return http_helper.response(code=400, message=_('Password is missing'), success=False) if not kw.get('device_id'): return http_helper.response(code=400, message=_('Device id is missing'), success=False) - - # check fcm_token - if not kw.get('fcm_token_web'): + if not kw.get('fcm_token_web'): return http_helper.response(code=400, message=_('FCM Token is missing'), success=False) - user = request.env['res.users'].sudo().search([('login', '=', login)], limit=1) - - if not user or not user.login: - return http_helper.response(code=400, message=_('User account with login {} not found').format(login), - success=False) + # Set the database for the request environment + if db: + ensure_db() + # Authenticate user uid = http_helper.is_authentic(login, password) - if not uid: return http_helper.errcode(code=400, message=_('Unable to Sign In. invalid user password')) - token = validator.create_token(request.env.user) - dic = request.env.user.to_dict(True) - employee = http.request.env['hr.employee'].sudo().search([('user_id', '=', user.id)], limit=1) - if employee and kw.get('device_id') and not employee.device_id: - employee.sudo().write({'device_id': kw.get('device_id')}) - # write fcm_token and fcm_token_web in employee - fcm_token_web = kw.get('fcm_token_web') - if employee and fcm_token_web: - employee.sudo().write({'fcm_token_web': fcm_token_web}) + # Generate token and prepare response + user = request.env['res.users'].browse(uid) + token = validator.create_token(user) + dic = user.sudo().to_dict(True) + employee = request.env['hr.employee'].sudo().search([('user_id', '=', user.id)], limit=1) + + # Update device_id and fcm_token_web if present + if employee: + if kw.get('device_id') and not employee.device_id: + employee.sudo().write({'device_id': kw.get('device_id')}) + if kw.get('fcm_token_web'): + employee.sudo().write({'fcm_token_web': kw.get('fcm_token_web')}) dic['token'] = token - http_helper.cleanup(); - return http_helper.response(data=dic, message=_("User log in successfully")) + http_helper.cleanup() + return http_helper.response(data=dic, message=_("User logged in successfully")) @http.route('/rest_api/web/validate',type='http', auth='none', csrf=False, cors='*',methods=['POST'])