diff --git a/cmd/web-app/handlers/signup.go b/cmd/web-app/handlers/signup.go index 023ec4a..37e0024 100644 --- a/cmd/web-app/handlers/signup.go +++ b/cmd/web-app/handlers/signup.go @@ -74,7 +74,7 @@ func (h *Signup) Step1(ctx context.Context, w http.ResponseWriter, r *http.Reque } // Add the token to the users session. - err = handleSessionToken(ctx, w, r, token) + err = handleSessionToken(ctx, h.MasterDB, w, r, token) if err != nil { return err } diff --git a/cmd/web-app/handlers/user.go b/cmd/web-app/handlers/user.go index d398a64..b60003e 100644 --- a/cmd/web-app/handlers/user.go +++ b/cmd/web-app/handlers/user.go @@ -78,7 +78,7 @@ func (h *User) Login(ctx context.Context, w http.ResponseWriter, r *http.Request token, err := user.Authenticate(ctx, h.MasterDB, h.Authenticator, req.Email, req.Password, sessionTTL, ctxValues.Now) if err != nil { switch errors.Cause(err) { - case account.ErrForbidden: + case user.ErrForbidden: return web.RespondError(ctx, w, weberror.NewError(ctx, err, http.StatusForbidden)) default: if verr, ok := weberror.NewValidationError(ctx, err); ok { @@ -91,7 +91,7 @@ func (h *User) Login(ctx context.Context, w http.ResponseWriter, r *http.Request } // Add the token to the users session. - err = handleSessionToken(ctx, w, r, token) + err = handleSessionToken(ctx, h.MasterDB, w, r, token) if err != nil { return err } @@ -117,11 +117,21 @@ func (h *User) Login(ctx context.Context, w http.ResponseWriter, r *http.Request } // handleSessionToken persists the access token to the session for request authentication. -func handleSessionToken(ctx context.Context, w http.ResponseWriter, r *http.Request, token user.Token) error { +func handleSessionToken(ctx context.Context, db *sqlx.DB, w http.ResponseWriter, r *http.Request, token user.Token) error { if token.AccessToken == "" { return errors.New("accessToken is required.") } + usr, err := user.Read(ctx, auth.Claims{}, db, token.UserID, false ) + if err != nil { + return err + } + + acc, err := account.Read(ctx, auth.Claims{},db, token.AccountID, false ) + if err != nil { + return err + } + sess := webcontext.ContextSession(ctx) if sess.IsNew { @@ -134,7 +144,7 @@ func handleSessionToken(ctx context.Context, w http.ResponseWriter, r *http.Requ HttpOnly: false, } - sess = webcontext.SessionWithAccessToken(sess, token.AccessToken) + sess = webcontext.SessionInit(sess, token.AccessToken, usr.Response(ctx), acc.Response(ctx)) if err := sess.Save(r, w); err != nil { return err @@ -149,7 +159,7 @@ func (h *User) Logout(ctx context.Context, w http.ResponseWriter, r *http.Reques sess := webcontext.ContextSession(ctx) // Set the access token to empty to logout the user. - sess = webcontext.SessionWithAccessToken(sess, "") + sess = webcontext.SessionDestroy(sess) if err := sess.Save(r, w); err != nil { return err @@ -293,7 +303,7 @@ func (h *User) ResetConfirm(ctx context.Context, w http.ResponseWriter, r *http. } // Add the token to the users session. - err = handleSessionToken(ctx, w, r, token) + err = handleSessionToken(ctx, h.MasterDB, w, r, token) if err != nil { return err } diff --git a/cmd/web-app/main.go b/cmd/web-app/main.go index 01f13ac..b10069d 100644 --- a/cmd/web-app/main.go +++ b/cmd/web-app/main.go @@ -6,7 +6,9 @@ import ( "encoding/json" "expvar" "fmt" + "geeks-accelerator/oss/saas-starter-kit/internal/account" "geeks-accelerator/oss/saas-starter-kit/internal/platform/notify" + "geeks-accelerator/oss/saas-starter-kit/internal/user" "gopkg.in/gomail.v2" "html/template" "log" @@ -674,6 +676,23 @@ func main() { return fmt.Sprintf("%+v", err) }, + "ContextUser": func(ctx context.Context) *user.UserResponse { + sess := webcontext.ContextSession(ctx) + v, _ := webcontext.SessionUser(sess) + + if u, ok := v.(*user.UserResponse); ok { + return u + } + return nil + }, + "ContextAccount": func(ctx context.Context) *account.AccountResponse { + sess := webcontext.ContextSession(ctx) + v, _ := webcontext.SessionAccount(sess) + if acc, ok := v.(*account.AccountResponse); ok { + return acc + } + return nil + }, } imgUrlFormatter := staticUrlFormatter diff --git a/cmd/web-app/templates/partials/topbar.tmpl b/cmd/web-app/templates/partials/topbar.tmpl index aab71d2..fb37835 100644 --- a/cmd/web-app/templates/partials/topbar.tmpl +++ b/cmd/web-app/templates/partials/topbar.tmpl @@ -154,25 +154,52 @@