· 4 years ago · Jul 23, 2021, 05:18 PM
1const express = require("express");
2const app = new express();
3const mongoose = require("mongoose");
4const models = require("./models.js");
5const path = require("path");
6const keys = require("./api");
7//require("dotenv").config()
8mongoose.connect(process.env.mongo, {
9 useNewUrlParser: true,
10 useUnifiedTopology: true,
11 useFindAndModify: false
12});
13async function password(key) {
14 const doc = await keys.findOne({ key, active: true });
15 return !!doc;
16}
17app.get("/find", async (req, res) => {
18 const pass = req.query.key;
19 const params = req.query.params;
20 const name = req.query.name;
21 if (!name) return res.send("You need to provide a model name.");
22 if (!params) return res.send("Please provide some parameters.");
23 if (!pass) {
24 res.send("You need to provide an API key.");
25 } else {
26 if (!(await password(pass))) return res.send("Invalid API key.");
27 if (!models[name]) return res.send("Invalid model name.");
28 if (models[name]) {
29 models[name].find(JSON.parse(params), async (err, data) => {
30 if (err) return res.send(err);
31 if (!data.length) return res.send("Error: no data found.");
32 res.send(data);
33 });
34 }
35 }
36});
37app.get("/findone", async (req, res) => {
38 const pass = req.query.key;
39 const params = req.query.params;
40 const name = req.query.name;
41 if (!name) return res.send("You need to provide a model name.");
42 if (!params) return res.send("Please provide some parameters.");
43 if (!pass) {
44 res.send("You need to provide an API key.");
45 } else {
46 if (!(await password(pass))) return res.send("Invalid API key.");
47 if (!models[name]) return res.send("Invalid model name.");
48 if (models[name]) {
49 models[name].findOne(JSON.parse(params), async (err, data) => {
50 if (err) return res.send(err);
51 if (!data) return res.send("Error: no data found.");
52 res.send(data);
53 });
54 }
55 }
56});
57app.get("/delete", async (req, res) => {
58 const pass = req.query.key;
59 const params = req.query.params;
60 const name = req.query.name;
61 if (!name) return res.send("You need to provide a model name.");
62 if (!params) return res.send("Please provide some parameters.");
63 if (!pass) {
64 res.send("You need to provide an API key.");
65 } else {
66 if (!(await password(pass))) return res.send("Invalid API key.");
67 if (!models[name]) return res.send("Invalid model name.");
68 if (models[name]) {
69 models[name]
70 .findOneAndDelete(JSON.parse(params))
71 .catch(e => {
72 return res.send(e);
73 })
74 .then(d => {
75 res.send("success");
76 });
77 }
78 }
79});
80app.get("/create", async (req, res) => {
81 const pass = req.query.key;
82 const params = req.query.params;
83 const name = req.query.name;
84 if (!name) return res.send("You need to provide a model name.");
85 if (!params) return res.send("Please provide some parameters.");
86 if (!pass) {
87 res.send("You need to provide an API key.");
88 } else {
89 if (!(await password(pass))) return res.send("Invalid API key.");
90 if (!models[name]) return res.send("Invalid model name.");
91 if (models[name]) {
92 const m = await models[name].findOne(JSON.parse(params));
93 if (m) return res.send("Error: this document already exists");
94 const newd = new models[name](JSON.parse(params));
95 await newd.save();
96 return res.send(newd);
97 }
98 }
99});
100app.get("/listkeys", async (req, res) => {
101 let auth = req.query.auth;
102 if (auth !== process.env.apipass) return res.send("Invalid authentication.");
103 const doc = await keys.find();
104 res.send(doc);
105});
106app.get("/genkey", async (req, res) => {
107 let auth = req.query.auth;
108 if (auth !== process.env.apipass) return res.send("Invalid authentication.");
109 const create = await new keys().save();
110 res.send(create.key);
111});
112app.get("/delkey", async (req, res) => {
113 let auth = req.query.auth;
114 let key = req.query.key;
115 if (auth !== process.env.apipass) return res.send("Invalid authentication.");
116 if (!key || !(await password(key))) return res.send("Invalid API key.");
117 await keys.findOneAndDelete(key).catch(e => {
118 return res.send("Could not delete this API key.");
119 });
120 res.send("Deleted key: " + key);
121});
122app.get("/", (req, res) => {
123 res.sendFile(path.join(__dirname, "/main.html"));
124});
125app.get("*", (req, res) => {
126 res.sendFile(path.join(__dirname, "/404.html"));
127});
128const ready = function() {
129 console.log("WebServer is up!");
130};
131app.listen(3000);
132setTimeout(ready, 100);
133