diff --git a/app.js b/app.js index dc878df..731b6af 100644 --- a/app.js +++ b/app.js @@ -8,7 +8,7 @@ var fs = require("fs") var uuid = require('uuid'); var CryptoJS = require("crypto-js") var fileUpload = require('express-fileupload') - +var ntr = require("./neutral-functions.js") var indexRouter = require('./routes/index'); @@ -18,6 +18,7 @@ var getRouter = require('./routes/get'); var setRouter = require('./routes/set'); var uploadRouter = require('./routes/upload'); var userManagerRouter = require('./routes/usermanager'); +var linkRouter = require('./routes/link'); @@ -44,6 +45,7 @@ app.use('/get', getRouter); app.use('/set', setRouter) app.use('/upload', uploadRouter) app.use('/usermanager', userManagerRouter) +app.use('/link', linkRouter) // catch 404 and forward to error handler @@ -63,7 +65,7 @@ app.use(function(err, req, res, next) { }); - +ntr.checkUser() module.exports = app; diff --git a/links.json b/links.json new file mode 100644 index 0000000..f7bf650 --- /dev/null +++ b/links.json @@ -0,0 +1,10 @@ +{ + "Git GeekSchool": { + "src": "https://git.geekschool.fr", + "dest": "gitschool" + }, + "Gmail": { + "src": "https://mail.google.com/mail/", + "dest": "gmail" + } +} \ No newline at end of file diff --git a/neutral-functions.js b/neutral-functions.js index 319bea7..1572486 100644 --- a/neutral-functions.js +++ b/neutral-functions.js @@ -3,7 +3,20 @@ var uuid = require('uuid') var path = require("path") var CryptoJS = require("crypto-js") var Jimp = require("jimp") +const { compileString } = require("sass") +module.exports.checkUser = () => { + + + const userDir = fs.readdirSync(__dirname + path.sep + "users" + path.sep) + + + if(userDir.length == 0) { + + this.createUser("root","neutral",4,"Administrateur") + } + +} module.exports.createUser = (name, password, level, fullname) => { @@ -46,6 +59,10 @@ module.exports.createUser = (name, password, level, fullname) => { } + + + + module.exports.deleteUser = (name) => { const userUUID = this.getUUID(name) diff --git a/public/templates/link.html b/public/templates/link.html new file mode 100644 index 0000000..b338a27 --- /dev/null +++ b/public/templates/link.html @@ -0,0 +1,526 @@ + + + +

Ajouter un lien raccourci

+

Nom du raccourci :

+ +

Lien à raccourcir :

+ +

Nouveau lien (neutral.raphix.fr/link/votrelien):

+ +
+ + + + +
+ +
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/routes/get.js b/routes/get.js index 797d2d4..bcb4725 100644 --- a/routes/get.js +++ b/routes/get.js @@ -4,6 +4,7 @@ var ntr = require("../neutral-functions.js"); var fs = require("fs") var path = require("path") + /* GET home page. */ router.get('/', function(req, res, next) { diff --git a/routes/index.js b/routes/index.js index eb6647b..fdcc7c0 100644 --- a/routes/index.js +++ b/routes/index.js @@ -5,6 +5,9 @@ var ntr = require("../neutral-functions.js") /* GET home page. */ router.get('/', function(req, res, next) { + + ntr.checkUser() + var check = ntr.checkToken(req, res) if(check.name == false) { diff --git a/routes/link.js b/routes/link.js new file mode 100644 index 0000000..83302fc --- /dev/null +++ b/routes/link.js @@ -0,0 +1,268 @@ +var express = require('express'); +const { compileString } = require('sass'); +var router = express.Router(); +var fs = require("fs") +var ntr = require("../neutral-functions.js") + +/* GET home page. */ +router.get('/', function(req, res, next) { + + var check = ntr.checkToken(req, res) + + if(check.name == false) { + + res.redirect(302, "/login") + + } else { + + res.render('index', { title: ntr.getFullName(check.name), username: ntr.getFullName(check.name), accountpic: '' }); + + } + + +}); + +router.post("/", function (req, res, next) { + + var check = ntr.checkToken(req, res) + + if(check.name == false) { + + res.send({"result":"failed", "content":"ERROR_TOKEN_NOT_VALID"}) + + + } else { + + if(check.permLevel >= 3) { + + if(req.body.request == "add") { + + const linkn = req.body.value + + const linkData = JSON.parse(fs.readFileSync(__dirname.replace("routes",'links.json'))) + + if(linkn.src.includes(" ") | linkn.dest.includes(" ")) { + + res.send({"result":"failed", "content":"CONTAINS_SPACES"}) + + } else if(Object.keys(linkData).includes(linkn.name)) { + + res.send({"result":"success", "content":"NAME_ALREADY_USED"}) + + + } else if(checkDest(linkn.dest) == true) { + + res.send({"result":"success", "content":"DEST_ALREADY_USED"}) + + + } else { + + linkData[linkn.name] = { + "src": linkn.src.toLowerCase(), + "dest": linkn.dest.toLowerCase() + + } + + fs.writeFileSync(__dirname.replace("routes",'links.json'), JSON.stringify(linkData, null, 2)) + + loadLinksSaved() + + res.send({"result":"success", "content":"ADDED"}) + + } + } else if(req.body.request == "del") { + + const linkData = JSON.parse(fs.readFileSync(__dirname.replace("routes",'links.json'))) + + Reflect.deleteProperty(linkData,req.body.value) + + fs.writeFileSync(__dirname.replace("routes",'links.json'), JSON.stringify(linkData, null, 2)) + + + + loadLinksSaved() + + } else if(req.body.request == "get") { + + + const linkData = JSON.parse(fs.readFileSync(__dirname.replace("routes",'links.json'))) + + const links = Object.keys(linkData) + + var allLink = new Array() + + for(var link of links) { + + allLink.push({"name": link, "src":linkData[link].src, "dest":linkData[link].dest}) + + } + + res.send({"result":"success", "content":allLink}) + + + + } else if(req.body.request == "edit") { + + + + const linkn = req.body.value + + const linkData = JSON.parse(fs.readFileSync(__dirname.replace("routes",'links.json'))) + + if(linkn.src.includes(" ") | linkn.dest.includes(" ")) { + + res.send({"result":"failed", "content":"CONTAINS_SPACES"}) + + } else if(checkName(linkn.name, linkData) == true) { + + res.send({"result":"success", "content":"NAME_ALREADY_USED"}) + + + }else if(checkDest(linkn.dest, linkn.original) == true) { + + res.send({"result":"success", "content":"DEST_ALREADY_USED"}) + + + } else { + + Reflect.deleteProperty(linkData, req.body.value.original) + + linkData[linkn.name] = { + "src": linkn.src.toLowerCase(), + "dest": linkn.dest.toLowerCase() + + } + + fs.writeFileSync(__dirname.replace("routes",'links.json'), JSON.stringify(linkData, null, 2)) + + loadLinksSaved() + + res.send({"result":"success", "content":"EDI"}) + + } + + } + + } else { + + res.send({"result":"failed", "content":"ERROR_USER_PERMISSION_TOO_LOW"}) + } + + } + + +}) + +loadLinksSaved() + +function loadLinksSaved() { + + const linkData = JSON.parse(fs.readFileSync(__dirname.replace("routes",'links.json'))) + const links = Object.keys(linkData) + + + for(var link of links) { + + const dest = linkData[link].dest + const src = linkData[link].src + + router.get('/' + dest, function (req, res, next) { + + res.redirect(302, src) + + }) + + } + + +} + +function checkDest(src, name) { + + + if(name == null) { + + const linkData = JSON.parse(fs.readFileSync(__dirname.replace("routes",'links.json'))) + const links = Object.keys(linkData) + const destNotAvb = new Array() + + for(var link of links) { + + destNotAvb.push(linkData[link].dest) + } + + if(destNotAvb.includes(src)) { + + return true; + } else { + + return false; + + } + + } else { + + const linkData = JSON.parse(fs.readFileSync(__dirname.replace("routes",'links.json'))) + const links = Object.keys(linkData) + const destNotAvb = new Array() + + for(var link of links) { + + if(link != name) { + + destNotAvb.push(linkData[link].dest) + } + + + } + + + + if(destNotAvb.includes(src)) { + + return true; + } else { + + return false; + + } + + } + + + +} + +function checkName(name, linkData) { + + const names = Object.keys(linkData) + const namewithout = new Array() + + for(var namei of names) { + + if(namei != name) { + + namewithout.push(linkData[namei].name) + } + + + } + + + if(namewithout.includes(name)) { + + return true; + } else { + + return false; + + } + + + + +} + + + +module.exports = router; diff --git a/routes/login.js b/routes/login.js index e89f87f..f2172b8 100644 --- a/routes/login.js +++ b/routes/login.js @@ -10,6 +10,7 @@ var ntr = require("../neutral-functions.js") router.get('/', function(req, res, next) { + ntr.checkUser() var check = ntr.checkToken(req, res) if(check.name != false) { diff --git a/users/0cee5da6-6812-49d8-97f5-2df5c1d78191.json b/users/0cee5da6-6812-49d8-97f5-2df5c1d78191.json new file mode 100644 index 0000000..ca5acd2 --- /dev/null +++ b/users/0cee5da6-6812-49d8-97f5-2df5c1d78191.json @@ -0,0 +1,13 @@ +{ + "username": "raphix", + "password": "U2FsdGVkX19eUkHlyqAgwuLYtNjlqzUmVAD7tBEBtaY=", + "uuid": "0cee5da6-6812-49d8-97f5-2df5c1d78191", + "fullname": "Raphael PICOT", + "permissionLevel": 4, + "token": { + "tokenID": "1c80ca40-60e9-4e48-b986-753678de41ca", + "livableToken": true, + "createdAt": 1677159656255 + }, + "lastconnexion": 1677159976281 +} \ No newline at end of file diff --git a/users/9ace80e0-1ee3-4eed-924f-8a55fc55822b.json b/users/9ace80e0-1ee3-4eed-924f-8a55fc55822b.json deleted file mode 100644 index 0554886..0000000 --- a/users/9ace80e0-1ee3-4eed-924f-8a55fc55822b.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "username": "raphix", - "password": "U2FsdGVkX1+y5WFBRAA0GITGyxl0AOq2lygx7XDu6BU=", - "uuid": "9ace80e0-1ee3-4eed-924f-8a55fc55822b", - "permissionLevel": 4, - "fullname": "Raphael PICOT", - "token": { - "tokenID": "43b6f1bf-29be-4801-83f2-b1e85dcb3981", - "livableToken": true, - "createdAt": 1677070566103 - }, - "lastconnexion": 1677070621299 -} \ No newline at end of file diff --git a/users/aca3c9aa-5b42-477f-b179-f33211a425d3.json b/users/aca3c9aa-5b42-477f-b179-f33211a425d3.json deleted file mode 100644 index 2e21224..0000000 --- a/users/aca3c9aa-5b42-477f-b179-f33211a425d3.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "username": "root", - "password": "U2FsdGVkX18KoGGTPqZw/E9PiLQaUuEZxyHdbdAErO0=", - "uuid": "aca3c9aa-5b42-477f-b179-f33211a425d3", - "fullname": "Administrateur", - "permissionLevel": 3, - "token": {}, - "lastconnexion": 0 -} \ No newline at end of file diff --git a/users/c8f353a4-d0df-4c10-bccc-d4f47daf0f51.json b/users/c8f353a4-d0df-4c10-bccc-d4f47daf0f51.json new file mode 100644 index 0000000..69f6e5a --- /dev/null +++ b/users/c8f353a4-d0df-4c10-bccc-d4f47daf0f51.json @@ -0,0 +1,13 @@ +{ + "username": "root", + "password": "U2FsdGVkX1/ICaOrZjiK+VFckzaSu/AcyQrpIPg2KuY=", + "uuid": "c8f353a4-d0df-4c10-bccc-d4f47daf0f51", + "fullname": "Administrateur", + "permissionLevel": 4, + "token": { + "tokenID": "00e7bb54-cd31-4c60-92a5-5c45164ea6ed", + "livableToken": false, + "createdAt": 1677159640804 + }, + "lastconnexion": 1677159652801 +} \ No newline at end of file diff --git a/views/error.ejs b/views/error.ejs index ccb9421..177d8a0 100644 --- a/views/error.ejs +++ b/views/error.ejs @@ -32,6 +32,7 @@ color: white; background-color: red; + cursor: pointer; }