summaryrefslogtreecommitdiff
path: root/server/admin
diff options
context:
space:
mode:
Diffstat (limited to 'server/admin')
-rw-r--r--server/admin/handler.go41
-rw-r--r--server/admin/models.go15
-rw-r--r--server/admin/store.go15
3 files changed, 33 insertions, 38 deletions
diff --git a/server/admin/handler.go b/server/admin/handler.go
index b8f1d7f..2ae0b0d 100644
--- a/server/admin/handler.go
+++ b/server/admin/handler.go
@@ -12,15 +12,15 @@ import (
)
type AdminHandler struct {
- adminStore adminStore
+ adminStore AdminStore
guestStore guest.GuestStore
}
-type adminStore interface {
- Find(admin Admin) (Admin, error)
+type AdminStore interface {
+ Find(Admin) (Admin, error)
}
-func NewAdminHandler(a adminStore, g guest.GuestStore) *AdminHandler {
+func NewAdminHandler(a AdminStore, g guest.GuestStore) *AdminHandler {
return &AdminHandler{a, g}
}
@@ -45,21 +45,19 @@ func (a *AdminHandler) handleLogIn(w http.ResponseWriter, r *http.Request) {
}
func (a *AdminHandler) logIn(r *http.Request) ([]byte, *errors.AppError) {
- requestAdmin, err := a.decodeCredentials(r)
+ admin, err := a.decodeCredentials(r)
if err != nil {
return nil, errors.NewAppError(http.StatusBadRequest, err.Error())
}
- _, err = a.adminStore.Find(requestAdmin)
+ _, err = a.adminStore.Find(admin)
if err != nil {
return nil, errors.NewAppError(http.StatusUnauthorized, err.Error())
}
- expirationTime := a.setExpirationTime()
- claims := a.createClaims(requestAdmin, expirationTime)
key, err := a.readKey()
if err != nil {
return nil, errors.NewAppError(http.StatusInternalServerError, err.Error())
}
- token, err := a.createToken(claims, key)
+ token, err := a.newToken(NewClaims(admin, a.setExpirationTime()), key)
if err != nil {
return nil, errors.NewAppError(http.StatusInternalServerError, err.Error())
}
@@ -85,31 +83,14 @@ func (a *AdminHandler) setExpirationTime() time.Time {
return time.Now().Add(15 * time.Minute)
}
-func (a *AdminHandler) createClaims(admin Admin, expirationTime time.Time) *Claims {
- return &Claims{
- admin,
- jwt.RegisteredClaims{
- ExpiresAt: jwt.NewNumericDate(expirationTime),
- },
- }
-}
-
func (a *AdminHandler) readKey() ([]byte, error) {
return os.ReadFile(os.Getenv("ADMIN_KEY"))
}
-func (a *AdminHandler) createToken(claims *Claims, key []byte) (string, error) {
- token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
- return token.SignedString(key)
-}
-
-func (a *AdminHandler) marshalResponse(guests []guest.Guest,
- token string) ([]byte, error) {
- loginResponse := a.createLoginResponse(guests, token)
- return json.Marshal(loginResponse)
+func (a *AdminHandler) newToken(claims *Claims, key []byte) (string, error) {
+ return jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(key)
}
-func (a *AdminHandler) createLoginResponse(guests []guest.Guest,
- token string) *Login {
- return &Login{guests, token}
+func (a *AdminHandler) marshalResponse(guests []guest.Guest, token string) ([]byte, error) {
+ return json.Marshal(NewLogin(guests, token))
}
diff --git a/server/admin/models.go b/server/admin/models.go
index 275f617..524099b 100644
--- a/server/admin/models.go
+++ b/server/admin/models.go
@@ -1,6 +1,8 @@
package admin
import (
+ "time"
+
"git.huntm.net/wedding/server/guest"
"github.com/golang-jwt/jwt/v5"
)
@@ -20,3 +22,16 @@ type Login struct {
Guests []guest.Guest `json:"guests"`
Token string `json:"token"`
}
+
+func NewClaims(admin Admin, expirationTime time.Time) *Claims {
+ return &Claims{
+ admin,
+ jwt.RegisteredClaims{
+ ExpiresAt: jwt.NewNumericDate(expirationTime),
+ },
+ }
+}
+
+func NewLogin(guests []guest.Guest, token string) *Login {
+ return &Login{guests, token}
+}
diff --git a/server/admin/store.go b/server/admin/store.go
index 3322b35..9a7f639 100644
--- a/server/admin/store.go
+++ b/server/admin/store.go
@@ -19,14 +19,13 @@ func NewStore(database *pgxpool.Pool) *Store {
}
}
-func (store Store) Find(requestAdmin Admin) (Admin, error) {
- adminRows, err := store.database.Query(context.Background(),
- "select * from admin")
+func (s *Store) Find(requestAdmin Admin) (Admin, error) {
+ adminRows, err := s.database.Query(context.Background(), "select * from admin")
if err != nil {
return Admin{}, err
}
defer adminRows.Close()
- admin, found := createAdmin(requestAdmin, adminRows)
+ admin, found := s.newAdmin(requestAdmin, adminRows)
if found {
return admin, nil
@@ -34,7 +33,7 @@ func (store Store) Find(requestAdmin Admin) (Admin, error) {
return Admin{}, errors.New("invalid username or password")
}
-func createAdmin(requestAdmin Admin, adminRows pgx.Rows) (Admin, bool) {
+func (s *Store) newAdmin(requestAdmin Admin, adminRows pgx.Rows) (Admin, bool) {
var databaseAdmin Admin
for adminRows.Next() {
err := adminRows.Scan(&databaseAdmin.Id, &databaseAdmin.Username, &databaseAdmin.Password)
@@ -42,13 +41,13 @@ func createAdmin(requestAdmin Admin, adminRows pgx.Rows) (Admin, bool) {
return Admin{}, false
}
if databaseAdmin.Username == requestAdmin.Username &&
- verifyPassword(databaseAdmin.Password, requestAdmin.Password) {
+ s.verifyPassword(databaseAdmin.Password, requestAdmin.Password) {
return databaseAdmin, true
}
}
return Admin{}, false
}
-func verifyPassword(hashedPassword string, password string) bool {
- return bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(password)) == nil
+func (s *Store) verifyPassword(hash string, password string) bool {
+ return bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) == nil
}