Odoo18-Base/addons/auth_passkey/models/res_users_identitycheck.py
2025-01-06 10:57:38 +07:00

43 lines
1.4 KiB
Python

from odoo import api, fields, _
from odoo.exceptions import UserError, AccessDenied
from odoo.addons.base.models.res_users import CheckIdentity
class CheckIdentityPasskeys(CheckIdentity):
_inherit = 'res.users.identitycheck'
auth_method = fields.Selection(selection_add=[('webauthn', 'Passkey')])
@api.model
def _get_default_auth_method(self):
if self.env.user.auth_passkey_key_ids:
return 'webauthn'
else:
return super()._get_default_auth_method()
def _check_identity(self):
if self.auth_method == 'webauthn':
try:
credential = {
'webauthn_response': self.password,
'type': 'webauthn',
}
self.create_uid._check_credentials(credential, {'interactive': True})
except AccessDenied:
raise UserError(_("Incorrect Passkey. Please provide a valid passkey or use a different authentication method."))
else:
super()._check_identity()
def action_use_password(self):
self.ensure_one()
self.auth_method = 'password'
self.password = ''
return {
'type': 'ir.actions.act_window',
'res_model': 'res.users.identitycheck',
'res_id': self.id,
'name': _('Security Control'),
'target': 'new',
'views': [(False, 'form')],
}