diff --git a/auth/auth.go b/auth/auth.go index 4d0aca9..a99abdb 100644 --- a/auth/auth.go +++ b/auth/auth.go @@ -2,59 +2,53 @@ package auth import ( "github.com/gin-gonic/gin" - "github.com/google/uuid" - "github.com/markbates/goth" "github.com/markbates/goth/gothic" "log" "net/http" + "sponsorahacker/config" ) func Login(c *gin.Context) { providerName := c.Param("provider") - - // Begin the authentication process - provider, err := goth.GetProvider(providerName) - if err != nil { - c.String(http.StatusInternalServerError, "Error getting provider: %s", err) - return - } - - state := uuid.New().String() - - session, err := provider.BeginAuth(state) - if err != nil { - c.String(http.StatusInternalServerError, "Error creating auth url: %s", err) - return - } - - url, err := session.GetAuthURL() - if err != nil { - c.String(http.StatusInternalServerError, "Error getting auth url: %s", err) - } - - c.Redirect(http.StatusTemporaryRedirect, url) + q := c.Request.URL.Query() + q.Add("provider", providerName) + c.Request.URL.RawQuery = q.Encode() + gothic.BeginAuthHandler(c.Writer, c.Request) } func Callback(c *gin.Context) { - sessionStore, err := NewSessionManager("libsql://sponsorahackersession-stephanie-gredell.turso.io") - + sessionStore, err := NewSessionManager(config.GetEnvVar("DATABASE_URL")) if err != nil { panic(err) } user, err := gothic.CompleteUserAuth(c.Writer, c.Request) + if err != nil { log.Println("Error during user authentication:", err) - c.Redirect(http.StatusTemporaryRedirect, "/") + c.Redirect(http.StatusTemporaryRedirect, "/login") return } + c.SetCookie("user_id", user.UserID, 3600, "/", "localhost", false, true) + err = sessionStore.SetSession(user.Name, c) + if err != nil { + log.Println("failed to set session:", err) + } // For now, redirect to profile page after successful login c.Redirect(http.StatusTemporaryRedirect, "/") } func Logout(c *gin.Context) { + sessionStore, err := NewSessionManager(config.GetEnvVar("DATABASE_URL")) + if err != nil { + panic(err) + } c.SetCookie("user_id", "", -1, "/", "localhost", false, true) + err = sessionStore.DeleteSession(c) + if err != nil { + log.Println("failed to delete session:", err) + } c.Redirect(http.StatusTemporaryRedirect, "/") }