diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a11e258 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 auth_service + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..9756b4b --- /dev/null +++ b/README.md @@ -0,0 +1,134 @@ +# Служба аутентификации на C + +Этот репозиторий содержит реализацию службы аутентификации, написанной на языке C. Она предоставляет надежный набор API-интерфейсов для управления пользователями, аутентификации на основе токенов и авторизации, используя Mongoose в качестве веб-сервера и SQLite в качестве базы данных. + +## Особенности + +* **Безопасная аутентификация:** Получение и проверка токенов для безопасного доступа к ресурсам. +* **Управление пользователями:** Полный набор функций CRUD (создание, чтение, обновление, удаление) для учетных записей пользователей, включая добавление, получение, изменение и удаление пользователей. +* **Регистрация пользователей:** Удобный API для регистрации новых пользователей. +* **Сброс пароля:** Возможность изменения паролей пользователей. +* **Поддержка TLS:** Встроенная поддержка HTTPS для защищенной связи с использованием TLS-сертификатов. +* **Гибкая конфигурация:** Легкая настройка службы через файл `config.json`. +* **Легковесная база данных:** Использование SQLite для эффективного хранения данных. +* **Mongoose Web Server:** Построен на высокопроизводительном и легковесном Mongoose Web Server. + +## Начало работы + +Чтобы запустить службу аутентификации, выполните следующие шаги: + +### Зависимости + +Убедитесь, что у вас установлены следующие зависимости: + +* `gcc` (или другой совместимый компилятор C) +* `make` (для использования Makefile) или `cmake` и `ninja` (для использования CMake/Meson) +* Библиотеки `OpenSSL` (для `ssl` и `crypto`) +* Библиотека `SQLite3` +* `pthread` (обычно поставляется с системами на базе Unix) + +### Сборка проекта + +Вы можете собрать проект, используя `CMake`, `Make` или `Meson`. + +#### Использование CMake + +```bash +mkdir build +cd build +cmake .. +make +``` + +Использование Make + +```bash +make +``` + +#### Использование Meson + +```bash +meson setup builddir +meson compile -C builddir +``` + +### Настройка + +Служба может быть настроена через файл `config.json`. Пример файла `config.json`: + +```json +{ + "address": "0.0.0.0:8222", + "tls_enabled": false, + "tls_address": "0.0.0.0:8223", + "tls_cert": "path/to/your/cert.pem", + "tls_key": "path/to/your/key.pem", + "default_users_file": "users.json" +} +``` + +* `address`: Адрес и порт для прослушивания HTTP-соединений. +* `tls_enabled`: Установите `true`, чтобы включить HTTPS. +* `tls_address`: Адрес и порт для прослушивания HTTPS-соединений (если `tls_enabled` установлено в `true`). +* `tls_cert`: Путь к файлу TLS-сертификата (если `tls_enabled` установлено в `true`). +* `tls_key`: Путь к файлу TLS-ключа (если `tls_enabled` установлено в `true`). +* `default_users_file`: Путь к файлу JSON, содержащему пользователей по умолчанию для загрузки при запуске. + +### Запуск службы + +После сборки вы можете запустить службу из каталога сборки: + +```bash +./auth_service +``` + +### Тестирование + +Проект включает набор тестов. Вы можете запустить их с помощью: + +```bash +make test +``` +или если вы используете Meson: +```bash +meson test -C builddir +``` + +## API Эндпоинты + +Вот доступные API-маршруты: + +* `GET /#`: Корневая страница. +* `OPTIONS /#`: Установка заголовков CORS. +* `POST /api/token`: Получение токена аутентификации. + * **Запрос**: `{ "username": "your_username", "password": "your_password" }` + * **Ответ**: `{ "token": "your_jwt_token" }` +* `POST /api/token/verify`: Проверка действительности токена. + * **Запрос**: `{ "token": "your_jwt_token" }` + * **Ответ**: `{ "valid": true/false }` +* `POST /api/users`: Получение списка всех пользователей. (Требуется аутентификация) + * **Запрос**: `{}` + * **Ответ**: `[ { "id": "1", "username": "user1" }, ... ]` +* `POST /api/users/user`: Получение информации о конкретном пользователе. (Требуется аутентификация) + * **Запрос**: `{ "username": "target_username" }` + * **Ответ**: `{ "id": "1", "username": "target_username", ... }` +* `DELETE /api/users`: Удаление пользователя. (Требуется аутентификация) + * **Запрос**: `{ "id": "user_id_to_delete" }` + * **Ответ**: `{ "status": "success" }` +* `POST /api/users/password`: Изменение пароля пользователя. (Требуется аутентификация) + * **Запрос**: `{ "id": "user_id", "old_password": "...", "new_password": "..." }` + * **Ответ**: `{ "status": "success" }` +* `PUT /api/users`: Обновление информации о пользователе. (Требуется аутентификация) + * **Запрос**: `{ "id": "user_id", "field_to_update": "new_value" }` + * **Ответ**: `{ "status": "success" }` +* `POST /api/users/add`: Добавление нового пользователя. (Требуется аутентификация) + * **Запрос**: `{ "username": "new_username", "password": "new_password" }` + * **Ответ**: `{ "id": "new_user_id", "username": "new_username" }` +* `POST /api/register`: Регистрация нового пользователя. + * **Запрос**: `{ "username": "new_username", "password": "new_password" }` + * **Ответ**: `{ "id": "new_user_id", "username": "new_username" }` + +## Лицензия + +Этот проект распространяется под лицензией [MIT License](LICENSE).