4879769cc7
- Add standalone.enabled config flag to switch between LDAP+SSO and ORM-backed backends without changing the production code path - New ORM models: StandaloneUser (uid, passwordHash, sshPublicKeys, groups) and StandaloneHost (slug, displayName, kind, metadata) - user_file.js and hosts_file.js implement the same interfaces as the LDAP client and accessibleHosts() respectively - models/user_ldap.js and utils/access.js become conditional facades that delegate based on conf.standalone.enabled at require time - Zero changes to ssh_server.js core logic, bridge.js, key_inject.js, tui_picker.js, or any other consumer - Fix ssh_server.js: use ?? instead of || for listenPort (0 is falsy) - Fix ssh_server.js: register session listeners before awaiting audit.create() so client exec/shell requests aren't rejected - Patch StringField.toSequelize() and IntegerField.toSequelize() to pass through primaryKey (the ORM's UUIDField already does this) - 47 tests pass (24 existing + 15 new unit + 3 existing integration + 5 new standalone integration) - Defaults to SQLite; any Sequelize dialect works via conf.orm Co-Authored-By: Claude <noreply@anthropic.com>
31 lines
1.1 KiB
JavaScript
31 lines
1.1 KiB
JavaScript
'use strict';
|
|
|
|
// ORM-backed host inventory for standalone mode. Implements the same interface
|
|
// as utils/access.js so ssh_server.js works unchanged: accessibleHosts(user)
|
|
// returns an array of host resources the user may reach.
|
|
//
|
|
// In standalone mode all hosts in the inventory are accessible to every
|
|
// authenticated user — there is no group-based filtering. The _user parameter
|
|
// is accepted for interface compatibility but ignored.
|
|
|
|
const StandaloneHost = require('../models/standalone_host');
|
|
|
|
async function accessibleHosts(_user) {
|
|
const hosts = await StandaloneHost.list({ where: { kind: 'host' } });
|
|
// The ORM returns model instances; map to plain objects matching the shape
|
|
// that target_match.js and tui_picker.js expect.
|
|
return hosts.map((h) => ({
|
|
id: h.slug, // slug doubles as the stable id in standalone mode
|
|
kind: h.kind,
|
|
slug: h.slug,
|
|
displayName: h.displayName,
|
|
metadata: h.metadata || {},
|
|
}));
|
|
}
|
|
|
|
function clearCache() {
|
|
// No cache in standalone mode — every call reads from the DB.
|
|
}
|
|
|
|
module.exports = { accessibleHosts, clearCache };
|