LDAP - support posixGroups in group model
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Garrett Mills 2021-03-10 19:12:46 -06:00
parent 53a1662f70
commit 82e25ccef0
Signed by: garrettmills
GPG Key ID: D2BF5FBA8298F246

View File

@ -11,6 +11,8 @@ class GroupModel extends Model {
return {
name: String,
user_ids: [String],
posix_user_id: String,
posix_group_id: Number,
active: { type: Boolean, default: true },
ldap_visible: { type: Boolean, default: true },
}
@ -31,16 +33,49 @@ class GroupModel extends Model {
async to_ldap() {
const users = await this.users()
return {
const data = {
cn: this.name,
dn: this.dn.format(this.configs.get('ldap:server.format')),
objectClass: 'groupOfNames',
objectClass: ['groupOfNames'],
member: users.map(x => x.dn.format(this.configs.get('ldap:server.format'))),
}
if ( this.posix_group_id ) {
data.objectClass.push('posixGroup')
data.gidNumber = this.posix_group_id
}
return data
}
static async ldap_directory() {
return this.find({ ldap_visible: true, active: true })
const User = this.prototype.models.get('auth:User')
const groups = await this.find({ ldap_visible: true, active: true })
const posix_user_ids = groups.map(group => group.posix_user_id)
.filter(Boolean)
.map(id => User.to_object_id(id))
const missing_posix_users = await User.find({
ldap_visible: true,
_id: {
$nin: posix_user_ids
}
})
for ( const user of missing_posix_users ) {
const group = new this({
name: `${user.uid} (posix)`,
user_ids: [user.id],
posix_user_id: user.id,
posix_group_id: await user.get_uid_number(),
})
await group.save()
groups.push(group)
}
return groups
}
async to_api() {