summaryrefslogtreecommitdiff
path: root/server/guest/handler.go
diff options
context:
space:
mode:
authorMichael Hunteman <huntemanmt@gmail.com>2025-02-02 18:57:30 -0600
committerMichael Hunteman <huntemanmt@gmail.com>2025-02-02 19:04:24 -0600
commit5fffbba3b851f6cebfd0e616bef2ff6f0c520c3d (patch)
treefe8b7a5ba77f83f7b82753d5cc58cba51596da2b /server/guest/handler.go
parent23bcef02052c45089358d22d0645ceac858de3bb (diff)
Fix error handlingHEADmaster
Diffstat (limited to 'server/guest/handler.go')
-rw-r--r--server/guest/handler.go55
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