- +Set up a connection to SQLite.
- +Create a
notes
table to store note data. - +Implement CRUD operations to work with SQLite.
- Separate project layers:
- Storage Layer (storage): Handles SQLite interactions.
- Service Layer (services): Business logic for handling notes.
- Handlers (handlers): Handles HTTP requests.
- +Integrate the
gorilla/mux
router. - +Add routes with parameters (e.g.,
/notes/{id}
).
- Implement user registration and login.
- Add token-based authentication (e.g., JWT).
- Restrict access to notes to their respective owners.
- Ensure that fields
title
,content
, andauthor
are properly validated. - Set limits for the length of the title and content.
- Create a centralized function for logging and returning errors.
- Implement custom error types with user-friendly messages.
- Add routes for filtering and sorting notes.
- Ensure proper HTTP status codes are returned for errors (e.g.,
400
,404
,500
).
- Document all endpoints using Swagger.
- Include request and response examples in the documentation.
- Write unit tests for CRUD operations.
- Implement integration tests for the API.
- Prepare deployment instructions for a production server.
- Consider using Docker for easy setup and deployment.
Вот список задач для реализации аутентификации с использованием JWT и SQLite. Задачи сгруппированы по этапам, чтобы упростить выполнение и тестирование.
- Создать таблицу пользователей в SQLite:
- +Поля:
id
,username
,hashed_password
,role
,created_at
. - Убедиться, что поле
username
уникально.
- +Поля:
- Настроить миграции (если используете GORM или другую библиотеку для работы с базой данных).
- Добавить функцию для хэширования и проверки паролей:
- Использовать библиотеку
bcrypt
для безопасности.
- Использовать библиотеку
-
Реализовать регистрацию (
POST /register
):- Принимать
username
иpassword
. - Проверять уникальность
username
. - Хэшировать пароль и сохранять пользователя в базе данных.
- Принимать
-
Реализовать вход (
POST /login
):- Проверять
username
иpassword
. - Генерировать Access-токен (JWT) и Refresh-токен.
- Хранить Refresh-токен в базе данных с привязкой к пользователю.
- Проверять
-
Реализовать обновление токенов (
POST /refresh
):- Проверять валидность Refresh-токена.
- Генерировать новый Access-токен.
- Обновлять Refresh-токен (или оставлять старый, если не истек).
- Реализовать middleware для проверки JWT:
- Проверять токен в заголовке
Authorization
. - Извлекать
userID
и роль (role
) из токена.
- Проверять токен в заголовке
- Реализовать middleware для проверки роли:
- Для админов: Проверять, что роль в токене равна
admin
.
- Для админов: Проверять, что роль в токене равна
- Реализовать эндпоинты для работы с записями:
- GET /notes: Возвращать только записи, принадлежащие текущему пользователю.
- GET /admin/notes: Возвращать все записи (только для админов).
- Обновить существующий функционал:
- Добавить проверку пользователя к каждому существующему эндпоинту.
-
Реализовать защиту от brute-force атак:
- Ограничить число попыток входа (например, через счетчик в памяти или базе данных).
- Заблокировать учетную запись/доступ после нескольких неудачных попыток (например, на 10 минут).
-
Тестирование:
- Проверить все API на функциональность.
- Написать тесты для регистрации, входа и проверки токенов.
- Убедиться, что обычный пользователь не может получить доступ к записям других пользователей.
- Добавить документацию к API:
- Описать, как использовать эндпоинты.
- Привести примеры запросов и ответов (включая ошибки).