mirror of
https://github.com/SecurityBrewery/catalyst.git
synced 2026-01-12 17:21:23 +01:00
refactor: remove pocketbase (#1138)
This commit is contained in:
46
app/auth/usercontext/usercontext.go
Normal file
46
app/auth/usercontext/usercontext.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package usercontext
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"github.com/SecurityBrewery/catalyst/app/database/sqlc"
|
||||
)
|
||||
|
||||
type userKey struct{}
|
||||
|
||||
func UserRequest(r *http.Request, user *sqlc.User) *http.Request {
|
||||
return r.WithContext(UserContext(r.Context(), user))
|
||||
}
|
||||
|
||||
func UserContext(ctx context.Context, user *sqlc.User) context.Context {
|
||||
return context.WithValue(ctx, userKey{}, user)
|
||||
}
|
||||
|
||||
func UserFromContext(ctx context.Context) (*sqlc.User, bool) {
|
||||
user, ok := ctx.Value(userKey{}).(*sqlc.User)
|
||||
if !ok {
|
||||
return nil, false
|
||||
}
|
||||
|
||||
return user, true
|
||||
}
|
||||
|
||||
type permissionKey struct{}
|
||||
|
||||
func PermissionRequest(r *http.Request, permissions []string) *http.Request {
|
||||
return r.WithContext(PermissionContext(r.Context(), permissions))
|
||||
}
|
||||
|
||||
func PermissionContext(ctx context.Context, permissions []string) context.Context {
|
||||
return context.WithValue(ctx, permissionKey{}, permissions)
|
||||
}
|
||||
|
||||
func PermissionFromContext(ctx context.Context) ([]string, bool) {
|
||||
permissions, ok := ctx.Value(permissionKey{}).([]string)
|
||||
if !ok {
|
||||
return nil, false
|
||||
}
|
||||
|
||||
return permissions, true
|
||||
}
|
||||
116
app/auth/usercontext/usercontext_test.go
Normal file
116
app/auth/usercontext/usercontext_test.go
Normal file
@@ -0,0 +1,116 @@
|
||||
package usercontext
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/SecurityBrewery/catalyst/app/database/sqlc"
|
||||
)
|
||||
|
||||
func TestPermissionContext(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
user *sqlc.User
|
||||
permissions []string
|
||||
wantPerms []string
|
||||
wantOk bool
|
||||
}{
|
||||
{
|
||||
name: "Set and get permissions",
|
||||
permissions: []string{"ticket:read", "ticket:write"},
|
||||
wantPerms: []string{"ticket:read", "ticket:write"},
|
||||
wantOk: true,
|
||||
},
|
||||
{
|
||||
name: "No permissions set",
|
||||
wantPerms: nil,
|
||||
wantOk: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// Test context functions
|
||||
ctx := PermissionContext(t.Context(), tt.permissions)
|
||||
gotPerms, gotOk := PermissionFromContext(ctx)
|
||||
|
||||
if !reflect.DeepEqual(gotPerms, tt.wantPerms) {
|
||||
t.Errorf("PermissionFromContext() got perms = %v, want %v", gotPerms, tt.wantPerms)
|
||||
}
|
||||
|
||||
if gotOk != tt.wantOk {
|
||||
t.Errorf("PermissionFromContext() got ok = %v, want %v", gotOk, tt.wantOk)
|
||||
}
|
||||
|
||||
// Test request functions
|
||||
req := &http.Request{}
|
||||
req = PermissionRequest(req, tt.permissions)
|
||||
gotPerms, gotOk = PermissionFromContext(req.Context())
|
||||
|
||||
if !reflect.DeepEqual(gotPerms, tt.wantPerms) {
|
||||
t.Errorf("PermissionFromContext() got perms = %v, want %v", gotPerms, tt.wantPerms)
|
||||
}
|
||||
|
||||
if gotOk != tt.wantOk {
|
||||
t.Errorf("PermissionFromContext() got ok = %v, want %v", gotOk, tt.wantOk)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestUserContext(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
user *sqlc.User
|
||||
wantOk bool
|
||||
}{
|
||||
{
|
||||
name: "Set and get user",
|
||||
user: &sqlc.User{ID: "test-user"},
|
||||
wantOk: true,
|
||||
},
|
||||
{
|
||||
name: "No user set",
|
||||
user: nil,
|
||||
wantOk: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// Test context functions
|
||||
ctx := UserContext(t.Context(), tt.user)
|
||||
gotUser, gotOk := UserFromContext(ctx)
|
||||
|
||||
if !reflect.DeepEqual(gotUser, tt.user) {
|
||||
t.Errorf("UserFromContext() got user = %v, want %v", gotUser, tt.user)
|
||||
}
|
||||
|
||||
if gotOk != tt.wantOk {
|
||||
t.Errorf("UserFromContext() got ok = %v, want %v", gotOk, tt.wantOk)
|
||||
}
|
||||
|
||||
// Test request functions
|
||||
req := &http.Request{}
|
||||
req = UserRequest(req, tt.user)
|
||||
gotUser, gotOk = UserFromContext(req.Context())
|
||||
|
||||
if !reflect.DeepEqual(gotUser, tt.user) {
|
||||
t.Errorf("UserFromContext() got user = %v, want %v", gotUser, tt.user)
|
||||
}
|
||||
|
||||
if gotOk != tt.wantOk {
|
||||
t.Errorf("UserFromContext() got ok = %v, want %v", gotOk, tt.wantOk)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user