package keycloak import ( "net/http" "antrian-operasi/internal/shared" baseResponse "antrian-operasi/internal/shared" "github.com/gin-gonic/gin" ) type KeycloakHandler struct { service IKeycloakService } func NewKeycloakHandler(service IKeycloakService) KeycloakHandler { return KeycloakHandler{service} } // GetTokenByRefreshCode godoc // @Summary Requesting new token to keycloak using refresh token // @Tags Keycloak // @Param body body RefreshTokenRequest true "Valid Refresh Token" // @Success 200 {object} shared.BaseResponse // @Failure 500 {object} shared.BaseErrorResponse // @Router /keycloak/refresh-token [post] func (h KeycloakHandler) GetTokenByRefreshCode(c *gin.Context) { var req RefreshTokenRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, shared.BaseErrorResponse{ Success: false, Code: 400, Message: "error bind json", Errors: shared.ValidationError(err), }) return } resp, err := h.service.FetchTokenUsingRefreshToken(c, req.RefreshToken) if err != nil { errorResponse := baseResponse.BaseErrorResponse{ Success: false, Code: 400, Message: err.Error(), } c.JSON(http.StatusInternalServerError, errorResponse) return } response := baseResponse.ToBaseResponse( resp, true, 200, "success refreshing token") c.JSON(http.StatusOK, response) }