Merge pull request 'added README.md and LICENSE' (#2) from develop into main
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Make (push) Successful in 9s
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-CMake (push) Successful in 12s
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Meson (push) Successful in 12s

Reviewed-on: https://gitea.home.com:3000/TolaMironcenko/auth_service_c/pulls/2
This commit was merged in pull request #2.
This commit is contained in:
wt
2025-08-30 12:50:56 +07:00
2 changed files with 155 additions and 0 deletions
+21
View File
@@ -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.
+134
View File
@@ -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).