mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-05-07 04:39:25 -05:00
[server][core] move GetSharedResources to users package
This commit is contained in:
@@ -41,7 +41,7 @@ func handleMyHomeRoute(c *gin.Context) {
|
||||
func createMySharedRouteHandler(a *app.App) func(*gin.Context) {
|
||||
return func(c *gin.Context) {
|
||||
user := auth.GetUser(c)
|
||||
shared, err := a.GetSharedResources(c.Request.Context(), user)
|
||||
shared, err := a.OpenUserManager(c.Request.Context()).GetSharedResources(user)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ func setupUserListCommand() *cobra.Command {
|
||||
Use: "list",
|
||||
Short: "List Users",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
users, err := common.App().OpenUserManager(context.Background()).ListUsers()
|
||||
users, err := common.App().OpenUserManager(context.Background()).AllUsers()
|
||||
if err != nil {
|
||||
logrus.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package app
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/shroff/phylum/server/internal/core/db"
|
||||
@@ -124,36 +123,3 @@ func (a App) OpenFileSystem(ctx context.Context, u user.User) fs.FileSystem {
|
||||
func (a App) OpenUserManager(ctx context.Context) user.Manager {
|
||||
return user.CreateManager(ctx, a.db)
|
||||
}
|
||||
|
||||
func (a App) GetSharedResources(ctx context.Context, u user.User) (result []fs.Resource, err error) {
|
||||
res, err := a.db.Queries.SharedResources(ctx, db.SharedResourcesParams{Username: u.Username, UserHome: u.Home})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
result = make([]fs.Resource, len(res))
|
||||
for i, r := range res {
|
||||
var deleted *time.Time
|
||||
if r.Deleted.Valid {
|
||||
deleted = &r.Deleted.Time
|
||||
}
|
||||
result[i] = fs.Resource{
|
||||
ID: r.ID,
|
||||
ParentID: r.Parent,
|
||||
Name: r.Name,
|
||||
Dir: r.Dir,
|
||||
Created: r.Created.Time,
|
||||
Modified: r.Modified.Time,
|
||||
Deleted: deleted,
|
||||
ContentSize: r.ContentSize,
|
||||
ContentType: r.ContentType,
|
||||
ContentSHA256: r.ContentSha256,
|
||||
Permissions: string(r.Permissions),
|
||||
// Not Needed
|
||||
// Path: "",
|
||||
// UserPermissions: 0,
|
||||
// InheritedPermissions: "",
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -2,46 +2,15 @@ package user
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/jackc/pgx/v5"
|
||||
"github.com/shroff/phylum/server/internal/core/db"
|
||||
"github.com/shroff/phylum/server/internal/core/errors"
|
||||
)
|
||||
|
||||
type Manager interface {
|
||||
WithDb(db *db.DbHandler) Manager
|
||||
|
||||
// create.go
|
||||
CreateUser(username, displayName, password string, root uuid.UUID) (User, error)
|
||||
|
||||
ListUsers() ([]User, 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)
|
||||
}
|
||||
|
||||
type manager struct {
|
||||
db *db.DbHandler
|
||||
ctx context.Context
|
||||
}
|
||||
|
||||
func CreateManager(ctx context.Context, db *db.DbHandler) Manager {
|
||||
return &manager{
|
||||
ctx: ctx,
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
||||
func (m manager) WithDb(db *db.DbHandler) Manager {
|
||||
return m.withDb(db)
|
||||
}
|
||||
@@ -52,38 +21,3 @@ func (m manager) withDb(db *db.DbHandler) manager {
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
||||
var ErrNotFound = errors.NewError(http.StatusNotFound, "user_not_found", "no such user")
|
||||
|
||||
func (m manager) ListUsers() ([]User, error) {
|
||||
results, err := m.db.ListUsers(m.ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
users := make([]User, len(results))
|
||||
for i, r := range results {
|
||||
users[i] = User{
|
||||
Username: r.Username,
|
||||
DisplayName: r.DisplayName,
|
||||
Root: r.Root,
|
||||
Home: r.Home,
|
||||
}
|
||||
}
|
||||
return users, nil
|
||||
}
|
||||
|
||||
func (m manager) UserByEmail(email string) (User, error) {
|
||||
result, err := m.db.UserByUsername(m.ctx, email)
|
||||
if err != nil {
|
||||
if errors.Is(err, pgx.ErrNoRows) {
|
||||
err = ErrNotFound
|
||||
}
|
||||
return User{}, err
|
||||
}
|
||||
return User{
|
||||
Username: result.Username,
|
||||
DisplayName: result.DisplayName,
|
||||
Root: result.Root,
|
||||
Home: result.Home,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/jackc/pgx/v5"
|
||||
"github.com/shroff/phylum/server/internal/core/errors"
|
||||
)
|
||||
|
||||
var ErrNotFound = errors.NewError(http.StatusNotFound, "user_not_found", "no such user")
|
||||
|
||||
func (m manager) AllUsers() ([]User, error) {
|
||||
results, err := m.db.ListUsers(m.ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
users := make([]User, len(results))
|
||||
for i, r := range results {
|
||||
users[i] = User{
|
||||
Username: r.Username,
|
||||
DisplayName: r.DisplayName,
|
||||
Root: r.Root,
|
||||
Home: r.Home,
|
||||
}
|
||||
}
|
||||
return users, nil
|
||||
}
|
||||
|
||||
func (m manager) UserByEmail(email string) (User, error) {
|
||||
result, err := m.db.UserByUsername(m.ctx, email)
|
||||
if err != nil {
|
||||
if errors.Is(err, pgx.ErrNoRows) {
|
||||
err = ErrNotFound
|
||||
}
|
||||
return User{}, err
|
||||
}
|
||||
return User{
|
||||
Username: result.Username,
|
||||
DisplayName: result.DisplayName,
|
||||
Root: result.Root,
|
||||
Home: result.Home,
|
||||
}, nil
|
||||
}
|
||||
@@ -1,6 +1,12 @@
|
||||
package user
|
||||
|
||||
import "github.com/google/uuid"
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/shroff/phylum/server/internal/core/db"
|
||||
"github.com/shroff/phylum/server/internal/core/fs"
|
||||
)
|
||||
|
||||
type User struct {
|
||||
Username string `json:"username"`
|
||||
@@ -8,3 +14,35 @@ type User struct {
|
||||
Root uuid.UUID `json:"root"`
|
||||
Home uuid.UUID `json:"home"`
|
||||
}
|
||||
|
||||
type Manager interface {
|
||||
// manager.go
|
||||
WithDb(db *db.DbHandler) Manager
|
||||
|
||||
// create.go
|
||||
CreateUser(username, displayName, password string, root uuid.UUID) (User, error)
|
||||
|
||||
// select.go
|
||||
AllUsers() ([]User, 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)
|
||||
|
||||
// user_lists.go
|
||||
GetSharedResources(u User) (result []fs.Resource, err error)
|
||||
}
|
||||
|
||||
func CreateManager(ctx context.Context, db *db.DbHandler) Manager {
|
||||
return &manager{
|
||||
ctx: ctx,
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/shroff/phylum/server/internal/core/db"
|
||||
"github.com/shroff/phylum/server/internal/core/fs"
|
||||
)
|
||||
|
||||
func (m manager) GetSharedResources(u User) (result []fs.Resource, err error) {
|
||||
// TODO: This doesn't take permissions into account. is this okay?
|
||||
res, err := m.db.Queries.SharedResources(m.ctx, db.SharedResourcesParams{Username: u.Username, UserHome: u.Home})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
result = make([]fs.Resource, len(res))
|
||||
for i, r := range res {
|
||||
var deleted *time.Time
|
||||
if r.Deleted.Valid {
|
||||
deleted = &r.Deleted.Time
|
||||
}
|
||||
result[i] = fs.Resource{
|
||||
ID: r.ID,
|
||||
ParentID: r.Parent,
|
||||
Name: r.Name,
|
||||
Dir: r.Dir,
|
||||
Created: r.Created.Time,
|
||||
Modified: r.Modified.Time,
|
||||
Deleted: deleted,
|
||||
ContentSize: r.ContentSize,
|
||||
ContentType: r.ContentType,
|
||||
ContentSHA256: r.ContentSha256,
|
||||
Permissions: string(r.Permissions),
|
||||
// Not Needed
|
||||
// Path: "",
|
||||
// UserPermissions: 0,
|
||||
// InheritedPermissions: "",
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user