2016-06-15 06:52:49 +08:00
|
|
|
import PromiseRouter from '../PromiseRouter';
|
|
|
|
|
import * as middleware from '../middlewares';
|
2018-03-14 21:57:30 -05:00
|
|
|
import Parse from 'parse/node';
|
2016-06-15 06:52:49 +08:00
|
|
|
|
|
|
|
|
export class PurgeRouter extends PromiseRouter {
|
|
|
|
|
handlePurge(req) {
|
2018-03-11 00:07:31 +09:00
|
|
|
if (req.auth.isReadOnly) {
|
2018-09-01 13:58:06 -04:00
|
|
|
throw new Parse.Error(
|
|
|
|
|
Parse.Error.OPERATION_FORBIDDEN,
|
|
|
|
|
"read-only masterKey isn't allowed to purge a schema."
|
|
|
|
|
);
|
2018-03-11 00:07:31 +09:00
|
|
|
}
|
2018-09-01 13:58:06 -04:00
|
|
|
return req.config.database
|
|
|
|
|
.purgeCollection(req.params.className)
|
2017-06-20 09:15:26 -07:00
|
|
|
.then(() => {
|
|
|
|
|
var cacheAdapter = req.config.cacheController;
|
|
|
|
|
if (req.params.className == '_Session') {
|
|
|
|
|
cacheAdapter.user.clear();
|
|
|
|
|
} else if (req.params.className == '_Role') {
|
|
|
|
|
cacheAdapter.role.clear();
|
|
|
|
|
}
|
2018-09-01 13:58:06 -04:00
|
|
|
return { response: {} };
|
|
|
|
|
})
|
|
|
|
|
.catch(error => {
|
2018-03-25 08:41:25 -05:00
|
|
|
if (!error || (error && error.code === Parse.Error.OBJECT_NOT_FOUND)) {
|
2018-09-01 13:58:06 -04:00
|
|
|
return { response: {} };
|
2018-03-25 08:41:25 -05:00
|
|
|
}
|
|
|
|
|
throw error;
|
2017-06-20 09:15:26 -07:00
|
|
|
});
|
2016-06-15 06:52:49 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mountRoutes() {
|
2018-09-01 13:58:06 -04:00
|
|
|
this.route(
|
|
|
|
|
'DELETE',
|
|
|
|
|
'/purge/:className',
|
|
|
|
|
middleware.promiseEnforceMasterKeyAccess,
|
|
|
|
|
req => {
|
|
|
|
|
return this.handlePurge(req);
|
|
|
|
|
}
|
|
|
|
|
);
|
2016-06-15 06:52:49 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default PurgeRouter;
|