Compare commits
36 Commits
Author | SHA1 | Date | |
---|---|---|---|
f921d1fe75 | |||
46bc7f0013 | |||
21dc689c9a | |||
98d62e6883 | |||
e3a1db5200 | |||
4243d6e651 | |||
f056db13d8 | |||
43bf4c0baa | |||
ee51c4fe8a | |||
eafa16e46d | |||
12b340e0f1 | |||
353746b3d4 | |||
9982f1f1bf | |||
88ce85c422 | |||
74c5342633 | |||
7daccf6690 | |||
493b6973c5 | |||
7877729100 | |||
c9f45ef82f | |||
3bee5b2aed | |||
bf3c216ee0 | |||
be3107b7a8 | |||
77946ad1eb | |||
bbd50f6f4a | |||
2f7c9abdc8 | |||
f27c7a03f3 | |||
6e0958d45b | |||
7e5753900c | |||
d6d6332da2 | |||
e48e9ae2fc | |||
428963b352 | |||
1aba9a71d7 | |||
80a7ce8f19 | |||
2d285f47fd | |||
6169272093 | |||
cb1e881450 |
42
Jenkinsfile
vendored
42
Jenkinsfile
vendored
@ -2,36 +2,9 @@ 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"
|
||||||
@ -40,25 +13,12 @@ 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
5
app.js
@ -20,6 +20,9 @@ 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();
|
||||||
@ -47,6 +50,8 @@ 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
|
||||||
|
@ -31,10 +31,7 @@ module.exports.createUser = (name, password, level, fullname) => {
|
|||||||
"uuid": userUUID,
|
"uuid": userUUID,
|
||||||
"fullname": fullname,
|
"fullname": fullname,
|
||||||
"permissionLevel":level,
|
"permissionLevel":level,
|
||||||
"token":{
|
"tokens":{},
|
||||||
|
|
||||||
|
|
||||||
},
|
|
||||||
"lastconnexion":0
|
"lastconnexion":0
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -88,7 +85,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.token = {}
|
userData.tokens = {}
|
||||||
|
|
||||||
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))
|
||||||
|
|
||||||
@ -111,13 +108,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.token.livableToken == true) {
|
if(userData.tokens[req.cookies.tokenID].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.token.createdAt)
|
const tokenDate = new Date(userData.tokens[req.cookies.tokenID].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()) {
|
||||||
@ -126,7 +123,10 @@ 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,6 +143,43 @@ 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) => {
|
||||||
@ -166,19 +203,13 @@ module.exports.generateTokenID = (username, userData, req, users) => {
|
|||||||
livable = true;
|
livable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Object.defineProperties(newUserData, {
|
|
||||||
token: {
|
newUserData.tokens[tokenID] = {
|
||||||
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
|
||||||
@ -204,7 +235,13 @@ 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
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "neutral",
|
"name": "neutral",
|
||||||
"version": "DEV_3.0",
|
"version": "DEV_5.0",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "neutral",
|
"name": "neutral",
|
||||||
"version": "DEV_3.0",
|
"version": "DEV_5.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@popperjs/core": "^2.11.6",
|
"@popperjs/core": "^2.11.6",
|
||||||
"bootstrap": "^5.2.2",
|
"bootstrap": "^5.2.2",
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "neutral",
|
"name": "neutral",
|
||||||
"version": "DEV_5.0",
|
"version": "DEV_6",
|
||||||
"private": true,
|
"private": true,
|
||||||
"nodemonConfig": {
|
"nodemonConfig": {
|
||||||
"ext": "js",
|
"ext": "js, html",
|
||||||
"ignore": [
|
"ignore": [
|
||||||
"*.json"
|
"*.json"
|
||||||
],
|
],
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
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")
|
||||||
@ -145,6 +143,7 @@ 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", () => {
|
||||||
@ -183,6 +182,11 @@ b7.addEventListener("click", () => {
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
b8.addEventListener("click", () => {
|
||||||
|
getPage("panel.html")
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
settings.addEventListener("click", () => {
|
settings.addEventListener("click", () => {
|
||||||
getPage("settings.html")
|
getPage("settings.html")
|
||||||
|
|
||||||
|
@ -153,10 +153,6 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.viewbar {
|
.viewbar {
|
||||||
|
|
||||||
display: block !important;
|
display: block !important;
|
||||||
@ -216,7 +212,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;
|
||||||
@ -277,6 +273,12 @@ body {
|
|||||||
overflow:scroll;
|
overflow:scroll;
|
||||||
overflow-x:hidden;
|
overflow-x:hidden;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar:hover .d-content {
|
||||||
|
|
||||||
|
margin-left: 15%;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidecontent{
|
.sidecontent{
|
||||||
@ -289,10 +291,29 @@ body {
|
|||||||
|
|
||||||
.sidebar-content {
|
.sidebar-content {
|
||||||
|
|
||||||
text-align: center;
|
|
||||||
height: 83%;
|
height: 83%;
|
||||||
padding-top: 50%;
|
display: flex;
|
||||||
padding-bottom: 50%;
|
justify-content: center;
|
||||||
|
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%;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,7 +326,7 @@ body {
|
|||||||
|
|
||||||
text-align: unset;
|
text-align: unset;
|
||||||
padding-top: 5%;
|
padding-top: 5%;
|
||||||
padding-left: 30%;
|
padding-left: 10%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-footer {
|
.sidebar-footer {
|
||||||
@ -347,6 +368,8 @@ 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 {
|
||||||
@ -387,9 +410,9 @@ body {
|
|||||||
.sidebar-item {
|
.sidebar-item {
|
||||||
|
|
||||||
transition: all 0.2s ease 0s;
|
transition: all 0.2s ease 0s;
|
||||||
padding: 5%;
|
padding: 10%;
|
||||||
margin-top: 5%;
|
width: 100%;
|
||||||
margin-bottom: 5%;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-item:hover {
|
.sidebar-item:hover {
|
||||||
@ -397,7 +420,7 @@ body {
|
|||||||
background-color: white;
|
background-color: white;
|
||||||
color: black;
|
color: black;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -418,7 +441,6 @@ 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;
|
||||||
|
852
public/templates/cv.html
Normal file
852
public/templates/cv.html
Normal file
@ -0,0 +1,852 @@
|
|||||||
|
<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>
|
@ -1,19 +1,23 @@
|
|||||||
<div class="files">
|
<div class="files">
|
||||||
<h1>Gestionnnaire de fichiers</h1>
|
<h1>Gestionnaire 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 class="fi_act_btn"><i class="fa fa-folder"></i> Nouveau dossier</button>
|
<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-upload"></i> Upload</button>
|
<input id='fi_upload_file' type='file' hidden multiple />
|
||||||
|
<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="C:\Users\picot\OneDrive\Bureau\Developement\Neutral\neutral" type="text">
|
<input id="fi_current_directory" class="fi_current_p" value="/" 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>
|
||||||
@ -22,6 +26,21 @@
|
|||||||
</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") {
|
||||||
@ -29,9 +48,183 @@
|
|||||||
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", () => {
|
||||||
|
|
||||||
@ -41,7 +234,10 @@
|
|||||||
|
|
||||||
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',
|
||||||
@ -74,11 +270,68 @@
|
|||||||
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 = '<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 = '<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>'
|
||||||
|
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 {
|
||||||
@ -119,8 +372,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 class="fas fa-terminal"></i></button> <button id="' + file.name + '_delete" class="fi_delete"><i 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 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>')
|
||||||
|
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>')
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,13 +481,14 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
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>')
|
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>')
|
||||||
|
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")
|
||||||
|
|
||||||
@ -275,17 +529,14 @@
|
|||||||
|
|
||||||
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")
|
||||||
deleteBtn.addEventListener("click", () => {
|
const renameName = document.getElementById(file.name + "_rename_name")
|
||||||
|
const renameClose = document.getElementById(file.name + "_rename_close")
|
||||||
console.log(file.name)
|
const renameConfirm = document.getElementById(file.name + "_rename_confirm")
|
||||||
})
|
const renameInfo = document.getElementById(file.name + "_rename_info")
|
||||||
|
|
||||||
renameBtn.addEventListener("click", () => {
|
|
||||||
|
|
||||||
console.log(file.name)
|
|
||||||
})
|
|
||||||
|
|
||||||
if(file.directory == true) {
|
if(file.directory == true) {
|
||||||
|
|
||||||
@ -293,9 +544,9 @@
|
|||||||
|
|
||||||
dir.addEventListener("click", (event) => {
|
dir.addEventListener("click", (event) => {
|
||||||
|
|
||||||
console.log(event.target.id != file.name + "_delete" && event.target.id != file.name + "_rename")
|
console.log(event.target)
|
||||||
|
|
||||||
if((event.target.id != file.name + "_delete" & event.target.id != file.name + "_rename") == true) {
|
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(currentDir.value.slice(-1) != "\\" && currentDir.value.slice(-1) != "/") {
|
if(currentDir.value.slice(-1) != "\\" && currentDir.value.slice(-1) != "/") {
|
||||||
|
|
||||||
@ -314,13 +565,176 @@
|
|||||||
|
|
||||||
getDirectory(currentDir.value)
|
getDirectory(currentDir.value)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
} 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)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -428,7 +842,6 @@
|
|||||||
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;
|
||||||
|
|
||||||
@ -554,6 +967,93 @@ 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>
|
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<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">
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
<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">
|
||||||
|
|
||||||
@ -78,7 +79,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="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>')
|
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>')
|
||||||
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("")
|
||||||
|
70
public/templates/panel.html
Normal file
70
public/templates/panel.html
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
<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>
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
<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>
|
||||||
@ -182,6 +183,7 @@
|
|||||||
user_finfo.innerHTML = "<p>Le nom complet ne doit pas dépasser 18 caractères</p>"
|
user_finfo.innerHTML = "<p>Le nom complet ne doit pas dépasser 18 caractères</p>"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} else if(user_fullname.value != "") {
|
} else if(user_fullname.value != "") {
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
<div class="users">
|
<div class="users">
|
||||||
<h1>Gestionnnaire des utilisateurs</h1>
|
<h1>Gestionnaire 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>
|
||||||
|
554
routes/cv.js
Normal file
554
routes/cv.js
Normal file
@ -0,0 +1,554 @@
|
|||||||
|
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;
|
48
routes/download.js
Normal file
48
routes/download.js
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
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;
|
||||||
|
|
@ -3,7 +3,8 @@ 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) {
|
||||||
@ -59,7 +60,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, "type":mime.lookup(file), "size":stat.size, "lastedition":stat.mtimeMs, "directory":stat.isDirectory()})
|
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()})
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -82,13 +83,82 @@ router.post("/", function(req, res, next) {
|
|||||||
|
|
||||||
|
|
||||||
} else if(bod.request == "del") {
|
} else if(bod.request == "del") {
|
||||||
|
|
||||||
res.send({"result":"failed", "content":"ERROR_NOT_MAKE"})
|
const file = bod.value
|
||||||
|
|
||||||
|
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") {
|
||||||
|
|
||||||
res.send({"result":"failed", "content":"ERROR_NOT_MAKE"})
|
if(fs.existsSync(bod.value) == true) {
|
||||||
|
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"})
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ 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")
|
||||||
|
|
||||||
|
@ -6,6 +6,8 @@ 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) {
|
||||||
@ -45,7 +47,8 @@ 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"
|
||||||
@ -56,7 +59,7 @@ router.post("/", function(req, res, next) {
|
|||||||
uploadPath = req.headers.uploadforuser+ ".jpg"
|
uploadPath = req.headers.uploadforuser+ ".jpg"
|
||||||
}
|
}
|
||||||
|
|
||||||
image.mv(uploadPath, function(err) {
|
image.mv(__dirname.replace("routes", "") + path.sep + 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)
|
||||||
@ -76,7 +79,10 @@ 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) throw err;
|
if (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")
|
||||||
|
|
||||||
@ -87,11 +93,14 @@ 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) throw err;
|
if (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>",})
|
||||||
@ -133,6 +142,65 @@ 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 {
|
||||||
|
|
||||||
|
|
||||||
@ -151,7 +219,7 @@ router.post("/", function(req, res, next) {
|
|||||||
uploadPath = ntr.checkToken(req, res).name + ".jpg"
|
uploadPath = ntr.checkToken(req, res).name + ".jpg"
|
||||||
}
|
}
|
||||||
|
|
||||||
image.mv(uploadPath, function(err) {
|
image.mv(__dirname.replace("routes", "") + path.sep + 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)
|
||||||
@ -171,7 +239,10 @@ 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) throw err;
|
if (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")
|
||||||
|
|
||||||
@ -186,7 +257,10 @@ 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) throw err;
|
if (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>",})
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"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
|
|
||||||
}
|
|
9
users/2022eab5-5fa6-44ba-9f47-725c11226e97.json
Normal file
9
users/2022eab5-5fa6-44ba-9f47-725c11226e97.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"username": "root",
|
||||||
|
"password": "U2FsdGVkX18At+CXx+srQ5aCaTZafPTcYEUPIIIi0f0=",
|
||||||
|
"uuid": "2022eab5-5fa6-44ba-9f47-725c11226e97",
|
||||||
|
"fullname": "Administrateur",
|
||||||
|
"permissionLevel": 4,
|
||||||
|
"tokens": {},
|
||||||
|
"lastconnexion": 0
|
||||||
|
}
|
9
users/a03e5a1b-4aa4-4ed1-bbb5-f734ddf7158e.json
Normal file
9
users/a03e5a1b-4aa4-4ed1-bbb5-f734ddf7158e.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"username": "raphix",
|
||||||
|
"password": "U2FsdGVkX19Aop5Pvbq6wM82PpHsE18indmcC+9ken8=",
|
||||||
|
"uuid": "a03e5a1b-4aa4-4ed1-bbb5-f734ddf7158e",
|
||||||
|
"fullname": "Raphaël PICOT",
|
||||||
|
"permissionLevel": 4,
|
||||||
|
"tokens": {},
|
||||||
|
"lastconnexion": 0
|
||||||
|
}
|
@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"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
|
|
||||||
}
|
|
@ -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 align-items-center">
|
<div class="sidebar-content">
|
||||||
<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,22 +22,28 @@
|
|||||||
<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>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>Neutron - Login</title>
|
<title>Neutral - 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">
|
||||||
|
Loading…
Reference in New Issue
Block a user