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.0 KiB
JavaScript
31 lines
1.0 KiB
JavaScript
'use strict';
|
|
|
|
// ORM model for standalone-mode hosts. Stored in the configured SQL database
|
|
// (default SQLite) when conf.standalone.enabled is true. The hosts_file.js
|
|
// wrapper translates between this model and the accessibleHosts() interface
|
|
// that ssh_server.js expects.
|
|
|
|
const { Model, fields } = require('@simpleworkjs/orm');
|
|
|
|
// Patch StringField.toSequelize() to pass through primaryKey (same fix as in
|
|
// standalone_user.js — see that file for details).
|
|
if (!fields.StringField.prototype.toSequelize.toString().includes('primaryKey')) {
|
|
const orig = fields.StringField.prototype.toSequelize;
|
|
fields.StringField.prototype.toSequelize = function () {
|
|
const def = orig.call(this);
|
|
if (this.primaryKey) def.primaryKey = true;
|
|
return def;
|
|
};
|
|
}
|
|
|
|
class StandaloneHost extends Model {
|
|
static fields = {
|
|
slug: { type: 'string', primaryKey: true },
|
|
displayName: { type: 'string' },
|
|
kind: { type: 'string', default: 'host' },
|
|
metadata: { type: 'json', default: {} },
|
|
};
|
|
}
|
|
|
|
module.exports = StandaloneHost;
|