ADD: added database connection for players data handling and started login funtion with database

This commit is contained in:
hwinkel
2025-05-30 15:02:23 +02:00
parent 4158b87576
commit 1a2eec44a9
19 changed files with 924 additions and 58 deletions

View File

@@ -1,8 +1,11 @@
package auth
import (
"database/sql"
"net/http"
"time"
"volleyball/internal/common"
"volleyball/internal/player"
"github.com/gin-gonic/gin"
)
@@ -16,23 +19,53 @@ type LoginResponse struct {
Token string `json:"token"`
}
func LoginHandler(c *gin.Context) {
func LoginHandler(c *gin.Context, db *sql.DB) {
var req LoginRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Bad request"})
return
}
// Systemnutzer
if req.Email == "test@localhost.de" {
token, err := CreateJWT("system-user-id", req.Email, "admin", time.Hour*24*7)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Token error"})
return
}
c.JSON(http.StatusOK, LoginResponse{Token: token})
// Validate input
if req.Email == "" || req.Password == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "Email and password are required"})
return
}
c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid credentials"})
// Systemnutzer
var token string
var err error
if req.Email == "test@localhost.de" {
token, err = CreateJWT("system-user-id", req.Email, "admin", 60*time.Minute)
} else {
hash, err := common.HashPassword(req.Password)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Password hashing error"})
return
}
loggedInPlayer, err := player.LoginPlayer(db, req.Email, string(hash))
if err != nil {
if err == sql.ErrNoRows {
c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid credentials"})
return
}
c.JSON(http.StatusInternalServerError, gin.H{"error": "Database error"})
return
}
// Create JWT token
token, err = CreateJWT(loggedInPlayer.ID, req.Email, "player", 60*time.Minute)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Token creation error"})
return
}
}
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Token error"})
return
}
c.JSON(http.StatusOK, LoginResponse{Token: token})
return
}