pkiapi/internal/api/auth.go

58 lines
1.4 KiB
Go

package api
import (
"net/http"
"os"
"time"
"github.com/gin-gonic/gin"
"github.com/stef/pkiapi/internal/auth"
)
// LoginRequest représente la requête de connexion
type LoginRequest struct {
Username string `json:"username" binding:"required"`
Password string `json:"password" binding:"required"`
}
// LoginResponse représente la réponse de connexion
type LoginResponse struct {
Token string `json:"token"`
ExpiresIn int `json:"expires_in"`
}
// Login génère un token JWT (simple pour démo)
func Login(c *gin.Context) {
var req LoginRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
// Validation simple (à remplacer par une vraie authentification)
if req.Username == "" || req.Password == "" {
c.JSON(http.StatusUnauthorized, gin.H{"error": "identifiants invalides"})
return
}
// Créer JWT manager
secretKey := os.Getenv("JWT_SECRET_KEY")
if secretKey == "" {
secretKey = "your-secret-key-change-in-prod"
}
jwtManager := auth.NewJWTManager(secretKey)
// Générer token avec expiration de 24h
token, err := jwtManager.GenerateToken(req.Username, "user", 24*time.Hour)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "erreur génération token"})
return
}
c.JSON(http.StatusOK, LoginResponse{
Token: token,
ExpiresIn: 86400, // 24 heures en secondes
})
}