package controllers import ( "crypto/rand" "encoding/hex" "time" "apiserver/common" "apiserver/models" "github.com/gin-gonic/gin" ) func generateAPIKey() (string, error) { bytes := make([]byte, 32) if _, err := rand.Read(bytes); err != nil { return "", err } return hex.EncodeToString(bytes), nil } type APIKeyController struct{} func (a *APIKeyController) GenerateAPIKey(ctx *gin.Context) { // Check authorization token := ctx.GetHeader("Authorization") if token == "" { ReturnError(ctx, common.ERROR_AUTH_CHECK_TOKEN_CODE, "Unauthorized: No token provided", nil) return } // Parse request var req models.APIKeyRequest if err := ctx.ShouldBindJSON(&req); err != nil { ReturnError(ctx, common.INVALID_PARAMS_CODE, "Invalid request format: "+err.Error(), nil) return } // Generate API key apiKey, err := generateAPIKey() if err != nil { ReturnError(ctx, common.ERROR_CODE, "Failed to generate API key", nil) return } // Set default expiry if not specified expiryDays := 30 if req.ExpiryDays > 0 { expiryDays = req.ExpiryDays } // Create response response := models.APIKeyResponse{ APIKey: apiKey, Username: req.Username, CreateTime: time.Now(), ExpiryTime: time.Now().AddDate(0, 0, expiryDays), } ReturnSuccess(ctx, 0, "API key generated successfully", response) }