60 lines
2.5 KiB
Python
60 lines
2.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
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.exceptions import UserError
|
|
import base64
|
|
from ..validator import validator
|
|
from ..http_helper import http_helper
|
|
import json
|
|
import logging
|
|
from odoo.tools.translate import _
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
SENSITIVE_FIELDS = ['password', 'password_crypt', 'new_password', 'create_uid', 'write_uid']
|
|
|
|
|
|
class AuthenticationController(http.Controller):
|
|
|
|
@http.route('/rest_api/login', type='http', auth='none', csrf=False, cors='*', methods=['POST'])
|
|
def login_phone(self, **kw):
|
|
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)
|
|
|
|
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'):
|
|
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)
|
|
|
|
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
|
|
if employee and (kw.get('fcm_token') or kw.get('fcm_token_web')):
|
|
employee.sudo().write({'fcm_token': kw.get('fcm_token'), '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"))
|