package server import ( "fmt" "net/http" "net/url" "time" "github.com/gin-gonic/gin" ) // GetGoogleAuthUrlHandlerV2 fetches a Google authentication URl and returns it. // This function is atomic and cannot fail. func (s *Server) GetGoogleAuthUrlHandlerV2(ctx *gin.Context) { url := s.deps.AuthService.GetGoogleAuthUrl() ctx.JSON(http.StatusOK, gin.H{ "status": http.StatusOK, "message": "[OK] Successfully retrieved Google auth URL.", "url": url, }) } // GoogleCallbackHandlerV2 reads the data from the Google redirection and uses it // to generate a JWT which is sent back to the UI via a URL query parameter. If an // error occurs the user will be directed to the login page with an error query param. func (s *Server) GoogleCallbackHandlerV2(ctx *gin.Context) { var ( state string = ctx.Query("state") code string = ctx.Query("code") ) domain := s.deps.EnvironmentConfig.FrontendDomain if jwt, err := s.deps.AuthService.GoogleAuthSuccess(state, code); err != nil { url := fmt.Sprintf("%s/v2/web/login?error=%s", domain, url.QueryEscape(err.Error())) ctx.Redirect(http.StatusSeeOther, url) } else { url := fmt.Sprintf("%s/v2/web/home", domain) s.SetCookie(ctx, "jwt_token", jwt, time.Hour*24*7) ctx.Redirect(http.StatusSeeOther, url) } } func (s *Server) LogoutHandlerV2(ctx *gin.Context) { s.SetCookie(ctx, "jwt_token", "", -1) // s.SetCookie(ctx, "search-filters", "", -1) // TODO: This was copied, might function differently now ctx.Status(http.StatusNoContent) }