mirror of
https://github.com/ulitsaRaskolnikova/is-coursework.git
synced 2026-09-14 14:05:36 +05:00
663 lines
35 KiB
Plaintext
663 lines
35 KiB
Plaintext
#set heading(numbering: "1.")
|
||
|
||
#set align(center)
|
||
#set text(size: 18pt)
|
||
|
||
*Software Requirements Specification\
|
||
(Спецификация требований к продукту)*
|
||
|
||
#set align(left)
|
||
#set text(size: 11pt)
|
||
|
||
= Introduction (Введение)
|
||
|
||
== Purpose
|
||
|
||
Документ описывает требования к информационной системе, позволяющей покупать домены третьего уровня и управлять ими.
|
||
|
||
== Scope (Область применения)
|
||
|
||
Итоговым продуктом является веб-приложение, которое позволяет приобретать доменные имена третьего уровня и управлять их DNS записями. Продукт предназначен для рынка РФ, для людей, которым требуется дешёвое доменное имя. Ожидаемая целевая аудитория: веб-мастера.
|
||
|
||
Основная функциональность:
|
||
- Покупка свободных доменных имён в предлагаемых зонах третьего уровня;
|
||
- Продление приобретённых доменов;
|
||
- Редактирование DNS записей для приобретённых доменов;
|
||
- Делегирование домена на сервера клиента, по запросу.
|
||
|
||
Система не предоставляет возможность управлять доменами второго или первого уровней.
|
||
|
||
== Definitions, Acronyms and Abbreviations (Определения и аббревиатуры)
|
||
|
||
- *Делегирование домена* -- процесс передачи управления DNS-зоной домена другому набору DNS-серверов.
|
||
- *DNS (Domain Name System)* -- система, преобразующая доменные имена в IP-адреса.
|
||
- *DNS-запись* - элемент в зоне домена, определяющий соответствие имени к данным, например IP-адресу (A/AAAA), другому имени (CNAME), почтовому серверу (MX) и т. д.
|
||
- *DNS-пропагация* -- процесс распространения изменений DNS-записей по сети резолверов по всему миру; занимает время, зависящее от TTL и кэшей.
|
||
- *Домен* -- уникальное имя в DNS-иерархии (например, example.com), состоящее из уровней (TLD, 2-й уровень, 3-й уровень и т. д.).
|
||
- *Приобретение домена* -- процесс покупки права использовать доменное имя в определённой зоне на фиксированный срок.
|
||
- *Зона второго уровня* -- управляемая Сервисом зона (например, example.ru).
|
||
- *Домен 3-го уровня / субдомен* -- имя вида `<name>.<zone2>`, где `<zone2>` принадлежит Сервису.
|
||
- *NS-делегирование* -- указание NS-серверов пользователя для конкретного домена 3-го уровня.
|
||
- *TTL* -- время жизни DNS-записи.
|
||
- *Эквайер/Биллинг* -- финансовая инфраструктура и процессы приёма платежей (банки-эквайеры, платёжные API, биллинговые системы), обеспечивающие оплату и продление доменов.
|
||
|
||
== References (Ссылки)
|
||
|
||
- RFC 1034/1035 -- базовые спецификации DNS.
|
||
|
||
== Overview (Обзор документа)
|
||
|
||
#outline(title: none)
|
||
|
||
= Overall Description (Общее описание)
|
||
|
||
== Product functions (Функциональность продукта)
|
||
|
||
Основная функциональность:
|
||
- Проверка доступности имени 3-го уровня, корзина/покупка, продления.
|
||
- Управление доменом: либо панель DNS-записей, либо NS-делегирование.
|
||
- Биллинг: оплата домена, статусы оплат.
|
||
- Уведомления о сроках истечения, статусах платежей.
|
||
|
||
Функции реализуются для двух ролей: пользователь и администратор.
|
||
|
||
== User characteristics (Описание пользователей)
|
||
|
||
Пользователь -- человек, которому нужно приобрести домен. После приобретения у него появляется возможность управлять DNS записями домена.
|
||
|
||
Администратор -- человек управляющий информационной системой. Имеет инструменты управления пользователями, доменами и зонами. Он нужен для помощи, которая может потребоваться пользователю, например, с настройкой DNS записи.
|
||
|
||
== Assumptions and dependencies (Влияющие факторы и зависимости)
|
||
|
||
Законодательство РФ в сфере интернета, в частности законы:
|
||
- 152-ФЗ -- О персональных данных;
|
||
- 149-ФЗ -- Об информации, информационных технологиях и о защите информации;
|
||
- 63-ФЗ -- Об электронной подписи.
|
||
- Законодательство РФ в сфере гражданского права, в частности гражданский кодекс.
|
||
|
||
Иные факторы:
|
||
- Доступность API управления DNS серверами.
|
||
- Доступность и спецификации API Эквайера.
|
||
- Почтовая инфраструктура для уведомлений.
|
||
- Корректное кэширование TTL резолверами, распространение изменений по DNS.
|
||
- Политики именования: резервирование/запрет определённых подстрок, предотвращение коллизий.
|
||
|
||
== Constraints (Ограничения)
|
||
|
||
- DNS-пропагация зависит от TTL и кэширования сторонних резолверов.
|
||
- Юридические ограничения (торговые марки, контент, персональные данные).
|
||
- Технические лимиты платежного провайдера и SLA внешних сервисов.
|
||
- Имя 3-го уровня уникально в пределах выбранной зоны 2-го уровня; возможны правила модерации.
|
||
|
||
= Specific Requirements (Спецификация требований)
|
||
|
||
== Functionality (Функциональные требования)
|
||
|
||
=== Регистрация и аутентификация <registration>
|
||
|
||
Система должна:
|
||
- предоставлять возможность регистрации пользователя по email и паролю;
|
||
- обеспечивать подтверждение email-адреса;
|
||
- предоставлять возможность восстановления доступа к учётной записи (сброс пароля);
|
||
- поддерживать двухфакторную аутентификацию (TOTP и WebAuthn);
|
||
- предоставлять управление параметрами 2FA в профиле пользователя;
|
||
- блокировать или запрашивать капчу после 10 неуспешных попыток входа.
|
||
|
||
=== Каталог зон и проверка имени <catalog>
|
||
|
||
Система должна:
|
||
- выполнять проверку доступности имени в формате `<name>.<zone2>.` .
|
||
|
||
=== Корзина, заказ и покупка <cart>
|
||
|
||
Система должна:
|
||
- позволять добавлять выбранные имена доменов в корзину;
|
||
- рассчитывать стоимость домена за месяц или год;
|
||
- предоставлять возможность оформления заказа.
|
||
|
||
=== Интеграция с API эквайринга <billing>
|
||
|
||
Система должна:
|
||
- формировать счёт и платёжную ссылку через API эквайринга;
|
||
- получать и обрабатывать статусы платежей;
|
||
- учитывать проведённые платежи;
|
||
- выполнять возвраты и отмену платежей.
|
||
|
||
=== Активация домена после оплаты <domain_activation>
|
||
|
||
Система должна автоматически создавать ресурс домена 3-го уровня после успешной оплаты.
|
||
|
||
=== Управление DNS через панель <dns_control>
|
||
|
||
Система должна:
|
||
- предоставлять пользователю возможность создавать, редактировать и удалять записи типов A, AAAA, CNAME, TXT, MX, SRV, CAA;
|
||
- обеспечивать настройку параметра TTL.
|
||
|
||
=== NS-делегирование <ns_delegate>
|
||
|
||
Система должна предоставлять возможность установки собственных NS-серверов для домена 3-го уровня.
|
||
|
||
=== Продление и напоминание <notification_prolongation>
|
||
|
||
Система должна:
|
||
- обеспечивать ручное продление доменов;
|
||
- уведомлять пользователя о скором истечении срока регистрации домена за 30, 14, 7, 3 и 1 день через электронную почту.
|
||
|
||
=== Личный кабинет пользователя <lk_user>
|
||
|
||
Система должна:
|
||
- предоставлять доступ к списку доменов пользователя;
|
||
- обеспечивать просмотр и редактирование профиля;
|
||
- предоставлять доступ к истории счетов и платежей.
|
||
|
||
=== Админ-панель <lk_admin>
|
||
|
||
Система должна:
|
||
- предоставлять администраторам доступ к просмотру пользователей и их доменных зон;
|
||
- обеспечивать управление пользователями и их доменами.
|
||
|
||
=== Политики имён <name_checker>
|
||
|
||
Система должна:
|
||
- хранить список запрещённых и зарезервированных имён;
|
||
- проверять доменные имена на соответствие данным политикам при регистрации.
|
||
|
||
=== Уведомления <notifications>
|
||
|
||
Система должна отправлять пользователю email-уведомления о:
|
||
- создании заказа;
|
||
- оплате;
|
||
- активации домена;
|
||
- истечении регистрации.
|
||
|
||
=== Аудит и логи <logs>
|
||
|
||
Система должна:
|
||
- фиксировать все значимые действия (кто, что, когда, откуда);
|
||
- обеспечивать хранение логов.
|
||
|
||
=== Экспорт отчёта по использованию сервиса <report_export>
|
||
|
||
Система должна предоставлять администратору отчёт, содержащий:
|
||
- количество зарегистрированных пользователей;
|
||
- количество активных пользователей (имеющих более одного домена);
|
||
- количество зарегистрированных доменов.
|
||
|
||
#table(
|
||
columns: (1fr, auto, auto, auto, auto),
|
||
table.cell(rowspan: 2)[№ Требования],
|
||
table.cell(rowspan: 2)[Приоритетность],
|
||
table.cell(colspan: 2)[Трудоёмкость в часах],
|
||
table.cell(rowspan: 2)[Стабильность],
|
||
[Минимум], [Максимум],
|
||
[@registration[Аутентификация]], [Высокая], [40], [80], [Высокая],
|
||
[@catalog[Каталог]], [Высокая], [16], [32], [Средняя],
|
||
[@cart[Корзина]], [Высокая], [32], [64], [Средняя],
|
||
[@billing[Биллинг]], [Высокая], [60], [120], [Средняя],
|
||
[@domain_activation[Активация домена]], [Высокая], [20], [40], [Высокая],
|
||
[@dns_control[Управление DNS]], [Высокая], [80], [160], [Средняя],
|
||
[@ns_delegate[Делегирование NS]], [Средняя], [24], [48], [Высокая],
|
||
[@notification_prolongation[Уведомления и продление]], [Средняя], [24], [48], [Средняя],
|
||
[@lk_user[ЛК Пользователя]], [Высокая], [40], [80], [Средняя],
|
||
[@lk_admin[ЛК Администратора]], [Средняя], [40], [80], [Средняя],
|
||
[@name_checker[Проверка доступности имён]], [Высокая], [24], [48], [Высокая],
|
||
[@notifications[Уведомления]], [Средняя], [16], [32], [Высокая],
|
||
[@logs[Аудит и логирование]], [Высокая], [32], [64], [Средняя],
|
||
[@report_export[Экспорт отчётов]], [Средняя], [20], [40], [Высокая],
|
||
)
|
||
|
||
#pagebreak()
|
||
|
||
=== Прецеденты
|
||
|
||
#image("images/bpe_lw1_use_case.drawio.png")
|
||
|
||
#pagebreak()
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Регистрация пользователя],
|
||
[ID: R1],
|
||
[Краткое описание: Пользователь регистрируется в системе, указывая email и пароль],
|
||
[Главный актёр: Пользователь],
|
||
[Предусловия: Пользователь находится на странице регистрации],
|
||
[Основной поток:
|
||
+ Пользователь вводит email и пароль
|
||
+ Система проверяет корректность данных
|
||
+ Система отправляет письмо для подтверждения email
|
||
+ Пользователь подтверждает email по ссылке
|
||
],
|
||
[Постусловия: Учетная запись создана и активирована],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Аутентификация пользователя],
|
||
[ID: R2],
|
||
[Краткое описание: Пользователь выполняет вход в систему],
|
||
[Главный актёр: Пользователь],
|
||
[Предусловия: Пользователь имеет учетную запись],
|
||
[Основной поток:
|
||
+ Пользователь вводит email и пароль
|
||
+ Система проверяет учетные данные
|
||
+ Если включена 2FA — запрашивает подтверждение (TOTP или WebAuthn)
|
||
+ Пользователь вводит код подтверждения или подтверждает через устройство
|
||
+ Система авторизует пользователя
|
||
],
|
||
[Постусловия: Пользователь получает доступ к системе],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Восстановление доступа],
|
||
[ID: R3],
|
||
[Краткое описание: Пользователь восстанавливает пароль через email],
|
||
[Главный актёр: Пользователь],
|
||
[Предусловия: Пользователь имеет активную учетную запись],
|
||
[Основной поток:
|
||
+ Пользователь указывает email на форме восстановления
|
||
+ Система отправляет письмо со ссылкой для сброса пароля
|
||
+ Пользователь переходит по ссылке и задаёт новый пароль
|
||
],
|
||
[Постусловия: Пароль обновлён, пользователь может войти],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Проверка имени],
|
||
[ID: C1],
|
||
[Краткое описание: Пользователь проверяет доступность доменного имени],
|
||
[Главный актёр: Пользователь],
|
||
[Предусловия: Пользователь находится в каталоге зон],
|
||
[Основной поток:
|
||
+ Пользователь вводит имя в формате `<name>.<zone2>.`
|
||
+ Система проверяет доступность и соответствие политикам],
|
||
[Постусловия: Пользователь получает информацию о доступности имени],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Добавление имени в корзину],
|
||
[ID: CA1],
|
||
[Краткое описание: Пользователь добавляет выбранное доменное имя в корзину],
|
||
[Главный актёр: Пользователь],
|
||
[Предусловия: Имя доступно для регистрации],
|
||
[Основной поток:
|
||
+ Пользователь выбирает имя
|
||
+ Система добавляет его в корзину
|
||
+ Система рассчитывает стоимость за выбранный период (месяц/год)],
|
||
[Постусловия: Имя находится в корзине пользователя],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Оформление заказа],
|
||
[ID: CA2],
|
||
[Краткое описание: Пользователь оформляет заказ на выбранные имена],
|
||
[Главный актёр: Пользователь],
|
||
[Предусловия: В корзине есть имена],
|
||
[Основной поток:
|
||
+ Пользователь открывает корзину
|
||
+ Система показывает итоговую стоимость
|
||
+ Пользователь подтверждает заказ
|
||
+ Система формирует заказ],
|
||
[Постусловия: Заказ создан и ожидает оплаты],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Оплата заказа],
|
||
[ID: B1],
|
||
[Краткое описание: Пользователь оплачивает заказ через API эквайринга],
|
||
[Главный актёр: Пользователь],
|
||
[Предусловия: Создан заказ],
|
||
[Основной поток:
|
||
+ Система формирует счет и ссылку на оплату
|
||
+ Пользователь переходит по ссылке и производит оплату
|
||
+ Система получает статус платежа от API
|
||
+ В случае успеха платеж учитывается],
|
||
[Постусловия: Заказ оплачен],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Активация домена],
|
||
[ID: D1],
|
||
[Краткое описание: Система автоматически активирует домен после оплаты],
|
||
[Главный актёр: Система],
|
||
[Предусловия: Оплачен заказ на домен],
|
||
[Основной поток:
|
||
+ Система получает подтверждение оплаты
|
||
+ Создаёт ресурс домена 3-го уровня
|
||
+ Домен становится доступным пользователю],
|
||
[Постусловия: Домен активирован],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Управление DNS],
|
||
[ID: DNS1],
|
||
[Краткое описание: Пользователь управляет DNS-записями домена],
|
||
[Главный актёр: Пользователь],
|
||
[Предусловия: У пользователя есть активный домен],
|
||
[Основной поток:
|
||
+ Пользователь открывает панель управления DNS
|
||
+ Создает/редактирует/удаляет записи (A, AAAA, CNAME, TXT, MX, SRV, CAA)
|
||
+ Настраивает TTL для записей],
|
||
[Постусловия: Настройки DNS сохранены и применены],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: NS-делегирование],
|
||
[ID: NS1],
|
||
[Краткое описание: Пользователь устанавливает собственные NS-серверы],
|
||
[Главный актёр: Пользователь],
|
||
[Предусловия: У пользователя есть активный домен],
|
||
[Основной поток:
|
||
+ Пользователь указывает NS-сервера в панели
|
||
+ Система применяет изменения],
|
||
[Постусловия: Для домена установлены пользовательские NS-сервера],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Продление домена],
|
||
[ID: PR1],
|
||
[Краткое описание: Пользователь продлевает регистрацию домена вручную],
|
||
[Главный актёр: Пользователь],
|
||
[Предусловия: Домен скоро истекает],
|
||
[Основной поток:
|
||
+ Пользователь выбирает домен для продления
|
||
+ Система рассчитывает стоимость
|
||
+ Пользователь оплачивает продление],
|
||
[Постусловия: Срок действия домена увеличен],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Напоминания о продлении],
|
||
[ID: PR2],
|
||
[Краткое описание: Система уведомляет пользователя об истечении регистрации],
|
||
[Главный актёр: Система],
|
||
[Предусловия: Домен зарегистрирован и срок подходит к концу],
|
||
[Основной поток:
|
||
+ За 30, 14, 7, 3 и 1 день система отправляет уведомления на email],
|
||
[Постусловия: Пользователь осведомлён о необходимости продления],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Личный кабинет],
|
||
[ID: LK1],
|
||
[Краткое описание: Пользователь управляет своим профилем и доменами],
|
||
[Главный актёр: Пользователь],
|
||
[Предусловия: Пользователь авторизован],
|
||
[Основной поток:
|
||
+ Пользователь открывает личный кабинет
|
||
+ Просматривает список доменов
|
||
+ Редактирует профиль
|
||
+ Просматривает историю счетов и платежей],
|
||
[Постусловия: Пользователь получил доступ к своим данным и управлению ими],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Админ-панель],
|
||
[ID: ADM1],
|
||
[Краткое описание: Администратор управляет пользователями и их доменами],
|
||
[Главный актёр: Администратор],
|
||
[Предусловия: Администратор авторизован],
|
||
[Основной поток:
|
||
+ Администратор открывает панель
|
||
+ Просматривает список пользователей и их доменов
|
||
+ Управляет пользователями и их зонами],
|
||
[Постусловия: Данные пользователей и доменов изменены администратором],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Проверка имени на политику],
|
||
[ID: NC1],
|
||
[Краткое описание: Система проверяет имя на соответствие политике имен],
|
||
[Главный актёр: Система],
|
||
[Предусловия: Пользователь запрашивает регистрацию домена],
|
||
[Основной поток:
|
||
+ Система проверяет имя по списку запрещённых и зарезервированных
|
||
+ В случае нарушения отказывает в регистрации],
|
||
[Постусловия: Имя либо разрешено, либо отклонено],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Email-уведомления],
|
||
[ID: NTF1],
|
||
[Краткое описание: Система отправляет пользователю уведомления],
|
||
[Главный актёр: Система],
|
||
[Предусловия: У пользователя есть действия, требующие уведомлений],
|
||
[Основной поток:
|
||
+ Система отправляет уведомления о создании заказа, оплате, активации домена и истечении регистрации],
|
||
[Постусловия: Пользователь информирован о событиях],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Аудит действий],
|
||
[ID: LOG1],
|
||
[Краткое описание: Система фиксирует действия пользователей и администраторов],
|
||
[Главный актёр: Система],
|
||
[Предусловия: В системе происходят значимые события],
|
||
[Основной поток:
|
||
+ Система записывает, кто, что, когда и откуда сделал
|
||
+ Сохраняет данные в журнале],
|
||
[Постусловия: Логи доступны для анализа],
|
||
)
|
||
|
||
#table(
|
||
columns: (1fr),
|
||
align: left,
|
||
[Прецедент: Экспорт отчёта],
|
||
[ID: REP1],
|
||
[Краткое описание: Администратор получает отчёт об использовании сервиса],
|
||
[Главный актёр: Администратор],
|
||
[Предусловия: Администратор авторизован],
|
||
[Основной поток:
|
||
+ Администратор запрашивает экспорт отчёта
|
||
+ Система формирует файл с количеством зарегистрированных пользователей, активных пользователей и доменов],
|
||
[Постусловия: Администратор получил отчёт],
|
||
)
|
||
|
||
== Usability (Требования к удобству использования)
|
||
|
||
=== Время обучения
|
||
Пользователь должен научиться работать с системой не более чем за 10 минут при условии, что у него уже был опыт работы с регистраторами DNS.
|
||
|
||
Для пользователей должна быть подготовлена документация по использованию Сервиса.
|
||
|
||
=== Эффективность использования
|
||
- Среднее время приобретения домена: < 5 минут.
|
||
|
||
== Reliability (Требования к надежности)
|
||
|
||
=== Доступность системы
|
||
- Доступность Сервиса: 99.9%.
|
||
- Доступность DNS серверов: 99.95%.
|
||
- Плановые работы: только в ночное время.
|
||
- Максимальное время восстановления: 8 часов 45 минут.
|
||
- DNS сервера не должны быть зависимы от доступности Сервиса.
|
||
|
||
=== Обработка ошибок
|
||
- Система должна попытаться автоматически восстановиться после сбоя.
|
||
- Журналирование всех ошибок.
|
||
- Резервное копирование данных должно происходить минимум раз в неделю.
|
||
- Система мониторинга и оповещения.
|
||
|
||
=== Защита данных
|
||
- Шифрование или хеширование чувствительных данных.
|
||
- Защита от SQL-инъекций.
|
||
- XSS и CSRF защита.
|
||
|
||
== Performance (Требования к производительности)
|
||
|
||
=== Время отклика
|
||
- Загрузка главной страницы: < 2 секунды.
|
||
- Поиск по сайту: < 5 секунда.
|
||
- API-запросы: < 400 мс для запросов, не изменяющих состояние системы(не включая поиск).
|
||
- API-запросы: < 5 секунд для запросов, изменяющих состояние системы.
|
||
|
||
=== Масштабируемость
|
||
- Поддержка до 1000 одновременных пользователей.
|
||
- Автоматическое горизонтальное масштабирование ресурсов.
|
||
- Балансировка нагрузки.
|
||
|
||
== Design Constraints (Ограничения разработки)
|
||
|
||
=== Технологический стек
|
||
- Frontend: HTML, CSS, JavaScript, React.
|
||
- Backend: Java, Spring Boot, Docker, Tomcat.
|
||
- База данных: PostgreSQL.
|
||
- Кэширование: Redis.
|
||
- Deployment: Kubernetes.
|
||
|
||
=== Стандарты разработки
|
||
- Код-стайл.
|
||
- Код-ревью.
|
||
- CI/CD практики.
|
||
- Документирование API.
|
||
|
||
== Interfaces (Интерфейсы)
|
||
|
||
=== User Interfaces (Пользовательские интерфейсы)
|
||
|
||
Интерфейс можно разделить на три часть: Лендинг, Кабинет пользователя, Панель администратора.
|
||
|
||
На лендинге представлена основная информация о Сервисе и предложение зарегистрировать домен.
|
||
|
||
В кабинете пользователя представлены разделы:
|
||
- Мои домены
|
||
- DNS
|
||
- Корзина
|
||
- События
|
||
- Профиль/Настройки
|
||
|
||
В кабинете администратора представлены разделы:
|
||
- Главная
|
||
- Управление пользователями
|
||
- Управление доменами
|
||
- Финансы и биллинг
|
||
- События в Сервисе
|
||
|
||
Интерфейс представлен в приложении А.
|
||
|
||
=== Hardware Interfaces (Аппаратные интерфейсы)
|
||
|
||
Не требуются специальные аппаратные интерфейсы. Развёртывание сервиса на стандартных серверах/VM x86, поддерживающих ОС Linux 6+ и имеющих доступ в интернет.
|
||
|
||
=== Software Interfaces (Программные интерфейсы)
|
||
|
||
- REST API для управления авторитативными DNS-серверами.
|
||
- REST API Биллинга.
|
||
- SMTP почтового сервера.
|
||
|
||
=== Communications Interfaces (Сетевые интерфейсы)
|
||
|
||
- Авторитативные DNS-сервера: UDP/TCP 53
|
||
- Кабинет/API -- HTTPS 443 (TLS 1.2+); HSTS, современный набор шифров.
|
||
|
||
== Licensing Requirements (Требования к лицензированию)
|
||
|
||
Серверная часть сервиса будет распространяться с закрытым исходным кодом. Пользовательский интерфейс предоставляется в виде веб-приложения, доступного через браузер
|
||
|
||
#pagebreak()
|
||
|
||
= Приложение А <UI>
|
||
|
||
#figure(
|
||
image("images/Лендиг.png"),
|
||
caption: [Лендинг],
|
||
supplement: "Изображение",
|
||
)
|
||
|
||
#figure(
|
||
image("images/Логин _ Регистрация.png"),
|
||
caption: [Вход и регистрация],
|
||
supplement: "Изображение",
|
||
)
|
||
|
||
#figure(
|
||
image("images/Личный кабинет пользователя - Главная страница.png"),
|
||
caption: [Личный кабинет пользователя - Главная страница],
|
||
supplement: "Изображение",
|
||
)
|
||
|
||
#figure(
|
||
image("images/Личный кабинет пользователя - Страница _Мои домены_.png"),
|
||
caption: [Личный кабинет пользователя - Страница Мои домены],
|
||
supplement: "Изображение",
|
||
)
|
||
|
||
#figure(
|
||
image("images/Личный кабинет пользователя - Страница _DNS_.png"),
|
||
caption: [Личный кабинет пользователя - Страница DNS],
|
||
supplement: "Изображение",
|
||
)
|
||
|
||
#figure(
|
||
image("images/Личный кабинет пользователя - Страница _Корзина_.png"),
|
||
caption: [Личный кабинет пользователя - Страница Корзина],
|
||
supplement: "Изображение",
|
||
)
|
||
|
||
#figure(
|
||
image("images/Личный кабинет пользователя - Страница _События_.png"),
|
||
caption: [Личный кабинет пользователя - Страница События],
|
||
supplement: "Изображение",
|
||
)
|
||
|
||
#figure(
|
||
image("images/Личный кабинет администратора - Главная страница.png"),
|
||
caption: [Личный кабинет администратора - Главная страница],
|
||
supplement: "Изображение",
|
||
)
|
||
|
||
#figure(
|
||
image("images/Личный кабинет администратора - Страница _Домены_.png"),
|
||
caption: [Личный кабинет администратора - Страница Домены],
|
||
supplement: "Изображение",
|
||
)
|
||
|
||
#figure(
|
||
image("images/Личный кабинет администратора - Страница _Пользователи_.png"),
|
||
caption: [Личный кабинет администратора - Страница Пользователи],
|
||
supplement: "Изображение",
|
||
)
|
||
|
||
#figure(
|
||
image("images/Личный кабинет администратора - Страница _События_.png"),
|
||
caption: [Личный кабинет администратора - Страница События],
|
||
supplement: "Изображение",
|
||
)
|
||
|
||
#figure(
|
||
image("images/Личный кабинет администратора - Страница _Финансы_.png"),
|
||
caption: [Личный кабинет администратора - Страница Финансы],
|
||
supplement: "Изображение",
|
||
)
|