# Служба аутентификации на 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).