test(samba): refs #5770create class SambaHelper
This commit is contained in:
parent
4222e2d4d9
commit
50997f6c7b
|
@ -172,38 +172,63 @@ module.exports = Self => {
|
||||||
await this.adClient.searchForeach(this.fullUsersDn, opts,
|
await this.adClient.searchForeach(this.fullUsersDn, opts,
|
||||||
o => usersToSync.add(o.sAMAccountName));
|
o => usersToSync.add(o.sAMAccountName));
|
||||||
},
|
},
|
||||||
|
async syncRoles() {
|
||||||
|
await this.init();
|
||||||
|
// Prepare data
|
||||||
|
const sambaHandler = new SambaHelper(this);
|
||||||
|
try {
|
||||||
|
await sambaHandler.syncFromDB();
|
||||||
|
await sambaHandler.syncMembers();
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
class SambaHelper {
|
||||||
|
constructor(ctx) {
|
||||||
|
Object.assign(this, ctx);
|
||||||
|
}
|
||||||
deleteRole(role) {
|
deleteRole(role) {
|
||||||
return this.sambaTool('group', ['delete', role]);
|
return this.sambaTool('group', ['delete', role]);
|
||||||
},
|
}
|
||||||
|
|
||||||
addRole({description, name}) {
|
addRole({description, name}) {
|
||||||
return this.sambaTool('group',
|
return this.sambaTool('group',
|
||||||
['add', `${ROLE_PREFIX}${name}`, `--groupou=${this.groupDn}`, `--description=${description}`]);
|
['add', `${ROLE_PREFIX}${name}`, `--groupou=${this.groupDn}`, `--description=${description}`]);
|
||||||
},
|
}
|
||||||
|
|
||||||
getRoleMembers(role) {
|
getRoleMembers(role) {
|
||||||
return this.getMembers(`(cn=${role})`, this.fullGroupsDn);
|
return this.getMembers(`(cn=${role})`, this.fullGroupsDn);
|
||||||
},
|
}
|
||||||
|
|
||||||
getMembers(filter = '', type = this.fullUsersDn) {
|
getMembers(filter = '', type = this.fullUsersDn) {
|
||||||
const options = {
|
const options = {
|
||||||
scope: 'sub',
|
scope: 'sub',
|
||||||
attributes: ['cn', 'member', 'member.cn']
|
attributes: ['cn', 'member']
|
||||||
};
|
};
|
||||||
if (filter !== '')
|
if (filter !== '')
|
||||||
Object.assign(options, {filter});
|
Object.assign(options, {filter});
|
||||||
return this.adClient.searchAll(type, options);
|
return this.adClient.searchAll(type, options);
|
||||||
},
|
}
|
||||||
|
|
||||||
removeMembers(role, user) {
|
removeMembers(role, user) {
|
||||||
return this.sambaTool('group', ['removemembers', role, user]);
|
return this.sambaTool('group', ['removemembers', role, user]);
|
||||||
},
|
}
|
||||||
|
|
||||||
addMembers(role, user) {
|
addMembers(role, user) {
|
||||||
return this.sambaTool('group', ['addmembers', role, user]);
|
return this.sambaTool('group', ['addmembers', role, user]);
|
||||||
},
|
}
|
||||||
|
|
||||||
handleRoleMembers(users) {
|
handleRoleMembers(users) {
|
||||||
if (users.length === 0) return [];
|
if (users.length === 0) return [];
|
||||||
let members = users[0]?.member;
|
let members = users[0]?.member;
|
||||||
if (!members) return [];
|
if (!members) return [];
|
||||||
if (!Array.isArray(members))members = [members];
|
if (!Array.isArray(members))members = [members];
|
||||||
return members.map((member => member.match(/CN=(.*?),(.*)/)[1]));
|
return members.map((member => member.match(/CN=(.*?),(.*)/)[1]));
|
||||||
},
|
}
|
||||||
|
|
||||||
async handleUsersRole(role, currentUsers, users) {
|
async handleUsersRole(role, currentUsers, users) {
|
||||||
const forbiddenUsers = ['guest'];
|
const forbiddenUsers = ['guest'];
|
||||||
users = users.filter(u => !u.includes(forbiddenUsers));
|
users = users.filter(u => !u.includes(forbiddenUsers));
|
||||||
|
@ -219,23 +244,13 @@ module.exports = Self => {
|
||||||
this.addmembers(role, user)));
|
this.addmembers(role, user)));
|
||||||
printResults(results);
|
printResults(results);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
async syncRoles() {
|
|
||||||
await this.init();
|
|
||||||
let $ = app.models;
|
|
||||||
// let {
|
|
||||||
// client,
|
|
||||||
// accountConfig
|
|
||||||
// } = this;
|
|
||||||
|
|
||||||
// Prepare data
|
|
||||||
try {
|
|
||||||
// const filter = '(cn=VN_*)';
|
|
||||||
|
|
||||||
|
async syncFromDB() {
|
||||||
// const baseDN = 'cn=Users,dc=verdnatura,dc=es';
|
// const baseDN = 'cn=Users,dc=verdnatura,dc=es';
|
||||||
const ldapMembersGroups = await this.getMembers();
|
const ldapMembersGroups = await this.getMembers();
|
||||||
// OBTENER ROLES
|
// OBTENER ROLES
|
||||||
let roles = (await $.VnRole.find({
|
let roles = (await app.models.VnRole.find({
|
||||||
fields: ['id', 'name', 'description'],
|
fields: ['id', 'name', 'description'],
|
||||||
order: 'modified DESC',
|
order: 'modified DESC',
|
||||||
limit: 2
|
limit: 2
|
||||||
|
@ -275,7 +290,7 @@ module.exports = Self => {
|
||||||
rolesToDelete.length > 0 ||
|
rolesToDelete.length > 0 ||
|
||||||
rolesToInsert.length > 0 ||
|
rolesToInsert.length > 0 ||
|
||||||
rolesToUpdate.length > 0) {
|
rolesToUpdate.length > 0) {
|
||||||
let users = await $.VnUser.find({
|
let users = await app.models.VnUser.find({
|
||||||
include: {
|
include: {
|
||||||
relation: 'role',
|
relation: 'role',
|
||||||
scope: {fields: ['name'],
|
scope: {fields: ['name'],
|
||||||
|
@ -348,9 +363,8 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
}
|
}
|
||||||
},
|
syncMembers() {
|
||||||
});
|
|
||||||
};
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue