diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3c9b62b --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Auth Service Go + +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 index 90ee703..6e7b6ef 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,279 @@ -# auth_service +# Auth Service Go -- [routes](#routes) -- [build](#build) -- [configure](#configure) - - [exaple](#example) +Микросервис аутентификации и авторизации, написанный на Go. Предоставляет REST API для управления пользователями, аутентификации через JWT токены и контроля доступа. -## routes +## Возможности -- `/api/token` - Auth by username/password return token -- `/api/token/verify` - Verify token -- `/api/access` - Access request by token -- `/api/register` - Register user -- `/api/users` - Get all users data -- `/api/users/user` - Get user data -- `/api/users/password` - Change user password -- `/api/users/change` - Change user data -- `/api/users/del` - Delete user -- `/api/users/add` - Add user +- 🔐 JWT токены для аутентификации +- 👥 Управление пользователями (создание, обновление, удаление) +- 🗄️ SQLite база данных с GORM +- 🔒 Поддержка TLS/SSL +- 📝 Регистрация пользователей (опционально) +- ⚙️ Гибкая конфигурация через переменные окружения +- 🐳 Docker поддержка -## buuild +## Требования -```shell +- Go 1.24.3 или новее +- SQLite3 + +## Установка + +### Из исходного кода + +```bash +git clone +cd auth_service_go +go mod download go build ``` -## configure - -### example +### Docker +```bash +docker build -t auth_service . +docker run -p 8090:8090 auth_service ``` + +## Конфигурация + +Создайте файл `.env` или установите переменные окружения: + +```env +# Файлы базы данных USERS_FILE=users.json USERS_DB=users.db + +# Настройки регистрации ENABLE_SELF_REGISTER=false +# TLS настройки ENABLE_TLS=false CERT_FILE=/data/file.crt -KEY_FILE=/data/file/key +KEY_FILE=/data/file.key +# Настройки сервера SERVER_ADDRESS=0.0.0.0 SERVER_PORT=8090 ``` + +### Параметры конфигурации + +| Параметр | Описание | Значение по умолчанию | +|----------|----------|----------------------| +| `USERS_FILE` | Путь к JSON файлу с пользователями | `users.json` | +| `USERS_DB` | Путь к SQLite базе данных | `users.db` | +| `ENABLE_SELF_REGISTER` | Разрешить самостоятельную регистрацию | `false` | +| `ENABLE_TLS` | Включить TLS/SSL | `false` | +| `CERT_FILE` | Путь к SSL сертификату | - | +| `KEY_FILE` | Путь к SSL ключу | - | +| `SERVER_ADDRESS` | IP адрес сервера | `0.0.0.0` | +| `SERVER_PORT` | Порт сервера | `8090` | + +## API Документация + +### Аутентификация + +#### POST `/api/token` +Аутентификация пользователя по логину и паролю. + +**Запрос:** +```json +{ + "username": "user", + "password": "password" +} +``` + +**Ответ:** +```json +{ + "token": "jwt_token_here", + "expires_at": "2024-01-01T00:00:00Z" +} +``` + +#### POST `/api/token/verify` +Проверка валидности JWT токена. + +**Запрос:** +```json +{ + "token": "jwt_token_here" +} +``` + +**Ответ:** +```json +{ + "valid": true, + "user_id": "user_id_here" +} +``` + +#### POST `/api/access` +Запрос доступа с использованием токена. + +**Заголовки:** +``` +Authorization: Bearer jwt_token_here +``` + +### Управление пользователями + +#### POST `/api/register` +Регистрация нового пользователя. + +**Запрос:** +```json +{ + "username": "newuser", + "password": "password", + "email": "user@example.com" +} +``` + +#### GET `/api/users` +Получение списка всех пользователей. + +**Заголовки:** +``` +Authorization: Bearer jwt_token_here +``` + +#### GET `/api/users/user` +Получение информации о текущем пользователе. + +**Заголовки:** +``` +Authorization: Bearer jwt_token_here +``` + +#### PUT `/api/users/password` +Изменение пароля пользователя. + +**Запрос:** +```json +{ + "old_password": "old_password", + "new_password": "new_password" +} +``` + +#### PUT `/api/users/change` +Изменение данных пользователя. + +**Запрос:** +```json +{ + "email": "new_email@example.com", + "first_name": "John", + "last_name": "Doe" +} +``` + +#### POST `/api/users/add` +Добавление нового пользователя (администратор). + +**Запрос:** +```json +{ + "username": "newuser", + "password": "password", + "email": "user@example.com", + "role": "user" +} +``` + +#### DELETE `/api/users/del` +Удаление пользователя. + +**Запрос:** +```json +{ + "user_id": "user_id_here" +} +``` + +## Примеры использования + +### Получение токена + +```bash +curl -X POST http://localhost:8090/api/token \ + -H "Content-Type: application/json" \ + -d '{"username": "admin", "password": "password"}' +``` + +### Использование токена + +```bash +curl -X GET http://localhost:8090/api/users \ + -H "Authorization: Bearer your_jwt_token_here" +``` + +### Регистрация пользователя + +```bash +curl -X POST http://localhost:8090/api/register \ + -H "Content-Type: application/json" \ + -d '{"username": "newuser", "password": "password", "email": "user@example.com"}' +``` + +## Разработка + +### Структура проекта + +``` +auth_service_go/ +├── api/ # API обработчики +├── database/ # Работа с базой данных +├── model/ # Модели данных +├── server/ # Настройка сервера +├── utils/ # Утилиты +├── main.go # Входная точка +├── go.mod # Зависимости Go +└── README.md # Документация +``` + +### Запуск для разработки + +```bash +# Установка зависимостей +go mod tidy + +# Запуск с горячей перезагрузкой (требует air) +air + +# Обычный запуск +go run main.go +``` + +### Сборка + +```bash +# Сборка для текущей платформы +go build + +# Сборка для Linux +GOOS=linux GOARCH=amd64 go build + +# Сборка для Windows +GOOS=windows GOARCH=amd64 go build +``` + +## Безопасность + +- Используйте HTTPS в продакшене +- Регулярно обновляйте зависимости +- Используйте сильные пароли +- Настройте правильные разрешения для файлов базы данных +- Не храните секреты в коде + +## Лицензия + +Этот проект лицензируется под MIT лицензией. Смотрите файл [LICENSE](LICENSE) для подробностей. + +## Поддержка + +При возникновении проблем создайте issue в репозитории проекта. \ No newline at end of file