Мета
Даний веб-сервіс (WS) розроблено для запиту на створення методу автентифікації для персони.
Специфікація
Авторизація
Перевірити валідність токену доступу
Повернути (401, 'Invalid access token') в разі неуспішних перевірок
Перевірити, що токен дійсний
в разі помилки - повернути (401, 'Invalid access token')
Перевірити скоупи користувача на можливість виконання даної дії (scope = 'authentication_method_request:write_pis')
Повернути (403, 'Your scope does not allow to access this resource. Missing allowances: authentication_method_request:write_pis') в разі невалідних скоупів
Перевірити, що токен містисть person_id
в разі помилки - повернути (401, 'Invalid access token')
Перевірити персону
Отримати person_id з токену (x-person-id хедер)
Перевірити, що статус персони активний (status = ‘active' & is_active = 'true’)
в разі помилки - повернути 404 ('not found')
Перевірити довірену особу та взаємозв'язок (опційно)
Якщо персона юридично не дієздатна - система має переконатись, що її запит на метод автентифікації персони створено довіреною особою та є зареєстрований та верифікований взаємозв'язок.
Отримати applicant_person_id
з токену, порівняти цого до person_id
з токену:
якщо рівний - перевірити, що персона має бути не авторизована як довірена особа, що вона не відповідає наступним правилам:
вік персони < no_self_registration_age глобальному параметру;
що вік персони між значенням no_self_registration_age та person_full_legal_capacity_age глобальних параметрів та персона не має документу з типом з конфігураційного параметру PIS_PERSON_LEGAL_CAPACITY_DOCUMENT_TYPES;
вік персони > person_full_legal_capacity_age глобального параметру та існує хоча б один взаємозв'язок активний та погоджений з довіреною особою з персоною (викорисовуючи наступний процес /wiki/spaces/PCAB/pages/17415995422 з person_id = person з запиту - очікується відповідь
:ok, :approved
)в разі помилки - повернути 409 (‘Request must be authorized by confidant person’)
Якщо не рівний -
помилка - повернути 409 (‘Only THIRD_PERSON authentication method is allowed’)
Перевірити запит
Перевірити метод автентифікації. il.authentication_method_request.auth_method.type = OTP
в разі помилки - повернути 403 ('Only for OTP authentication method is allowed')
phone_number
обов'язковийв разі помилки - повернути 422 ('required property %{property} was not present')
Перевірити, чи має бути відправлений код верифікації OTP
перевірити використаний ліміт для цього номеру телефону в таблиці person_authentication_methods з
ended_at
пусто або > now() & тип =OTP
> Nв разі помилки - повернути 422 ('This phone number is present more than #{
phone_number_auth_limit
.limit} times in the system')
Отримати значення з конфігураційного параметру PIS_VALIDATE_ALL_PHONES
якщо встановлено false - перевірити, що телефон з поля authentication_methods має бути верифікований (номер не існує в таблиці
verified_phones
в базі даних verifications)якщо встановлено true - верифікований номер телефону по OTP
Сервісна логіка
Створити запит на метод автентифікації в il.authentication_method_request з
status = NEW
action = INSERT
authentication_method = $authentication_method
authentication_method_current =
authentication_method_id = $authentication_method_id
channel = PIS
Якщо потрібен OTP верифікації
Викликати Initialize OTP для генерації одноразового паролю та направити його на номер клієнта.
Знайти запити, де person_id = person.id та authentication_method_requests.status = NEW, то
Змінити статус всіх знайдених authentication_method_requests на CANCELED.
Якщо OTP верифікації не потрібен
Знайти запити, де person_id = person.id та authentication_method_requests.status = NEW, то
Змінити статус по всім знайденим authentication_method_requests на CANCELED.
Оновити mpi.person_authentication_methods
метод автентифікації персони, що був до цього, стає inactive - встановити
ended_at
= now() (отримати поточні дату та час) та is_active = falseвстановити для нового auth_method в person_auth_methods. Встановити поля -
type
,phone_numer
,alias
(якщо є в запиті)
Оновити запит методу автентифікації
Змінити статус сутності в il.authentication_method_request на COMPLETED
Встановити updated_at - now() (Отримати поточі дату та час)
Відобразити відповідь у відповідності до специфікації.