DEV_4
This commit is contained in:
		
							
								
								
									
										6
									
								
								app.js
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								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;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								links.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								links.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
{
 | 
			
		||||
  "Git GeekSchool": {
 | 
			
		||||
    "src": "https://git.geekschool.fr",
 | 
			
		||||
    "dest": "gitschool"
 | 
			
		||||
  },
 | 
			
		||||
  "Gmail": {
 | 
			
		||||
    "src": "https://mail.google.com/mail/",
 | 
			
		||||
    "dest": "gmail"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										526
									
								
								public/templates/link.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										526
									
								
								public/templates/link.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,526 @@
 | 
			
		||||
<div class="link">
 | 
			
		||||
    <h1>Générateur de lien</button></h1>
 | 
			
		||||
    </br>
 | 
			
		||||
    <div class="homepanel">
 | 
			
		||||
        <div class="row w-100">
 | 
			
		||||
            <div class="hbox col-lg">    
 | 
			
		||||
                <h1><i class="fa fa-link"></i> Liens raccourcis</h1>
 | 
			
		||||
                </br>
 | 
			
		||||
                <div id="lkcontent">
 | 
			
		||||
 | 
			
		||||
                </div>
 | 
			
		||||
                </br>
 | 
			
		||||
                <button id="lk_add" class="lk_add"><i class="fa fa-plus"></i> Ajouter</button>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<dialog class="lk_adduser" id="lk_add_form">
 | 
			
		||||
    <h1><i class="fa fa-plus"></i> Ajouter un lien raccourci</h1>
 | 
			
		||||
        <p>Nom du raccourci :</p>
 | 
			
		||||
        <input class="inp" id="lk_add_name" type="text">
 | 
			
		||||
        <p>Lien à raccourcir :</p>
 | 
			
		||||
        <input class="inp" id="lk_add_src" type="text">
 | 
			
		||||
        <p>Nouveau lien (neutral.raphix.fr/link/<i>votrelien</i>):</p>
 | 
			
		||||
        <input class="inp" id="lk_add_dest" type="text">
 | 
			
		||||
        <div style="color: rgb(255, 76, 76);" id="lk_add_info"></div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <button onclick="getPage('link.html')" id="lk_add_close" class="lk_add_close">Annuler</button>
 | 
			
		||||
    <button id="lk_add_confirm" class="lk_add_confirm">Ajouter</button>
 | 
			
		||||
 | 
			
		||||
</dialog>
 | 
			
		||||
 | 
			
		||||
<div id="lk_dialog">
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
    if(typeof lkaddform == 'undefined'){
 | 
			
		||||
 | 
			
		||||
        const lkcontent = document.getElementById("lkcontent")
 | 
			
		||||
        const lkdialogs = document.getElementById("lk_dialog")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        getLinks()
 | 
			
		||||
 | 
			
		||||
        function getLinks() {
 | 
			
		||||
 | 
			
		||||
            var linksContent = new Array()
 | 
			
		||||
            var dialogContent = new Array()
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            fetch('/link', {
 | 
			
		||||
                method: 'POST',
 | 
			
		||||
                redirect: 'follow',
 | 
			
		||||
                headers: {
 | 
			
		||||
                    'Accept': 'application/json',
 | 
			
		||||
                    'Content-Type': 'application/json'
 | 
			
		||||
                },
 | 
			
		||||
                body: JSON.stringify({"request":"get", "value": ""})
 | 
			
		||||
            })
 | 
			
		||||
            .then(response => response.json())
 | 
			
		||||
            .then(response => showLink(response))
 | 
			
		||||
 | 
			
		||||
            function showLink(response) {
 | 
			
		||||
 | 
			
		||||
                var links = response.content
 | 
			
		||||
 | 
			
		||||
                for(var link of links) {
 | 
			
		||||
 | 
			
		||||
                    linksContent.push('<div class="row lk_line"> <p class="col-lg"><i class="fas fa-sticky-note"></i> Nom du raccourci : ' + link.name + '</p> <p class="col-lg"><i class="fa-sharp fa-solid fa-link"></i> Lien raccourci : <a href="http://localhost/link/' + link.dest + '">http://localhost/link/' + link.dest + '</a></p> <p class="col-lg"><i class="fa-solid fa-up-right-from-square"></i> Lien réel : <a href="' + link.src + '"><strong>Vers le lien</strong></a></p> <div class="col-lg "> <button id="' + link.name + '_edit_btn" class="lk_edit"><i class="fa fa-pen"></i></button> <button id="' + link.name + '_delete" class="lk_delete"><i class="fa fa-trash"></i></button> </div> </div>')
 | 
			
		||||
                    dialogContent.push('<dialog class="lk_adduser" id="' + link.name + '_dialog"> <h1><i class="fa fa-pen"></i> Editer un lien raccourci</h1> <p>Nom du raccourci :</p> <input class="inp" id="' + link.name + '_edit_name" type="text"> <p>Lien à raccourcir :</p> <input class="inp" id="' + link.name + '_edit_src" type="text"> <p>Nouveau lien (neutral.raphix.fr/link/<i>votrelien</i>):</p> <input class="inp" id="' + link.name + '_edit_dest" type="text"> <div style="color: rgb(255, 76, 76);" id="' + link.name + '_edit_info"></div> </div> <button onclick="getPage(\'link.html\')" id="lk_add_close" class="lk_add_close">Annuler</button> <button id="' + link.name + '_edit_confirm" class="lk_add_confirm">Editer</button> </dialog>')
 | 
			
		||||
                    
 | 
			
		||||
                    lkcontent.innerHTML = linksContent.join("")
 | 
			
		||||
                    lkdialogs.innerHTML = dialogContent.join("")
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                for(var link of links) {
 | 
			
		||||
 | 
			
		||||
                    makeAction(link)
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
             
 | 
			
		||||
                if(links.length == 0) {
 | 
			
		||||
                    
 | 
			
		||||
                    lkcontent.innerHTML = '<span style="margin: 2vw;color: rgb(255, 76, 76);">Aucun lien raccourci n\'a été crée.</span>' // lkcontent.innerHTML = linksContent.join("")
 | 
			
		||||
 | 
			
		||||
                } 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
               
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
        function makeAction(link) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            const lkdelete = document.getElementById(link.name + "_delete")
 | 
			
		||||
            const lkedit = document.getElementById(link.name + '_edit_btn')
 | 
			
		||||
            const lkdialog = document.getElementById(link.name + "_dialog")
 | 
			
		||||
            const lkname = document.getElementById(link.name + '_edit_name')
 | 
			
		||||
            const lksrc = document.getElementById(link.name + "_edit_src")
 | 
			
		||||
            const lkdest = document.getElementById(link.name + "_edit_dest")
 | 
			
		||||
            const lkinfo = document.getElementById(link.name + "_edit_info")
 | 
			
		||||
            const lkconfirm = document.getElementById(link.name + "_edit_confirm")
 | 
			
		||||
 | 
			
		||||
       
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
            lkdelete.addEventListener("click", () => {
 | 
			
		||||
 | 
			
		||||
                
 | 
			
		||||
                fetch('/link', {
 | 
			
		||||
                    method: 'POST',
 | 
			
		||||
                    redirect: 'follow',
 | 
			
		||||
                    headers: {
 | 
			
		||||
                        'Accept': 'application/json',
 | 
			
		||||
                        'Content-Type': 'application/json'
 | 
			
		||||
                    },
 | 
			
		||||
                    body: JSON.stringify({"request":"del", "value": link.name})
 | 
			
		||||
                })
 | 
			
		||||
                
 | 
			
		||||
                
 | 
			
		||||
                getPage("link.html")
 | 
			
		||||
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
            lkedit.addEventListener("click", () => {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                lkname.value = link.name
 | 
			
		||||
                lksrc.value = link.src
 | 
			
		||||
                lkdest.value = link.dest
 | 
			
		||||
 | 
			
		||||
                lkdialog.showModal()
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
            lkconfirm.addEventListener("click", () => {
 | 
			
		||||
 | 
			
		||||
                lkinfo.innerHTML = ""
 | 
			
		||||
 | 
			
		||||
                if(lkname.value == "" | lkdest.value == "" | lksrc.value == "") {
 | 
			
		||||
 | 
			
		||||
                    lkinfo.innerHTML = "Tout les champs doivent être remplis."
 | 
			
		||||
 | 
			
		||||
                } else {
 | 
			
		||||
                    if(lkdest.value.includes(" ") | lksrc.value.includes(" ")) {
 | 
			
		||||
 | 
			
		||||
                        lkinfo.innerHTML = "Aucun espace n'est accepté dans les liens"
 | 
			
		||||
 | 
			
		||||
                    } else {
 | 
			
		||||
 | 
			
		||||
                        const requestData = {
 | 
			
		||||
                        "name":lkname.value,
 | 
			
		||||
                        "src":lksrc.value,
 | 
			
		||||
                        "dest":lkdest.value,
 | 
			
		||||
                        "original":link.name
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        fetch('/link', {
 | 
			
		||||
                        method: 'POST',
 | 
			
		||||
                        redirect: 'follow',
 | 
			
		||||
                        headers: {
 | 
			
		||||
                            'Accept': 'application/json',
 | 
			
		||||
                            'Content-Type': 'application/json'
 | 
			
		||||
                        },
 | 
			
		||||
                        body: JSON.stringify({"request":"edit", "value": requestData})
 | 
			
		||||
                        })
 | 
			
		||||
                        .then(response => response.json())
 | 
			
		||||
                        .then(response => afteredit(response))
 | 
			
		||||
 | 
			
		||||
                        function afteredit(response) {
 | 
			
		||||
                            
 | 
			
		||||
                           
 | 
			
		||||
                            if(response.result == "failed") {
 | 
			
		||||
                                content.innerHTML = ' <h1 style="color:red;"><i style="color:yellow; font-size: 2vw;" class="fa fa-warning"></i>  Erreur de chargement des données - Erreur : ' + response.content  + '</h1>'
 | 
			
		||||
                                console.log("FAILED")
 | 
			
		||||
                    
 | 
			
		||||
                            } else if(response.result == "success") {
 | 
			
		||||
 | 
			
		||||
                                if(response.content == "EDI") {
 | 
			
		||||
                                    getPage("link.html") 
 | 
			
		||||
                                    
 | 
			
		||||
                                }else if(response.content == "NAME_ALREADY_USED") {
 | 
			
		||||
 | 
			
		||||
                                    lkinfo.innerHTML = "Le nom du raccourci est déjà utilisé"
 | 
			
		||||
                                
 | 
			
		||||
                                }  else if(response.content == "DEST_ALREADY_USED") {
 | 
			
		||||
 | 
			
		||||
                                    lkinfo.innerHTML = "L'URL de raccourci est déjà utilisé"
 | 
			
		||||
                                } else {
 | 
			
		||||
 | 
			
		||||
                                    lkinfo.innerHTML = "ECHEC - Réessayez plus tard !"
 | 
			
		||||
                                }
 | 
			
		||||
                                
 | 
			
		||||
                                            
 | 
			
		||||
                            
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        
 | 
			
		||||
                       
 | 
			
		||||
 | 
			
		||||
                    }           
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            })
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        const lkaddbtn = document.getElementById("lk_add")
 | 
			
		||||
        const lkaddform = document.getElementById("lk_add_form")
 | 
			
		||||
        const lkaddname = document.getElementById("lk_add_name")
 | 
			
		||||
        const lkaddsrc = document.getElementById("lk_add_src")
 | 
			
		||||
        const lkadddest = document.getElementById("lk_add_dest")
 | 
			
		||||
        const lkaddconfirm = document.getElementById("lk_add_confirm")
 | 
			
		||||
        const lkaddinfo = document.getElementById("lk_add_info")
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        lkaddbtn.addEventListener("click", () => {
 | 
			
		||||
 | 
			
		||||
            lkaddform.showModal()
 | 
			
		||||
 | 
			
		||||
        }) 
 | 
			
		||||
 | 
			
		||||
        lkaddconfirm.addEventListener("click", () => {
 | 
			
		||||
 | 
			
		||||
            lkaddinfo.innerHTML = ""
 | 
			
		||||
 | 
			
		||||
            if(lkaddname.value == "" | lkadddest.value == "" | lkaddsrc.value == "") {
 | 
			
		||||
                lkaddinfo.innerHTML = "Tout les champs doivent être remplis."
 | 
			
		||||
 | 
			
		||||
            } else {
 | 
			
		||||
 | 
			
		||||
                if(lkadddest.value.includes(" ") | lkaddsrc.value.includes(" ")) {
 | 
			
		||||
 | 
			
		||||
                    lkaddinfo.innerHTML = "Aucun espace n'est accepté dans les liens"
 | 
			
		||||
 | 
			
		||||
                } else {
 | 
			
		||||
 | 
			
		||||
                    const requestData = {
 | 
			
		||||
                        "name":lkaddname.value,
 | 
			
		||||
                        "src":lkaddsrc.value,
 | 
			
		||||
                        "dest":lkadddest.value
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    fetch('/link', {
 | 
			
		||||
                    method: 'POST',
 | 
			
		||||
                    redirect: 'follow',
 | 
			
		||||
                    headers: {
 | 
			
		||||
                        'Accept': 'application/json',
 | 
			
		||||
                        'Content-Type': 'application/json'
 | 
			
		||||
                    },
 | 
			
		||||
                    body: JSON.stringify({"request":"add", "value": requestData})
 | 
			
		||||
                    })
 | 
			
		||||
                    .then(response => response.json())
 | 
			
		||||
                    .then(response => af(response))
 | 
			
		||||
 | 
			
		||||
                    function af(response) {
 | 
			
		||||
 | 
			
		||||
                        if(response.result == "failed") {
 | 
			
		||||
                            content.innerHTML = ' <h1 style="color:red;"><i style="color:yellow; font-size: 2vw;" class="fa fa-warning"></i>  Erreur de chargement des données - Erreur : ' + response.content  + '</h1>'
 | 
			
		||||
                            console.log("FAILED")
 | 
			
		||||
                
 | 
			
		||||
                        } else if(response.result == "success") {
 | 
			
		||||
 | 
			
		||||
                            if(response.content == "ADDED") {
 | 
			
		||||
                                getPage("link.html") 
 | 
			
		||||
                                
 | 
			
		||||
                            } else if(response.content == "NAME_ALREADY_USED") {
 | 
			
		||||
                                lkaddinfo.innerHTML = "Le nom du raccourci est déjà utilisé"
 | 
			
		||||
                                
 | 
			
		||||
                            } else if(response.content == "DEST_ALREADY_USED") {
 | 
			
		||||
 | 
			
		||||
                                lkaddinfo.innerHTML = "L'URL de raccourci est déjà utilisé"
 | 
			
		||||
                            } else {
 | 
			
		||||
 | 
			
		||||
                                lkaddinfo.innerHTML = "ECHEC - Réessayez plus tard !"
 | 
			
		||||
                            }
 | 
			
		||||
                            
 | 
			
		||||
                                        
 | 
			
		||||
                        
 | 
			
		||||
                        }
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                    
 | 
			
		||||
                }         
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Style-->
 | 
			
		||||
<style>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.hbox h1 {
 | 
			
		||||
 | 
			
		||||
    font-size: large;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table  {
 | 
			
		||||
    color: white;
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_line {
 | 
			
		||||
 
 | 
			
		||||
    padding: 0.5vw;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    vertical-align: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_line a {
 | 
			
		||||
 | 
			
		||||
    color: white;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.hbox {
 | 
			
		||||
    
 | 
			
		||||
    margin: 1%;
 | 
			
		||||
    padding: 1%;
 | 
			
		||||
    background-color: rgb(80, 80, 80);
 | 
			
		||||
    border-radius: 1vw;
 | 
			
		||||
    box-shadow: 5px 5px 5px rgba(80, 80, 80, 0.477) ;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_add {
 | 
			
		||||
 | 
			
		||||
    border-radius: 1vw;
 | 
			
		||||
    border-color: rgb(0, 174, 255);
 | 
			
		||||
    border-width: 1%;
 | 
			
		||||
    border-style: solid;
 | 
			
		||||
    color: white;
 | 
			
		||||
    background-color: transparent;
 | 
			
		||||
    transition: all 0.2s ease 0s;
 | 
			
		||||
    padding: 0.5vw;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_add:hover {
 | 
			
		||||
    box-shadow: 1px 1px 10px rgb(0, 174, 255);
 | 
			
		||||
    background-color: rgb(0, 174, 255);
 | 
			
		||||
    color: black;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_add:active {
 | 
			
		||||
    box-shadow: none;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_edit {
 | 
			
		||||
 | 
			
		||||
    border-radius: 100%;
 | 
			
		||||
    border-color: rgb(0, 174, 255);
 | 
			
		||||
    border-width: 1%;
 | 
			
		||||
    border-style: solid;
 | 
			
		||||
    color: white;
 | 
			
		||||
    background-color: transparent;
 | 
			
		||||
    transition: all 0.2s ease 0s;
 | 
			
		||||
    width: 2.5vw;
 | 
			
		||||
    height: 2.5vw;
 | 
			
		||||
    margin-left: 0.5vw;
 | 
			
		||||
    margin-right: 0.5vw;
 | 
			
		||||
    font-size: 1vw;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_edit:hover {
 | 
			
		||||
    box-shadow: 1px 1px 10px rgb(0, 174, 255);
 | 
			
		||||
    background-color: rgb(0, 174, 255);
 | 
			
		||||
    color: black;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_edit:active {
 | 
			
		||||
    box-shadow: none;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_delete {
 | 
			
		||||
 | 
			
		||||
    border-radius: 100%;
 | 
			
		||||
    border-color: rgb(255, 48, 48);
 | 
			
		||||
    border-width: 1%;
 | 
			
		||||
    border-style: solid;
 | 
			
		||||
    color: white;
 | 
			
		||||
    background-color: transparent;
 | 
			
		||||
    transition: all 0.2s ease 0s;
 | 
			
		||||
    width: 2.5vw;
 | 
			
		||||
    height: 2.5vw;
 | 
			
		||||
    margin-left: 0.5vw;
 | 
			
		||||
    margin-right: 0.5vw;
 | 
			
		||||
    font-size: 1vw;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
.lk_delete:hover {
 | 
			
		||||
    box-shadow: 1px 1px 10px rgb(255, 48, 48);
 | 
			
		||||
    background-color: rgb(255, 48, 48);
 | 
			
		||||
    color: black;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_delete:active {
 | 
			
		||||
    box-shadow: none;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_adduser {
 | 
			
		||||
 | 
			
		||||
border-radius: 1vw;
 | 
			
		||||
border-color: transparent;
 | 
			
		||||
background-color: rgb(80, 80, 80);
 | 
			
		||||
color: white;
 | 
			
		||||
text-align: center;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_add_close {
 | 
			
		||||
 | 
			
		||||
    border-radius: 1vw;
 | 
			
		||||
    border-color: rgb(255, 48, 48);
 | 
			
		||||
    border-width: 1%;
 | 
			
		||||
    border-style: solid;
 | 
			
		||||
    color: white;
 | 
			
		||||
    background-color: transparent;
 | 
			
		||||
    transition: all 0.2s ease 0s;
 | 
			
		||||
    margin: 0.5vw;
 | 
			
		||||
    padding: 0.5vw;
 | 
			
		||||
    font-size: 1vw;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_add_close:hover {
 | 
			
		||||
    box-shadow: 1px 1px 10px rgb(255, 48, 48);
 | 
			
		||||
    background-color: rgb(255, 48, 48);
 | 
			
		||||
    color: black;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_add_close:active {
 | 
			
		||||
    box-shadow: none;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_add_confirm {
 | 
			
		||||
 | 
			
		||||
    border-radius: 1vw;
 | 
			
		||||
    border-color: rgb(0, 174, 255);
 | 
			
		||||
    border-width: 1%;
 | 
			
		||||
    border-style: solid;
 | 
			
		||||
    color: white;
 | 
			
		||||
    background-color: transparent;
 | 
			
		||||
    transition: all 0.2s ease 0s;
 | 
			
		||||
    margin: 0.5vw;
 | 
			
		||||
    padding: 0.5vw;
 | 
			
		||||
    font-size: 1vw;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_add_confirm:hover {
 | 
			
		||||
    box-shadow: 1px 1px 10px rgb(0, 174, 255);
 | 
			
		||||
    background-color: rgb(0, 174, 255);
 | 
			
		||||
    color: black;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lk_add_confirm:active {
 | 
			
		||||
    box-shadow: none;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.inp {
 | 
			
		||||
 | 
			
		||||
    border-style: hidden;
 | 
			
		||||
    border-radius: 1vw;
 | 
			
		||||
    padding: 0.2vw;
 | 
			
		||||
    padding-left: 1vw;
 | 
			
		||||
    transition: all 0.2s ease 0s;
 | 
			
		||||
    margin-bottom: 0.5vw;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.inp:hover {
 | 
			
		||||
 | 
			
		||||
    box-shadow: 2px 2px 5px rgba(255, 255, 255, 0.477) ;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.inp:focus {
 | 
			
		||||
 | 
			
		||||
    box-shadow: 5px 5px 5px rgba(0, 174, 255, 0.477) ;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
@@ -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) {
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										268
									
								
								routes/link.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										268
									
								
								routes/link.js
									
									
									
									
									
										Normal file
									
								
							@@ -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: '<img width="200" class="w-25 sidebar-image noside" src="images/userspics/' + check.name + '.png">' });
 | 
			
		||||
  
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								users/0cee5da6-6812-49d8-97f5-2df5c1d78191.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								users/0cee5da6-6812-49d8-97f5-2df5c1d78191.json
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
}
 | 
			
		||||
@@ -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
 | 
			
		||||
}
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "username": "root",
 | 
			
		||||
  "password": "U2FsdGVkX18KoGGTPqZw/E9PiLQaUuEZxyHdbdAErO0=",
 | 
			
		||||
  "uuid": "aca3c9aa-5b42-477f-b179-f33211a425d3",
 | 
			
		||||
  "fullname": "Administrateur",
 | 
			
		||||
  "permissionLevel": 3,
 | 
			
		||||
  "token": {},
 | 
			
		||||
  "lastconnexion": 0
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										13
									
								
								users/c8f353a4-d0df-4c10-bccc-d4f47daf0f51.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								users/c8f353a4-d0df-4c10-bccc-d4f47daf0f51.json
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
}
 | 
			
		||||
@@ -32,6 +32,7 @@
 | 
			
		||||
 | 
			
		||||
            color: white;
 | 
			
		||||
            background-color: red;
 | 
			
		||||
            cursor: pointer;
 | 
			
		||||
        }
 | 
			
		||||
    </style>
 | 
			
		||||
  </head>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user