|
|
|
|
@ -1,5 +1,8 @@
|
|
|
|
|
const bcrypt = require('bcrypt');
|
|
|
|
|
const validator = require('validator');
|
|
|
|
|
const ldap = require('ldapjs');
|
|
|
|
|
const createUser = require('../users/create');
|
|
|
|
|
const { NULL } = require('node-sass');
|
|
|
|
|
|
|
|
|
|
const Errors = {
|
|
|
|
|
INVALID_EMAIL_OR_USERNAME: {
|
|
|
|
|
@ -8,6 +11,9 @@ const Errors = {
|
|
|
|
|
INVALID_PASSWORD: {
|
|
|
|
|
invalidPassword: 'Invalid password',
|
|
|
|
|
},
|
|
|
|
|
INVALID_LDAP: {
|
|
|
|
|
invalidLdap: 'Ldap authentication failed',
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
|
@ -35,9 +41,84 @@ module.exports = {
|
|
|
|
|
invalidPassword: {
|
|
|
|
|
responseType: 'unauthorized',
|
|
|
|
|
},
|
|
|
|
|
invalidLdap: {
|
|
|
|
|
responseType: 'unauthorized',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async fn(inputs) {
|
|
|
|
|
|
|
|
|
|
if(process.env.LDAP_SERVER){
|
|
|
|
|
console.log('AUTH mode : LDAP');
|
|
|
|
|
|
|
|
|
|
const server = process.env.LDAP_SERVER;
|
|
|
|
|
const client = ldap.createClient({
|
|
|
|
|
url: `ldap://${server}`
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var token_value = new Promise((resolve) => { client.bind(inputs.emailOrUsername, inputs.password, async (err) => {
|
|
|
|
|
var user;
|
|
|
|
|
var token;
|
|
|
|
|
if(!err){
|
|
|
|
|
console.log('AD connection success');
|
|
|
|
|
user = await sails.helpers.users.getOneByEmailOrUsername(inputs.emailOrUsername);
|
|
|
|
|
if (!user) {
|
|
|
|
|
console.log('Non-existent Planka user: creation in progress');
|
|
|
|
|
await createUser.fn({
|
|
|
|
|
"email": inputs.emailOrUsername,
|
|
|
|
|
"password": inputs.password,
|
|
|
|
|
"isAdmin": false,
|
|
|
|
|
"name": inputs.emailOrUsername,
|
|
|
|
|
"subscribeToOwnCards": false,
|
|
|
|
|
"createdAt": "date",
|
|
|
|
|
"updatedAt": "date"
|
|
|
|
|
});
|
|
|
|
|
user = await sails.helpers.users.getOneByEmailOrUsername(inputs.emailOrUsername);
|
|
|
|
|
}
|
|
|
|
|
token = await sails.helpers.utils.signToken(user.id);
|
|
|
|
|
resolve(token);
|
|
|
|
|
}if(err){
|
|
|
|
|
console.log('AD connection failure');
|
|
|
|
|
token = '';
|
|
|
|
|
resolve(token);
|
|
|
|
|
}
|
|
|
|
|
})});
|
|
|
|
|
|
|
|
|
|
// ADMIN CONNEXION
|
|
|
|
|
if (await token_value==''){
|
|
|
|
|
if(inputs.emailOrUsername=='admin' || inputs.emailOrUsername=='admin@admin.admin') {
|
|
|
|
|
|
|
|
|
|
console.log('ADMIN CONNEXION');
|
|
|
|
|
|
|
|
|
|
var user = await sails.helpers.users.getOneByEmailOrUsername(inputs.emailOrUsername);
|
|
|
|
|
|
|
|
|
|
if (!user) {
|
|
|
|
|
throw Errors.INVALID_EMAIL_OR_USERNAME;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!bcrypt.compareSync(inputs.password, user.password)) {
|
|
|
|
|
throw Errors.INVALID_PASSWORD;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
item: sails.helpers.utils.signToken(user.id),
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
throw Errors.INVALID_LDAP;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
item: await token_value,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}else{ // NO LDAP AUTH in .env
|
|
|
|
|
console.log('AUTH mode : Normal DB');
|
|
|
|
|
|
|
|
|
|
const user = await sails.helpers.users.getOneByEmailOrUsername(inputs.emailOrUsername);
|
|
|
|
|
|
|
|
|
|
if (!user) {
|
|
|
|
|
@ -51,5 +132,11 @@ module.exports = {
|
|
|
|
|
return {
|
|
|
|
|
item: sails.helpers.utils.signToken(user.id),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
};
|