Files
kami-parse-server/src/Routers/HooksRouter.js
Colin Ulin e0480dfa8d feat: Upgrade to express 5.0.1 (#9530)
BREAKING CHANGE: This upgrades the internally used Express framework from version 4 to 5, which may be a breaking change. If Parse Server is set up to be mounted on an Express application, we recommend to also use version 5 of the Express framework to avoid any compatibility issues. Note that even if there are no issues after upgrading, future releases of Parse Server may introduce issues if Parse Server internally relies on Express 5-specific features which are unsupported by the Express version on which it is mounted. See the Express [migration guide](https://expressjs.com/en/guide/migrating-5.html) and [release announcement](https://expressjs.com/2024/10/15/v5-release.html#breaking-changes) for more info.
2025-03-03 22:11:42 +01:00

146 lines
4.1 KiB
JavaScript

import { Parse } from 'parse/node';
import PromiseRouter from '../PromiseRouter';
import * as middleware from '../middlewares';
export class HooksRouter extends PromiseRouter {
createHook(aHook, config) {
return config.hooksController.createHook(aHook).then(hook => ({ response: hook }));
}
updateHook(aHook, config) {
return config.hooksController.updateHook(aHook).then(hook => ({ response: hook }));
}
handlePost(req) {
return this.createHook(req.body || {}, req.config);
}
handleGetFunctions(req) {
var hooksController = req.config.hooksController;
if (req.params.functionName) {
return hooksController.getFunction(req.params.functionName).then(foundFunction => {
if (!foundFunction) {
throw new Parse.Error(143, `no function named: ${req.params.functionName} is defined`);
}
return Promise.resolve({ response: foundFunction });
});
}
return hooksController.getFunctions().then(
functions => {
return { response: functions || [] };
},
err => {
throw err;
}
);
}
handleGetTriggers(req) {
var hooksController = req.config.hooksController;
if (req.params.className && req.params.triggerName) {
return hooksController
.getTrigger(req.params.className, req.params.triggerName)
.then(foundTrigger => {
if (!foundTrigger) {
throw new Parse.Error(143, `class ${req.params.className} does not exist`);
}
return Promise.resolve({ response: foundTrigger });
});
}
return hooksController.getTriggers().then(triggers => ({ response: triggers || [] }));
}
handleDelete(req) {
var hooksController = req.config.hooksController;
if (req.params.functionName) {
return hooksController.deleteFunction(req.params.functionName).then(() => ({ response: {} }));
} else if (req.params.className && req.params.triggerName) {
return hooksController
.deleteTrigger(req.params.className, req.params.triggerName)
.then(() => ({ response: {} }));
}
return Promise.resolve({ response: {} });
}
handleUpdate(req) {
var hook;
if (req.params.functionName && req.body?.url) {
hook = {};
hook.functionName = req.params.functionName;
hook.url = req.body.url;
} else if (req.params.className && req.params.triggerName && req.body?.url) {
hook = {};
hook.className = req.params.className;
hook.triggerName = req.params.triggerName;
hook.url = req.body.url;
} else {
throw new Parse.Error(143, 'invalid hook declaration');
}
return this.updateHook(hook, req.config);
}
handlePut(req) {
var body = req.body || {};
if (body.__op == 'Delete') {
return this.handleDelete(req);
} else {
return this.handleUpdate(req);
}
}
mountRoutes() {
this.route(
'GET',
'/hooks/functions',
middleware.promiseEnforceMasterKeyAccess,
this.handleGetFunctions.bind(this)
);
this.route(
'GET',
'/hooks/triggers',
middleware.promiseEnforceMasterKeyAccess,
this.handleGetTriggers.bind(this)
);
this.route(
'GET',
'/hooks/functions/:functionName',
middleware.promiseEnforceMasterKeyAccess,
this.handleGetFunctions.bind(this)
);
this.route(
'GET',
'/hooks/triggers/:className/:triggerName',
middleware.promiseEnforceMasterKeyAccess,
this.handleGetTriggers.bind(this)
);
this.route(
'POST',
'/hooks/functions',
middleware.promiseEnforceMasterKeyAccess,
this.handlePost.bind(this)
);
this.route(
'POST',
'/hooks/triggers',
middleware.promiseEnforceMasterKeyAccess,
this.handlePost.bind(this)
);
this.route(
'PUT',
'/hooks/functions/:functionName',
middleware.promiseEnforceMasterKeyAccess,
this.handlePut.bind(this)
);
this.route(
'PUT',
'/hooks/triggers/:className/:triggerName',
middleware.promiseEnforceMasterKeyAccess,
this.handlePut.bind(this)
);
}
}
export default HooksRouter;