94 lines
2.4 KiB
JavaScript
94 lines
2.4 KiB
JavaScript
|
|
||
|
const SyncConnector = require('./sync-connector');
|
||
|
const ssh = require('node-ssh');
|
||
|
|
||
|
class SyncSamba extends SyncConnector {
|
||
|
async init() {
|
||
|
let sambaConfig = await this.$.SambaConfig.findOne({
|
||
|
fields: ['host', 'sshUser', 'sshPass']
|
||
|
});
|
||
|
if (!sambaConfig) return false;
|
||
|
|
||
|
let sshPassword = Buffer
|
||
|
.from(sambaConfig.sshPass, 'base64')
|
||
|
.toString('ascii');
|
||
|
|
||
|
let client = new ssh.NodeSSH();
|
||
|
await client.connect({
|
||
|
host: sambaConfig.host,
|
||
|
username: sambaConfig.sshUser,
|
||
|
password: sshPassword
|
||
|
});
|
||
|
|
||
|
Object.assign(this, {
|
||
|
sambaConfig,
|
||
|
client
|
||
|
});
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
async deinit() {
|
||
|
if (this.client)
|
||
|
await this.client.dispose();
|
||
|
}
|
||
|
|
||
|
async sync(info, userName, password) {
|
||
|
let {
|
||
|
client
|
||
|
} = this;
|
||
|
|
||
|
let {
|
||
|
hasAccount,
|
||
|
extraParams
|
||
|
} = info;
|
||
|
|
||
|
if (hasAccount) {
|
||
|
try {
|
||
|
await client.exec('samba-tool user create', [
|
||
|
userName,
|
||
|
'--uid-number', `${extraParams.uidNumber}`,
|
||
|
'--mail-address', extraParams.corporateMail,
|
||
|
'--random-password'
|
||
|
]);
|
||
|
} catch (e) {}
|
||
|
|
||
|
await client.exec('samba-tool user setexpiry', [
|
||
|
userName,
|
||
|
'--noexpiry'
|
||
|
]);
|
||
|
|
||
|
if (password) {
|
||
|
await client.exec('samba-tool user setpassword', [
|
||
|
userName,
|
||
|
'--newpassword', password
|
||
|
]);
|
||
|
await client.exec('samba-tool user enable', [
|
||
|
userName
|
||
|
]);
|
||
|
}
|
||
|
|
||
|
await client.exec('mkhomedir_helper', [
|
||
|
userName,
|
||
|
'0027'
|
||
|
]);
|
||
|
} else {
|
||
|
try {
|
||
|
await client.exec('samba-tool user disable', [
|
||
|
userName
|
||
|
]);
|
||
|
console.log(` -> '${userName}' disabled on Samba`);
|
||
|
} catch (e) {}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async getUsers(usersToSync) {
|
||
|
let {client} = this;
|
||
|
let res = await client.execCommand('samba-tool user list');
|
||
|
let users = res.stdout.split('\n');
|
||
|
for (let user of users) usersToSync.add(user.trim());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
SyncConnector.connectors.push(SyncSamba);
|
||
|
module.exports = SyncSamba;
|