ЕСОЗ - публічна документація

UA_Verify phone number

Мета

Цей WS призначений для перевірки наданого номера телефону в рамках процесу реєстрації, створення та надсилання OTP у контексті хешованого вмісту, який містить номер телефону, який потрібно перевірити.

Ключові положення

  1. Даний метод використовується тільки TRUSTED_PIS, PIS та CABINET типами клієнтів.

  2. Тільки один код верифікації може існувати для номеру телефону.

  3. Даний може використовуватись тільки з JWT з фіксованим набором aud, відповідний кожному типу клієнта.

Специфікація

Apiary

Перевірити JWT

  • Перевірити, що хедер авторизації містить валідний JWT

    • в разі помилки - повернути 401 ('JWT is invalid')

  • Перевірити, що JWT не закінчив строк дії (exp > now())

    • в разі помилки - повернути 401 ('JWT expired')

  • Перевірити, що JWT з правильним aud : cabinet-registration, pis-registration, trusted-client.

    • в разі помилки - повернути 401 ('JWT is not permitted for this action')

Перевірити запит

  • Перевірити, що поля factor та type вказані в запиті та не пусті

    • в разі помилки - повернути 422 ('can't be blank')

  • Перевірити, що значення поляfactor відповідає номеру телефону з врахуванням regexp

    • в разі помилки - повернути 422 ('invalid phone')

  • Перевірити, що значення поля type відповідає SMS

    • в разі помилки - повернути 422 ('is invalid')

  • Перевірити, що поле content_hash присутній в запиті і не є пустим aud = pis-registration, trusted-client

    • в разі помилки - повернути 422 ('content hash is required for pis and trusted_pis clients')

  • Перевірити, що виклик OTP не перевищує ліміт для номеру телефону (на основі конфігураційного параметру INIT_VERIFICATION_LIMIT)

    • в разі помилки - повернути 429 ('Too many attemts')

Сервісна логіка

  1. Якщо aud = pis-registration, trusted-client, отримати значення з конфігураційного параметру PIS_VALIDATE_ALL_PHONES. Якщо aud = cabinet-registration, перейти на крок to p.2.

    1. якщо встановлено true - перейти на крок to p.2.

    2. якщо встановлено false - перевірити існування номеру телефону в базі даних verification, таблиця verified_phones:

      1. якщо існує номер телефону - пропустити верифікацію номеру телефону, відобразити відповідь у відповідності до специфікації з результатом = 'Verified'.

      2. якщо номер телефону не існує - перейти на крок to p.2.

  2. Згенеруйте код підтвердження за допомогою базової випадкової функції (за замовчуванням) або алгоритму на основі часу:

    1. Формат верифікаційного коду - тільки цифри (regexp: ^[1-9][0-9]*$)

    2. Довжина верифікаційного коду - конфігураційний параметр OTP_CODE_LENGTH (за-замовчуванням = 4)

    3. Строк дії верифікаційного коду - конфігураційний параметр CODE_EXPIRATION_PERIOD_MINUTES (за-замовчуванням = 15 min)

  3. Шукати активні верифікаційні коди для номера телефону в верифікаційній базі даних, верифікаційній таблиці, якщо знайдено - скасувати їх, встановити:

    1. status = ‘canceled’

    2. is_active = false

  4. Направити SMS з OTP на номер телефону з запиту, використовуючи SMS провайдера.

  5. Збережіть згенерований код перевірки в базу даних перевірок, таблицю перевірок, установіть:

    1. id = автогенерований uuid

    2. phone_number = factor

    3. check_digit = цифра контрольної суми для коду підтвердження

    4. status = ‘new’

    5. code = код верифікації

    6. code_expired_at = строк дії верифікаційного коду

    7. is_active = true

    8. attempt_count = 0

    9. inserted_at = now()

    10. content_hash = content_hash

  6. Сформувати відповідь відповідно до специфікації з результатом = ‘OTP sent’ та urgent.next_step = ‘REQUEST_OTP'.

ЕСОЗ - публічна документація