diff options
author | Michael Hunteman <huntemanmt@gmail.com> | 2025-02-02 18:57:30 -0600 |
---|---|---|
committer | Michael Hunteman <huntemanmt@gmail.com> | 2025-02-02 19:04:24 -0600 |
commit | 5fffbba3b851f6cebfd0e616bef2ff6f0c520c3d (patch) | |
tree | fe8b7a5ba77f83f7b82753d5cc58cba51596da2b /server/guest/handler.go | |
parent | 23bcef02052c45089358d22d0645ceac858de3bb (diff) |
Diffstat (limited to 'server/guest/handler.go')
-rw-r--r-- | server/guest/handler.go | 55 |
1 files changed, 14 insertions, 41 deletions
diff --git a/server/guest/handler.go b/server/guest/handler.go index f596b05..86ffa84 100644 --- a/server/guest/handler.go +++ b/server/guest/handler.go @@ -21,11 +21,11 @@ type GuestHandler struct { } type GuestStore interface { - Find(name Name) (Guest, error) + Find(Name) (Guest, error) Get() ([]Guest, error) - Add(guest Guest) error - Update(guest Guest) error - Delete(id string) error + Add(Guest) error + Update(Guest) error + Delete(string) error } func NewGuestHandler(s GuestStore) *GuestHandler { @@ -87,9 +87,8 @@ func (g *GuestHandler) handlePost(w http.ResponseWriter, r *http.Request) { } } -func (g *GuestHandler) handleDelete(w http.ResponseWriter, - request *http.Request) { - if err := g.deleteGuest(request); err != nil { +func (g *GuestHandler) handleDelete(w http.ResponseWriter, r *http.Request) { + if err := g.deleteGuest(r); err != nil { http.Error(w, string(err.Message), err.Status) } else { w.WriteHeader(http.StatusOK) @@ -105,13 +104,11 @@ func (g *GuestHandler) logIn(r *http.Request) ([]byte, *errors.AppError) { if err != nil { return nil, errors.NewAppError(http.StatusUnauthorized, err.Error()) } - expirationTime := g.setExpirationTime() - claims := g.createClaims(name, expirationTime) key, err := g.readGuestKey() if err != nil { return nil, errors.NewAppError(http.StatusInternalServerError, err.Error()) } - token, err := g.createToken(claims, key) + token, err := g.newToken(NewClaims(name, g.setExpirationTime()), key) if err != nil { return nil, errors.NewAppError(http.StatusInternalServerError, err.Error()) } @@ -133,15 +130,6 @@ func (g *GuestHandler) setExpirationTime() time.Time { return time.Now().Add(15 * time.Minute) } -func (g *GuestHandler) createClaims(name Name, time time.Time) *Claims { - return &Claims{ - Name: name, - RegisteredClaims: jwt.RegisteredClaims{ - ExpiresAt: jwt.NewNumericDate(time), - }, - } -} - func (g *GuestHandler) readGuestKey() ([]byte, error) { return os.ReadFile(os.Getenv("GUEST_KEY")) } @@ -150,21 +138,12 @@ func (g *GuestHandler) readAdminKey() ([]byte, error) { return os.ReadFile(os.Getenv("ADMIN_KEY")) } -func (g *GuestHandler) createToken(claims *Claims, key []byte) (string, error) { - token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) - return token.SignedString(key) +func (g *GuestHandler) newToken(claims *Claims, key []byte) (string, error) { + return jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(key) } func (g *GuestHandler) marshalResponse(guest Guest, token string) ([]byte, error) { - loginResponse := g.createLoginResponse(guest, token) - return json.Marshal(loginResponse) -} - -func (g *GuestHandler) createLoginResponse(guest Guest, token string) *Login { - return &Login{ - Guest: guest, - Token: token, - } + return json.Marshal(NewLogin(guest, token)) } func (g *GuestHandler) putGuest(r *http.Request) *errors.AppError { @@ -189,9 +168,7 @@ func (g *GuestHandler) putGuest(r *http.Request) *errors.AppError { } func (g *GuestHandler) validateToken(r *http.Request, key []byte) *errors.AppError { - authorizationHeader := g.getToken(r) - claims := g.newClaims() - token, err := g.parseWithClaims(authorizationHeader, claims, key) + token, err := g.parseWithClaims(g.getToken(r), g.newClaims(), key) if err != nil { if err == jwt.ErrSignatureInvalid { return errors.NewAppError(http.StatusUnauthorized, err.Error()) @@ -212,16 +189,14 @@ func (g *GuestHandler) newClaims() *Claims { return &Claims{} } -func (g *GuestHandler) parseWithClaims(token string, claims *Claims, - key []byte) (*jwt.Token, error) { +func (g *GuestHandler) parseWithClaims(token string, claims *Claims, key []byte) (*jwt.Token, error) { return jwt.ParseWithClaims(token, claims, func(token *jwt.Token) (any, error) { return key, nil }) } func (g *GuestHandler) findId(r *http.Request) bool { - matches := guestIdRegex.FindStringSubmatch(r.URL.Path) - return len(matches) < 2 + return len(guestIdRegex.FindStringSubmatch(r.URL.Path)) < 2 } func (g *GuestHandler) decodeGuest(r *http.Request) (Guest, error) { @@ -295,9 +270,7 @@ func (g *GuestHandler) deleteGuest(r *http.Request) *errors.AppError { if g.findId(r) { return errors.NewAppError(http.StatusNotFound, "cannot delete guest that does not exist") } - guestId := getId(r) - err = g.store.Delete(guestId) - if err != nil { + if err := g.store.Delete(getId(r)); err != nil { return errors.NewAppError(http.StatusInternalServerError, err.Error()) } return nil |