Files
phylum/server/internal/core/user/user.go
2025-04-04 23:22:52 +05:30

74 lines
1.6 KiB
Go

package user
import (
"context"
"time"
"github.com/google/uuid"
"github.com/jackc/pgx/v5"
"github.com/shroff/phylum/server/internal/core/fs"
)
type BasicUser struct {
Username string
DisplayName string
}
type User struct {
BasicUser
PasswordHash string
Root uuid.UUID
Home uuid.UUID
Permissions int32
}
func scanBasicUser(row pgx.CollectableRow) (BasicUser, error) {
var u BasicUser
err := row.Scan(
&u.Username,
&u.DisplayName,
)
return u, err
}
func scanUser(row pgx.CollectableRow) (User, error) {
var u User
err := row.Scan(
&u.Username,
&u.DisplayName,
&u.PasswordHash,
&u.Root,
&u.Home,
&u.Permissions,
)
return u, err
}
func (u User) OpenFileSystem(ctx context.Context) fs.FileSystem {
return fs.Open(ctx, u.Username, u.Root, u.Permissions&PermissionAllFiles != 0)
}
type Manager interface {
// create.go
CreateUser(username, displayName, password string, root uuid.UUID) (User, error)
// select.go
ListUsers(since *time.Time) ([]BasicUser, error)
UserByEmail(email string) (User, error)
// update.go
UpdateUserRoot(user User, root uuid.UUID) error
UpdateUserHome(user User, home uuid.UUID) error
UpdateUserDisplayName(user User, displayName string) error
// auth.go
VerifyUserPassword(email, password string) (User, error)
CreateAccessToken(username string) (string, error)
ReadAccessToken(accessToken string) (User, error)
// bookmarks.go
AddBookmark(u User, resource fs.Resource, name string) (Bookmark, error)
RemoveBookmark(u User, id uuid.UUID) error
ListBookmarks(u User) ([]Bookmark, error)
}