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

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

Мета

Цей 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'.

  • No labels