diff --git a/uffd/mfa/models.py b/uffd/mfa/models.py index d48c8d3b5cc6e67a7932470c0ac94e141e0c8eb5..176c96f134989cea3bfd3619255746e3b4dfeaa2 100644 --- a/uffd/mfa/models.py +++ b/uffd/mfa/models.py @@ -6,7 +6,7 @@ import crypt from flask import request, current_app from sqlalchemy import Column, Integer, Enum, Boolean, String, DateTime, Text -from fido2.ctap2 import AuthenticatorData +from fido2.ctap2 import AttestedCredentialData from uffd.database import db from uffd.user.models import User @@ -131,15 +131,15 @@ class WebauthnMethod(MFAMethod): 'polymorphic_identity': MFAType.WEBAUTHN } - def __init__(self, user, cred_data, name=None): + def __init__(self, user, cred, name=None): super().__init__(user, name) - self.cred_data = cred_data + self.cred = cred @property - def cred_data(self): - return AuthenticatorData(base64.b64decode(self._cred)) + def cred(self): + return AttestedCredentialData(base64.b64decode(self._cred)) - @cred_data.setter - def cred_data(self, d): + @cred.setter + def cred(self, d): self._cred = base64.b64encode(bytes(d)) diff --git a/uffd/mfa/views.py b/uffd/mfa/views.py index a0259797d94edb4d18f88f63423efaac333c6d7b..35a3a9059c8992bcceb17f8f4a2c2011e13baed2 100644 --- a/uffd/mfa/views.py +++ b/uffd/mfa/views.py @@ -113,7 +113,7 @@ def setup_webauthn_begin(): if not RecoveryCodeMethod.query.filter_by(dn=user.dn).all(): abort(403) methods = WebauthnMethod.query.filter_by(dn=user.dn).all() - creds = [method.cred_data.credential_data for method in methods] + creds = [method.cred for method in methods] server = get_webauthn_server() registration_data, state = server.register_begin( { @@ -137,7 +137,7 @@ def setup_webauthn_complete(): client_data = ClientData(data["clientDataJSON"]) att_obj = AttestationObject(data["attestationObject"]) auth_data = server.register_complete(session["webauthn-state"], client_data, att_obj) - method = WebauthnMethod(user, auth_data, name=data['name']) + method = WebauthnMethod(user, auth_data.credential_data, name=data['name']) db.session.add(method) db.session.commit() return cbor.dumps({"status": "OK"}) @@ -157,7 +157,7 @@ def auth_webauthn_begin(): user = get_current_user() server = get_webauthn_server() methods = WebauthnMethod.query.filter_by(dn=user.dn).all() - creds = [method.cred_data.credential_data for method in methods] + creds = [method.cred for method in methods] if not creds: abort(404) auth_data, state = server.authenticate_begin(creds, user_verification='discouraged') @@ -169,7 +169,7 @@ def auth_webauthn_complete(): user = get_current_user() server = get_webauthn_server() methods = WebauthnMethod.query.filter_by(dn=user.dn).all() - creds = [method.cred_data.credential_data for method in methods] + creds = [method.cred for method in methods] if not creds: abort(404) data = cbor.loads(request.get_data())[0]