V0.1
This commit is contained in:
69
server/integrations.js
Normal file
69
server/integrations.js
Normal file
@@ -0,0 +1,69 @@
|
||||
import db from './db.js';
|
||||
import { performLdapSync } from './ldap-sync.js';
|
||||
|
||||
const DEFAULT_INTEGRATIONS = {
|
||||
ldap: {
|
||||
serverUrl: '',
|
||||
bindDn: '',
|
||||
bindPassword: '',
|
||||
searchBase: '',
|
||||
userSearchFilter: '',
|
||||
userFilter: '',
|
||||
usernameAttribute: 'sAMAccountName',
|
||||
firstNameAttribute: 'givenName',
|
||||
lastNameAttribute: 'sn',
|
||||
syncIntervalMinutes: 1440,
|
||||
syncEnabled: false,
|
||||
syncNotes: '',
|
||||
},
|
||||
teamviewer: {
|
||||
bearerToken: '',
|
||||
notes: '',
|
||||
},
|
||||
};
|
||||
|
||||
export function loadIntegrations() {
|
||||
const row = db.prepare('SELECT value FROM app_settings WHERE key = ?').get('integrations');
|
||||
const base = structuredClone(DEFAULT_INTEGRATIONS);
|
||||
if (!row?.value) return base;
|
||||
try {
|
||||
const s = JSON.parse(row.value);
|
||||
if (s.ldap && typeof s.ldap === 'object') Object.assign(base.ldap, s.ldap);
|
||||
const ld = base.ldap;
|
||||
if (!ld.userSearchFilter && ld.userFilter) ld.userSearchFilter = ld.userFilter;
|
||||
if (s.teamviewer && typeof s.teamviewer === 'object')
|
||||
Object.assign(base.teamviewer, s.teamviewer);
|
||||
const tv = base.teamviewer;
|
||||
if (!tv.bearerToken && tv.apiToken) tv.bearerToken = tv.apiToken;
|
||||
if (tv.notes == null && tv.apiNotes) tv.notes = tv.apiNotes;
|
||||
return base;
|
||||
} catch {
|
||||
return base;
|
||||
}
|
||||
}
|
||||
|
||||
export function saveIntegrations(obj) {
|
||||
const json = JSON.stringify(obj);
|
||||
db.prepare(
|
||||
`INSERT INTO app_settings (key, value) VALUES ('integrations', ?)
|
||||
ON CONFLICT(key) DO UPDATE SET value = excluded.value`,
|
||||
).run(json);
|
||||
}
|
||||
|
||||
let ldapSyncTimer = null;
|
||||
|
||||
export function restartLdapSyncScheduler() {
|
||||
if (ldapSyncTimer) {
|
||||
clearInterval(ldapSyncTimer);
|
||||
ldapSyncTimer = null;
|
||||
}
|
||||
const cfg = loadIntegrations().ldap;
|
||||
if (!cfg.syncEnabled) return;
|
||||
const m = Math.max(0, Number(cfg.syncIntervalMinutes) || 0);
|
||||
if (m <= 0) return;
|
||||
ldapSyncTimer = setInterval(() => {
|
||||
performLdapSync(db, loadIntegrations, 'automatic').catch((err) =>
|
||||
console.error('LDAP auto-sync:', err),
|
||||
);
|
||||
}, m * 60 * 1000);
|
||||
}
|
||||
Reference in New Issue
Block a user