package controllers import ( "git.secnex.io/secnex/masterlog" "git.secnex.io/secnex/oauth2-api/services" "git.secnex.io/secnex/oauth2-api/utils" "github.com/go-playground/validator/v10" "github.com/gofiber/fiber/v2" ) type TokenRequest struct { ClientID string `json:"client_id" validate:"required"` GrantType string `json:"grant_type" validate:"required"` Code string `json:"code" validate:"required"` RedirectURI string `json:"redirect_uri" validate:"required"` ClientSecret string `json:"client_secret" validate:"required"` } func TokenController(c *fiber.Ctx) error { masterlog.Debug("Token request received", map[string]interface{}{"path": c.Path()}) var request TokenRequest if err := c.BodyParser(&request); err != nil { masterlog.Debug("Failed to parse request", map[string]interface{}{"error": err.Error()}) return utils.NewHTTPResponse(fiber.StatusBadRequest, &fiber.Map{"error": err.Error()}, "", nil, nil).Send(c) } if err := validator.New().Struct(request); err != nil { masterlog.Debug("Failed to validate request", map[string]interface{}{"error": err.Error()}) return utils.NewHTTPResponse(fiber.StatusBadRequest, &fiber.Map{"error": err.Error()}, "", nil, nil).Send(c) } masterlog.Debug("Token request validated", map[string]interface{}{"path": c.Path(), "body": request}) response := services.Token(request.ClientID, request.GrantType, request.Code, request.RedirectURI, request.ClientSecret) masterlog.Debug("Token response sent", map[string]interface{}{"path": c.Path()}) return response.Send(c) }