mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-01-21 03:29:55 -06:00
74 lines
1.6 KiB
Go
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)
|
|
}
|