Compare commits

..

No commits in common. "main" and "DEV" have entirely different histories.
main ... DEV

25 changed files with 157 additions and 2357 deletions

40
Jenkinsfile vendored
View File

@ -2,9 +2,36 @@ pipeline {
agent any agent any
stages { stages {
stage('[Neutral] - Check Version') {
steps {
script {
def commit_name = env.TAG_NAME
if(commit_name) {
echo "[Neutral] - Deployement version reconnu"
} else {
currentBuild.result = 'ABORTED'
echo "[Neutral] - Deployement version non reconnu"
return
}
}
}
}
stage('[Neutral] - Test') { stage('[Neutral] - Test') {
steps { steps {
script { script {
def commit_name = env.TAG_NAME
if(commit_name) {
echo "[Neutral] - Deployement version reconnu"
} else {
currentBuild.result = 'ABORTED'
echo "[Neutral] - Deployement version non reconnu"
return
}
echo "[Neutral-Deploy] - Test Stage" echo "[Neutral-Deploy] - Test Stage"
sh "rm -rf neutral" sh "rm -rf neutral"
sh "git clone https://git.raphix.fr/infrastructure/neutral.git" sh "git clone https://git.raphix.fr/infrastructure/neutral.git"
@ -13,12 +40,25 @@ pipeline {
sh "ENV='TEST' node bin/www" sh "ENV='TEST' node bin/www"
} }
} }
} }
stage('[Neutral] - Déploiement') { stage('[Neutral] - Déploiement') {
steps { steps {
script { script {
def commit_name = env.TAG_NAME
if(commit_name) {
echo "[Neutral] - Deployement version reconnu"
} else {
currentBuild.result = 'ABORTED'
echo "[Neutral] - Deployement version non reconnu"
return
}
def doesJavaRock = input(message: 'Confirmation de Déploiement', ok: 'Déployer')
echo "[Neutral-Deploy] - Deploy Stage" echo "[Neutral-Deploy] - Deploy Stage"
sh "ssh raphix@raphix.fr sudo apt update -y" sh "ssh raphix@raphix.fr sudo apt update -y"
sh "ssh raphix@raphix.fr sudo apt upgrade -y" sh "ssh raphix@raphix.fr sudo apt upgrade -y"

5
app.js
View File

@ -20,9 +20,6 @@ var uploadRouter = require('./routes/upload');
var userManagerRouter = require('./routes/usermanager'); var userManagerRouter = require('./routes/usermanager');
var linkRouter = require('./routes/link'); var linkRouter = require('./routes/link');
var fileRouter = require("./routes/filemanager") var fileRouter = require("./routes/filemanager")
var downloadRouter = require("./routes/download")
var cvRouter = require("./routes/cv")
var app = express(); var app = express();
@ -50,8 +47,6 @@ app.use('/upload', uploadRouter)
app.use('/usermanager', userManagerRouter) app.use('/usermanager', userManagerRouter)
app.use('/link', linkRouter) app.use('/link', linkRouter)
app.use("/filemanager", fileRouter) app.use("/filemanager", fileRouter)
app.use("/download", downloadRouter)
app.use("/cv", cvRouter)
// catch 404 and forward to error handler // catch 404 and forward to error handler

View File

@ -31,7 +31,10 @@ module.exports.createUser = (name, password, level, fullname) => {
"uuid": userUUID, "uuid": userUUID,
"fullname": fullname, "fullname": fullname,
"permissionLevel":level, "permissionLevel":level,
"tokens":{}, "token":{
},
"lastconnexion":0 "lastconnexion":0
} }
@ -85,7 +88,7 @@ module.exports.deleteToken = (username) => {
const userData = JSON.parse(fs.readFileSync(__dirname + path.sep + "users" + path.sep + this.getUUID(username) + ".json", 'utf-8')) const userData = JSON.parse(fs.readFileSync(__dirname + path.sep + "users" + path.sep + this.getUUID(username) + ".json", 'utf-8'))
userData.tokens = {} userData.token = {}
fs.writeFileSync(__dirname + path.sep + "users" + path.sep + this.getUUID(username) + ".json", JSON.stringify(userData, null, 2)) fs.writeFileSync(__dirname + path.sep + "users" + path.sep + this.getUUID(username) + ".json", JSON.stringify(userData, null, 2))
@ -108,13 +111,13 @@ module.exports.checkToken = (req, res) => {
fs.writeFileSync(__dirname + path.sep + "users" + path.sep + userData.uuid + ".json", JSON.stringify(userData, null, 2)) fs.writeFileSync(__dirname + path.sep + "users" + path.sep + userData.uuid + ".json", JSON.stringify(userData, null, 2))
if(userData.tokens[req.cookies.tokenID].livableToken == true) { if(userData.token.livableToken == true) {
const checkTokenData = {"name":user, "permLevel": userData.permissionLevel, "fullname":userData.fullname, "lastconnexion":userData.lastconnexion}; const checkTokenData = {"name":user, "permLevel": userData.permissionLevel, "fullname":userData.fullname, "lastconnexion":userData.lastconnexion};
return checkTokenData; return checkTokenData;
} else { } else {
const tokenDate = new Date(userData.tokens[req.cookies.tokenID].createdAt) const tokenDate = new Date(userData.token.createdAt)
const nowDate = new Date(Date.now()) const nowDate = new Date(Date.now())
if(tokenDate.getDay() == nowDate.getDay() && tokenDate.getMonth() == nowDate.getMonth()) { if(tokenDate.getDay() == nowDate.getDay() && tokenDate.getMonth() == nowDate.getMonth()) {
@ -123,10 +126,7 @@ module.exports.checkToken = (req, res) => {
return checkTokenData; return checkTokenData;
} else { } else {
this.clearSpecificCookie(req.cookies.tokenID);
res.clearCookie('tokenID'); res.clearCookie('tokenID');
const checkTokenData = {"name":false} const checkTokenData = {"name":false}
return checkTokenData; return checkTokenData;
@ -143,43 +143,6 @@ module.exports.checkToken = (req, res) => {
}
module.exports.clearSpecificCookie = (token) => {
const tokens = this.getAllToken()
const user = tokens.get(token)
const users = this.getUsers()
const userData = JSON.parse(fs.readFileSync(__dirname + path.sep + "users" + path.sep + users.get(user) + ".json", 'utf-8'))
userData["tokens"].token = null;
fs.writeFileSync(__dirname + path.sep + "users" + path.sep + userData.uuid + ".json", JSON.stringify(userData, null, 2))
}
module.exports.clearCookies = (token) => {
const tokens = this.getAllToken()
const user = tokens.get(token)
const users = this.getUsers()
const userData = JSON.parse(fs.readFileSync(__dirname + path.sep + "users" + path.sep + users.get(user) + ".json", 'utf-8'))
userData["tokens"] = {};
fs.writeFileSync(__dirname + path.sep + "users" + path.sep + userData.uuid + ".json", JSON.stringify(userData, null, 2))
} }
module.exports.getFullName = (username) => { module.exports.getFullName = (username) => {
@ -203,13 +166,19 @@ module.exports.generateTokenID = (username, userData, req, users) => {
livable = true; livable = true;
} }
Object.defineProperties(newUserData, {
newUserData.tokens[tokenID] = { token: {
value: {
"tokenID":tokenID, "tokenID":tokenID,
"livableToken": livable, "livableToken": livable,
"createdAt": date "createdAt": date
},
writable: true
} }
})
fs.writeFileSync(__dirname + path.sep + "users" + path.sep + users.get(username) + ".json", JSON.stringify(newUserData, null, 2)) fs.writeFileSync(__dirname + path.sep + "users" + path.sep + users.get(username) + ".json", JSON.stringify(newUserData, null, 2))
return tokenID return tokenID
@ -235,13 +204,7 @@ module.exports.getAllToken = () => {
fs.readdirSync(__dirname + path.sep + "users").forEach(file => { fs.readdirSync(__dirname + path.sep + "users").forEach(file => {
const fileData = JSON.parse(fs.readFileSync(__dirname + path.sep + "users" + path.sep + file, 'utf-8')) const fileData = JSON.parse(fs.readFileSync(__dirname + path.sep + "users" + path.sep + file, 'utf-8'))
token.set(fileData.token.tokenID, fileData.username)
for(var tokenIDs of Object.keys(fileData.tokens)) {
token.set(fileData.tokens[tokenIDs].tokenID, fileData.username)
console.log(token)
}
}) })

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "neutral", "name": "neutral",
"version": "DEV_5.0", "version": "DEV_3.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "neutral", "name": "neutral",
"version": "DEV_5.0", "version": "DEV_3.0",
"dependencies": { "dependencies": {
"@popperjs/core": "^2.11.6", "@popperjs/core": "^2.11.6",
"bootstrap": "^5.2.2", "bootstrap": "^5.2.2",

View File

@ -1,9 +1,9 @@
{ {
"name": "neutral", "name": "neutral",
"version": "DEV_6", "version": "DEV_5.0",
"private": true, "private": true,
"nodemonConfig": { "nodemonConfig": {
"ext": "js, html", "ext": "js",
"ignore": [ "ignore": [
"*.json" "*.json"
], ],

View File

@ -1,3 +1,5 @@
const account = document.getElementById("account") const account = document.getElementById("account")
const menu = document.getElementById("accmenu") const menu = document.getElementById("accmenu")
const sidebar = document.getElementById("sidebar") const sidebar = document.getElementById("sidebar")
@ -143,7 +145,6 @@ const b4 = document.getElementById("s-moni")
const b5 = document.getElementById("s-device") const b5 = document.getElementById("s-device")
const b6 = document.getElementById("s-cv") const b6 = document.getElementById("s-cv")
const b7 = document.getElementById("s-link") const b7 = document.getElementById("s-link")
const b8 = document.getElementById("s-admin")
const settings = document.getElementById("settingsBtn") const settings = document.getElementById("settingsBtn")
b1.addEventListener("click", () => { b1.addEventListener("click", () => {
@ -182,11 +183,6 @@ b7.addEventListener("click", () => {
}) })
b8.addEventListener("click", () => {
getPage("panel.html")
})
settings.addEventListener("click", () => { settings.addEventListener("click", () => {
getPage("settings.html") getPage("settings.html")

View File

@ -153,6 +153,10 @@ body {
} }
.viewbar { .viewbar {
display: block !important; display: block !important;
@ -212,7 +216,7 @@ body {
} }
.edropdown-content { .edropdown-content {
text-align: center;
display: none; display: none;
background-color: rgb(80, 80, 80); background-color: rgb(80, 80, 80);
position: absolute; position: absolute;
@ -273,12 +277,6 @@ body {
overflow:scroll; overflow:scroll;
overflow-x:hidden; overflow-x:hidden;
}
.sidebar:hover .d-content {
margin-left: 15%;
} }
.sidecontent{ .sidecontent{
@ -291,29 +289,10 @@ body {
.sidebar-content { .sidebar-content {
text-align: center;
height: 83%; height: 83%;
display: flex; padding-top: 50%;
justify-content: center; padding-bottom: 50%;
align-items: center;
flex-direction: column;
}
.middle {
display: flex;
justify-content: start;
flex-direction: column;
gap: 1vw;
}
.sidebar:hover .middle{
gap: 0;
}
.sidebar:hover .middle {
width: 100%;
} }
@ -326,7 +305,7 @@ body {
text-align: unset; text-align: unset;
padding-top: 5%; padding-top: 5%;
padding-left: 10%; padding-left: 30%;
} }
.sidebar-footer { .sidebar-footer {
@ -368,8 +347,6 @@ body {
-webkit-user-select: none; /* Chrome, Safari, Opéra depuis la version 15 */ -webkit-user-select: none; /* Chrome, Safari, Opéra depuis la version 15 */
-ms-user-select: none; /* Internet explorer depuis la version 10 et Edge */ -ms-user-select: none; /* Internet explorer depuis la version 10 et Edge */
user-select: none; /* Propriété standard */ user-select: none; /* Propriété standard */
margin-left: 2%;
text-align: center;
} }
.username { .username {
@ -410,9 +387,9 @@ body {
.sidebar-item { .sidebar-item {
transition: all 0.2s ease 0s; transition: all 0.2s ease 0s;
padding: 10%; padding: 5%;
width: 100%; margin-top: 5%;
margin-bottom: 5%;
} }
.sidebar-item:hover { .sidebar-item:hover {
@ -441,6 +418,7 @@ body {
} }
.edropdown-content { .edropdown-content {
text-align: center;
display: none; display: none;
background-color: rgb(80, 80, 80); background-color: rgb(80, 80, 80);
position: absolute; position: absolute;

View File

@ -1,852 +0,0 @@
<div class="home">
<h1>Mon CV</h1>
</br>
<div class="homepanel">
<div class="row w-100">
<div class="hbox col-lg">
<h1><i class="fas fa-puzzle-piece"></i> Sections</h1>
<div class="cv-sections">
<div class="row w-100">
<select id="cv-section-selector" class="cv-selector">
<option>Qui suis-je ?</option>
<option>Contact</option>
<option>Formations</option>
<option>Diplomes & Certifications</option>
<option>Passions et activités</option>
<option>Ma recherche de stage</option>
</select>
</div>
<div class="row w-100">
<textarea id="cv-section-textarea" class="cv-textarea">
</textarea>
</div>
<div class="row w-100">
<button id="cv-section-save" class="cv-save col-lg-2"><i class="fa fa-save"></i> Sauvegarder</button>
</div>
<div class="row w-100">
<p id="cv-section-info" class="cv-info" style="color:rgb(255, 48, 48)"></p>
</div>
</div>
</div>
<div class="hbox col-lg">
<h1><i class="fa fa-gear"></i> Projets</h1>
<div class="cv-sections">
<div class="row w-100">
<select id="cv-project-selector" class="col-lg-10 cv-selector">
</select>
<button id="cv-project-add" class="col-lg-1 cv-plus"><i class="fa fa-plus"></i></button>
</div>
<div class="row w-100">
<textarea id="cv-project-textarea" class="cv-textarea">
</textarea>
</div>
<div class="row cv-upload-section">
<p class="col-lg-8" style="font-size: 14px;">Image : <span id="cv-m-upload-name">Aucune image !</span></p>
<button id="cv-m-upload-btn" style="margin-left: 10%;" class="col-lg-2 cv-upload"><i class="fa fa-upload"></i> Upload</button>
<input id='cv-m-upload-file' type='file' hidden/>
</div>
<div class="row w-100">
<button id="cv-project-save" class="cv-save col-lg-2"><i class="fa fa-save"></i> Sauvegarder</button>
<button id="cv-project-del" class="cv-del col-lg-2"><i class="fa fa-trash"></i> Effacer</button>
</div>
<div class="row w-100">
<p id="cv-project-info" class="cv-info" style="color:rgb(255, 48, 48)"></p>
</div>
</div>
</div>
</div>
<div class="row w-100">
<div class="hbox col-lg">
<h1><i class="fa fa-signal"></i> Statistiques</h1>
<p>Coming soon ...</p>
</div>
</div>
</div>
</div>
<dialog class="cv_addproject" id="cv-project-dialog">
<h1><i class="fa fa-project-diagram"></i> Créer un projet</h1>
<p>Nom du projet :</p>
<input class="inp" id="cv-project-add-input" type="text">
<div style="color: rgb(255, 76, 76);" id="cv-project-add-info"></div>
</div>
<div class="cv-upload-section">
<p style="font-size: 14px;">Image : <span id="cv-upload-name">NULL_NAME</span> <button id="cv-upload-btn" style="margin-left: 10%;" class="cv-upload"><i class="fa fa-upload"></i> Upload</button></p>
<input id='cv-upload-file' type='file' hidden/>
</div>
<button onclick="getPage('cv.html')" id="cv-project-add-close" class="cv_add_close">Annuler</button>
<button id="cv-project-add-confirm" class="cv_add_confirm">Ajouter</button>
</dialog>
<script>
if(typeof checkDelare == "undefined") {
const checkDelare = true;
const sectionTextArea = document.getElementById("cv-section-textarea")
const sectionSelector = document.getElementById("cv-section-selector")
const sectionSave = document.getElementById("cv-section-save")
const sectionInfo = document.getElementById("cv-section-info")
const projectTextArea = document.getElementById("cv-project-textarea")
const projectSelector = document.getElementById("cv-project-selector")
const projectSave = document.getElementById("cv-project-save")
const projectInfo = document.getElementById("cv-project-info")
const projectDelete = document.getElementById("cv-project-del")
const projectAdd = document.getElementById("cv-project-add")
const projectDialog = document.getElementById("cv-project-dialog")
const projectAddInput = document.getElementById("cv-project-add-input")
const projectAddConfirm = document.getElementById("cv-project-add-confirm")
const projectAddInfo = document.getElementById("cv-project-add-info")
const projectUploadFile = document.getElementById("cv-upload-file")
const projectUploadBtn = document.getElementById("cv-upload-btn")
const projectUploadName = document.getElementById("cv-upload-name")
const eprojectUploadFile = document.getElementById("cv-m-upload-file")
const eprojectUploadBtn = document.getElementById("cv-m-upload-btn")
const eprojectUploadName = document.getElementById("cv-m-upload-name")
var sectionSelectedMD = null;
var projectSelectedMD = null;
loadText(sectionTextArea, "WHOAMI")
getProjects(projectSelector)
projectAddConfirm.addEventListener("click", () => {
projectAddInfo.innerHTML = ""
const refusedChar = ['\\','/' ,':' ,'*','?' ,'"','<','>','|']
var wrongName = true;
for(var char of refusedChar) {
console.log(wrongName)
if(projectAddInput.value.includes(char)) {
wrongName = false;
}
}
if(wrongName == true && projectAddInput.value != "" && projectAddInput.value != "WHOAMI" && projectAddInput.value != "CONTACT" && projectAddInput.value != "FORMATION" && projectAddInput.value != "DIPLOME" && projectAddInput.value != "LOBBIES" && projectAddInput.value != "FIND") {
fetch('/cv', {
method: 'POST',
redirect: 'follow',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({"request":"add", "value": projectAddInput.value})
})
.then(response => response.json())
.then(response => res(response))
function res(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 == "ERROR_NOT_PERMITTED") {
projectAddInfo.innerHTML = "Erreur, le fichier n'a pas été ajouté correctement !"
} else {
projectDialog.close()
getProjects(projectSelector)
loadText(projectTextArea, projectAddInput.value)
projectSelector.value = projectAddInput.value
}
}
}
if(projectUploadFile.files.length > 0) {
const file_acc = new FormData();
file_acc.append("apic", projectUploadFile.files[0])
fetch('/upload', {
method: 'POST',
mode:"cors",
cache:"no-cache",
credentials:"same-origin",
headers: {
"uploadforproject": projectAddInput.value
},
referrerPolicy:"no-referrer",
redirect: 'follow',
body: file_acc
}).then(response => response.json())
.then(response => resupload(response))
function resupload(response) {
if(response.result == "ERROR") {
projectInfo.innerHTML = "L'image n'a pas été upload !"
}
}
}
} else {
projectAddInfo.innerHTML = "Ce nom n'est pas autorisé !"
}
})
projectAdd.addEventListener("click", () => {
projectDialog.showModal()
projectAddInput.value = ""
projectUploadName.innerHTML = "Aucune image."
projectUploadFile.value = null;
})
projectUploadFile.addEventListener("change", () => {
projectUploadName.innerHTML = projectUploadFile.files[0].name
})
projectUploadBtn.addEventListener("click", () => {
projectUploadFile.click()
})
eprojectUploadBtn.addEventListener("click", () => {
eprojectUploadFile.click()
})
eprojectUploadFile.addEventListener("change", () => {
eprojectUploadName.innerHTML = eprojectUploadFile.files[0].name
if(eprojectUploadFile.files.length > 0) {
const file_acc = new FormData();
file_acc.append("apic", eprojectUploadFile.files[0])
fetch('/upload', {
method: 'POST',
mode:"cors",
cache:"no-cache",
credentials:"same-origin",
headers: {
"uploadforproject": projectSelector.value
},
referrerPolicy:"no-referrer",
redirect: 'follow',
body: file_acc
}).then(response => response.json())
.then(response => resupload(response))
function resupload(response) {
if(response.result == "ERROR") {
projectInfo.innerHTML = "L'image n'a pas été upload !"
} else {
projectInfo.innerHTML = "<span style='color:rgb(130, 255, 163); '>L'image a été correctement upload !</span>"
}
}
}
})
projectDelete.addEventListener("click", () => {
const opt = projectSelector.value
deleteProject(opt)
})
sectionSelector.addEventListener("change", () => {
const opt = sectionSelector.value
if(opt == "Qui suis-je ?") {
loadText(sectionTextArea, "WHOAMI")
} else if(opt == "Contact") {
loadText(sectionTextArea, "CONTACT")
} else if(opt == "Formations") {
loadText(sectionTextArea, "FORMATION")
} else if(opt == "Diplomes & Certifications") {
loadText(sectionTextArea, "DIPLOME")
} else if(opt == "Passions et activités") {
loadText(sectionTextArea, "LOBBIES")
} else if(opt == "Ma recherche de stage") {
loadText(sectionTextArea, "FIND")
}
})
projectSelector.addEventListener("change", () => {
const opt = projectSelector.value
loadText(projectTextArea, opt)
})
sectionSave.addEventListener("click", () => {
sectionInfo.innerHTML = ""
fetch('/cv', {
method: 'POST',
redirect: 'follow',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({"request":"set", "value": sectionTextArea.value, "type": sectionSelectedMD})
})
.then(response => response.json())
.then(response => res(response))
function res(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 == "ERROR_NOT_PERMITTED") {
sectionInfo.innerHTML = "Erreur, le fichier n'a pas été sauvegardé correctement !"
} else {
sectionInfo.innerHTML = "<span style='color:rgb(130, 255, 163); '>Le fichier a été sauvegardé avec succès !</span>"
}
}
}
})
projectSave.addEventListener("click", () => {
projectInfo.innerHTML = ""
fetch('/cv', {
method: 'POST',
redirect: 'follow',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({"request":"set", "value": projectTextArea.value, "type": projectSelectedMD})
})
.then(response => response.json())
.then(response => res(response))
function res(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 == "ERROR_NOT_PERMITTED") {
projectInfo.innerHTML = "Erreur, le fichier n'a pas été sauvegardé correctement !"
} else {
projectInfo.innerHTML = "<span style='color:rgb(130, 255, 163); '>Le fichier a été sauvegardé avec succès !</span>"
}
}
}
})
loadText(sectionTextArea, "WHOAMI")
function loadText(textArea, requestElement) {
sectionSelectedMD = requestElement
projectSelectedMD = projectSelector.value
fetch('/cv', {
method: 'POST',
redirect: 'follow',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({"request":"get", "value": requestElement})
})
.then(response => response.json())
.then(response => res(response))
function res(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") {
textArea.value = response.content
}
}
}
function getProjects(selector) {
fetch('/cv', {
method: 'POST',
redirect: 'follow',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({"request":"get-projects"})
})
.then(response => response.json())
.then(response => res(response))
function res(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") {
const projectList = response.content
var projectSelectorInner = new Array();
for(var projet of projectList) {
projectSelectorInner.push("<option>" + projet + "</option>")
}
if(projectList.length == 0) {
projectInfo.innerHTML = "<span style='color: white;'>Aucun projet</span>"
projectTextArea.innerHTML = 'Aucun projet n\'est disponible'
}
selector.innerHTML = projectSelectorInner.join("")
loadText(projectTextArea, selector.value)
}
}
}
function deleteProject(opt) {
fetch('/cv', {
method: 'POST',
redirect: 'follow',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({"request":"del", "value": opt})
})
.then(response => response.json())
.then(response => res(response))
function res(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 == "ERROR_NOT_PERMITTED") {
projectInfo.innerHTML = "Erreur, le fichier n'a pas été supprimé correctement !"
} else {
projectInfo.innerHTML = "<span style='color:rgb(130, 255, 163); '>Le fichier a été supprimé avec succès !</span>"
}
getProjects(projectSelector)
}
}
}
}
</script>
<!-- Style-->
<style>
.cv_addproject {
border-radius: 1vw;
border-color: transparent;
background-color: rgb(80, 80, 80);
color: white;
text-align: center;
}
.cv_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;
}
.cv_add_close:hover {
box-shadow: 1px 1px 10px rgb(255, 48, 48);
background-color: rgb(255, 48, 48);
color: black;
}
.cv_add_close:active {
box-shadow: none;
}
.cv_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;
}
.cv_add_confirm:hover {
box-shadow: 1px 1px 10px rgb(0, 174, 255);
background-color: rgb(0, 174, 255);
color: black;
}
.cv_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) ;
}
.cv-info {
margin-top: 5%;
}
.cv-upload-section {
align-items: center;
margin-top: 3%;
}
.cv-selector {
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;
font-size: 0.7vw;
padding: 0.5vw;
margin-bottom: 3%;
}
.cv-selector:hover {
box-shadow: 1px 1px 10px rgb(0, 174, 255);
background-color: rgb(0, 174, 255);
color: black;
}
.cv-selector:active {
box-shadow: none;
}
.cv-selector option {
background-color: rgb(80, 80, 80);
color: white;
}
.cv-upload {
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;
font-size: 0.7vw;
padding: 0.5vw;
}
.cv-upload:hover {
box-shadow: 1px 1px 10px rgb(0, 174, 255);
background-color: rgb(0, 174, 255);
color: black;
}
.cv-upload:active {
box-shadow: none;
}
.cv-save{
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;
font-size: 0.7vw;
padding: 0.5vw;
margin-top: 3%;
margin-right: 3%;
}
.cv-save:hover {
box-shadow: 1px 1px 10px rgb(0, 174, 255);
background-color: rgb(0, 174, 255);
color: black;
}
.cv-save:active {
box-shadow: none;
}
.cv-plus {
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;
font-size: 0.7vw;
padding: 0.5vw;
margin-bottom: 3%;
margin-left: 2%;
}
.cv-plus:hover {
box-shadow: 1px 1px 10px rgb(0, 174, 255);
background-color: rgb(0, 174, 255);
color: black;
}
.cv-plus:active {
box-shadow: none;
}
.cv-del {
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;
font-size: 0.7vw;
padding: 0.5vw;
margin-top: 3%;
margin-right: 3%;
}
.cv-del:hover {
box-shadow: 1px 1px 10px rgb(255, 48, 48);
background-color: rgb(255, 48, 48);
color: black;
}
.cv-del:active {
box-shadow: none;
}
.cv-textarea {
border-radius: 1vw;
padding: 3%;
color: black;
height: 15vw;
}
.cv-sections {
padding: 2% !important;
}
.hbox h1 {
font-size: large;
}
table {
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) ;
}
</style>

View File

@ -1,23 +1,19 @@
<div class="files"> <div class="files">
<h1>Gestionnaire de fichiers</h1> <h1>Gestionnnaire de fichiers</h1>
</br> </br>
<div class="homepanel"> <div class="homepanel">
<div class="row w-100"> <div class="row w-100">
<div class="hbox col-lg"> <div class="hbox col-lg">
<div class="fi_act"> <div class="fi_act">
<h1><i class="fa fa-folder"></i> Fichiers</h1> <h1><i class="fa fa-folder"></i> Fichiers</h1>
<hr>
<div> <div>
<button id="fi_new_folder" class="fi_act_btn"><i class="fa fa-folder"></i> Nouveau dossier</button> <button class="fi_act_btn"><i class="fa fa-folder"></i> Nouveau dossier</button>
<input id='fi_upload_file' type='file' hidden multiple /> <button class="fi_act_btn"><i class="fa fa-upload"></i> Upload</button>
<button id="fi_upload" class="fi_act_btn"><i class="fa fa-upload"></i> Upload</button>
</div> </div>
</div> </div>
<div class="fi_current_directory"> <div class="fi_current_directory">
<input id="fi_current_directory" class="fi_current_p" value="/" type="text"> <input id="fi_current_directory" class="fi_current_p" value="C:\Users\picot\OneDrive\Bureau\Developement\Neutral\neutral" type="text">
</div> </div>
<p id="fi_info" style="text-align: start; color: rgb(255, 48, 48);"></p>
<div id="fileExplorer" class="fi_container"> <div id="fileExplorer" class="fi_container">
<p style="text-align: start; color: rgb(255, 48, 48);">Le répertoire n'existe pas ou est vide.</p> <p style="text-align: start; color: rgb(255, 48, 48);">Le répertoire n'existe pas ou est vide.</p>
</div> </div>
@ -26,21 +22,6 @@
</div> </div>
</div> </div>
<div id="fi_dialog_input">
</div>
<dialog class="fi_addfolder" id="fi_new_folder_dialog">
<h1><i class="fa fa-folder"></i> Créer un dossier</h1>
<p>Nom du dossier :</p>
<input class="inp" id="fi_add_name" type="text">
<div style="color: rgb(255, 76, 76);" id="fi_folder_info"></div>
</div>
<button id="fi_add_close" class="fi_add_close">Annuler</button>
<button id="fi_add_confirm" class="fi_add_confirm">Ajouter</button>
</dialog>
<script> <script>
if(typeof currentDir == "undefined") { if(typeof currentDir == "undefined") {
@ -48,183 +29,9 @@
const currentDir = document.getElementById("fi_current_directory") const currentDir = document.getElementById("fi_current_directory")
const fileExplorer = document.getElementById("fileExplorer") const fileExplorer = document.getElementById("fileExplorer")
const fileExplorerError = '<div id="last_directory" class="fi_file"><p style="margin-left: 1vw;text-align:start;margin-bottom: 1vw !important;"><i class="fa fa-arrow-left"></i> Revenir au dossier parent</p></div>' + fileExplorer.outerHTML const fileExplorerError = '<div id="last_directory" class="fi_file"><p style="margin-left: 1vw;text-align:start;margin-bottom: 1vw !important;"><i class="fa fa-arrow-left"></i> Revenir au dossier parent</p></div>' + fileExplorer.outerHTML
const fiInfo = document.getElementById("fi_info")
getDirectory(currentDir.value) getDirectory(currentDir.value)
const newFolderBtn = document.getElementById("fi_new_folder")
const newFolderDialog = document.getElementById("fi_new_folder_dialog")
const newFolderConfirm = document.getElementById("fi_add_confirm")
const newFolderName = document.getElementById("fi_add_name")
const newFolderInfo = document.getElementById("fi_folder_info")
const dialogInput = document.getElementById("fi_dialog_input")
const newFolderClose = document.getElementById("fi_add_close")
newFolderClose.addEventListener("click", () => {
newFolderDialog.close()
getDirectory(currentDir.value)
})
newFolderBtn.addEventListener("click", () => {
newFolderDialog.showModal()
newFolderName.value = ""
newFolderInfo.value = ""
})
newFolderConfirm.addEventListener("click", () => {
const folderDir = currentDir + newFolderName.value
newFolderInfo.value = ""
var wrongName = true
var justspace = false
const refusedChar = ['\\','/' ,':' ,'*','?' ,'"','<','>','|']
for(var char of refusedChar) {
if(newFolderName.value.includes(char)) {
wrongName = false
}
}
for (var i = 0; i < newFolderName.value.length; i++) {
var char = newFolderName.value.charAt(i)
if(char != " ") {
justspace = true
}
}
if(wrongName == false) {
newFolderInfo.innerHTML = "<p>Le nom du dossier est invalide car il contient des caractères interdits !</p>"
} else if(justspace == false) {
newFolderInfo.innerHTML = "<p>Le nom du dossier ne peut être vide !</p>"
} else {
fetch('/filemanager', {
method: 'POST',
redirect: 'follow',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({"request":"addfolder", "value": newFolderName.value, "currentDir" : currentDir.value})
})
.then(response => response.json())
.then(response => res(response))
function res(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 == "ERROR_ALREADY_EXIST") {
newFolderInfo.innerHTML = "<p>Le nom du dossier est déjà existant !</p>"
} else if(response.content == "ERROR_NOT_MAKEABLE") {
newFolderInfo.innerHTML = "<p>Vous n'avez pas la permission !</p>"
} else {
newFolderDialog.close()
getDirectory(currentDir.value)
}
}
}
}
})
const uploadBtn = document.getElementById("fi_upload")
const uploadFiles = document.getElementById("fi_upload_file")
uploadBtn.addEventListener("click", () => {
uploadFiles.click()
})
uploadFiles.addEventListener("change", () => {
var stopSend = false
fiInfo.innerHTML = ""
for(var file of uploadFiles.files) {
if(stopSend == false) {
const file_acc = new FormData();
file_acc.append("apic", file)
fetch('/upload', {
method: 'POST',
mode:"cors",
cache:"no-cache",
credentials:"same-origin",
headers: {
"uploadfiledirectory": currentDir.value
},
referrerPolicy:"no-referrer",
redirect: 'follow',
body: file_acc
}).then(response => response.json())
.then(response => resupload(response))
function resupload(response) {
if(response.result == "ERROR") {
fiInfo.innerHTML = "Les fichiers n'ont pas pu être uploadés !"
stopSend = true
} else {
getDirectory(currentDir.value)
fiInfo.innerHTML = "<span style='color: rgb(130, 255, 163);'>Le fichier <strong>" + file.name + "</strong> a été upload !</span>"
}
}
}
}
uploadFiles.value = null
})
currentDir.addEventListener("change", () => { currentDir.addEventListener("change", () => {
@ -234,10 +41,7 @@
function getDirectory(directory) { function getDirectory(directory) {
fiInfo.innerHTML = ""
var fileExplorerList = new Array() var fileExplorerList = new Array()
var dialogExlorerList = new Array()
fetch('/filemanager', { fetch('/filemanager', {
method: 'POST', method: 'POST',
@ -270,68 +74,11 @@
if(response.content == "ERROR_NOT_EXIST") { if(response.content == "ERROR_NOT_EXIST") {
fileExplorer.innerHTML = fileExplorerError fileExplorer.innerHTML = fileExplorerError
const last_dir = document.getElementById("last_directory")
last_dir.addEventListener("click", () => {
var cdSplit = currentDir.value.split("/")
if(cdSplit.slice(-1) == "") {
cdSplit.pop()
cdSplit.pop()
} else {
cdSplit.pop()
}
currentDir.value = cdSplit.join("/")
if(currentDir.value == "") {
currentDir.value = "/"
}
getDirectory(currentDir.value)
})
console.log("DENY") console.log("DENY")
} else if(response.content == "ERROR_NOT_PERMITTED") { } else if(response.content == "ERROR_NOT_PERMITTED") {
fileExplorer.innerHTML = '<div id="last_directory" class="fi_file"><p style="margin-left: 1vw;text-align:start;margin-bottom: 1vw !important;"><i class="fa fa-arrow-left"></i> Revenir au dossier parent</p></div>' +'<p style="text-align: start; padding: 1vw; color: rgb(255, 48, 48);">Vous n\'avez pas la permission de regarder ce dossier.</p>' fileExplorer.innerHTML = '<p style="text-align: start; padding: 1vw; color: rgb(255, 48, 48);">Vous n\'avez pas la permission de regarder ce dossier.</p>'
const last_dir = document.getElementById("last_directory")
last_dir.addEventListener("click", () => {
var cdSplit = currentDir.value.split("/")
if(cdSplit.slice(-1) == "") {
cdSplit.pop()
cdSplit.pop()
} else {
cdSplit.pop()
}
currentDir.value = cdSplit.join("/")
if(currentDir.value == "") {
currentDir.value = "/"
}
getDirectory(currentDir.value)
})
console.log("DENY") console.log("DENY")
} else { } else {
@ -372,8 +119,8 @@
if(file.directory == true) { if(file.directory == true) {
fileExplorerList.push('<div id="' + file.name + '_directory" class="fi_file row"> <p class="col-lg"><i style="color:yellow;" class="fa fa-folder"></i> ' + file.name + '</p> <p class="col-lg"><i class="fa fa-calendar"></i> Dernière édition : ' + lastedition + '</p> <p class="col-lg"><i class="fas fa-weight-hanging"></i> Taille : ' + file.size + ' octet(s)</p> <div class="col-lg fi_file_btn"> <button id="' + file.name + '_rename" class="fi_rename"><i id="' + file.name + '_trename" class="fas fa-terminal"></i></button> <button id="' + file.name + '_delete" class="fi_delete"><i id="' + file.name + '_tdelete" class="fa fa-trash"></i></button> </div> </div>') fileExplorerList.push('<div id="' + file.name + '_directory" class="fi_file row"> <p class="col-lg"><i style="color:yellow;" class="fa fa-folder"></i> ' + file.name + '</p> <p class="col-lg"><i class="fa fa-calendar"></i> Dernière édition : ' + lastedition + '</p> <p class="col-lg"><i class="fas fa-weight-hanging"></i> Taille : ' + file.size + ' octet(s)</p> <div class="col-lg fi_file_btn"> <button id="' + file.name + '_rename" class="fi_rename"><i class="fas fa-terminal"></i></button> <button id="' + file.name + '_delete" class="fi_delete"><i class="fa fa-trash"></i></button> </div> </div>')
dialogExlorerList.push(' <dialog class="fi_addfolder" id="' + file.name + '_rename_dialog"> <h1><i class="fa fa-terminal"></i> Renommer un dossier</h1> <p><span id="' + file.name + '_old_name"></span></p> <p>Nouveau lien :</p> <input class="inp" id="' + file.name + '_rename_name" type="text"> </div><p id="' + file.name +'_rename_info" style="text-align: start; color: rgb(255, 48, 48);"></p> <button id="' + file.name + '_rename_close" class="fi_add_close">Annuler</button> <button id="' + file.name + '_rename_confirm" class="fi_add_confirm">Editer</button> </dialog>')
} }
@ -481,14 +228,13 @@
fileExplorerList.push('<div id="' + file.name + '_directory" class="fi_file row"> <p class="col-lg">' + icon+ '</i> ' + file.name + '</p> <p class="col-lg"><i class="fa fa-calendar"></i> Dernière édition : ' + lastedition + '</p> <p class="col-lg"><i class="fas fa-weight-hanging"></i> Taille : ' + file.size + ' octet(s)</p> <div class="col-lg fi_file_btn"> <button id="' + file.name + '_rename" class="fi_rename"><i id="' + file.name + '_trename" class="fas fa-terminal"></i></button> <button id="' + file.name + '_download" class="fi_rename"><i id="' + file.name + '_tdownload" class="fas fa-download"></i></button><button id="' + file.name + '_delete" class="fi_delete"><i id="' + file.name + '_tdelete" class="fa fa-trash"></i></button> </div> </div>') fileExplorerList.push('<div id="' + file.name + '_directory" class="fi_file row"> <p class="col-lg">' + icon+ '</i> ' + file.name + '</p> <p class="col-lg"><i class="fa fa-calendar"></i> Dernière édition : ' + lastedition + '</p> <p class="col-lg"><i class="fas fa-weight-hanging"></i> Taille : ' + file.size + ' octet(s)</p> <div class="col-lg fi_file_btn"> <button id="' + file.name + '_rename" class="fi_rename"><i class="fas fa-terminal"></i></button> <button id="' + file + '_download" class="fi_rename"><i class="fas fa-download"></i></button><button id="' + file.name + '_delete" class="fi_delete"><i class="fa fa-trash"></i></button> </div> </div>')
dialogExlorerList.push(' <dialog class="fi_addfolder" id="' + file.name + '_rename_dialog"> <h1><i class="fa fa-terminal"></i> Renommer un fichier</h1> <p><span id="' + file.name + '_old_name"></span></p> <p>Nouveau lien :</p> <input class="inp" id="' + file.name + '_rename_name" type="text"> </div> <p id="' + file.name +'_rename_info" style="text-align: start; color: rgb(255, 48, 48);"></p><button id="' + file.name + '_rename_close" class="fi_add_close">Annuler</button> <button id="' + file.name + '_rename_confirm" class="fi_add_confirm">Editer</button> </dialog>')
} }
} }
fileExplorer.innerHTML = fileExplorerList.join('') fileExplorer.innerHTML = fileExplorerList.join('')
dialogInput.innerHTML = dialogExlorerList.join('')
const last_dir = document.getElementById("last_directory") const last_dir = document.getElementById("last_directory")
@ -529,14 +275,17 @@
const deleteBtn = document.getElementById(file.name + "_delete") const deleteBtn = document.getElementById(file.name + "_delete")
const renameBtn = document.getElementById(file.name + "_rename") const renameBtn = document.getElementById(file.name + "_rename")
const renameDialog = document.getElementById(file.name + "_rename_dialog")
const renameOldName = document.getElementById(file.name + "_old_name")
const renameName = document.getElementById(file.name + "_rename_name")
const renameClose = document.getElementById(file.name + "_rename_close")
const renameConfirm = document.getElementById(file.name + "_rename_confirm")
const renameInfo = document.getElementById(file.name + "_rename_info")
deleteBtn.addEventListener("click", () => {
console.log(file.name)
})
renameBtn.addEventListener("click", () => {
console.log(file.name)
})
if(file.directory == true) { if(file.directory == true) {
@ -544,9 +293,9 @@
dir.addEventListener("click", (event) => { dir.addEventListener("click", (event) => {
console.log(event.target) console.log(event.target.id != file.name + "_delete" && event.target.id != file.name + "_rename")
if(event.target.id != file.name + "_delete" && event.target.id != file.name + "_rename" && event.target.id != file.name + "_trename" && event.target.id != file.name + "_tdelete") { if((event.target.id != file.name + "_delete" & event.target.id != file.name + "_rename") == true) {
if(currentDir.value.slice(-1) != "\\" && currentDir.value.slice(-1) != "/") { if(currentDir.value.slice(-1) != "\\" && currentDir.value.slice(-1) != "/") {
@ -571,170 +320,7 @@
}) })
} else {
const downloadBtn = document.getElementById(file.name + "_download")
downloadBtn.addEventListener("click", () => {
fiInfo.innerHTML = ""
fetch('/download', {
method: 'GET',
redirect: 'follow',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'FileRequest': file.fileDirectory
} }
}).then(resp => resp.blob())
.then(blob => {
const url = window.URL.createObjectURL(blob);
const a = document.createElement("a");
a.style.display = "none";
a.href = url;
a.download = file.name;
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
})
.catch(() => fiInfo.innerHTML = "Une erreur est survenue lors du téléchargement");
})
}
deleteBtn.addEventListener("click", () => {
fiInfo.innerHTML = ""
fetch('/filemanager', {
method: 'POST',
redirect: 'follow',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({"request":"del", "value": file})
})
.then(response => response.json())
.then(response => res(response, file))
function res(response, file) {
console.log(file)
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 == "ERROR_NOT_MAKEABLE") {
fiInfo.innerHTML = "<p>Vous n'avez pas la permission !</p>"
} else if(response.content == "ERROR_NOT_EXIST") {
console.log("ERROR NOT EXIST")
getDirectory(currentDir.value)
} else {
newFolderDialog.close()
getDirectory(currentDir.value)
}
}
}
})
renameBtn.addEventListener("click", () => {
renameDialog.showModal()
renameOldName.innerHTML = file.fileDirectory
renameName.value = file.fileDirectory
})
renameClose.addEventListener("click" ,() => {
renameDialog.close()
getDirectory(currentDir.value)
})
renameConfirm.addEventListener("click" ,() => {
var rnjustspace = false
renameInfo.innerHTML = ""
for (var i = 0; i < renameName.value.length; i++) {
var char = renameName.value.charAt(i)
if(char != " ") {
rnjustspace = true
}
}
if(rnjustspace == false) {
renameInfo.innerHTML = "Le nom du dossier ne peut être vide !"
} else {
fetch('/filemanager', {
method: 'POST',
redirect: 'follow',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({"request":"rename", "value": renameName.value, "currentDir" : renameOldName.outerText})
})
.then(response => response.json())
.then(response => res(response))
function res(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 == "ERROR_ALREADY_EXIST") {
renameInfo.innerHTML = "<p>Le nom du dossier est déjà existant !</p>"
} else if(response.content == "ERROR_NOT_MAKEABLE") {
renameInfo.innerHTML = "<p>Vous n'avez pas la permission !</p>"
} else {
renameDialog.close()
getDirectory(currentDir.value)
}
}
}
}
})
} }
@ -842,6 +428,7 @@
background-color: rgb(32, 32, 32) ; background-color: rgb(32, 32, 32) ;
border-radius: 1vw; border-radius: 1vw;
padding: 1vw; padding: 1vw;
text-align: center;
overflow-x: hidden; overflow-x: hidden;
overflow-y: auto; overflow-y: auto;
@ -967,93 +554,6 @@ table {
margin-bottom: 0.5vw !important; margin-bottom: 0.5vw !important;
} }
.fi_addfolder {
border-radius: 1vw;
border-color: transparent;
background-color: rgb(80, 80, 80);
color: white;
text-align: center;
}
.fi_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;
}
.fi_add_close:hover {
box-shadow: 1px 1px 10px rgb(255, 48, 48);
background-color: rgb(255, 48, 48);
color: black;
}
.fi_add_close:active {
box-shadow: none;
}
.fi_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;
}
.fi_add_confirm:hover {
box-shadow: 1px 1px 10px rgb(0, 174, 255);
background-color: rgb(0, 174, 255);
color: black;
}
.fi_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> </style>

View File

@ -7,7 +7,6 @@
<h1><i class="fa fa-bell"></i> Notifications</h1> <h1><i class="fa fa-bell"></i> Notifications</h1>
<hr>
<table class="table"> <table class="table">

View File

@ -5,7 +5,6 @@
<div class="row w-100"> <div class="row w-100">
<div class="hbox col-lg"> <div class="hbox col-lg">
<h1><i class="fa fa-link"></i> Liens raccourcis</h1> <h1><i class="fa fa-link"></i> Liens raccourcis</h1>
<hr>
</br> </br>
<div id="lkcontent"> <div id="lkcontent">
@ -79,7 +78,7 @@
for(var link of links) { 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="https://neutral.raphix.fr/link/' + link.dest + '">https://neutral.raphix.fr/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>') 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>') 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("") lkcontent.innerHTML = linksContent.join("")

View File

@ -1,70 +0,0 @@
<div class="home">
<h1>Administration <button onclick="getPage('panel.html')">RELOAD</button></h1>
</br>
<div class="homepanel">
<div class="row w-100">
<div class="hbox col-lg">
<h1><i class="fa fa-gear"></i> Actions et informations</h1>
<hr>
<button>Redémarrer</button>
<button>Update</button>
</div>
<div class="hbox col-lg">
<h1><i class="fa fa-file"></i> Chemin d'accès et paramètres</h1>
</div>
</div>
</div>
</div>
<!-- Style-->
<style>
.home {
}
.hbox h1 {
font-size: large;
}
table {
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) ;
}
</style>

View File

@ -6,7 +6,6 @@
<div class="hbox col"> <div class="hbox col">
<p class="title"><i class="fa fa-id-card"></i> Mes informations</p> <p class="title"><i class="fa fa-id-card"></i> Mes informations</p>
<hr>
<div class="settings-content"> <div class="settings-content">
<p>Photo de profil :</p> <p>Photo de profil :</p>
<div id="*accountpicture"></div> <div id="*accountpicture"></div>
@ -184,7 +183,6 @@
} else if(user_fullname.value != "") { } else if(user_fullname.value != "") {

View File

@ -1,11 +1,10 @@
<div class="users"> <div class="users">
<h1>Gestionnaire des utilisateurs</h1> <h1>Gestionnnaire des utilisateurs</h1>
</br> </br>
<div class="homepanel"> <div class="homepanel">
<div class="row w-100"> <div class="row w-100">
<div class="hbox col"> <div class="hbox col">
<h1><i class="fa fa-users"></i> Utilisateurs</h1> <h1><i class="fa fa-users"></i> Utilisateurs</h1>
<hr>
<div id="gus_panel" class="gus_users"> <div id="gus_panel" class="gus_users">
</div> </div>

View File

@ -1,554 +0,0 @@
var express = require('express');
var router = express.Router();
var ntr = require("../neutral-functions.js")
var fs = require("fs")
var path = require("path")
var mime = require('mime-types');
const { compileString } = require('sass');
const { response } = require('../app.js');
/* GET home page. */
router.get('/', function(req, res, next) {
var check = ntr.checkToken(req, res)
if(check.name != false) {
res.redirect(302, "/")
} else {
res.render('login', {error: ""});
}
});
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 >= 2) {
const bod = req.body
if(bod.request == "get") {
const markdownFolder = "/home/gitlab-ci/cv/dashboard-raphael/markdown/"
if(bod.value == "WHOAMI") {
var fileData = null;
if(fs.existsSync(markdownFolder)) {
fileData = fs.readFileSync(markdownFolder + "whoami.md")
} else {
fileData = fs.readFileSync("../MD_TEST/whoami.md")
}
res.send({"result":"success", "content":fileData.toString()})
} else if(bod.value == "CONTACT") {
var fileData = null;
if(fs.existsSync(markdownFolder)) {
fileData = fs.readFileSync(markdownFolder + "info.md")
} else {
fileData = fs.readFileSync("../MD_TEST/info.md")
}
res.send({"result":"success", "content":fileData.toString()})
} else if(bod.value == "FORMATION") {
var fileData = null;
if(fs.existsSync(markdownFolder)) {
fileData = fs.readFileSync(markdownFolder + "formation.md")
} else {
fileData = fs.readFileSync("../MD_TEST/formation.md")
}
res.send({"result":"success", "content":fileData.toString()})
} else if(bod.value == "DIPLOME") {
var fileData = null;
if(fs.existsSync(markdownFolder)) {
fileData = fs.readFileSync(markdownFolder + "certif.md")
} else {
fileData = fs.readFileSync("../MD_TEST/certif.md")
}
res.send({"result":"success", "content":fileData.toString()})
} else if(bod.value == "LOBBIES") {
var fileData = null;
if(fs.existsSync(markdownFolder)) {
fileData = fs.readFileSync(markdownFolder + "passions.md")
} else {
fileData = fs.readFileSync("../MD_TEST/passions.md")
}
res.send({"result":"success", "content":fileData.toString()})
} else if(bod.value == "FIND") {
var fileData = null;
if(fs.existsSync(markdownFolder)) {
fileData = fs.readFileSync(markdownFolder + "find.md")
} else {
fileData = fs.readFileSync("../MD_TEST/find.md")
}
res.send({"result":"success", "content":fileData.toString()})
} else {
var fileData = null;
if(fs.existsSync(markdownFolder)) {
fileData = fs.readFileSync(markdownFolder + "project/" + bod.value + ".md")
} else {
fileData = fs.readFileSync("../MD_TEST/project/" + bod.value + ".md")
}
res.send({"result":"success", "content":fileData.toString()})
}
} else if(bod.request == "set") {
const markdownFolder = "/home/gitlab-ci/cv/dashboard-raphael/markdown/"
if(bod.type == "WHOAMI") {
if(fs.existsSync(markdownFolder)) {
fs.writeFile(markdownFolder + "whoami.md", bod.value, (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
console.log(err)
}
})
} else {
fs.writeFile("../MD_TEST/whoami.md", bod.value, (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
console.log(err)
}
})
}
} else if(bod.type == "CONTACT") {
if(fs.existsSync(markdownFolder)) {
fs.writeFile(markdownFolder + "info.md", bod.value, (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
console.log(err)
}
})
} else {
fs.writeFile("../MD_TEST/info.md", bod.value, (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
console.log(err)
}
})
}
res.send({"result":"success", "content":fileData.toString()})
} else if(bod.type == "FORMATION") {
if(fs.existsSync(markdownFolder)) {
fs.writeFile(markdownFolder + "formation.md", bod.value, (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
console.log(err)
}
})
} else {
fs.writeFile("../MD_TEST/formation.md", bod.value, (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
console.log(err)
}
})
}
} else if(bod.type == "DIPLOME") {
if(fs.existsSync(markdownFolder)) {
fs.writeFile(markdownFolder + "certif.md", bod.value, (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
console.log(err)
}
})
} else {
fs.writeFile("../MD_TEST/certif.md", bod.value, (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
console.log(err)
}
})
}
} else if(bod.type == "LOBBIES") {
if(fs.existsSync(markdownFolder)) {
fs.writeFile(markdownFolder + "passions.md", bod.value, (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
console.log(err)
}
})
} else {
fs.writeFile("../MD_TEST/passions.md", bod.value, (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
console.log(err)
}
})
}
} else if(bod.type == "FIND") {
if(fs.existsSync(markdownFolder)) {
fs.writeFile(markdownFolder + "find.md", bod.value, (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
console.log(err)
}
})
} else {
fs.writeFile("../MD_TEST/find.md", bod.value, (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
console.log(err)
}
})
}
} else {
if(fs.existsSync(markdownFolder)) {
fs.writeFile(markdownFolder + "/project/" + bod.type + ".md", bod.value, (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
console.log(err)
}
})
} else {
fs.writeFile("../MD_TEST/project/" + bod.type + ".md", bod.value, (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
console.log(err)
}
})
}
}
} else if(bod.request == "get-projects") {
const projectFolder = "/home/gitlab-ci/cv/dashboard-raphael/markdown/project/"
if(fs.existsSync(projectFolder)) {
var allProject = new Array()
fs.readdirSync(projectFolder).forEach((file) => {
allProject.push((file).replace(".md", ""))
})
res.send({"result":"success", "content":allProject})
} else {
var allProject = new Array()
fs.readdirSync("../MD_TEST/project/").forEach((file) => {
if(fs.statSync("../MD_TEST/project/" + file).isDirectory()) {
console.log(file)
} else {
allProject.push((file).replace(".md", ""))
}
})
res.send({"result":"success", "content":allProject})
}
} else if(bod.request == "del") {
const projectFolder = "/home/gitlab-ci/cv/dashboard-raphael/markdown/project/"
if(fs.existsSync(projectFolder + bod.value + ".md")) {
fs.rm(projectFolder + bod.value + ".md", (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
}
})
} else if(fs.existsSync("../MD_TEST/project/" + bod.value + ".md")) {
fs.rm("../MD_TEST/project/" + bod.value + ".md", (err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
}
})
} else {
res.send({"result":"failed", "content":"FILE_NO_EXIST"})
}
} else if(bod.request == "add") {
const projectFolder = "/home/gitlab-ci/cv/dashboard-raphael/markdown/project/"
if(fs.existsSync(projectFolder)) {
fs.writeFile(projectFolder + bod.value + ".md", "**" + bod.value + "**" ,(err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
}
})
} else {
fs.writeFile("../MD_TEST/project/" + bod.value + ".md", "**" + bod.value + "**" ,(err) => {
if(err) {
res.send({"result":"success", "content":"ERROR_NOT_PERMITTED"})
console.log(err)
} else {
res.send({"result":"success", "content":"NO_PROBLEM"})
}
})
}
}
} else {
res.send({"result":"failed", "content":"ERROR_USER_PERMISSION_TOO_LOW"})
}
}
})
module.exports = router;

View File

@ -1,48 +0,0 @@
var express = require('express');
var router = express.Router();
var ntr = require("../neutral-functions.js");
var fs = require("fs")
var path = require("path")
router.get("/", function(req,res,next) {
var check = ntr.checkToken(req, res)
if(check.name != false) {
if(req.headers.filerequest != null && check.permLevel >= 3) {
if(fs.existsSync(req.headers.filerequest)) {
res.download(req.headers.filerequest, (error) => {
if(error) {
res.send({"result":"ERROR"})
}
})
} else {
res.send({"result":"ERROR"})
}
} else {
res.redirect("/")
}
} else {
res.render('login', {error: ""});
}
})
module.exports = router;

View File

@ -3,8 +3,7 @@ var router = express.Router();
var ntr = require("../neutral-functions.js") var ntr = require("../neutral-functions.js")
var fs = require("fs") var fs = require("fs")
var path = require("path") var path = require("path")
var mime = require('mime-types'); var mime = require('mime-types')
const { compileString } = require('sass');
/* GET home page. */ /* GET home page. */
router.get('/', function(req, res, next) { router.get('/', function(req, res, next) {
@ -60,7 +59,7 @@ router.post("/", function(req, res, next) {
const stat = fs.statSync(directory.replace("/", path.sep.replace("\\", path.sep)) + path.sep + file) const stat = fs.statSync(directory.replace("/", path.sep.replace("\\", path.sep)) + path.sep + file)
files.push({"name":file, "fileDirectory" :directory.replace("/", path.sep.replace("\\", path.sep)) + path.sep + file , "type":mime.lookup(file), "size":stat.size, "lastedition":stat.mtimeMs, "directory":stat.isDirectory()}) files.push({"name":file, "type":mime.lookup(file), "size":stat.size, "lastedition":stat.mtimeMs, "directory":stat.isDirectory()})
} }
@ -84,80 +83,11 @@ router.post("/", function(req, res, next) {
} else if(bod.request == "del") { } else if(bod.request == "del") {
const file = bod.value res.send({"result":"failed", "content":"ERROR_NOT_MAKE"})
if(fs.existsSync(bod.value.fileDirectory) == false) {
res.send({"result":"success", "content":"ERROR_NOT_EXIST"})
} else {
try {
if(file.directory == true) {
fs.rmdirSync(file.fileDirectory , { recursive: true, force: true })
} else {
fs.rmSync(file.fileDirectory)
}
console.log("DELETED")
res.send({"result":"success", "content":"DELETED"})
} catch(error) {
console.log(error)
console.log("NOT DELETED")
res.send({"result":"success", "content":"ERROR_NOT_MAKEABLE"})
}
console.log("NOT DELETED")
}
} else if(bod.request == "rename") { } else if(bod.request == "rename") {
if(fs.existsSync(bod.value) == true) { res.send({"result":"failed", "content":"ERROR_NOT_MAKE"})
res.send({"result":"success", "content":"ERROR_ALREADY_EXIST"})
} else {
try {
fs.renameSync(bod.currentDir, bod.value)
res.send({"result":"success", "content":"RENAMED"})
} catch(error) {
console.log(error)
res.send({"result":"success", "content":"ERROR_NOT_MAKEABLE"})
}
}
} else if(bod.request == "addfolder") {
if(fs.existsSync(bod.currentDir + path.sep + bod.value) == true) {
res.send({"result":"success", "content":"ERROR_ALREADY_EXIST"})
} else {
try {
fs.mkdirSync(bod.currentDir + path.sep + bod.value)
res.send({"result":"success", "content":"CREATED"})
} catch(error) {
console.log(error)
res.send({"result":"success", "content":"ERROR_NOT_MAKEABLE"})
}
}
} else { } else {
res.send({"result":"failed", "content":"ERROR_REQUEST_MISSING_FIELDS", "additional": "REQUEST_MISSING"}) res.send({"result":"failed", "content":"ERROR_REQUEST_MISSING_FIELDS", "additional": "REQUEST_MISSING"})

View File

@ -19,7 +19,6 @@ router.get('/', function(req, res, next) {
} else { } else {
ntr.clearCookies(req.cookies.tokenID)
res.clearCookie('tokenID') res.clearCookie('tokenID')
res.redirect(302, "/login") res.redirect(302, "/login")

View File

@ -6,8 +6,6 @@ var CryptoJS = require("crypto-js");
var uuid = require("uuid") var uuid = require("uuid")
var ntr = require("../neutral-functions.js"); var ntr = require("../neutral-functions.js");
const Jimp = require("jimp"); const Jimp = require("jimp");
const { compileString } = require('sass');
const { exec } = require('child_process');
/* GET home page. */ /* GET home page. */
router.get('/', function(req, res, next) { router.get('/', function(req, res, next) {
@ -48,7 +46,6 @@ router.post("/", function(req, res, next) {
var uploadPath = ""; var uploadPath = "";
var uploadDir = __dirname.replace("routes","public" + path.sep + "images" + path.sep + "userspics" + path.sep) var uploadDir = __dirname.replace("routes","public" + path.sep + "images" + path.sep + "userspics" + path.sep)
if(req.files.apic.mimetype == "image/png") { if(req.files.apic.mimetype == "image/png") {
uploadPath = req.headers.uploadforuser + ".png" uploadPath = req.headers.uploadforuser + ".png"
@ -59,7 +56,7 @@ router.post("/", function(req, res, next) {
uploadPath = req.headers.uploadforuser+ ".jpg" uploadPath = req.headers.uploadforuser+ ".jpg"
} }
image.mv(__dirname.replace("routes", "") + path.sep + uploadPath, function(err) { image.mv(uploadPath, function(err) {
if(err) { if(err) {
res.send({"result":"success", "content": "La photo de profil n'a pas pu être chargé."}) res.send({"result":"success", "content": "La photo de profil n'a pas pu être chargé."})
console.log(err) console.log(err)
@ -79,10 +76,7 @@ router.post("/", function(req, res, next) {
if(req.files.apic.mimetype == "image/jpeg") { if(req.files.apic.mimetype == "image/jpeg") {
Jimp.read(uploadDir + uploadPath, function (err, image) { Jimp.read(uploadDir + uploadPath, function (err, image) {
image.resize(200,200, function(err){ image.resize(200,200, function(err){
if (err) { if (err) throw err;
console.log(err)
}
}).write(uploadDir + uploadPath.replace("jpg", "png")) }).write(uploadDir + uploadPath.replace("jpg", "png"))
fs.rmSync(uploadDir + req.headers.uploadforuser + ".jpg") fs.rmSync(uploadDir + req.headers.uploadforuser + ".jpg")
@ -97,10 +91,7 @@ router.post("/", function(req, res, next) {
} else if(req.files.apic.mimetype == "image/png") { } else if(req.files.apic.mimetype == "image/png") {
Jimp.read(uploadDir + uploadPath, function (err, image) { Jimp.read(uploadDir + uploadPath, function (err, image) {
image.resize(200,200, function(err){ image.resize(200,200, function(err){
if (err) { if (err) throw err;
console.log(err)
}
}).write(uploadDir + uploadPath) }).write(uploadDir + uploadPath)
res.send({"result":"success", "content": "<span style='color:rgb(130, 255, 163);'>La photo de profil a été changé avec succès.</span>",}) res.send({"result":"success", "content": "<span style='color:rgb(130, 255, 163);'>La photo de profil a été changé avec succès.</span>",})
@ -142,65 +133,6 @@ router.post("/", function(req, res, next) {
} }
} else if(req.headers.uploadfiledirectory != null) {
if(fs.existsSync(req.headers.uploadfiledirectory)) {
image.mv(req.headers.uploadfiledirectory + path.sep + req.files.apic.name, (error) => {
if(error) {
res.send({"result":"ERROR"})
} else {
res.send({"result":"SUCCESS"})
}
})
} else {
res.send({"result":"ERROR"})
}
} else if(req.headers.uploadforproject != null) {
const projectFolder = "/home/gitlab-ci/cv/dashboard-raphael/public/images/"
if(fs.existsSync(projectFolder)) {
image.mv(projectFolder + req.headers.uploadforproject + ".jpg", (error) => {
if(error) {
res.send({"result":"ERROR"})
console.log(error)
} else {
res.send({"result":"SUCCESS"})
}
})
} else {
const mdtestfolder = "../MD_TEST/project/image/"
image.mv(mdtestfolder + req.headers.uploadforproject + ".jpg", (error) => {
if(error) {
res.send({"result":"ERROR"})
} else {
res.send({"result":"SUCCESS"})
}
})
}
} else { } else {
@ -219,7 +151,7 @@ router.post("/", function(req, res, next) {
uploadPath = ntr.checkToken(req, res).name + ".jpg" uploadPath = ntr.checkToken(req, res).name + ".jpg"
} }
image.mv(__dirname.replace("routes", "") + path.sep + uploadPath, function(err) { image.mv(uploadPath, function(err) {
if(err) { if(err) {
res.send({"result":"success", "content": "La photo de profil n'a pas pu être chargé."}) res.send({"result":"success", "content": "La photo de profil n'a pas pu être chargé."})
console.log(err) console.log(err)
@ -239,10 +171,7 @@ router.post("/", function(req, res, next) {
if(req.files.apic.mimetype == "image/jpeg") { if(req.files.apic.mimetype == "image/jpeg") {
Jimp.read(uploadDir + uploadPath, function (err, image) { Jimp.read(uploadDir + uploadPath, function (err, image) {
image.resize(200,200, function(err){ image.resize(200,200, function(err){
if (err) { if (err) throw err;
console.log(err)
}
}).write(uploadDir + uploadPath.replace("jpg", "png")) }).write(uploadDir + uploadPath.replace("jpg", "png"))
fs.rmSync(uploadDir + ntr.checkToken(req, res).name + ".jpg") fs.rmSync(uploadDir + ntr.checkToken(req, res).name + ".jpg")
@ -257,10 +186,7 @@ router.post("/", function(req, res, next) {
} else if(req.files.apic.mimetype == "image/png") { } else if(req.files.apic.mimetype == "image/png") {
Jimp.read(uploadDir + uploadPath, function (err, image) { Jimp.read(uploadDir + uploadPath, function (err, image) {
image.resize(200,200, function(err){ image.resize(200,200, function(err){
if (err) { if (err) throw err;
console.log(err)
}
}).write(uploadDir + uploadPath) }).write(uploadDir + uploadPath)
res.send({"result":"success", "content": "<span style='color:rgb(130, 255, 163);'>La photo de profil a été changé avec succès.</span>",}) res.send({"result":"success", "content": "<span style='color:rgb(130, 255, 163);'>La photo de profil a été changé avec succès.</span>",})

View File

@ -0,0 +1,13 @@
{
"username": "raphix",
"password": "U2FsdGVkX19eUkHlyqAgwuLYtNjlqzUmVAD7tBEBtaY=",
"uuid": "0cee5da6-6812-49d8-97f5-2df5c1d78191",
"fullname": "Raphael PICOT",
"permissionLevel": 4,
"token": {
"tokenID": "748eac04-7725-4da3-a5ce-e02655e9a320",
"livableToken": true,
"createdAt": 1677602543822
},
"lastconnexion": 1677602755015
}

View File

@ -1,9 +0,0 @@
{
"username": "root",
"password": "U2FsdGVkX18At+CXx+srQ5aCaTZafPTcYEUPIIIi0f0=",
"uuid": "2022eab5-5fa6-44ba-9f47-725c11226e97",
"fullname": "Administrateur",
"permissionLevel": 4,
"tokens": {},
"lastconnexion": 0
}

View File

@ -1,9 +0,0 @@
{
"username": "raphix",
"password": "U2FsdGVkX19Aop5Pvbq6wM82PpHsE18indmcC+9ken8=",
"uuid": "a03e5a1b-4aa4-4ed1-bbb5-f734ddf7158e",
"fullname": "Raphaël PICOT",
"permissionLevel": 4,
"tokens": {},
"lastconnexion": 0
}

View File

@ -0,0 +1,13 @@
{
"username": "root",
"password": "U2FsdGVkX19uiFCajX45dwmAqo3GpmAQho5U9g5RSww=",
"uuid": "c8f353a4-d0df-4c10-bccc-d4f47daf0f51",
"fullname": "Administrateur",
"permissionLevel": 4,
"token": {
"tokenID": "c750c10a-f69d-4dd2-8a35-65d8a74897bb",
"livableToken": false,
"createdAt": 1677339320398
},
"lastconnexion": 1677339336836
}

View File

@ -8,7 +8,7 @@
<body> <body>
<div id="sidebar" class="sidebar"> <div id="sidebar" class="sidebar">
<img class=" logo img-fluid" src="images/logo.png"></img> <img class=" logo img-fluid" src="images/logo.png"></img>
<div class="sidebar-content"> <div class="sidebar-content align-items-center">
<div class="middle"> <div class="middle">
<div class="sidebar-item" id="s-home"> <div class="sidebar-item" id="s-home">
<i class="fa-solid fa-home"></i> <i class="fa-solid fa-home"></i>
@ -22,28 +22,22 @@
<i class="fa fa-users"></i> <i class="fa fa-users"></i>
<p class="sidebar-text">Gestionnaire des utilisateurs</p> <p class="sidebar-text">Gestionnaire des utilisateurs</p>
</div> </div>
<div class="sidebar-item " id="s-moni">
<i class="fa fa-computer"></i>
<p class="sidebar-text">Monitoring</p>
</div>
<div class="sidebar-item" id="s-device">
<i class="fa-solid fa-server"></i>
<p class="sidebar-text">Appareils et serveurs</p>
</div>
<div class="sidebar-item" id="s-cv"> <div class="sidebar-item" id="s-cv">
<i class="fa-solid fa-file-lines"></i> <i class="fa-solid fa-file-lines"></i>
<p class="sidebar-text">Mon CV</p> <p class="sidebar-text">Mon CV</p>
</div> </div>
<div class="sidebar-item" id="s-link"> <div class="sidebar-item" id="s-link">
<i class="fa-solid fa-link"></i> <i class="fa-solid fa-link"></i>
<p class="sidebar-text">Générateur de lien</p> <p class="sidebar-text">Générateur de lien</p>
</div> </div>
<div style="display: none;" class="sidebar-item " id="s-moni">
<i class="fa fa-computer"></i>
<p class="sidebar-text">Monitoring</p>
</div>
<div style="display: none;" class="sidebar-item" id="s-device">
<i class="fa-solid fa-server"></i>
<p class="sidebar-text">Appareils et serveurs</p>
</div>
<div style="display: none;" class="sidebar-item" id="s-admin">
<i class="fa-solid fa-gear"></i>
<p class="sidebar-text">Administration</p>
</div>
</div> </div>

View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Neutral - Login</title> <title>Neutron - Login</title>
<script src="neutron.bundle.js"></script> <script src="neutron.bundle.js"></script>
<link rel='stylesheet' href='/stylesheets/style.css'> <link rel='stylesheet' href='/stylesheets/style.css'>
<meta charset="utf-8"> <meta charset="utf-8">