Files
wt f168360cee
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Make (push) Successful in 12s
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-CMake (push) Successful in 18s
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Meson (push) Successful in 13s
added README.md and LICENSE
2025-08-30 12:44:39 +07:00

135 lines
7.1 KiB
Markdown

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