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 AuthorizeRequest struct { ClientID string `json:"client_id" validate:"required"` RedirectURI string `json:"redirect_uri" validate:"required"` ResponseType string `json:"response_type" validate:"required"` Scope string `json:"scope" validate:"required"` State string `json:"state" validate:"required"` } func AuthorizeController(c *fiber.Ctx) error { masterlog.Debug("Authorize request received", map[string]interface{}{"path": c.Path()}) var request AuthorizeRequest 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("Authorize request validated", map[string]interface{}{"path": c.Path()}) response := services.Authorize(c.Locals("user").(string), request.ClientID, request.RedirectURI, request.ResponseType, request.Scope, request.State) masterlog.Debug("Authorize response sent", map[string]interface{}{"path": c.Path()}) return response.Send(c) }