User sync fixes
gitea/salix/pipeline/head This commit looks good Details

This commit is contained in:
Juan Ferrer 2020-10-31 01:56:19 +01:00
parent 15c39f93ca
commit ba5a03c980
2 changed files with 25 additions and 14 deletions

View File

@ -99,7 +99,7 @@ module.exports = Self => {
try { try {
await Self.doSync(sync, user); await Self.doSync(sync, user);
} catch (err) { } catch (err) {
console.error(err); console.error(`Cannot sync user '${user}':`, err);
} }
} }
await Self.syncDeinit(sync); await Self.syncDeinit(sync);

View File

@ -119,6 +119,10 @@ module.exports = Self => {
sambaClient sambaClient
} = sync; } = sync;
// Avoid to change adminitration users
if (['administrator', 'root'].indexOf(userName.toLowerCase()) >= 0)
return;
let user = await $.Account.findOne({ let user = await $.Account.findOne({
where: {name: userName}, where: {name: userName},
fields: [ fields: [
@ -169,14 +173,19 @@ module.exports = Self => {
await $.Account.upsertWithWhere({id: user.id}, await $.Account.upsertWithWhere({id: user.id},
{bcryptPassword} {bcryptPassword}
); );
await $.user.upsert({
let appUser = {
id: user.id, id: user.id,
username: userName, username: userName,
password: bcryptPassword,
email: user.email, email: user.email,
created: user.created, created: user.created,
updated: user.updated updated: user.updated
}); };
if (bcryptPassword)
appUser.password = bcryptPassword;
await $.user.upsert(appUser);
} }
// SIP // SIP
@ -240,7 +249,8 @@ module.exports = Self => {
if (hasAccount) { if (hasAccount) {
// Recreates user // Recreates user
let nameArgs = user.nickname.split(' '); let nickname = user.nickname || userName;
let nameArgs = nickname.split(' ');
let sn = nameArgs.length > 1 let sn = nameArgs.length > 1
? nameArgs.splice(1).join(' ') ? nameArgs.splice(1).join(' ')
: '-'; : '-';
@ -253,8 +263,8 @@ module.exports = Self => {
'posixAccount', 'posixAccount',
'sambaSamAccount' 'sambaSamAccount'
], ],
cn: user.nickname || userName, cn: nickname,
displayName: user.nickname, displayName: nickname,
givenName: nameArgs[0], givenName: nameArgs[0],
sn, sn,
mail: extraParams.corporateMail, mail: extraParams.corporateMail,
@ -266,7 +276,6 @@ module.exports = Self => {
sambaSID: '-' sambaSID: '-'
}; };
let passwords;
if (password) { if (password) {
let salt = crypto let salt = crypto
.randomBytes(8) .randomBytes(8)
@ -281,19 +290,21 @@ module.exports = Self => {
.from(digest + salt, 'binary') .from(digest + salt, 'binary')
.toString('base64'); .toString('base64');
passwords = { Object.assign(newEntry, {
userPassword: `{SSHA}${ssha}`, userPassword: `{SSHA}${ssha}`,
sambaNTPassword: nthash(password) sambaNTPassword: nthash(password)
}; });
} else if (oldUser) { } else if (oldUser) {
passwords = { Object.assign(newEntry, {
userPassword: oldUser.userPassword, userPassword: oldUser.userPassword,
sambaNTPassword: oldUser.sambaNTPassword sambaNTPassword: oldUser.sambaNTPassword
}; });
} }
if (passwords) for (let prop in newEntry) {
Object.assign(newEntry, passwords); if (newEntry[prop] == null)
delete newEntry[prop];
}
await ldapClient.add(dn, newEntry); await ldapClient.add(dn, newEntry);