diff --git a/backend/api/auth.go b/backend/api/auth.go index abf658e..2c330cb 100644 --- a/backend/api/auth.go +++ b/backend/api/auth.go @@ -162,22 +162,23 @@ func (s *Server) Callback(c echo.Context, params autogen.CallbackParams) error { } stateCache.Delete(params.State) + conf := config.GetConfig() + account, err := s.DBackend.GetAccount(c.Request().Context(), accountID.(string)) if err != nil { if err != mongo.ErrNoDocuments { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } // Check if account is onBoard acc, found := onBoardCache.Get(accountID.(string)) if !found { - return ErrorAccNotFound(c) + logrus.Error(err) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } account = acc.(*models.Account) } - conf := config.GetConfig() - // Get token from Google oauth2Config := oauth2.Config{ ClientID: conf.OauthConfig.GoogleClientID, @@ -193,7 +194,7 @@ func (s *Server) Callback(c echo.Context, params autogen.CallbackParams) error { token, err := oauth2Config.Exchange(c.Request().Context(), params.Code) if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } // Get user from Google @@ -201,7 +202,7 @@ func (s *Server) Callback(c echo.Context, params autogen.CallbackParams) error { resp, err := client.Get("https://www.googleapis.com/oauth2/v2/userinfo") if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } defer resp.Body.Close() @@ -209,25 +210,25 @@ func (s *Server) Callback(c echo.Context, params autogen.CallbackParams) error { err = json.NewDecoder(resp.Body).Decode(usr) if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } adminService, err := admin.NewService(c.Request().Context(), option.WithTokenSource(oauth2Config.TokenSource(c.Request().Context(), token))) if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } t, err := adminService.Users.Get(usr.ID).Projection("custom").CustomFieldMask("Education").ViewType("domain_public").Do() if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } edc := &education{} err = json.Unmarshal(t.CustomSchemas["Education"], edc) if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } account.FirstName = usr.FirstName @@ -242,7 +243,7 @@ func (s *Server) Callback(c echo.Context, params autogen.CallbackParams) error { err = s.DBackend.CreateAccount(c.Request().Context(), account) if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } // Delete ONBOARD cookie @@ -251,7 +252,7 @@ func (s *Server) Callback(c echo.Context, params autogen.CallbackParams) error { err = s.DBackend.UpdateAccount(c.Request().Context(), account) if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } } @@ -259,7 +260,7 @@ func (s *Server) Callback(c echo.Context, params autogen.CallbackParams) error { r, found := redirectCache.Get(params.State) if !found { - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } redirectCache.Delete(params.State) @@ -286,7 +287,7 @@ func (s *Server) CallbackInpromptu(c echo.Context, params autogen.CallbackParams token, err := oauth2Config.Exchange(c.Request().Context(), params.Code) if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } // Get user from Google @@ -294,7 +295,7 @@ func (s *Server) CallbackInpromptu(c echo.Context, params autogen.CallbackParams resp, err := client.Get("https://www.googleapis.com/oauth2/v2/userinfo") if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } defer resp.Body.Close() @@ -302,7 +303,7 @@ func (s *Server) CallbackInpromptu(c echo.Context, params autogen.CallbackParams err = json.NewDecoder(resp.Body).Decode(usr) if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } account, err := s.DBackend.GetAccountByGoogle(c.Request().Context(), usr.ID) @@ -311,25 +312,25 @@ func (s *Server) CallbackInpromptu(c echo.Context, params autogen.CallbackParams return ErrorAccNotFound(c) } logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } adminService, err := admin.NewService(c.Request().Context(), option.WithTokenSource(oauth2Config.TokenSource(c.Request().Context(), token))) if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } t, err := adminService.Users.Get(usr.ID).Projection("custom").CustomFieldMask("Education").ViewType("domain_public").Do() if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } edc := &education{} err = json.Unmarshal(t.CustomSchemas["Education"], edc) if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } account.FirstName = usr.FirstName @@ -341,13 +342,12 @@ func (s *Server) CallbackInpromptu(c echo.Context, params autogen.CallbackParams err = s.DBackend.UpdateAccount(c.Request().Context(), account) if err != nil { logrus.Error(err) - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne") } r, found := redirectCache.Get(params.State) if !found { - logrus.Error("no redirect found") - return Error500(c) + return c.Redirect(http.StatusPermanentRedirect, conf.ApiConfig.FrontendBasePath+"/borne/connected") } redirectCache.Delete(params.State) @@ -410,13 +410,13 @@ func (s *Server) ConnectGoogle(c echo.Context, p autogen.ConnectGoogleParams) er conf := config.GetConfig() // Get ?r= - redirect := p.R + rel := p.R // Check if it's a safe redirect (TODO: check if this is correct) - if strings.HasPrefix(redirect, conf.ApiConfig.FrontendBasePath) { - redirectCache.Set(redirect, true, cache.DefaultExpiration) + switch rel { + case "admin": + rel = conf.ApiConfig.FrontendBasePath + "/admin" } - // Init OAuth2 flow with Google oauth2Config := oauth2.Config{ ClientID: conf.OauthConfig.GoogleClientID, @@ -432,7 +432,7 @@ func (s *Server) ConnectGoogle(c echo.Context, p autogen.ConnectGoogleParams) er // state is not nonce state := uuid.NewString() - redirectCache.Set(state, redirect, cache.DefaultExpiration) + redirectCache.Set(state, rel, cache.DefaultExpiration) hostDomainOption := oauth2.SetAuthURLParam("hd", "telecomnancy.net") // Redirect to Google diff --git a/frontend/src/routes/auth/+page.svelte b/frontend/src/routes/auth/+page.svelte index c345820..d9ed1b4 100644 --- a/frontend/src/routes/auth/+page.svelte +++ b/frontend/src/routes/auth/+page.svelte @@ -1,14 +1,5 @@