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;