mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-01-08 12:40:59 -06:00
Update resource owner
This commit is contained in:
@@ -28,6 +28,7 @@ type FileSystem interface {
|
||||
UpdateName(r Resource, name string) error
|
||||
UpdateParent(r Resource, parent uuid.UUID) error
|
||||
UpdatePermissions(r Resource, userID int32, permission int32) error
|
||||
UpdateOwner(r Resource, userID int32) error
|
||||
}
|
||||
|
||||
var rootUUID = uuid.UUID{}
|
||||
@@ -275,3 +276,14 @@ func (f filesystem) UpdatePermissions(r Resource, userID int32, permission int32
|
||||
Permission: permission,
|
||||
})
|
||||
}
|
||||
|
||||
func (f filesystem) UpdateOwner(r Resource, userID int32) error {
|
||||
if r.Owner() != f.user {
|
||||
return ErrInsufficientPermissions
|
||||
}
|
||||
|
||||
return f.db.Queries().UpdateResourceOwner(f.ctx, sql.UpdateResourceOwnerParams{
|
||||
ID: r.ID(),
|
||||
Owner: userID,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ func setupResourceCommand() *cobra.Command {
|
||||
setupResourceMkdirCommand(),
|
||||
setupResourceRmCommand(),
|
||||
setupResourceLsCommand(),
|
||||
setupResourceChownCommand(),
|
||||
}...)
|
||||
return cmd
|
||||
}
|
||||
@@ -177,6 +178,76 @@ func setupResourceLsCommand() *cobra.Command {
|
||||
return &cmd
|
||||
}
|
||||
|
||||
func setupResourceChownCommand() *cobra.Command {
|
||||
cmd := cobra.Command{
|
||||
Use: "chown user <path | uuid>",
|
||||
Short: "Change Resource Owner",
|
||||
Args: cobra.ExactArgs(2),
|
||||
PreRun: func(cmd *cobra.Command, args []string) {
|
||||
readUserIDFromFlagsreadUsername(cmd)
|
||||
},
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
username := args[0]
|
||||
var owner int32
|
||||
if user, err := app.Default.UserByUsername(context.Background(), username); err != nil {
|
||||
logrus.Fatal(err)
|
||||
} else {
|
||||
owner = user.ID()
|
||||
}
|
||||
|
||||
path := args[1]
|
||||
fs, err := app.Default.OpenFileSystem(context.Background(), userID)
|
||||
if err != nil {
|
||||
logrus.Fatal(err)
|
||||
}
|
||||
var r core.Resource
|
||||
if path[0] != '/' {
|
||||
var id uuid.UUID
|
||||
var err error
|
||||
if id, err = uuid.Parse(path); err != nil {
|
||||
logrus.Fatal(err)
|
||||
}
|
||||
|
||||
if r, err = fs.ResourceByID(id); err != nil {
|
||||
if errors.Is(err, iofs.ErrNotExist) {
|
||||
logrus.Fatal("Resource not found: " + path)
|
||||
} else {
|
||||
logrus.Fatal(err.Error())
|
||||
}
|
||||
}
|
||||
} else {
|
||||
var err error
|
||||
if r, err = fs.ResourceByPath(path); err != nil {
|
||||
if errors.Is(err, iofs.ErrNotExist) {
|
||||
logrus.Fatal("Resource not found: " + path)
|
||||
} else {
|
||||
logrus.Fatal(err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
if err := fs.UpdateOwner(r, owner); err != nil {
|
||||
logrus.Fatal(err)
|
||||
}
|
||||
|
||||
// if r.IsDir() {
|
||||
// if recursive, err := cmd.Flags().GetBool("recursive"); err != nil {
|
||||
// logrus.Fatal("Must use -r to delete collections")
|
||||
// } else {
|
||||
// if recursive {
|
||||
// } else {
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
},
|
||||
}
|
||||
// flags := cmd.Flags()
|
||||
// flags.BoolP("recursive", "r", false, "Recursively change ownership")
|
||||
setupUsernameFlags(&cmd)
|
||||
|
||||
return &cmd
|
||||
}
|
||||
|
||||
func readUserIDFromFlagsreadUsername(cmd *cobra.Command) {
|
||||
if value, err := cmd.Flags().GetInt32("user"); err != nil {
|
||||
logrus.Fatal(err)
|
||||
|
||||
@@ -182,6 +182,24 @@ func (q *Queries) UpdateResourceName(ctx context.Context, arg UpdateResourceName
|
||||
return err
|
||||
}
|
||||
|
||||
const updateResourceOwner = `-- name: UpdateResourceOwner :exec
|
||||
UPDATE resources
|
||||
SET
|
||||
owner = $1::int,
|
||||
modified = NOW()
|
||||
WHERE id = $2::uuid
|
||||
`
|
||||
|
||||
type UpdateResourceOwnerParams struct {
|
||||
Owner int32
|
||||
ID uuid.UUID
|
||||
}
|
||||
|
||||
func (q *Queries) UpdateResourceOwner(ctx context.Context, arg UpdateResourceOwnerParams) error {
|
||||
_, err := q.db.Exec(ctx, updateResourceOwner, arg.Owner, arg.ID)
|
||||
return err
|
||||
}
|
||||
|
||||
const updateResourceParent = `-- name: UpdateResourceParent :exec
|
||||
UPDATE resources
|
||||
SET
|
||||
|
||||
@@ -29,6 +29,13 @@ SET
|
||||
modified = NOW()
|
||||
WHERE id = @id::uuid;
|
||||
|
||||
-- name: UpdateResourceOwner :exec
|
||||
UPDATE resources
|
||||
SET
|
||||
owner = @owner::int,
|
||||
modified = NOW()
|
||||
WHERE id = @id::uuid;
|
||||
|
||||
-- name: UpdateResourceName :exec
|
||||
UPDATE resources
|
||||
SET
|
||||
|
||||
Reference in New Issue
Block a user