Skip to content

Commit 04808c9

Browse files
committed
file DELETE support
1 parent 8d89838 commit 04808c9

File tree

4 files changed

+52
-0
lines changed

4 files changed

+52
-0
lines changed

src/Adapters/Files/FilesAdapter.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
export class FilesAdapter {
1515
createFile(config, filename, data) { }
1616

17+
deleteFile(config, filename) { }
18+
1719
getFileData(config, filename) { }
1820

1921
getFileLocation(config, filename) { }

src/Adapters/Files/GridStoreAdapter.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,17 @@ export class GridStoreAdapter extends FilesAdapter {
2020
});
2121
}
2222

23+
deleteFile(config, filename) {
24+
return config.database.connect().then(() => {
25+
let gridStore = new GridStore(config.database.db, filename, 'r');
26+
return gridStore.open();
27+
}).then((gridStore) => {
28+
return gridStore.unlink();
29+
}).then((gridStore) => {
30+
return gridStore.close();
31+
});
32+
}
33+
2334
getFileData(config, filename) {
2435
return config.database.connect().then(() => {
2536
return GridStore.exist(config.database.db, filename);

src/Adapters/Files/S3Adapter.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,20 @@ export class S3Adapter extends FilesAdapter {
5656
});
5757
}
5858

59+
deleteFile(config, filename) {
60+
return new Promise((resolve, reject) => {
61+
let params = {
62+
Key: this._bucketPrefix + filename,
63+
};
64+
this._s3Client.deleteObject(params, (err, data) =>{
65+
if(err !== null) {
66+
return reject(err);
67+
}
68+
resolve(data);
69+
});
70+
});
71+
}
72+
5973
// Search for and return a file if found by filename
6074
// Returns a promise that succeeds with the buffer result from S3
6175
getFileData(config, filename) {

src/Controllers/FilesController.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,25 @@ export class FilesController {
7474
};
7575
}
7676

77+
deleteHandler() {
78+
return (req, res, next) => {
79+
if(!req.auth.isMaster){
80+
next(new Parse.Error(Parse.Error.OPERATION_FORBIDDEN,
81+
'Master key required for file deletion.'));
82+
return;
83+
}
84+
85+
this._filesAdapter.deleteFile(req.config, req.params.filename).then(() => {
86+
res.status(200);
87+
// TODO: return useful JSON here?
88+
res.end();
89+
}).catch((error) => {
90+
next(new Parse.Error(Parse.Error.FILE_DELETE_ERROR,
91+
'Could not delete file.'));
92+
});
93+
};
94+
}
95+
7796
/**
7897
* Find file references in REST-format object and adds the url key
7998
* with the current mount point and app id.
@@ -119,6 +138,12 @@ export class FilesController {
119138
this.createHandler()
120139
);
121140

141+
router.delete('/files/:filename',
142+
Middlewares.allowCrossDomain,
143+
Middlewares.handleParseHeaders,
144+
this.deleteHandler()
145+
);
146+
122147
return router;
123148
}
124149
}

0 commit comments

Comments
 (0)