migrating to mongodb, adding blog, adding project links and tracked and much more

This commit is contained in:
ngn
2023-05-27 21:16:21 +03:00
parent b67709a215
commit 2d2aea83a1
17 changed files with 900 additions and 127 deletions

View File

@ -1,78 +0,0 @@
const fs = require("fs");
class Database {
constructor() {
this.path = "db.json";
this.json = {};
this.read();
}
write() {
fs.writeFileSync(this.path, JSON.stringify(this.json));
}
read() {
try {
const data = fs.readFileSync(this.path, "utf8");
this.json = JSON.parse(data);
} catch (error) {
return;
}
}
find_all(key, check, ...args) {
try {
const ret = [];
for (const d of this.json[key]) {
if (check(d, ...args)) {
ret.push(d);
}
}
return ret;
} catch (error) {
return false;
}
}
find(key, check, ...args) {
try {
for (const d of this.json[key]) {
if (check(d, ...args)) {
return d;
}
}
return false;
} catch (error) {
return false;
}
}
get(key) {
const res = this.json[key]
if(res===undefined)
return []
return res
}
push(key, data) {
try {
this.json[key].push(data);
} catch (error) {
this.json[key] = [];
this.json[key].push(data);
}
this.write();
}
pop(key, data) {
try {
const indx = this.json[key].indexOf(data);
this.json[key].splice(indx, 1);
} catch (error) {
return;
}
this.write();
}
}
module.exports = Database;

View File

@ -1,31 +1,21 @@
const express = require("express");
const fs = require("fs");
const Database = require("./db");
const {gimmeToken} = require("./util.js")
const { MongoClient } = require("mongodb");
require("dotenv").config()
const app = express();
const db = new Database();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
function gimmeToken() {
var result = ""
var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
var charactersLength = characters.length
for ( var i = 0; i < 32; i++ ) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
const client = new MongoClient(process.env.DATABASE);
const PASS = process.env.PASS
let TOKEN = gimmeToken();
const PASS = fs.readFileSync("pass", "utf-8")
/*
* error: 0 -> no error
* error: 1 -> parameter error
* error: 2 -> auth error
*
* error: 3 -> not found error
*/
// PATH: /api/login
@ -62,7 +52,7 @@ app.get("/logout", (req,res)=>{
// PATH: /api/add_project
// METHOD: GET
// PARAMETERS: token, name, desc, url
app.get("/add_project", (req, res) => {
app.get("/add_project", async (req, res) => {
let token = req.query.token;
let name = req.query.name;
let desc = req.query.desc;
@ -79,14 +69,18 @@ app.get("/add_project", (req, res) => {
if (token !== TOKEN)
return res.json({error: 2})
db.push("projects", {"name":name, "desc":desc, "url":url})
await client.connect()
const db = await client.db("ngn13")
const col = await db.collection("projects")
await col.insertOne({"name":name, "desc":desc, "url":url, "click":0})
await client.close()
res.json({error: 0})
});
// PATH: /api/add_resource
// METHOD: GET
// PARAMETERS: token, name, tags, url
app.get("/add_resource", (req, res) => {
app.get("/add_resource", async (req, res) => {
let token = req.query.token;
let name = req.query.name;
let tags = req.query.tags;
@ -103,24 +97,116 @@ app.get("/add_resource", (req, res) => {
if (token !== TOKEN)
return res.json({error: 2})
db.push("resources", {"name":name, "tags":tags.split(","), "url":url})
await client.connect()
const db = await client.db("ngn13")
const col = await db.collection("resources")
await col.insertOne({"name":name, "tags":tags.split(","), "url":url})
await client.close()
res.json({error: 0})
});
// PATH: /api/get_projects
// METHOD: GET
// PARAMETERS: NONE
app.get("/get_projects", (req, res) => {
let projects = db.get("projects")
res.json({error: 0, projects:projects})
app.get("/get_projects", async (req, res) => {
await client.connect()
const db = await client.db("ngn13")
const col = await db.collection("projects")
const array = await col.find().toArray()
await client.close()
res.json({error: 0, projects:array})
});
// PATH: /api/get_resources
// METHOD: GET
// PARAMETERS: NONE
app.get("/get_resources", (req, res) => {
let resources = db.get("resources")
res.json({error: 0, resources:resources})
app.get("/get_resources", async (req, res) => {
await client.connect()
const db = await client.db("ngn13")
const col = await db.collection("resources")
const array = await col.find().toArray()
await client.close()
res.json({error: 0, resources:array})
});
// PATH: /api/add_post
// METHOD: POST
// PARAMETERS: token, title, author, content
app.post("/add_post", async (req, res) => {
let token = req.body.token;
let title = req.body.title;
let author = req.body.author;
let content = req.body.content;
if (
token === undefined ||
title === undefined ||
author === undefined ||
content === undefined
)
return res.json({error: 1})
if (token !== TOKEN)
return res.json({error: 2})
await client.connect()
const db = await client.db("ngn13")
const col = await db.collection("posts")
await col.insertOne({
"title":title,
"author":author,
"date": new Date().toLocaleDateString(),
"content":content
})
await client.close()
res.json({error: 0})
});
// PATH: /api/get_posts
// METHOD: POST
// PARAMETERS: NONE
app.get("/get_posts", async (req, res) => {
await client.connect()
const db = await client.db("ngn13")
const col = await db.collection("posts")
const array = await col.find().toArray()
await client.close()
let newarray = []
for(let i = 0;i<array.length;i++){
newarray.push({
"title":array[i]["title"],
"desc":array[i]["content"]["en"].substring(0, 140) + "...",
"info":`${array[i]["author"]} | ${array[i]["date"]}`
})
}
res.json({error: 0, posts:newarray})
});
// PATH: /api/get_post
// METHOD: POST
// PARAMETERS: id
app.get("/get_post", async (req, res) => {
let id = req.query.id;
await client.connect()
const db = await client.db("ngn13")
const col = await db.collection("posts")
const array = await col.find().toArray()
await client.close()
for(let i = 0;i<array.length;i++){
if(array[i]["title"].toLowerCase().replaceAll(" ", "")===id){
return res.json({error: 0, post:{
"title": array[i]["title"],
"info": `${array[i]["author"]} | ${array[i]["date"]}`,
"content": array[i]["content"],
}})
}
}
res.json({error: 3})
});
// PATH: /api/ping

12
api/util.js Normal file
View File

@ -0,0 +1,12 @@
function gimmeToken() {
var result = ""
var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
var charactersLength = characters.length
for ( var i = 0; i < 32; i++ ) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
module.exports = {gimmeToken}