mirror of
https://github.com/HeyPuter/puter.git
synced 2026-08-26 16:07:13 +00:00
dev: update deleteUser to use FS provider
The previous implementation of deleteUser was hard-coded to use the PuterFSProvider file system type's storage implementation specifically, even if a different filesystem type is mounted as root or for a particular user. This change was tested by creating a user, adding some fsentries, and then deleting that user. The following classes of filesystem entry were checked: - [x] user created directory (with contents) - [x] directory fsentry was deleted - [x] user created directory (empty) - [x] directory fsentry was deleted - [x] immutable directory - [x] directory fsentry was deleted - [x] user created file - [x] file fsentry was deleted - [x] file storage was deleted - [x] user created file in trash - [x] file fsentry was deleted - [x] file storage was deleted
This commit is contained in:
@@ -1151,17 +1151,12 @@ async function deleteUser(user_id){
|
||||
// delete all files from S3
|
||||
if(files !== null && files.length > 0){
|
||||
for(let i=0; i<files.length; i++){
|
||||
// init S3 SDK
|
||||
const svc_fs = Context.get('services').get('filesystem');
|
||||
const svc_mountpoint =
|
||||
Context.get('services').get('mountpoint');
|
||||
// NB: We use a hard-coded string to avoid circular dependency.
|
||||
//
|
||||
// TODO (xiaochen): what if the provider is not PuterFSProvider?
|
||||
const storage = svc_mountpoint.get_storage('PuterFSProvider');
|
||||
const op_delete = storage.create_delete();
|
||||
await op_delete.run({
|
||||
node: await svc_fs.node(new NodeUIDSelector(files[i].uuid))
|
||||
const node = await svc_fs.node(new NodeUIDSelector(files[i].uuid));
|
||||
|
||||
await node.provider.unlink({
|
||||
context: Context.get(),
|
||||
override_immutable: true,
|
||||
node,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -409,13 +409,13 @@ class PuterFSProvider extends putility.AdvancedBase {
|
||||
return node;
|
||||
}
|
||||
|
||||
async unlink({ context, node }) {
|
||||
async unlink({ context, node, options = {} }) {
|
||||
if ( await node.get('type') === TYPE_DIRECTORY ) {
|
||||
console.log(`\x1B[31;1m===N=====${await node.get('path')}=========\x1B[0m`);
|
||||
throw new APIError(409, 'Cannot unlink a directory.');
|
||||
}
|
||||
|
||||
await this.#rmnode({ context, node });
|
||||
await this.#rmnode({ context, node, options });
|
||||
}
|
||||
|
||||
async rmdir({ context, node, options = {} }) {
|
||||
@@ -442,12 +442,12 @@ class PuterFSProvider extends putility.AdvancedBase {
|
||||
await this.#rmnode({ context, node, options });
|
||||
}
|
||||
|
||||
async #rmnode({ node, options: _options }) {
|
||||
async #rmnode({ node, options }) {
|
||||
// Services
|
||||
const svc_size = this.#services.get('sizeService');
|
||||
const svc_fsEntry = this.#services.get('fsEntryService');
|
||||
|
||||
if ( await node.get('immutable') ) {
|
||||
if ( ! options.override_immutable && await node.get('immutable') ) {
|
||||
throw new APIError(403, 'File is immutable.');
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user