Skip to content
Snippets Groups Projects
Commit e091580e authored by Quentin CHEVALIER's avatar Quentin CHEVALIER
Browse files

userData and groupData to classes, clean search, escape filter in Tools not Basics

parent ec12c774
No related branches found
No related tags found
No related merge requests found
...@@ -105,10 +105,6 @@ export class Basics { ...@@ -105,10 +105,6 @@ export class Basics {
if (domain == "gr") { dn+=ldapConfig.dn_groups; } if (domain == "gr") { dn+=ldapConfig.dn_groups; }
else { dn+=ldapConfig.dn_users; } else { dn+=ldapConfig.dn_users; }
// Interrogation LDAP selon filter // Interrogation LDAP selon filter
console.log(dn);
//filter = ldapEscape.filter("${txt}", { txt: filter });
console.log(filter);
let promise = new Promise<void>(function(resolve, reject) { let promise = new Promise<void>(function(resolve, reject) {
client.search(dn, { // Must be escaped in case of a malignious false id client.search(dn, { // Must be escaped in case of a malignious false id
"scope": "sub", "scope": "sub",
...@@ -147,7 +143,7 @@ export class Basics { ...@@ -147,7 +143,7 @@ export class Basics {
*/ */
static async searchSingle(domain: 'gr'|'us', attribute: string, id: string=null, filter: string="(objectClass=*)") : Promise<string[]> { static async searchSingle(domain: 'gr'|'us', attribute: string, id: string=null, filter: string="(objectClass=*)") : Promise<string[]> {
let vals=[]; let vals=[];
Basics.search(domain, [attribute], id, filter, entry => { await Basics.search(domain, [attribute], id, filter, entry => {
// Cas un seul attribut où le résultat est une liste directement // Cas un seul attribut où le résultat est une liste directement
vals.push(entry.object[attribute]); vals.push(entry.object[attribute]);
}); });
...@@ -172,7 +168,6 @@ export class Basics { ...@@ -172,7 +168,6 @@ export class Basics {
let vals=[]; let vals=[];
await Basics.search(domain, attributes, id, filter, entry => { await Basics.search(domain, attributes, id, filter, entry => {
// Cas plusieurs attributs donc résultat dictionnaire // Cas plusieurs attributs donc résultat dictionnaire
console.log("Found entry!!");
vals.push({}); vals.push({});
attributes.forEach(attribute => { attributes.forEach(attribute => {
vals.slice(-1)[0][attribute]=entry.object[attribute]; vals.slice(-1)[0][attribute]=entry.object[attribute];
......
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
* @author hawkspar * @author hawkspar
*/ */
// Toutes les entrées utilisateur sont escapées par sécurité
import ldapEscape from 'ldap-escape';
// Imports internes
import {ldapConfig} from './config'; import {ldapConfig} from './config';
import {Basics} from './basics'; import {Basics} from './basics';
import {userData} from '../export/user'; import {userData} from '../export/user';
...@@ -82,6 +85,8 @@ export class Tools { ...@@ -82,6 +85,8 @@ export class Tools {
let attribute = ""; let attribute = "";
if (domain="us") { attribute = ldapConfig.user[key]; } if (domain="us") { attribute = ldapConfig.user[key]; }
else { attribute = ldapConfig.group[key]; } else { attribute = ldapConfig.group[key]; }
// Escape user input
val = ldapEscape.dn("${fil}", { fil: val});
// Creation incrémentale du filtre // Creation incrémentale du filtre
filter="(&"+filter+ "(|("+attribute+"="+ val+")"+ // On cherche la valeur exacte filter="(&"+filter+ "(|("+attribute+"="+ val+")"+ // On cherche la valeur exacte
"(|("+attribute+"=*"+val+")"+ // La valeur finale avec des trucs avant ; wildcard * (MEF la wildcart ne marche pas pour tous les attributs) "(|("+attribute+"=*"+val+")"+ // La valeur finale avec des trucs avant ; wildcard * (MEF la wildcart ne marche pas pour tous les attributs)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment