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 }) }