From 66a28457645c2eda16a71b9467bb400fa18a92b0 Mon Sep 17 00:00:00 2001 From: kekskurse Date: Thu, 26 Sep 2024 11:45:47 +0200 Subject: [PATCH] chore(easyAuth): redirect to last get request page --- easyauth.go | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/easyauth.go b/easyauth.go index f955173..65db334 100644 --- a/easyauth.go +++ b/easyauth.go @@ -27,23 +27,20 @@ func NewEasyAuth(client Auth) (EasyAuth, error) { func (e EasyAuth) GetUser(w http.ResponseWriter, r *http.Request) (AuthentikUser, bool, error) { if r.Method == http.MethodGet { - SetCookie(w, "url", r.URL.String(), time.Now().Add(1*time.Minute)) + setCookie(w, "url", r.URL.String(), time.Now().Add(1*time.Minute)) } - cookie, err := r.Cookie("jwt") + + cookieValue, err := getCookie(w, r, "jwt") if err != nil { - if errors.Is(err, http.ErrNoCookie) { - e.redirectAuth(w, r) - return AuthentikUser{}, false, nil - } return AuthentikUser{}, false, err } - if cookie.Value == "" { + if cookieValue == "" { e.redirectAuth(w, r) return AuthentikUser{}, false, nil } - parsedAccessToken, _ := jwt.ParseWithClaims(cookie.Value, &UserClaims{}, func(token *jwt.Token) (interface{}, error) { + parsedAccessToken, _ := jwt.ParseWithClaims(cookieValue, &UserClaims{}, func(token *jwt.Token) (interface{}, error) { return e.jwtSecret, nil }) @@ -90,15 +87,33 @@ func (e EasyAuth) AuthHTTPHandler(w http.ResponseWriter, r *http.Request) { panic(err) // TODO: Deal with error } - SetCookie(w, "jwt", jwtString, expired) + setCookie(w, "jwt", jwtString, expired) - _, err = w.Write([]byte("ok")) // TODO: Redirect to right page + redirectURL, err := getCookie(w, r, "url") if err != nil { panic(err) // TODO: Deal with error } + + if redirectURL == "" { + redirectURL = "/" + } + + http.Redirect(w, r, redirectURL, http.StatusTemporaryRedirect) } -func SetCookie(w http.ResponseWriter, name, value string, expired time.Time) { +func getCookie(w http.ResponseWriter, r *http.Request, name string) (string, error) { + cookie, err := r.Cookie(name) + if err != nil { + if errors.Is(err, http.ErrNoCookie) { + return "", nil + } + return "", err + } + + return cookie.Value, nil +} + +func setCookie(w http.ResponseWriter, name, value string, expired time.Time) { cookie := http.Cookie{} cookie.Name = name cookie.Value = value