|
|
|
@ -1,8 +1,10 @@ |
|
|
|
const fastify = require('fastify')({ logger: true }) |
|
|
|
const fs = require('fs'); |
|
|
|
const path = require('path') |
|
|
|
var LdapAuth = require('ldapauth-fork'); |
|
|
|
const CryptoJS = require("crypto-js"); |
|
|
|
// var LdapAuth = require('ldapauth-fork');
|
|
|
|
|
|
|
|
var usersBdd = "usersBdd.txt"; |
|
|
|
var prankPath = "prankdata.txt"; |
|
|
|
var activityPath = "activitydata.txt"; |
|
|
|
var treasurePath = "treasuredata.txt"; |
|
|
|
@ -10,6 +12,8 @@ var goldenUsersPath = "goldenusers.txt"; |
|
|
|
|
|
|
|
initFs(); |
|
|
|
|
|
|
|
let UsersBDD = JSON.parse(fs.readFileSync(usersBdd)); |
|
|
|
|
|
|
|
let PrankData = JSON.parse(fs.readFileSync(prankPath)); |
|
|
|
let ActivityData = JSON.parse(fs.readFileSync(activityPath)); |
|
|
|
let TreasureData = JSON.parse(fs.readFileSync(treasurePath)); |
|
|
|
@ -20,19 +24,19 @@ let TokenDurationSecond = 3600; |
|
|
|
let MaxAmountCrepe = 10; |
|
|
|
let Supplements = ["nature", "sucre", "nutella", "confiture"]; |
|
|
|
|
|
|
|
var ldapConf = JSON.parse(fs.readFileSync("ldap-conf.json")); |
|
|
|
var LDAP = new LdapAuth({ |
|
|
|
url: 'ldap://10.5.0.44', |
|
|
|
bindDN: 'cn='+ ldapConf.bindUser +',ou=service-users,dc=ldap,dc=rezo-rm,dc=fr', |
|
|
|
bindCredentials: ldapConf.bindPassword, |
|
|
|
searchBase: 'dc=ldap,dc=rezo-rm,dc=fr', |
|
|
|
searchFilter: '(uid={{username}})', |
|
|
|
reconnect: true, |
|
|
|
}); |
|
|
|
LDAP.on('error', function (err) { |
|
|
|
console.error('LdapAuth: ', err); |
|
|
|
}); |
|
|
|
ldapConf = null; |
|
|
|
// var ldapConf = JSON.parse(fs.readFileSync("ldap-conf.json"));
|
|
|
|
// var LDAP = new LdapAuth({
|
|
|
|
// url: 'ldap://10.5.0.44',
|
|
|
|
// bindDN: 'cn='+ ldapConf.bindUser +',ou=service-users,dc=ldap,dc=rezo-rm,dc=fr',
|
|
|
|
// bindCredentials: ldapConf.bindPassword,
|
|
|
|
// searchBase: 'dc=ldap,dc=rezo-rm,dc=fr',
|
|
|
|
// searchFilter: '(uid={{username}})',
|
|
|
|
// reconnect: true,
|
|
|
|
// });
|
|
|
|
// LDAP.on('error', function (err) {
|
|
|
|
// console.error('LdapAuth: ', err);
|
|
|
|
// });
|
|
|
|
// ldapConf = null;
|
|
|
|
|
|
|
|
fastify.addContentTypeParser('application/json', { |
|
|
|
parseAs: 'string' |
|
|
|
@ -55,31 +59,119 @@ fastify.get('/', async (request, reply) => { |
|
|
|
reply.redirect('/index.html') |
|
|
|
}) |
|
|
|
|
|
|
|
// fastify.post('/login', async (request, reply) => {
|
|
|
|
// let content = request.body;
|
|
|
|
// if (content.hasOwnProperty("user")
|
|
|
|
// && content.hasOwnProperty("password")) {
|
|
|
|
// let res = await authenticate(content.user, content.password);
|
|
|
|
// if (res.authState) {
|
|
|
|
// let now = new Date();
|
|
|
|
// UsersToken[res.authUser.uid] = {
|
|
|
|
// token: makeid(64),
|
|
|
|
// expire: now.setSeconds(now.getSeconds() + TokenDurationSecond)
|
|
|
|
// }
|
|
|
|
// return {
|
|
|
|
// success: true,
|
|
|
|
// user: {
|
|
|
|
// uid: res.authUser.uid,
|
|
|
|
// givenName: res.authUser.givenName,
|
|
|
|
// isAdmin: AdminUsersUid.includes(res.authUser.uid)
|
|
|
|
// },
|
|
|
|
// token: UsersToken[res.authUser.uid].token
|
|
|
|
// }
|
|
|
|
// } else {
|
|
|
|
// return {
|
|
|
|
// success: false,
|
|
|
|
// why: "Wrong username or password"
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// } else {
|
|
|
|
// return {
|
|
|
|
// success: false,
|
|
|
|
// why: "The username or password is missing"
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// })
|
|
|
|
|
|
|
|
fastify.post('/login', async (request, reply) => { |
|
|
|
let content = request.body; |
|
|
|
if (content.hasOwnProperty("user") |
|
|
|
&& content.hasOwnProperty("password")) { |
|
|
|
let res = await authenticate(content.user, content.password); |
|
|
|
if (res.authState) { |
|
|
|
if (UsersBDD.hasOwnProperty(content.user) { |
|
|
|
var hash; |
|
|
|
try { |
|
|
|
hash = CryptoJS.SHA512(content.password).toString(); |
|
|
|
} catch { |
|
|
|
return { |
|
|
|
success: false, |
|
|
|
why: "Wrong username or password" |
|
|
|
} |
|
|
|
} |
|
|
|
if (hash === UsersBDD[content.user].password) { |
|
|
|
let now = new Date(); |
|
|
|
UsersToken[content.user] = { |
|
|
|
token: makeid(64), |
|
|
|
expire: now.setSeconds(now.getSeconds() + TokenDurationSecond) |
|
|
|
} |
|
|
|
return { |
|
|
|
success: true, |
|
|
|
user: { |
|
|
|
uid: content.user, |
|
|
|
isAdmin: AdminUsersUid.includes(content.user) |
|
|
|
}, |
|
|
|
token: UsersToken[res.authUser.uid].token |
|
|
|
} |
|
|
|
} else { |
|
|
|
return { |
|
|
|
success: false, |
|
|
|
why: "Wrong username or password" |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
return { |
|
|
|
success: false, |
|
|
|
why: "The username or password is missing" |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
fastify.post('/register', async (request, reply) => { |
|
|
|
let content = request.body; |
|
|
|
if (content.hasOwnProperty("user") |
|
|
|
&& content.hasOwnProperty("password")) { |
|
|
|
if (UsersBDD.hasOwnProperty(content.user) { |
|
|
|
return { |
|
|
|
success: false, |
|
|
|
why: "This user already exists" |
|
|
|
} |
|
|
|
} else { |
|
|
|
var hash; |
|
|
|
try { |
|
|
|
hash = CryptoJS.SHA512(content.password).toString(); |
|
|
|
} catch { |
|
|
|
return { |
|
|
|
success: false, |
|
|
|
why: "What are you doing bruh ??" |
|
|
|
} |
|
|
|
} |
|
|
|
UsersBDD[content.user] = { |
|
|
|
password: hash |
|
|
|
} |
|
|
|
saveData(usersBdd, UsersBDD); |
|
|
|
let now = new Date(); |
|
|
|
UsersToken[res.authUser.uid] = { |
|
|
|
UsersToken[content.user] = { |
|
|
|
token: makeid(64), |
|
|
|
expire: now.setSeconds(now.getSeconds() + TokenDurationSecond) |
|
|
|
} |
|
|
|
return { |
|
|
|
success: true, |
|
|
|
user: { |
|
|
|
uid: res.authUser.uid, |
|
|
|
givenName: res.authUser.givenName, |
|
|
|
isAdmin: AdminUsersUid.includes(res.authUser.uid) |
|
|
|
uid: content.user, |
|
|
|
isAdmin: AdminUsersUid.includes(content.user) |
|
|
|
}, |
|
|
|
token: UsersToken[res.authUser.uid].token |
|
|
|
} |
|
|
|
} else { |
|
|
|
return { |
|
|
|
success: false, |
|
|
|
why: "Wrong username or password" |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
return { |
|
|
|
@ -624,23 +716,23 @@ function saveData(path, data) { |
|
|
|
fs.writeFileSync(path, JSON.stringify(data)); |
|
|
|
} |
|
|
|
|
|
|
|
function authenticate(user, pwd) { |
|
|
|
return new Promise((resolve, reject) => { |
|
|
|
LDAP.authenticate(user, pwd, function(err, user) { |
|
|
|
if (user && err == null) { |
|
|
|
resolve({ |
|
|
|
authState: true, |
|
|
|
authUser: user |
|
|
|
}); |
|
|
|
} else { |
|
|
|
resolve({ |
|
|
|
authState: false, |
|
|
|
authUser: null |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
}) |
|
|
|
} |
|
|
|
// function authenticate(user, pwd) {
|
|
|
|
// return new Promise((resolve, reject) => {
|
|
|
|
// LDAP.authenticate(user, pwd, function(err, user) {
|
|
|
|
// if (user && err == null) {
|
|
|
|
// resolve({
|
|
|
|
// authState: true,
|
|
|
|
// authUser: user
|
|
|
|
// });
|
|
|
|
// } else {
|
|
|
|
// resolve({
|
|
|
|
// authState: false,
|
|
|
|
// authUser: null
|
|
|
|
// });
|
|
|
|
// }
|
|
|
|
// });
|
|
|
|
// })
|
|
|
|
// }
|
|
|
|
|
|
|
|
function checkAuthetification(content) { |
|
|
|
if (content.hasOwnProperty("uid") |
|
|
|
@ -716,6 +808,9 @@ function checkManage(content, input, data) { |
|
|
|
} |
|
|
|
|
|
|
|
function initFs() { |
|
|
|
if (!fs.existsSync(usersBdd)) { |
|
|
|
fs.writeFileSync(usersBdd, "{}"); |
|
|
|
} |
|
|
|
if (!fs.existsSync(prankPath)) { |
|
|
|
fs.writeFileSync(prankPath, "{}"); |
|
|
|
} |
|
|
|
|