1import express from 'express';
2import * as integrations from '../controller/integrations.js';
3import password from '../middlewares/password.js';
4import { validateInput } from '../controller/integrations.js';
5
6const app = express.Router();
7
8app.get("/", password(false), (req, res) => res.json(integrations.getIntegrations()));
9
10app.get("/active", password(false), async (req, res) => res.json(await integrations.getActive()));
11
12app.put("/:integrationName", password(false), async (req, res) => {
13 const integration = integrations.getIntegration(req.params.integrationName);
14 if (!integration) return res.status(404).json({message: "Integration not found"});
15
16 if (process.env.PREVIEW_MODE === "true")
17 return res.status(403).json({message: "For security reasons, you can't create integrations in preview mode"});
18
19 if (!req.body) return res.status(400).json({message: "Missing data"});
20
21 const validatedInput = validateInput(req.params.integrationName, req.body);
22 if (!validatedInput) return res.status(400).json({message: "Invalid data"});
23
24 const id = await integrations.create(req.params.integrationName, validatedInput);
25 return res.json({message: "Integration created", id});
26});
27
28app.patch("/:id", password(false), async (req, res) => {
29 if (!req.body) return res.status(400).json({message: "Missing data"});
30
31 if (process.env.PREVIEW_MODE === "true")
32 return res.status(403).json({message: "For security reasons, you can't update integrations in preview mode"});
33
34 const integration = await integrations.getIntegrationById(req.params.id);
35 if (!integration) return res.status(404).json({message: "Integration not found"});
36
37 const validatedInput = validateInput(integration?.name, req.body);
38 if (!validatedInput) return res.status(400).json({message: "Invalid data"});
39
40 await integrations.patch(req.params.id, validatedInput);
41 return res.json({message: "Integration updated"});
42});
43
44app.delete("/:id", password(false), async (req, res) => {
45 if (process.env.PREVIEW_MODE === "true")
46 return res.status(403).json({message: "For security reasons, you can't delete integrations in preview mode"});
47
48 const result = await integrations.deleteIntegration(req.params.id);
49 if (result === null) return res.status(404).json({message: "Integration not found"});
50 return res.json({message: "Integration deleted"});
51});
52
53
54export default app;