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 @@
+
+
Générateur de lien
+
+
+
+
+
Liens raccourcis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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;
}