7335eb5aa8
modified: main_dc/yalarba/api_tp/internal/handlers/oauth.go modified: main_dc/yalarba/api_tp/internal/handlers/oauth_yandex.go modified: main_dc/yalarba/api_tp/internal/models/user.go modified: main_dc/yalarba/api_tp/internal/repository/user_repository.go modified: main_dc/yalarba/api_tp/internal/service/user_service.go modified: main_dc/yalarba/api_tp/internal/utils/oauth_utils.go modified: main_dc/yalarba/api_tp/pkg/database/postgres.go change naming for user into api
104 lines
3.0 KiB
Go
104 lines
3.0 KiB
Go
// handlers/auth.go
|
|
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
"api_tp/internal/models"
|
|
"api_tp/internal/utils"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type AuthHandler struct {
|
|
DB *gorm.DB
|
|
}
|
|
|
|
type RegisterRequest struct {
|
|
Email string `json:"email" validate:"required,email"`
|
|
Password string `json:"password" validate:"required,min=6"`
|
|
Name string `json:"name" validate:"required"`
|
|
}
|
|
|
|
type LoginRequest struct {
|
|
Email string `json:"email" validate:"required,email"`
|
|
Password string `json:"password" validate:"required"`
|
|
}
|
|
|
|
func (h *AuthHandler) Register(w http.ResponseWriter, r *http.Request) {
|
|
var req RegisterRequest
|
|
if err := utils.DecodeJSON(r, &req); err != nil {
|
|
utils.WriteError(w, http.StatusBadRequest, "Invalid request")
|
|
return
|
|
}
|
|
|
|
// Проверяем, существует ли пользователь
|
|
var existingUser models.UserT
|
|
if err := h.DB.Where("email = ?", req.Email).First(&existingUser).Error; err == nil {
|
|
utils.WriteError(w, http.StatusConflict, "User already exists")
|
|
return
|
|
}
|
|
|
|
// Хешируем пароль
|
|
hashedPassword, err := utils.HashPassword(req.Password)
|
|
if err != nil {
|
|
utils.WriteError(w, http.StatusInternalServerError, "Error creating user")
|
|
return
|
|
}
|
|
|
|
// Создаем пользователя
|
|
user := models.UserT{
|
|
Email: req.Email,
|
|
Password: hashedPassword,
|
|
Name: req.Name,
|
|
}
|
|
|
|
if err := h.DB.Create(&user).Error; err != nil {
|
|
utils.WriteError(w, http.StatusInternalServerError, "Error creating user")
|
|
return
|
|
}
|
|
|
|
// Генерируем JWT токен
|
|
token, err := utils.GenerateJWT(user.ID, user.Email)
|
|
if err != nil {
|
|
utils.WriteError(w, http.StatusInternalServerError, "Error generating token")
|
|
return
|
|
}
|
|
|
|
utils.WriteJSON(w, http.StatusCreated, map[string]interface{}{
|
|
"token": token,
|
|
"user": user,
|
|
})
|
|
}
|
|
|
|
func (h *AuthHandler) Login(w http.ResponseWriter, r *http.Request) {
|
|
var req LoginRequest
|
|
if err := utils.DecodeJSON(r, &req); err != nil {
|
|
utils.WriteError(w, http.StatusBadRequest, "Invalid request")
|
|
return
|
|
}
|
|
|
|
// Ищем пользователя
|
|
var user models.UserT
|
|
if err := h.DB.Where("email = ?", req.Email).First(&user).Error; err != nil {
|
|
utils.WriteError(w, http.StatusUnauthorized, "Invalid credentials")
|
|
return
|
|
}
|
|
|
|
// Проверяем пароль
|
|
if !utils.CheckPasswordHash(req.Password, user.Password) {
|
|
utils.WriteError(w, http.StatusUnauthorized, "Invalid credentials")
|
|
return
|
|
}
|
|
|
|
// Генерируем JWT токен
|
|
token, err := utils.GenerateJWT(user.ID, user.Email)
|
|
if err != nil {
|
|
utils.WriteError(w, http.StatusInternalServerError, "Error generating token")
|
|
return
|
|
}
|
|
|
|
utils.WriteJSON(w, http.StatusOK, map[string]interface{}{
|
|
"token": token,
|
|
"user": user,
|
|
})
|
|
} |