@lamalibre/create-lamaste 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +118 -0
- package/README.md +114 -0
- package/bin/create-lamaste.js +15 -0
- package/package.json +54 -0
- package/scripts/bundle-vendor.js +110 -0
- package/scripts/lamaste-cert-info +62 -0
- package/scripts/lamaste-certbot +96 -0
- package/scripts/lamaste-priv +693 -0
- package/src/index.js +646 -0
- package/src/lib/accounts.js +86 -0
- package/src/lib/binaries.js +137 -0
- package/src/lib/cert-help-page.js +160 -0
- package/src/lib/env.js +132 -0
- package/src/lib/http-redirect.js +38 -0
- package/src/lib/ownership.js +231 -0
- package/src/lib/relay-services.js +103 -0
- package/src/lib/secrets.js +19 -0
- package/src/lib/service-config.js +311 -0
- package/src/lib/summary.js +131 -0
- package/src/lib/wrappers.js +63 -0
- package/src/tasks/gatekeeper.js +233 -0
- package/src/tasks/harden.js +293 -0
- package/src/tasks/mtls.js +193 -0
- package/src/tasks/nginx.js +265 -0
- package/src/tasks/node.js +110 -0
- package/src/tasks/panel.js +408 -0
- package/src/tasks/redeploy.js +438 -0
- package/vendor/docs/00-introduction/how-it-works.md +447 -0
- package/vendor/docs/00-introduction/quickstart.md +472 -0
- package/vendor/docs/00-introduction/what-is-lamaste.md +112 -0
- package/vendor/docs/01-concepts/authentication.md +464 -0
- package/vendor/docs/01-concepts/authorization.md +242 -0
- package/vendor/docs/01-concepts/certificates.md +452 -0
- package/vendor/docs/01-concepts/dns-and-domains.md +343 -0
- package/vendor/docs/01-concepts/mtls.md +490 -0
- package/vendor/docs/01-concepts/nginx-reverse-proxy.md +540 -0
- package/vendor/docs/01-concepts/security-model.md +600 -0
- package/vendor/docs/01-concepts/tickets.md +414 -0
- package/vendor/docs/01-concepts/tunneling.md +367 -0
- package/vendor/docs/02-guides/agent-setup.md +194 -0
- package/vendor/docs/02-guides/certificate-management.md +341 -0
- package/vendor/docs/02-guides/cloud-provisioning.md +406 -0
- package/vendor/docs/02-guides/desktop-app-setup.md +226 -0
- package/vendor/docs/02-guides/disaster-recovery.md +464 -0
- package/vendor/docs/02-guides/first-tunnel.md +230 -0
- package/vendor/docs/02-guides/installation.md +393 -0
- package/vendor/docs/02-guides/managing-users.md +255 -0
- package/vendor/docs/02-guides/onboarding.md +244 -0
- package/vendor/docs/02-guides/standalone-plugin-with-tickets.md +375 -0
- package/vendor/docs/02-guides/static-sites.md +364 -0
- package/vendor/docs/03-architecture/e2e-three-vm-sequences.md +457 -0
- package/vendor/docs/03-architecture/installer-flow.md +151 -0
- package/vendor/docs/03-architecture/installer.md +445 -0
- package/vendor/docs/03-architecture/management-flow.md +288 -0
- package/vendor/docs/03-architecture/nginx-configuration.md +830 -0
- package/vendor/docs/03-architecture/onboarding-flow.md +164 -0
- package/vendor/docs/03-architecture/overview.md +541 -0
- package/vendor/docs/03-architecture/panel-client.md +416 -0
- package/vendor/docs/03-architecture/panel-server.md +695 -0
- package/vendor/docs/03-architecture/state-management.md +529 -0
- package/vendor/docs/03-architecture/system-overview.md +167 -0
- package/vendor/docs/04-api-reference/certificates.md +1141 -0
- package/vendor/docs/04-api-reference/gatekeeper.md +592 -0
- package/vendor/docs/04-api-reference/onboarding.md +473 -0
- package/vendor/docs/04-api-reference/overview.md +404 -0
- package/vendor/docs/04-api-reference/services.md +267 -0
- package/vendor/docs/04-api-reference/settings.md +343 -0
- package/vendor/docs/04-api-reference/sites.md +716 -0
- package/vendor/docs/04-api-reference/system.md +268 -0
- package/vendor/docs/04-api-reference/tickets.md +618 -0
- package/vendor/docs/04-api-reference/tunnels.md +417 -0
- package/vendor/docs/04-api-reference/users.md +333 -0
- package/vendor/docs/05-operations/backup-and-restore.md +342 -0
- package/vendor/docs/05-operations/monitoring.md +285 -0
- package/vendor/docs/05-operations/uninstalling.md +344 -0
- package/vendor/docs/05-operations/upgrades.md +270 -0
- package/vendor/docs/06-reference/config-files.md +1080 -0
- package/vendor/docs/06-reference/glossary.md +528 -0
- package/vendor/docs/06-reference/installer-flags.md +260 -0
- package/vendor/docs/06-reference/ports-and-services.md +244 -0
- package/vendor/docs/06-reference/troubleshooting.md +665 -0
- package/vendor/docs/_index.json +233 -0
- package/vendor/docs/gatekeeper-design.md +953 -0
- package/vendor/docs/package.json +15 -0
- package/vendor/docs/todo/lib-cli-desktop-refactor.md +641 -0
- package/vendor/gatekeeper/dist/boot.d.ts +1 -0
- package/vendor/gatekeeper/dist/boot.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/boot.js +17 -0
- package/vendor/gatekeeper/dist/boot.js.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/access.d.ts +2 -0
- package/vendor/gatekeeper/dist/cli/commands/access.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/access.js +33 -0
- package/vendor/gatekeeper/dist/cli/commands/access.js.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/grants.d.ts +2 -0
- package/vendor/gatekeeper/dist/cli/commands/grants.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/grants.js +110 -0
- package/vendor/gatekeeper/dist/cli/commands/grants.js.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/groups.d.ts +2 -0
- package/vendor/gatekeeper/dist/cli/commands/groups.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/groups.js +98 -0
- package/vendor/gatekeeper/dist/cli/commands/groups.js.map +1 -0
- package/vendor/gatekeeper/dist/cli/index.d.ts +3 -0
- package/vendor/gatekeeper/dist/cli/index.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/cli/index.js +45 -0
- package/vendor/gatekeeper/dist/cli/index.js.map +1 -0
- package/vendor/gatekeeper/dist/index.d.ts +9 -0
- package/vendor/gatekeeper/dist/index.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/index.js +13 -0
- package/vendor/gatekeeper/dist/index.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/authz.d.ts +16 -0
- package/vendor/gatekeeper/dist/lib/authz.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/authz.js +42 -0
- package/vendor/gatekeeper/dist/lib/authz.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/cache-bust.d.ts +15 -0
- package/vendor/gatekeeper/dist/lib/cache-bust.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/cache-bust.js +19 -0
- package/vendor/gatekeeper/dist/lib/cache-bust.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/constants.d.ts +82 -0
- package/vendor/gatekeeper/dist/lib/constants.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/constants.js +79 -0
- package/vendor/gatekeeper/dist/lib/constants.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/grants.d.ts +32 -0
- package/vendor/gatekeeper/dist/lib/grants.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/grants.js +314 -0
- package/vendor/gatekeeper/dist/lib/grants.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/groups.d.ts +10 -0
- package/vendor/gatekeeper/dist/lib/groups.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/groups.js +247 -0
- package/vendor/gatekeeper/dist/lib/groups.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/migration.d.ts +17 -0
- package/vendor/gatekeeper/dist/lib/migration.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/migration.js +79 -0
- package/vendor/gatekeeper/dist/lib/migration.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/migrations/gatekeeper/0001_groups.sql +7 -0
- package/vendor/gatekeeper/dist/lib/migrations/gatekeeper/0002_access_grants.sql +14 -0
- package/vendor/gatekeeper/dist/lib/migrations/gatekeeper/0003_access_request_log.sql +9 -0
- package/vendor/gatekeeper/dist/lib/migrations/migrations/gatekeeper/0001_groups.sql +7 -0
- package/vendor/gatekeeper/dist/lib/migrations/migrations/gatekeeper/0002_access_grants.sql +14 -0
- package/vendor/gatekeeper/dist/lib/migrations/migrations/gatekeeper/0003_access_request_log.sql +9 -0
- package/vendor/gatekeeper/dist/lib/state-db.d.ts +16 -0
- package/vendor/gatekeeper/dist/lib/state-db.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/state-db.js +154 -0
- package/vendor/gatekeeper/dist/lib/state-db.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/templates.d.ts +21 -0
- package/vendor/gatekeeper/dist/lib/templates.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/templates.js +151 -0
- package/vendor/gatekeeper/dist/lib/templates.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/types.d.ts +178 -0
- package/vendor/gatekeeper/dist/lib/types.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/types.js +2 -0
- package/vendor/gatekeeper/dist/lib/types.js.map +1 -0
- package/vendor/gatekeeper/dist/server/index.d.ts +15 -0
- package/vendor/gatekeeper/dist/server/index.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/index.js +251 -0
- package/vendor/gatekeeper/dist/server/index.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/access-request.d.ts +7 -0
- package/vendor/gatekeeper/dist/server/routes/access-request.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/access-request.js +17 -0
- package/vendor/gatekeeper/dist/server/routes/access-request.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/authz.d.ts +3 -0
- package/vendor/gatekeeper/dist/server/routes/authz.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/authz.js +279 -0
- package/vendor/gatekeeper/dist/server/routes/authz.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/diagnostic.d.ts +13 -0
- package/vendor/gatekeeper/dist/server/routes/diagnostic.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/diagnostic.js +249 -0
- package/vendor/gatekeeper/dist/server/routes/diagnostic.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/grants.d.ts +3 -0
- package/vendor/gatekeeper/dist/server/routes/grants.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/grants.js +112 -0
- package/vendor/gatekeeper/dist/server/routes/grants.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/groups.d.ts +3 -0
- package/vendor/gatekeeper/dist/server/routes/groups.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/groups.js +139 -0
- package/vendor/gatekeeper/dist/server/routes/groups.js.map +1 -0
- package/vendor/gatekeeper/package.json +49 -0
- package/vendor/server/bin/lamaste-server.js +204 -0
- package/vendor/server/package.json +31 -0
- package/vendor/server/src/commands/certs.js +224 -0
- package/vendor/server/src/commands/chisel.js +132 -0
- package/vendor/server/src/commands/logs.js +49 -0
- package/vendor/server/src/commands/plugins.js +321 -0
- package/vendor/server/src/commands/reset-admin.js +478 -0
- package/vendor/server/src/commands/restart.js +94 -0
- package/vendor/server/src/commands/sites.js +257 -0
- package/vendor/server/src/commands/status.js +158 -0
- package/vendor/server/src/commands/tunnels.js +365 -0
- package/vendor/server/src/commands/uninstall.js +326 -0
- package/vendor/server/src/config.js +38 -0
- package/vendor/server/src/exec.js +26 -0
- package/vendor/server/src/logger.js +39 -0
- package/vendor/server/src/ndjson.js +56 -0
- package/vendor/server/src/panel-api.js +85 -0
- package/vendor/server/src/state.js +45 -0
- package/vendor/server-ui/dist/assets/index-B0nWuUyL.js +257 -0
- package/vendor/server-ui/dist/assets/index-BqWWFlTU.css +1 -0
- package/vendor/server-ui/dist/index.html +13 -0
- package/vendor/serverd/package.json +44 -0
- package/vendor/serverd/src/boot.js +13 -0
- package/vendor/serverd/src/index.js +191 -0
- package/vendor/serverd/src/lib/app-error.js +14 -0
- package/vendor/serverd/src/lib/authelia.js +85 -0
- package/vendor/serverd/src/lib/certbot.js +74 -0
- package/vendor/serverd/src/lib/chisel-args.js +6 -0
- package/vendor/serverd/src/lib/chisel-reconcile.js +232 -0
- package/vendor/serverd/src/lib/chisel-runtime.js +46 -0
- package/vendor/serverd/src/lib/chisel-users.js +109 -0
- package/vendor/serverd/src/lib/chisel.js +81 -0
- package/vendor/serverd/src/lib/config.js +190 -0
- package/vendor/serverd/src/lib/constants.js +8 -0
- package/vendor/serverd/src/lib/csr-signing.js +331 -0
- package/vendor/serverd/src/lib/enrollment.js +302 -0
- package/vendor/serverd/src/lib/files.js +19 -0
- package/vendor/serverd/src/lib/gatekeeper-client.js +135 -0
- package/vendor/serverd/src/lib/invite-page.js +281 -0
- package/vendor/serverd/src/lib/ip-utils.js +79 -0
- package/vendor/serverd/src/lib/migrations/state/0001_enrollment_tokens.sql +17 -0
- package/vendor/serverd/src/lib/migrations/state/0002_tickets.sql +70 -0
- package/vendor/serverd/src/lib/migrations/state/0003_plugins.sql +15 -0
- package/vendor/serverd/src/lib/migrations/state/0004_agents.sql +19 -0
- package/vendor/serverd/src/lib/mtls.js +795 -0
- package/vendor/serverd/src/lib/nginx.js +1090 -0
- package/vendor/serverd/src/lib/pki-paths.js +41 -0
- package/vendor/serverd/src/lib/pki-sign.js +103 -0
- package/vendor/serverd/src/lib/plugins.js +538 -0
- package/vendor/serverd/src/lib/push-install.js +390 -0
- package/vendor/serverd/src/lib/revocation.js +112 -0
- package/vendor/serverd/src/lib/services.js +131 -0
- package/vendor/serverd/src/lib/session.js +151 -0
- package/vendor/serverd/src/lib/state-db.js +130 -0
- package/vendor/serverd/src/lib/state.js +140 -0
- package/vendor/serverd/src/lib/storage.js +63 -0
- package/vendor/serverd/src/lib/system-stats.js +58 -0
- package/vendor/serverd/src/lib/tickets.js +1556 -0
- package/vendor/serverd/src/lib/totp.js +76 -0
- package/vendor/serverd/src/lib/tunnel-deps.js +41 -0
- package/vendor/serverd/src/lib/user-access-session.js +142 -0
- package/vendor/serverd/src/lib/user-access.js +52 -0
- package/vendor/serverd/src/middleware/errors.js +63 -0
- package/vendor/serverd/src/middleware/mtls.js +120 -0
- package/vendor/serverd/src/middleware/onboarding-guard.js +30 -0
- package/vendor/serverd/src/middleware/role-guard.js +58 -0
- package/vendor/serverd/src/middleware/twofa-session.js +65 -0
- package/vendor/serverd/src/middleware/user-access-session.js +52 -0
- package/vendor/serverd/src/routes/enrollment.js +120 -0
- package/vendor/serverd/src/routes/health.js +22 -0
- package/vendor/serverd/src/routes/invite.js +163 -0
- package/vendor/serverd/src/routes/management/agents.js +182 -0
- package/vendor/serverd/src/routes/management/certs.js +911 -0
- package/vendor/serverd/src/routes/management/gatekeeper-proxy.js +160 -0
- package/vendor/serverd/src/routes/management/identity.js +107 -0
- package/vendor/serverd/src/routes/management/invitations.js +166 -0
- package/vendor/serverd/src/routes/management/logs.js +218 -0
- package/vendor/serverd/src/routes/management/plugins.js +560 -0
- package/vendor/serverd/src/routes/management/services.js +63 -0
- package/vendor/serverd/src/routes/management/settings.js +325 -0
- package/vendor/serverd/src/routes/management/sites.js +522 -0
- package/vendor/serverd/src/routes/management/storage.js +192 -0
- package/vendor/serverd/src/routes/management/system.js +201 -0
- package/vendor/serverd/src/routes/management/tickets.js +457 -0
- package/vendor/serverd/src/routes/management/tunnels.js +709 -0
- package/vendor/serverd/src/routes/management/users.js +377 -0
- package/vendor/serverd/src/routes/management.js +36 -0
- package/vendor/serverd/src/routes/onboarding/dns.js +101 -0
- package/vendor/serverd/src/routes/onboarding/domain.js +42 -0
- package/vendor/serverd/src/routes/onboarding/index.js +18 -0
- package/vendor/serverd/src/routes/onboarding/provision.js +327 -0
- package/vendor/serverd/src/routes/onboarding/status.js +12 -0
- package/vendor/serverd/src/routes/plugin-router.js +79 -0
- package/vendor/serverd/src/routes/user-access.js +389 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Filter the ExperimentalWarning that node:sqlite emits on first import.
|
|
3
|
+
// Imported as the very first import in server/index.ts so its top-level code
|
|
4
|
+
// runs before any module that touches node:sqlite (currently lib/state-db.ts
|
|
5
|
+
// and the domain modules that go through it).
|
|
6
|
+
//
|
|
7
|
+
// `process.on('warning')` adds a listener but does not replace Node's default
|
|
8
|
+
// stderr printer — both fire. We drop all existing listeners (just the
|
|
9
|
+
// default printer at startup), then install a single filtered listener.
|
|
10
|
+
// Non-SQLite warnings continue to print.
|
|
11
|
+
process.removeAllListeners('warning');
|
|
12
|
+
process.on('warning', (warning) => {
|
|
13
|
+
if (warning.name === 'ExperimentalWarning' && /SQLite/i.test(warning.message))
|
|
14
|
+
return;
|
|
15
|
+
console.warn(warning);
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=boot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boot.js","sourceRoot":"","sources":["../src/boot.ts"],"names":[],"mappings":";AAAA,yEAAyE;AACzE,6EAA6E;AAC7E,6EAA6E;AAC7E,8CAA8C;AAC9C,EAAE;AACF,8EAA8E;AAC9E,uEAAuE;AACvE,wEAAwE;AACxE,yCAAyC;AACzC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACtC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAc,EAAE,EAAE;IACvC,IAAI,OAAO,CAAC,IAAI,KAAK,qBAAqB,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO;IACtF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/access.ts"],"names":[],"mappings":"AAEA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCjE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { checkAccess } from '../../lib/authz.js';
|
|
2
|
+
export async function accessCommand(args) {
|
|
3
|
+
const subcommand = args[0];
|
|
4
|
+
switch (subcommand) {
|
|
5
|
+
case 'check': {
|
|
6
|
+
const username = args[1];
|
|
7
|
+
const resourceType = args[2];
|
|
8
|
+
const resourceId = args[3];
|
|
9
|
+
if (!username || !resourceType || !resourceId) {
|
|
10
|
+
console.error('Usage: lamaste-gatekeeper access check <username> <resourceType> <resourceId>');
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
const result = await checkAccess(username, resourceType, resourceId);
|
|
14
|
+
console.log(JSON.stringify(result, null, 2));
|
|
15
|
+
if (!result.allowed) {
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
case '--help':
|
|
21
|
+
case '-h':
|
|
22
|
+
case undefined:
|
|
23
|
+
console.log(`Usage: lamaste-gatekeeper access <subcommand>
|
|
24
|
+
|
|
25
|
+
Subcommands:
|
|
26
|
+
check <username> <resourceType> <resourceId> Check if user has access`);
|
|
27
|
+
break;
|
|
28
|
+
default:
|
|
29
|
+
console.error(`Unknown subcommand: ${subcommand}`);
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.js","sourceRoot":"","sources":["../../../src/cli/commands/access.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3B,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAE3B,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC9C,OAAO,CAAC,KAAK,CACX,+EAA+E,CAChF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAE7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,SAAS;YACZ,OAAO,CAAC,GAAG,CAAC;;;2EAGyD,CAAC,CAAC;YACvE,MAAM;QAER;YACE,OAAO,CAAC,KAAK,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grants.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/grants.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6GhE"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { createGrant, listGrants, getGrant, revokeGrant } from '../../lib/grants.js';
|
|
2
|
+
export async function grantCommand(args) {
|
|
3
|
+
const subcommand = args[0];
|
|
4
|
+
switch (subcommand) {
|
|
5
|
+
case 'create': {
|
|
6
|
+
const user = getFlag(args, '--user');
|
|
7
|
+
const group = getFlag(args, '--group');
|
|
8
|
+
const tunnel = getFlag(args, '--tunnel');
|
|
9
|
+
const plugin = getFlag(args, '--plugin');
|
|
10
|
+
const target = getFlag(args, '--target');
|
|
11
|
+
if (!user && !group) {
|
|
12
|
+
console.error('Must specify --user <username> or --group <groupname>');
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
if (!tunnel && !plugin) {
|
|
16
|
+
console.error('Must specify --tunnel <tunnelId> or --plugin <pluginName>');
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
const principalType = user ? 'user' : 'group';
|
|
20
|
+
const principalId = (user ?? group);
|
|
21
|
+
const resourceType = tunnel ? 'tunnel' : 'plugin';
|
|
22
|
+
const resourceId = (tunnel ?? plugin);
|
|
23
|
+
const context = {};
|
|
24
|
+
if (target)
|
|
25
|
+
context['target'] = target;
|
|
26
|
+
const grant = await createGrant({
|
|
27
|
+
principalType,
|
|
28
|
+
principalId,
|
|
29
|
+
resourceType,
|
|
30
|
+
resourceId,
|
|
31
|
+
context,
|
|
32
|
+
});
|
|
33
|
+
console.log(JSON.stringify(grant, null, 2));
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
case 'list': {
|
|
37
|
+
const user = getFlag(args, '--user');
|
|
38
|
+
const group = getFlag(args, '--group');
|
|
39
|
+
const tunnel = getFlag(args, '--tunnel');
|
|
40
|
+
const plugin = getFlag(args, '--plugin');
|
|
41
|
+
const filter = {};
|
|
42
|
+
if (user) {
|
|
43
|
+
filter.principalType = 'user';
|
|
44
|
+
filter.principalId = user;
|
|
45
|
+
}
|
|
46
|
+
else if (group) {
|
|
47
|
+
filter.principalType = 'group';
|
|
48
|
+
filter.principalId = group;
|
|
49
|
+
}
|
|
50
|
+
if (tunnel) {
|
|
51
|
+
filter.resourceType = 'tunnel';
|
|
52
|
+
filter.resourceId = tunnel;
|
|
53
|
+
}
|
|
54
|
+
else if (plugin) {
|
|
55
|
+
filter.resourceType = 'plugin';
|
|
56
|
+
filter.resourceId = plugin;
|
|
57
|
+
}
|
|
58
|
+
const grants = await listGrants(Object.keys(filter).length > 0 ? filter : undefined);
|
|
59
|
+
console.log(JSON.stringify(grants, null, 2));
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case 'show': {
|
|
63
|
+
const grantId = args[1];
|
|
64
|
+
if (!grantId) {
|
|
65
|
+
console.error('Usage: lamaste-gatekeeper grant show <grantId>');
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
const grant = await getGrant(grantId);
|
|
69
|
+
if (!grant) {
|
|
70
|
+
console.error('Grant not found');
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
console.log(JSON.stringify(grant, null, 2));
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
case 'revoke': {
|
|
77
|
+
const grantId = args[1];
|
|
78
|
+
if (!grantId) {
|
|
79
|
+
console.error('Usage: lamaste-gatekeeper grant revoke <grantId>');
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
const grant = await revokeGrant(grantId);
|
|
83
|
+
console.log(`Revoked grant ${grant.grantId}`);
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case '--help':
|
|
87
|
+
case '-h':
|
|
88
|
+
case undefined:
|
|
89
|
+
console.log(`Usage: lamaste-gatekeeper grant <subcommand>
|
|
90
|
+
|
|
91
|
+
Subcommands:
|
|
92
|
+
create --user <username> --tunnel <tunnelId>
|
|
93
|
+
create --group <groupname> --tunnel <tunnelId>
|
|
94
|
+
create --user <username> --plugin <pluginName> [--target agent:<label>]
|
|
95
|
+
list [--user <username>] [--group <groupname>] [--tunnel <id>] [--plugin <name>]
|
|
96
|
+
show <grantId>
|
|
97
|
+
revoke <grantId>`);
|
|
98
|
+
break;
|
|
99
|
+
default:
|
|
100
|
+
console.error(`Unknown subcommand: ${subcommand}`);
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function getFlag(args, flag) {
|
|
105
|
+
const idx = args.indexOf(flag);
|
|
106
|
+
if (idx === -1)
|
|
107
|
+
return undefined;
|
|
108
|
+
return args[idx + 1];
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=grants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grants.js","sourceRoot":"","sources":["../../../src/cli/commands/grants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/groups.ts"],"names":[],"mappings":"AAUA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4GhE"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { createGroup, listGroups, getGroup, updateGroup, deleteGroup, addMembers, removeMembers, } from '../../lib/groups.js';
|
|
2
|
+
export async function groupCommand(args) {
|
|
3
|
+
const subcommand = args[0];
|
|
4
|
+
switch (subcommand) {
|
|
5
|
+
case 'create': {
|
|
6
|
+
const name = args[1];
|
|
7
|
+
if (!name) {
|
|
8
|
+
console.error('Usage: lamaste-gatekeeper group create <name> [--description "..."]');
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
const descIdx = args.indexOf('--description');
|
|
12
|
+
const description = descIdx !== -1 ? args[descIdx + 1] : undefined;
|
|
13
|
+
const group = await createGroup(name, { description });
|
|
14
|
+
console.log(JSON.stringify(group, null, 2));
|
|
15
|
+
break;
|
|
16
|
+
}
|
|
17
|
+
case 'list': {
|
|
18
|
+
const groups = await listGroups();
|
|
19
|
+
console.log(JSON.stringify(groups, null, 2));
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
case 'show': {
|
|
23
|
+
const name = args[1];
|
|
24
|
+
if (!name) {
|
|
25
|
+
console.error('Usage: lamaste-gatekeeper group show <name>');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const group = await getGroup(name);
|
|
29
|
+
if (!group) {
|
|
30
|
+
console.error(`Group "${name}" not found`);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
console.log(JSON.stringify(group, null, 2));
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
case 'rename': {
|
|
37
|
+
const name = args[1];
|
|
38
|
+
const newName = args[2];
|
|
39
|
+
if (!name || !newName) {
|
|
40
|
+
console.error('Usage: lamaste-gatekeeper group rename <name> <new-name>');
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
const group = await updateGroup(name, { name: newName });
|
|
44
|
+
console.log(JSON.stringify(group, null, 2));
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
case 'delete': {
|
|
48
|
+
const name = args[1];
|
|
49
|
+
if (!name) {
|
|
50
|
+
console.error('Usage: lamaste-gatekeeper group delete <name>');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const result = await deleteGroup(name);
|
|
54
|
+
console.log(`Deleted group "${name}". Revoked ${result.deletedGrants} grant(s).`);
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
case 'add-member': {
|
|
58
|
+
const groupName = args[1];
|
|
59
|
+
const usernames = args.slice(2);
|
|
60
|
+
if (!groupName || usernames.length === 0) {
|
|
61
|
+
console.error('Usage: lamaste-gatekeeper group add-member <group> <username> [<username>...]');
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
const group = await addMembers(groupName, usernames);
|
|
65
|
+
console.log(JSON.stringify(group, null, 2));
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
case 'remove-member': {
|
|
69
|
+
const groupName = args[1];
|
|
70
|
+
const usernames = args.slice(2);
|
|
71
|
+
if (!groupName || usernames.length === 0) {
|
|
72
|
+
console.error('Usage: lamaste-gatekeeper group remove-member <group> <username> [<username>...]');
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
const group = await removeMembers(groupName, usernames);
|
|
76
|
+
console.log(JSON.stringify(group, null, 2));
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
case '--help':
|
|
80
|
+
case '-h':
|
|
81
|
+
case undefined:
|
|
82
|
+
console.log(`Usage: lamaste-gatekeeper group <subcommand>
|
|
83
|
+
|
|
84
|
+
Subcommands:
|
|
85
|
+
create <name> [--description "..."] Create a group
|
|
86
|
+
list List all groups
|
|
87
|
+
show <name> Show group details
|
|
88
|
+
rename <name> <new-name> Rename a group
|
|
89
|
+
delete <name> Delete a group and revoke its grants
|
|
90
|
+
add-member <group> <username>... Add members to a group
|
|
91
|
+
remove-member <group> <username>... Remove members from a group`);
|
|
92
|
+
break;
|
|
93
|
+
default:
|
|
94
|
+
console.error(`Unknown subcommand: ${subcommand}`);
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=groups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groups.js","sourceRoot":"","sources":["../../../src/cli/commands/groups.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { groupCommand } from './commands/groups.js';
|
|
3
|
+
import { grantCommand } from './commands/grants.js';
|
|
4
|
+
import { accessCommand } from './commands/access.js';
|
|
5
|
+
const args = process.argv.slice(2);
|
|
6
|
+
const command = args[0];
|
|
7
|
+
async function main() {
|
|
8
|
+
switch (command) {
|
|
9
|
+
case 'group':
|
|
10
|
+
await groupCommand(args.slice(1));
|
|
11
|
+
break;
|
|
12
|
+
case 'grant':
|
|
13
|
+
await grantCommand(args.slice(1));
|
|
14
|
+
break;
|
|
15
|
+
case 'access':
|
|
16
|
+
await accessCommand(args.slice(1));
|
|
17
|
+
break;
|
|
18
|
+
case '--help':
|
|
19
|
+
case '-h':
|
|
20
|
+
case undefined:
|
|
21
|
+
printHelp();
|
|
22
|
+
break;
|
|
23
|
+
default:
|
|
24
|
+
console.error(`Unknown command: ${command}`);
|
|
25
|
+
printHelp();
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function printHelp() {
|
|
30
|
+
console.log(`lamaste-gatekeeper — authorization management CLI
|
|
31
|
+
|
|
32
|
+
Usage: lamaste-gatekeeper <command> [options]
|
|
33
|
+
|
|
34
|
+
Commands:
|
|
35
|
+
group Manage Lamaste access control groups
|
|
36
|
+
grant Manage access grants
|
|
37
|
+
access Check access and run diagnostics
|
|
38
|
+
|
|
39
|
+
Run 'lamaste-gatekeeper <command> --help' for command-specific help.`);
|
|
40
|
+
}
|
|
41
|
+
main().catch((err) => {
|
|
42
|
+
console.error('Error:', err.message);
|
|
43
|
+
process.exit(1);
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,KAAK,UAAU,IAAI;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,OAAO;YACV,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,SAAS;YACZ,SAAS,EAAE,CAAC;YACZ,MAAM;QACR;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;qEASuD,CAAC,CAAC;AACvE,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type { Group, GroupState, CreateGroupOptions, UpdateGroupOptions, DeleteGroupResult, Grant, GrantState, CreateGrantOptions, GrantFilter, AccessAllowed, AccessDenied, AccessResult, AccessRequestTemplates, TemplateOptions, GatekeeperSettings, AccessRequestEntry, TunnelInfo, AutheliaSession, GatekeeperLogger, } from './lib/types.js';
|
|
2
|
+
export { PRINCIPAL_TYPES, RESOURCE_TYPES, ACCESS_MODES, RESERVED_GROUP_NAMES, MAX_GROUPS, MAX_GRANTS, GRANT_RETENTION_MS, SESSION_CACHE_TTL_MS, GROUP_NAME_REGEX, MAX_GROUP_NAME_LENGTH, MIN_GROUP_NAME_LENGTH, DEFAULT_DATA_DIR, GROUPS_FILE, GRANTS_FILE, SETTINGS_FILE, ACCESS_LOG_FILE, AUTHELIA_VERIFY_URL, GATEKEEPER_PORT, } from './lib/constants.js';
|
|
3
|
+
export type { PrincipalType, ResourceType, AccessMode } from './lib/constants.js';
|
|
4
|
+
export { createGroup, listGroups, getGroup, updateGroup, deleteGroup, addMembers, removeMembers, getGroupsForUser, } from './lib/groups.js';
|
|
5
|
+
export { createGrant, listGrants, getGrant, revokeGrant, consumeGrant, removeGrantsByPredicate, removeGrantsByPrincipal, } from './lib/grants.js';
|
|
6
|
+
export { checkAccess } from './lib/authz.js';
|
|
7
|
+
export { getAccessRequestTemplates, buildAccessRequestPage } from './lib/templates.js';
|
|
8
|
+
export { migrateFromLegacy } from './lib/migration.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,KAAK,EACL,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,eAAe,EACf,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGlF,OAAO,EACL,WAAW,EACX,UAAU,EACV,QAAQ,EACR,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EACb,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,WAAW,EACX,UAAU,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Constants
|
|
2
|
+
export { PRINCIPAL_TYPES, RESOURCE_TYPES, ACCESS_MODES, RESERVED_GROUP_NAMES, MAX_GROUPS, MAX_GRANTS, GRANT_RETENTION_MS, SESSION_CACHE_TTL_MS, GROUP_NAME_REGEX, MAX_GROUP_NAME_LENGTH, MIN_GROUP_NAME_LENGTH, DEFAULT_DATA_DIR, GROUPS_FILE, GRANTS_FILE, SETTINGS_FILE, ACCESS_LOG_FILE, AUTHELIA_VERIFY_URL, GATEKEEPER_PORT, } from './lib/constants.js';
|
|
3
|
+
// Groups
|
|
4
|
+
export { createGroup, listGroups, getGroup, updateGroup, deleteGroup, addMembers, removeMembers, getGroupsForUser, } from './lib/groups.js';
|
|
5
|
+
// Grants
|
|
6
|
+
export { createGrant, listGrants, getGrant, revokeGrant, consumeGrant, removeGrantsByPredicate, removeGrantsByPrincipal, } from './lib/grants.js';
|
|
7
|
+
// Authorization
|
|
8
|
+
export { checkAccess } from './lib/authz.js';
|
|
9
|
+
// Templates
|
|
10
|
+
export { getAccessRequestTemplates, buildAccessRequestPage } from './lib/templates.js';
|
|
11
|
+
// Migration
|
|
12
|
+
export { migrateFromLegacy } from './lib/migration.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAuBA,YAAY;AACZ,OAAO,EACL,eAAe,EACf,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAI5B,SAAS;AACT,OAAO,EACL,WAAW,EACX,UAAU,EACV,QAAQ,EACR,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EACb,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,SAAS;AACT,OAAO,EACL,WAAW,EACX,UAAU,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,gBAAgB;AAChB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,YAAY;AACZ,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEvF,YAAY;AACZ,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AccessResult, TemplateOptions } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Check if a user has access to a resource.
|
|
4
|
+
*
|
|
5
|
+
* Resolution order:
|
|
6
|
+
* 1. Direct user grants (principalType='user', principalId=username)
|
|
7
|
+
* 2. Group grants (principalType='group', principalId in user's Lamaste groups)
|
|
8
|
+
*
|
|
9
|
+
* @param username - The Authelia username to check
|
|
10
|
+
* @param resourceType - The resource type (e.g., 'tunnel', 'plugin')
|
|
11
|
+
* @param resourceId - The resource identifier (e.g., tunnel UUID, plugin name)
|
|
12
|
+
* @param templateOptions - Options for generating access request templates
|
|
13
|
+
* @returns AccessResult indicating allowed/denied with templates if denied
|
|
14
|
+
*/
|
|
15
|
+
export declare function checkAccess(username: string, resourceType: string, resourceId: string, templateOptions?: TemplateOptions): Promise<AccessResult>;
|
|
16
|
+
//# sourceMappingURL=authz.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authz.d.ts","sourceRoot":"","sources":["../../src/lib/authz.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,eAAe,GAChC,OAAO,CAAC,YAAY,CAAC,CA8BvB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { listGrants } from './grants.js';
|
|
2
|
+
import { getGroupsForUser } from './groups.js';
|
|
3
|
+
import { getAccessRequestTemplates } from './templates.js';
|
|
4
|
+
/**
|
|
5
|
+
* Check if a user has access to a resource.
|
|
6
|
+
*
|
|
7
|
+
* Resolution order:
|
|
8
|
+
* 1. Direct user grants (principalType='user', principalId=username)
|
|
9
|
+
* 2. Group grants (principalType='group', principalId in user's Lamaste groups)
|
|
10
|
+
*
|
|
11
|
+
* @param username - The Authelia username to check
|
|
12
|
+
* @param resourceType - The resource type (e.g., 'tunnel', 'plugin')
|
|
13
|
+
* @param resourceId - The resource identifier (e.g., tunnel UUID, plugin name)
|
|
14
|
+
* @param templateOptions - Options for generating access request templates
|
|
15
|
+
* @returns AccessResult indicating allowed/denied with templates if denied
|
|
16
|
+
*/
|
|
17
|
+
export async function checkAccess(username, resourceType, resourceId, templateOptions) {
|
|
18
|
+
// Get all grants matching this resource
|
|
19
|
+
const resourceGrants = await listGrants({ resourceType, resourceId });
|
|
20
|
+
// Check 1: Direct user grant
|
|
21
|
+
const hasUserGrant = resourceGrants.some((g) => g.principalType === 'user' && g.principalId === username);
|
|
22
|
+
if (hasUserGrant) {
|
|
23
|
+
return { allowed: true };
|
|
24
|
+
}
|
|
25
|
+
// Check 2: Group grant — resolve user's Lamaste groups
|
|
26
|
+
const userGroups = await getGroupsForUser(username);
|
|
27
|
+
if (userGroups.length > 0) {
|
|
28
|
+
const groupGrants = resourceGrants.filter((g) => g.principalType === 'group');
|
|
29
|
+
const hasGroupGrant = groupGrants.some((g) => userGroups.includes(g.principalId));
|
|
30
|
+
if (hasGroupGrant) {
|
|
31
|
+
return { allowed: true };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Denied — generate templates
|
|
35
|
+
const templates = getAccessRequestTemplates(username, resourceId, templateOptions);
|
|
36
|
+
return {
|
|
37
|
+
allowed: false,
|
|
38
|
+
resource: { type: resourceType, id: resourceId },
|
|
39
|
+
templates,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=authz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authz.js","sourceRoot":"","sources":["../../src/lib/authz.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAG3D;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,YAAoB,EACpB,UAAkB,EAClB,eAAiC;IAEjC,wCAAwC;IACxC,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;IAEtE,6BAA6B;IAC7B,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,MAAM,IAAI,CAAC,CAAC,WAAW,KAAK,QAAQ,CAChE,CAAC;IACF,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,uDAAuD;IACvD,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC;QAC9E,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAClF,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,SAAS,GAAG,yBAAyB,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAEnF,OAAO;QACL,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE;QAChD,SAAS;KACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache invalidation hook registered by the gatekeeper server at startup.
|
|
3
|
+
*
|
|
4
|
+
* Library writers (grants, groups) call {@link notifyCacheInvalidated} after a
|
|
5
|
+
* successful write so the in-memory session cache and version counter can be
|
|
6
|
+
* updated deterministically — `fs.watch` is unreliable on network filesystems
|
|
7
|
+
* and container bind mounts, so the explicit notification closes that gap.
|
|
8
|
+
*
|
|
9
|
+
* If no server is registered (e.g. a CLI-only process touching the files),
|
|
10
|
+
* the notifier is a no-op.
|
|
11
|
+
*/
|
|
12
|
+
export type CacheInvalidator = () => void;
|
|
13
|
+
export declare function registerCacheInvalidator(fn: CacheInvalidator): void;
|
|
14
|
+
export declare function notifyCacheInvalidated(): void;
|
|
15
|
+
//# sourceMappingURL=cache-bust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-bust.d.ts","sourceRoot":"","sources":["../../src/lib/cache-bust.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC;AAI1C,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,gBAAgB,GAAG,IAAI,CAEnE;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache invalidation hook registered by the gatekeeper server at startup.
|
|
3
|
+
*
|
|
4
|
+
* Library writers (grants, groups) call {@link notifyCacheInvalidated} after a
|
|
5
|
+
* successful write so the in-memory session cache and version counter can be
|
|
6
|
+
* updated deterministically — `fs.watch` is unreliable on network filesystems
|
|
7
|
+
* and container bind mounts, so the explicit notification closes that gap.
|
|
8
|
+
*
|
|
9
|
+
* If no server is registered (e.g. a CLI-only process touching the files),
|
|
10
|
+
* the notifier is a no-op.
|
|
11
|
+
*/
|
|
12
|
+
let invalidator = null;
|
|
13
|
+
export function registerCacheInvalidator(fn) {
|
|
14
|
+
invalidator = fn;
|
|
15
|
+
}
|
|
16
|
+
export function notifyCacheInvalidated() {
|
|
17
|
+
invalidator?.();
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=cache-bust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-bust.js","sourceRoot":"","sources":["../../src/lib/cache-bust.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,IAAI,WAAW,GAA4B,IAAI,CAAC;AAEhD,MAAM,UAAU,wBAAwB,CAAC,EAAoB;IAC3D,WAAW,GAAG,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,WAAW,EAAE,EAAE,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Principal types for grants.
|
|
3
|
+
*/
|
|
4
|
+
export declare const PRINCIPAL_TYPES: readonly ["user", "group"];
|
|
5
|
+
export type PrincipalType = (typeof PRINCIPAL_TYPES)[number];
|
|
6
|
+
/**
|
|
7
|
+
* Built-in resource types. The grant system is extensible — new resource types
|
|
8
|
+
* can be added without schema changes.
|
|
9
|
+
*/
|
|
10
|
+
export declare const RESOURCE_TYPES: readonly ["tunnel", "plugin"];
|
|
11
|
+
export type ResourceType = (typeof RESOURCE_TYPES)[number];
|
|
12
|
+
/**
|
|
13
|
+
* Tunnel access modes.
|
|
14
|
+
*/
|
|
15
|
+
export declare const ACCESS_MODES: readonly ["public", "authenticated", "restricted"];
|
|
16
|
+
export type AccessMode = (typeof ACCESS_MODES)[number];
|
|
17
|
+
/**
|
|
18
|
+
* Reserved Authelia group names (identity tier). These cannot be used as
|
|
19
|
+
* Lamaste group names to avoid confusion between the two group systems.
|
|
20
|
+
*/
|
|
21
|
+
export declare const RESERVED_GROUP_NAMES: readonly ["admins", "internal", "external"];
|
|
22
|
+
/**
|
|
23
|
+
* Hard cap on Lamaste groups (DoS protection).
|
|
24
|
+
*/
|
|
25
|
+
export declare const MAX_GROUPS = 200;
|
|
26
|
+
/**
|
|
27
|
+
* Hard cap on grants (DoS protection).
|
|
28
|
+
*/
|
|
29
|
+
export declare const MAX_GRANTS = 1000;
|
|
30
|
+
/**
|
|
31
|
+
* Hard cap on members per group (DoS protection).
|
|
32
|
+
*/
|
|
33
|
+
export declare const MAX_MEMBERS_PER_GROUP = 1000;
|
|
34
|
+
/**
|
|
35
|
+
* Consumed grant retention period (90 days in ms).
|
|
36
|
+
* Grants older than this are pruned during write operations.
|
|
37
|
+
*/
|
|
38
|
+
export declare const GRANT_RETENTION_MS: number;
|
|
39
|
+
/**
|
|
40
|
+
* Gatekeeper in-memory session cache TTL (30 seconds in ms).
|
|
41
|
+
*/
|
|
42
|
+
export declare const SESSION_CACHE_TTL_MS: number;
|
|
43
|
+
/**
|
|
44
|
+
* Group name validation regex: lowercase alphanumeric + hyphens,
|
|
45
|
+
* cannot start or end with a hyphen, 2-63 chars.
|
|
46
|
+
*/
|
|
47
|
+
export declare const GROUP_NAME_REGEX: RegExp;
|
|
48
|
+
/**
|
|
49
|
+
* Maximum group name length.
|
|
50
|
+
*/
|
|
51
|
+
export declare const MAX_GROUP_NAME_LENGTH = 63;
|
|
52
|
+
/**
|
|
53
|
+
* Minimum group name length.
|
|
54
|
+
*/
|
|
55
|
+
export declare const MIN_GROUP_NAME_LENGTH = 2;
|
|
56
|
+
/**
|
|
57
|
+
* Default data directory path.
|
|
58
|
+
*/
|
|
59
|
+
export declare const DEFAULT_DATA_DIR = "/etc/lamalibre/lamaste";
|
|
60
|
+
/**
|
|
61
|
+
* State file names.
|
|
62
|
+
*/
|
|
63
|
+
export declare const GROUPS_FILE = "groups.json";
|
|
64
|
+
export declare const GRANTS_FILE = "access-grants.json";
|
|
65
|
+
export declare const SETTINGS_FILE = "gatekeeper.json";
|
|
66
|
+
export declare const ACCESS_LOG_FILE = "access-request-log.json";
|
|
67
|
+
/**
|
|
68
|
+
* Authelia verify endpoint (localhost).
|
|
69
|
+
*
|
|
70
|
+
* We call the nginx-flavored `/api/authz/auth-request` endpoint because we
|
|
71
|
+
* forward the origin request as `X-Original-URL` (+ `X-Original-Method`), the
|
|
72
|
+
* header contract that endpoint expects. The `/api/authz/forward-auth`
|
|
73
|
+
* endpoint is for Traefik-style callers that send `X-Forwarded-Host` /
|
|
74
|
+
* `X-Forwarded-Uri` and errors out with "missing host value" when given
|
|
75
|
+
* `X-Original-URL` — which was the prior default here.
|
|
76
|
+
*/
|
|
77
|
+
export declare const AUTHELIA_VERIFY_URL = "http://127.0.0.1:9091/api/authz/auth-request";
|
|
78
|
+
/**
|
|
79
|
+
* Gatekeeper service port.
|
|
80
|
+
*/
|
|
81
|
+
export declare const GATEKEEPER_PORT = 9294;
|
|
82
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,eAAe,4BAA6B,CAAC;AAC1D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,cAAc,+BAAgC,CAAC;AAC5D,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,YAAY,oDAAqD,CAAC;AAC/E,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,6CAA8C,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,UAAU,MAAM,CAAC;AAE9B;;GAEG;AACH,eAAO,MAAM,UAAU,OAAO,CAAC;AAE/B;;GAEG;AACH,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAA2B,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,oBAAoB,QAAY,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAoC,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;GAEG;AACH,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC;;GAEG;AACH,eAAO,MAAM,gBAAgB,2BAA2B,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAChD,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAC/C,eAAO,MAAM,eAAe,4BAA4B,CAAC;AAEzD;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,iDAAiD,CAAC;AAElF;;GAEG;AACH,eAAO,MAAM,eAAe,OAAO,CAAC"}
|