Add role to users
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
Torjus Håkestad 2022-01-20 01:19:32 +01:00
parent 790cc43949
commit ce5584ba7e
2 changed files with 28 additions and 9 deletions

View File

@ -2,9 +2,18 @@ package gpaste
import "golang.org/x/crypto/bcrypt" import "golang.org/x/crypto/bcrypt"
type Role string
const (
RoleUnset Role = ""
RoleUser Role = "user"
RoleAdmin Role = "admin"
)
type User struct { type User struct {
Username string `json:"username"` Username string `json:"username"`
HashedPassword []byte `json:"hashed_password"` HashedPassword []byte `json:"hashed_password"`
Roles []Role `json:"roles"`
} }
type UserStore interface { type UserStore interface {

View File

@ -4,6 +4,7 @@ import (
"testing" "testing"
"git.t-juice.club/torjus/gpaste" "git.t-juice.club/torjus/gpaste"
"github.com/google/go-cmp/cmp"
) )
func RunUserStoreTest(newFunc func() (func(), gpaste.UserStore), t *testing.T) { func RunUserStoreTest(newFunc func() (func(), gpaste.UserStore), t *testing.T) {
@ -11,31 +12,40 @@ func RunUserStoreTest(newFunc func() (func(), gpaste.UserStore), t *testing.T) {
cleanup, s := newFunc() cleanup, s := newFunc()
t.Cleanup(cleanup) t.Cleanup(cleanup)
userMap := make(map[string]string) userMap := make(map[string]*gpaste.User)
passwordMap := make(map[string]string)
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
userMap[randomString(8)] = randomString(16) username := randomString(8)
} password := randomString(16)
passwordMap[username] = password
for k, v := range userMap {
user := &gpaste.User{ user := &gpaste.User{
Username: k, Username: username,
Roles: []gpaste.Role{gpaste.RoleAdmin},
} }
if err := user.SetPassword(v); err != nil { if err := user.SetPassword(password); err != nil {
t.Fatalf("Error setting password: %s", err) t.Fatalf("Error setting password: %s", err)
} }
userMap[username] = user
}
for _, user := range userMap {
if err := s.Store(user); err != nil { if err := s.Store(user); err != nil {
t.Fatalf("Error storing user: %s", err) t.Fatalf("Error storing user: %s", err)
} }
} }
for k, v := range userMap { for k := range userMap {
user, err := s.Get(k) user, err := s.Get(k)
if err != nil { if err != nil {
t.Errorf("Error getting user: %s", err) t.Errorf("Error getting user: %s", err)
} }
if err := user.ValidatePassword(v); err != nil { if err := user.ValidatePassword(passwordMap[user.Username]); err != nil {
t.Errorf("Error verifying password: %s", err) t.Errorf("Error verifying password: %s", err)
} }
if !cmp.Equal(user, userMap[k]) {
t.Errorf("User mismatch: %s", cmp.Diff(user, userMap[k]))
}
} }
}) })
} }