migrating to mongodb, adding blog, adding project links and tracked and much more
This commit is contained in:
78
api/db.js
78
api/db.js
@ -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;
|
138
api/index.js
138
api/index.js
@ -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
12
api/util.js
Normal 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}
|
||||
|
Reference in New Issue
Block a user