Bug 47261 - не работает "МФА на основе TOTP"
Summary: не работает "МФА на основе TOTP"
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: openuds-server (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: thatman@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-08-16 13:48 MSK by Elena Mishina
Modified: 2023-10-18 12:13 MSK (History)
2 users (show)

See Also:


Attachments
Реальный и ожидаемый результат (167.28 KB, image/png)
2023-08-16 13:48 MSK, Elena Mishina
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Elena Mishina 2023-08-16 13:48:55 MSK
Created attachment 14129 [details]
Реальный и ожидаемый результат

python3-module-pyotp-2.3.0-alt1.noarch [p10]
Шаги воспроизведения:
1) Настроить аутентификацию с использованием второго фактора "МФА на основе TOTP"
2) Попытаться войти в систему:
После ввода логина/пароля пользователя на странице авторизации должно открыться окно с qr-кодом или окно для ввода одноразового кода (см.вложение - 2),
а открывается страница с ошибкой (см.вложение - 1):

TypeError at /uds/page/mfa/

__init__() got an unexpected keyword argument 'issuer'

Request Method: 	GET
Request URL: 	https://192.168.0.53/uds/page/mfa/
Django Version: 	3.2.20
Exception Type: 	TypeError
Exception Value: 	

__init__() got an unexpected keyword argument 'issuer'

Exception Location: 	/usr/lib/python3/site-packages/pyotp/totp.py, line 21, in __init__
Python Executable: 	/usr/bin/python3
Python Version: 	3.9.16
Python Path: 	

['/usr/share/openuds',
 '/usr/bin',
 '/usr/lib64/python39.zip',
 '/usr/lib64/python3.9',
 '/usr/lib64/python3.9/lib-dynload',
 '/usr/lib64/python3/site-packages',
 '/usr/lib64/python3/site-packages/gtk-2.0',
 '/usr/lib/python3/site-packages']

Если установлен пакет python3-module-pyotp-2.8.0-alt1.noarch [Sisyphus], ошибка также возникает. Но если при этом в файле /usr/share/openuds/uds/mfas/TOTP/mfa.py поменять местами строки "name=username," и "issuer=self.issuer.value," то поведение меняется на ожидаемое (появляется qr-код, запрашивается одноразовый пароль).

Было:
def getTOTP(self, userId: str, username: str) -> pyotp.TOTP:
        return pyotp.TOTP(
            self._userData(userId)[0],
            issuer=self.issuer.value,
            name=username,
            interval=TOTP_INTERVAL,
        )

Стало:
def getTOTP(self, userId: str, username: str) -> pyotp.TOTP:
        return pyotp.TOTP(
            self._userData(userId)[0],
            name=username,
            issuer=self.issuer.value,
            interval=TOTP_INTERVAL,
        )
Comment 1 Alexander Burmatov 2023-10-18 12:13:35 MSK
Ошибка исправлена в задании #328935.