@serve.zone/dcrouter 11.0.38 → 11.0.39
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/dist_serve/bundle.js +1 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/package.json +2 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/dist_ts/cache/classes.cache.cleaner.d.ts +0 -47
- package/dist_ts/cache/classes.cache.cleaner.js +0 -130
- package/dist_ts/cache/documents/classes.cached.email.d.ts +0 -125
- package/dist_ts/cache/documents/classes.cached.email.js +0 -337
- package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +0 -119
- package/dist_ts/cache/documents/classes.cached.ip.reputation.js +0 -323
- package/dist_ts/cache/documents/index.d.ts +0 -2
- package/dist_ts/cache/documents/index.js +0 -3
- package/dist_ts/cache/index.d.ts +0 -4
- package/dist_ts/cache/index.js +0 -7
- package/dist_ts/classes.cert-provision-scheduler.d.ts +0 -53
- package/dist_ts/classes.cert-provision-scheduler.js +0 -110
- package/dist_ts/classes.storage-cert-manager.d.ts +0 -18
- package/dist_ts/classes.storage-cert-manager.js +0 -43
- package/dist_ts/errors/base.errors.js +0 -320
- package/dist_ts/errors/error.codes.d.ts +0 -115
- package/dist_ts/errors/error.codes.js +0 -136
- package/dist_ts/monitoring/classes.metricscache.d.ts +0 -32
- package/dist_ts/monitoring/classes.metricscache.js +0 -63
- package/dist_ts/monitoring/classes.metricsmanager.d.ts +0 -178
- package/dist_ts/monitoring/classes.metricsmanager.js +0 -642
- package/dist_ts/monitoring/index.d.ts +0 -1
- package/dist_ts/monitoring/index.js +0 -2
- package/dist_ts/opsserver/classes.opsserver.d.ts +0 -37
- package/dist_ts/opsserver/classes.opsserver.js +0 -85
- package/dist_ts/opsserver/handlers/admin.handler.d.ts +0 -31
- package/dist_ts/opsserver/handlers/admin.handler.js +0 -180
- package/dist_ts/opsserver/handlers/api-token.handler.d.ts +0 -6
- package/dist_ts/opsserver/handlers/api-token.handler.js +0 -62
- package/dist_ts/opsserver/handlers/certificate.handler.d.ts +0 -32
- package/dist_ts/opsserver/handlers/certificate.handler.js +0 -421
- package/dist_ts/opsserver/handlers/config.handler.d.ts +0 -7
- package/dist_ts/opsserver/handlers/config.handler.js +0 -192
- package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +0 -30
- package/dist_ts/opsserver/handlers/email-ops.handler.js +0 -227
- package/dist_ts/opsserver/handlers/index.d.ts +0 -11
- package/dist_ts/opsserver/handlers/index.js +0 -12
- package/dist_ts/opsserver/handlers/logs.handler.d.ts +0 -25
- package/dist_ts/opsserver/handlers/logs.handler.js +0 -256
- package/dist_ts/opsserver/handlers/radius.handler.d.ts +0 -6
- package/dist_ts/opsserver/handlers/radius.handler.js +0 -295
- package/dist_ts/opsserver/handlers/remoteingress.handler.d.ts +0 -6
- package/dist_ts/opsserver/handlers/remoteingress.handler.js +0 -156
- package/dist_ts/opsserver/handlers/route-management.handler.d.ts +0 -14
- package/dist_ts/opsserver/handlers/route-management.handler.js +0 -117
- package/dist_ts/opsserver/handlers/security.handler.d.ts +0 -9
- package/dist_ts/opsserver/handlers/security.handler.js +0 -231
- package/dist_ts/opsserver/handlers/stats.handler.d.ts +0 -11
- package/dist_ts/opsserver/handlers/stats.handler.js +0 -399
- package/dist_ts/opsserver/helpers/guards.d.ts +0 -27
- package/dist_ts/opsserver/helpers/guards.js +0 -43
- package/dist_ts/opsserver/index.d.ts +0 -1
- package/dist_ts/opsserver/index.js +0 -2
- package/dist_ts/radius/classes.accounting.manager.d.ts +0 -218
- package/dist_ts/radius/classes.accounting.manager.js +0 -417
- package/dist_ts/radius/classes.radius.server.d.ts +0 -171
- package/dist_ts/radius/classes.radius.server.js +0 -385
- package/dist_ts/radius/classes.vlan.manager.d.ts +0 -128
- package/dist_ts/radius/classes.vlan.manager.js +0 -279
- package/dist_ts/radius/index.d.ts +0 -13
- package/dist_ts/radius/index.js +0 -14
- package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +0 -82
- package/dist_ts/remoteingress/classes.remoteingress-manager.js +0 -227
- package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +0 -59
- package/dist_ts/remoteingress/classes.tunnel-manager.js +0 -165
- package/dist_ts/remoteingress/index.d.ts +0 -2
- package/dist_ts/remoteingress/index.js +0 -3
- package/dist_ts/security/classes.securitylogger.d.ts +0 -144
- package/dist_ts/security/classes.securitylogger.js +0 -233
- package/dist_ts/storage/classes.storagemanager.d.ts +0 -83
- package/dist_ts/storage/classes.storagemanager.js +0 -350
- package/dist_ts/storage/index.d.ts +0 -1
- package/dist_ts/storage/index.js +0 -3
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './classes.metricsmanager.js';
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './classes.metricsmanager.js';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9tb25pdG9yaW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkJBQTZCLENBQUMifQ==
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type DcRouter from '../classes.dcrouter.js';
|
|
2
|
-
import * as plugins from '../plugins.js';
|
|
3
|
-
import * as handlers from './handlers/index.js';
|
|
4
|
-
import * as interfaces from '../../dist_ts_interfaces/index.js';
|
|
5
|
-
export declare class OpsServer {
|
|
6
|
-
dcRouterRef: DcRouter;
|
|
7
|
-
server: plugins.typedserver.utilityservers.UtilityWebsiteServer;
|
|
8
|
-
typedrouter: plugins.typedrequest.TypedRouter<interfaces.typedrequestInterfaces.ITypedRequest>;
|
|
9
|
-
viewRouter: plugins.typedrequest.TypedRouter<{
|
|
10
|
-
request: {
|
|
11
|
-
identity: interfaces.data.IIdentity;
|
|
12
|
-
};
|
|
13
|
-
}>;
|
|
14
|
-
adminRouter: plugins.typedrequest.TypedRouter<{
|
|
15
|
-
request: {
|
|
16
|
-
identity: interfaces.data.IIdentity;
|
|
17
|
-
};
|
|
18
|
-
}>;
|
|
19
|
-
adminHandler: handlers.AdminHandler;
|
|
20
|
-
private configHandler;
|
|
21
|
-
private logsHandler;
|
|
22
|
-
private securityHandler;
|
|
23
|
-
private statsHandler;
|
|
24
|
-
private radiusHandler;
|
|
25
|
-
private emailOpsHandler;
|
|
26
|
-
private certificateHandler;
|
|
27
|
-
private remoteIngressHandler;
|
|
28
|
-
private routeManagementHandler;
|
|
29
|
-
private apiTokenHandler;
|
|
30
|
-
constructor(dcRouterRefArg: DcRouter);
|
|
31
|
-
start(): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* Set up all TypedRequest handlers
|
|
34
|
-
*/
|
|
35
|
-
private setupHandlers;
|
|
36
|
-
stop(): Promise<void>;
|
|
37
|
-
}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import * as paths from '../paths.js';
|
|
3
|
-
import * as handlers from './handlers/index.js';
|
|
4
|
-
import * as interfaces from '../../dist_ts_interfaces/index.js';
|
|
5
|
-
import { requireValidIdentity, requireAdminIdentity } from './helpers/guards.js';
|
|
6
|
-
export class OpsServer {
|
|
7
|
-
dcRouterRef;
|
|
8
|
-
server;
|
|
9
|
-
// Main TypedRouter — unauthenticated endpoints (login/logout/verify) and own-auth handlers
|
|
10
|
-
typedrouter = new plugins.typedrequest.TypedRouter();
|
|
11
|
-
// Auth-enforced routers — middleware validates identity before any handler runs
|
|
12
|
-
viewRouter = new plugins.typedrequest.TypedRouter();
|
|
13
|
-
adminRouter = new plugins.typedrequest.TypedRouter();
|
|
14
|
-
// Handler instances
|
|
15
|
-
adminHandler;
|
|
16
|
-
configHandler;
|
|
17
|
-
logsHandler;
|
|
18
|
-
securityHandler;
|
|
19
|
-
statsHandler;
|
|
20
|
-
radiusHandler;
|
|
21
|
-
emailOpsHandler;
|
|
22
|
-
certificateHandler;
|
|
23
|
-
remoteIngressHandler;
|
|
24
|
-
routeManagementHandler;
|
|
25
|
-
apiTokenHandler;
|
|
26
|
-
constructor(dcRouterRefArg) {
|
|
27
|
-
this.dcRouterRef = dcRouterRefArg;
|
|
28
|
-
// Add our typedrouter to the dcRouter's main typedrouter
|
|
29
|
-
this.dcRouterRef.typedrouter.addTypedRouter(this.typedrouter);
|
|
30
|
-
}
|
|
31
|
-
async start() {
|
|
32
|
-
this.server = new plugins.typedserver.utilityservers.UtilityWebsiteServer({
|
|
33
|
-
domain: 'localhost',
|
|
34
|
-
feedMetadata: null,
|
|
35
|
-
serveDir: paths.distServe,
|
|
36
|
-
});
|
|
37
|
-
// The server has a built-in typedrouter at /typedrequest
|
|
38
|
-
// Add the main dcRouter typedrouter to the server's typedrouter
|
|
39
|
-
this.server.typedrouter.addTypedRouter(this.dcRouterRef.typedrouter);
|
|
40
|
-
// Set up handlers
|
|
41
|
-
await this.setupHandlers();
|
|
42
|
-
await this.server.start(3000);
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Set up all TypedRequest handlers
|
|
46
|
-
*/
|
|
47
|
-
async setupHandlers() {
|
|
48
|
-
// AdminHandler must be initialized first (JWT setup needed for guards)
|
|
49
|
-
this.adminHandler = new handlers.AdminHandler(this);
|
|
50
|
-
await this.adminHandler.initialize();
|
|
51
|
-
// viewRouter middleware: requires valid identity (any logged-in user)
|
|
52
|
-
this.viewRouter.addMiddleware(async (typedRequest) => {
|
|
53
|
-
await requireValidIdentity(this.adminHandler, typedRequest.request);
|
|
54
|
-
});
|
|
55
|
-
// adminRouter middleware: requires admin identity
|
|
56
|
-
this.adminRouter.addMiddleware(async (typedRequest) => {
|
|
57
|
-
await requireAdminIdentity(this.adminHandler, typedRequest.request);
|
|
58
|
-
});
|
|
59
|
-
// Connect auth routers to the main typedrouter
|
|
60
|
-
this.typedrouter.addTypedRouter(this.viewRouter);
|
|
61
|
-
this.typedrouter.addTypedRouter(this.adminRouter);
|
|
62
|
-
// Instantiate all handlers — they self-register with the appropriate router
|
|
63
|
-
this.configHandler = new handlers.ConfigHandler(this);
|
|
64
|
-
this.logsHandler = new handlers.LogsHandler(this);
|
|
65
|
-
this.securityHandler = new handlers.SecurityHandler(this);
|
|
66
|
-
this.statsHandler = new handlers.StatsHandler(this);
|
|
67
|
-
this.radiusHandler = new handlers.RadiusHandler(this);
|
|
68
|
-
this.emailOpsHandler = new handlers.EmailOpsHandler(this);
|
|
69
|
-
this.certificateHandler = new handlers.CertificateHandler(this);
|
|
70
|
-
this.remoteIngressHandler = new handlers.RemoteIngressHandler(this);
|
|
71
|
-
this.routeManagementHandler = new handlers.RouteManagementHandler(this);
|
|
72
|
-
this.apiTokenHandler = new handlers.ApiTokenHandler(this);
|
|
73
|
-
console.log('✅ OpsServer TypedRequest handlers initialized');
|
|
74
|
-
}
|
|
75
|
-
async stop() {
|
|
76
|
-
// Clean up log handler streams and push destination before stopping the server
|
|
77
|
-
if (this.logsHandler) {
|
|
78
|
-
this.logsHandler.cleanup();
|
|
79
|
-
}
|
|
80
|
-
if (this.server) {
|
|
81
|
-
await this.server.stop();
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5vcHNzZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9vcHNzZXJ2ZXIvY2xhc3Nlcy5vcHNzZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFLLEtBQUssTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxLQUFLLFFBQVEsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEtBQUssVUFBVSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpGLE1BQU0sT0FBTyxTQUFTO0lBQ2IsV0FBVyxDQUFXO0lBQ3RCLE1BQU0sQ0FBMEQ7SUFFdkUsMkZBQTJGO0lBQ3BGLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFNUQsZ0ZBQWdGO0lBQ3pFLFVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUF3RCxDQUFDO0lBQzFHLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUF3RCxDQUFDO0lBRWxILG9CQUFvQjtJQUNiLFlBQVksQ0FBd0I7SUFDbkMsYUFBYSxDQUF5QjtJQUN0QyxXQUFXLENBQXVCO0lBQ2xDLGVBQWUsQ0FBMkI7SUFDMUMsWUFBWSxDQUF3QjtJQUNwQyxhQUFhLENBQXlCO0lBQ3RDLGVBQWUsQ0FBMkI7SUFDMUMsa0JBQWtCLENBQThCO0lBQ2hELG9CQUFvQixDQUFnQztJQUNwRCxzQkFBc0IsQ0FBa0M7SUFDeEQsZUFBZSxDQUEyQjtJQUVsRCxZQUFZLGNBQXdCO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDO1FBRWxDLHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxj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
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import type { OpsServer } from '../classes.opsserver.js';
|
|
3
|
-
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
4
|
-
export interface IJwtData {
|
|
5
|
-
userId: string;
|
|
6
|
-
status: 'loggedIn' | 'loggedOut';
|
|
7
|
-
expiresAt: number;
|
|
8
|
-
}
|
|
9
|
-
export declare class AdminHandler {
|
|
10
|
-
private opsServerRef;
|
|
11
|
-
typedrouter: plugins.typedrequest.TypedRouter<interfaces.typedrequestInterfaces.ITypedRequest>;
|
|
12
|
-
smartjwtInstance: plugins.smartjwt.SmartJwt<IJwtData>;
|
|
13
|
-
private users;
|
|
14
|
-
constructor(opsServerRef: OpsServer);
|
|
15
|
-
initialize(): Promise<void>;
|
|
16
|
-
private initializeJwt;
|
|
17
|
-
private initializeDefaultUsers;
|
|
18
|
-
private registerHandlers;
|
|
19
|
-
/**
|
|
20
|
-
* Create a guard for valid identity (matching cloudly pattern)
|
|
21
|
-
*/
|
|
22
|
-
validIdentityGuard: plugins.smartguard.Guard<{
|
|
23
|
-
identity: interfaces.data.IIdentity;
|
|
24
|
-
}>;
|
|
25
|
-
/**
|
|
26
|
-
* Create a guard for admin identity (matching cloudly pattern)
|
|
27
|
-
*/
|
|
28
|
-
adminIdentityGuard: plugins.smartguard.Guard<{
|
|
29
|
-
identity: interfaces.data.IIdentity;
|
|
30
|
-
}>;
|
|
31
|
-
}
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
3
|
-
export class AdminHandler {
|
|
4
|
-
opsServerRef;
|
|
5
|
-
typedrouter = new plugins.typedrequest.TypedRouter();
|
|
6
|
-
// JWT instance
|
|
7
|
-
smartjwtInstance;
|
|
8
|
-
// Simple in-memory user storage (in production, use proper database)
|
|
9
|
-
users = new Map();
|
|
10
|
-
constructor(opsServerRef) {
|
|
11
|
-
this.opsServerRef = opsServerRef;
|
|
12
|
-
// Add this handler's router to the parent
|
|
13
|
-
this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
|
|
14
|
-
}
|
|
15
|
-
async initialize() {
|
|
16
|
-
await this.initializeJwt();
|
|
17
|
-
this.initializeDefaultUsers();
|
|
18
|
-
this.registerHandlers();
|
|
19
|
-
}
|
|
20
|
-
async initializeJwt() {
|
|
21
|
-
this.smartjwtInstance = new plugins.smartjwt.SmartJwt();
|
|
22
|
-
await this.smartjwtInstance.init();
|
|
23
|
-
// For development, create new keypair each time
|
|
24
|
-
// In production, load from storage like cloudly does
|
|
25
|
-
await this.smartjwtInstance.createNewKeyPair();
|
|
26
|
-
}
|
|
27
|
-
initializeDefaultUsers() {
|
|
28
|
-
// Add default admin user
|
|
29
|
-
const adminId = plugins.uuid.v4();
|
|
30
|
-
this.users.set(adminId, {
|
|
31
|
-
id: adminId,
|
|
32
|
-
username: 'admin',
|
|
33
|
-
password: 'admin',
|
|
34
|
-
role: 'admin',
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
registerHandlers() {
|
|
38
|
-
// Admin Login Handler
|
|
39
|
-
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('adminLoginWithUsernameAndPassword', async (dataArg) => {
|
|
40
|
-
try {
|
|
41
|
-
// Find user by username and password
|
|
42
|
-
let user = null;
|
|
43
|
-
for (const [_, userData] of this.users) {
|
|
44
|
-
if (userData.username === dataArg.username && userData.password === dataArg.password) {
|
|
45
|
-
user = userData;
|
|
46
|
-
break;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
if (!user) {
|
|
50
|
-
throw new plugins.typedrequest.TypedResponseError('login failed');
|
|
51
|
-
}
|
|
52
|
-
const expiresAtTimestamp = Date.now() + 3600 * 1000 * 24; // 24 hours
|
|
53
|
-
const jwt = await this.smartjwtInstance.createJWT({
|
|
54
|
-
userId: user.id,
|
|
55
|
-
status: 'loggedIn',
|
|
56
|
-
expiresAt: expiresAtTimestamp,
|
|
57
|
-
});
|
|
58
|
-
return {
|
|
59
|
-
identity: {
|
|
60
|
-
jwt,
|
|
61
|
-
userId: user.id,
|
|
62
|
-
name: user.username,
|
|
63
|
-
expiresAt: expiresAtTimestamp,
|
|
64
|
-
role: user.role,
|
|
65
|
-
type: 'user',
|
|
66
|
-
},
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
if (error instanceof plugins.typedrequest.TypedResponseError) {
|
|
71
|
-
throw error;
|
|
72
|
-
}
|
|
73
|
-
throw new plugins.typedrequest.TypedResponseError('login failed');
|
|
74
|
-
}
|
|
75
|
-
}));
|
|
76
|
-
// Admin Logout Handler
|
|
77
|
-
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('adminLogout', async (dataArg) => {
|
|
78
|
-
// In a real implementation, you might want to blacklist the JWT
|
|
79
|
-
// For now, just return success
|
|
80
|
-
return {
|
|
81
|
-
success: true,
|
|
82
|
-
};
|
|
83
|
-
}));
|
|
84
|
-
// Verify Identity Handler
|
|
85
|
-
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('verifyIdentity', async (dataArg) => {
|
|
86
|
-
if (!dataArg.identity?.jwt) {
|
|
87
|
-
return {
|
|
88
|
-
valid: false,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
try {
|
|
92
|
-
const jwtData = await this.smartjwtInstance.verifyJWTAndGetData(dataArg.identity.jwt);
|
|
93
|
-
// Check if expired
|
|
94
|
-
if (jwtData.expiresAt < Date.now()) {
|
|
95
|
-
return {
|
|
96
|
-
valid: false,
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
// Check if logged in
|
|
100
|
-
if (jwtData.status !== 'loggedIn') {
|
|
101
|
-
return {
|
|
102
|
-
valid: false,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
// Find user
|
|
106
|
-
const user = this.users.get(jwtData.userId);
|
|
107
|
-
if (!user) {
|
|
108
|
-
return {
|
|
109
|
-
valid: false,
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
return {
|
|
113
|
-
valid: true,
|
|
114
|
-
identity: {
|
|
115
|
-
jwt: dataArg.identity.jwt,
|
|
116
|
-
userId: user.id,
|
|
117
|
-
name: user.username,
|
|
118
|
-
expiresAt: jwtData.expiresAt,
|
|
119
|
-
role: user.role,
|
|
120
|
-
type: 'user',
|
|
121
|
-
},
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
catch (error) {
|
|
125
|
-
return {
|
|
126
|
-
valid: false,
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
}));
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Create a guard for valid identity (matching cloudly pattern)
|
|
133
|
-
*/
|
|
134
|
-
validIdentityGuard = new plugins.smartguard.Guard(async (dataArg) => {
|
|
135
|
-
if (!dataArg.identity?.jwt) {
|
|
136
|
-
return false;
|
|
137
|
-
}
|
|
138
|
-
try {
|
|
139
|
-
const jwtData = await this.smartjwtInstance.verifyJWTAndGetData(dataArg.identity.jwt);
|
|
140
|
-
// Check expiration
|
|
141
|
-
if (jwtData.expiresAt < Date.now()) {
|
|
142
|
-
return false;
|
|
143
|
-
}
|
|
144
|
-
// Check status
|
|
145
|
-
if (jwtData.status !== 'loggedIn') {
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
// Verify data hasn't been tampered with
|
|
149
|
-
if (dataArg.identity.expiresAt !== jwtData.expiresAt) {
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
|
-
if (dataArg.identity.userId !== jwtData.userId) {
|
|
153
|
-
return false;
|
|
154
|
-
}
|
|
155
|
-
return true;
|
|
156
|
-
}
|
|
157
|
-
catch (error) {
|
|
158
|
-
return false;
|
|
159
|
-
}
|
|
160
|
-
}, {
|
|
161
|
-
failedHint: 'identity is not valid',
|
|
162
|
-
name: 'validIdentityGuard',
|
|
163
|
-
});
|
|
164
|
-
/**
|
|
165
|
-
* Create a guard for admin identity (matching cloudly pattern)
|
|
166
|
-
*/
|
|
167
|
-
adminIdentityGuard = new plugins.smartguard.Guard(async (dataArg) => {
|
|
168
|
-
// First check if identity is valid
|
|
169
|
-
const isValid = await this.validIdentityGuard.exec(dataArg);
|
|
170
|
-
if (!isValid) {
|
|
171
|
-
return false;
|
|
172
|
-
}
|
|
173
|
-
// Check if user has admin role
|
|
174
|
-
return dataArg.identity.role === 'admin';
|
|
175
|
-
}, {
|
|
176
|
-
failedHint: 'user is not admin',
|
|
177
|
-
name: 'adminIdentityGuard',
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL29wc3NlcnZlci9oYW5kbGVycy9hZG1pbi5oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxpQ0FBaUMsQ0FBQztBQVE5RCxNQUFNLE9BQU8sWUFBWTtJQWNIO0lBYmIsV0FBVyxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUU1RCxlQUFlO0lBQ1IsZ0JBQWdCLENBQXNDO0lBRTdELHFFQUFxRTtJQUM3RCxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBS25CLENBQUM7SUFFTCxZQUFvQixZQUF1QjtRQUF2QixpQkFBWSxHQUFaLFlBQVksQ0FBVztRQUN6QywwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVU7UUFDckIsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEQsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFbkMsZ0RBQWdEO1FBQ2hELHFEQUFxRDtRQUNyRCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFTyxzQkFBc0I7UUFDNUIseUJBQXlCO1FB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
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
3
|
-
export class ApiTokenHandler {
|
|
4
|
-
opsServerRef;
|
|
5
|
-
constructor(opsServerRef) {
|
|
6
|
-
this.opsServerRef = opsServerRef;
|
|
7
|
-
this.registerHandlers();
|
|
8
|
-
}
|
|
9
|
-
registerHandlers() {
|
|
10
|
-
// All token management endpoints register directly on adminRouter
|
|
11
|
-
// (middleware enforces admin JWT check, so no per-handler requireAdmin needed)
|
|
12
|
-
const router = this.opsServerRef.adminRouter;
|
|
13
|
-
// Create API token
|
|
14
|
-
router.addTypedHandler(new plugins.typedrequest.TypedHandler('createApiToken', async (dataArg) => {
|
|
15
|
-
const manager = this.opsServerRef.dcRouterRef.apiTokenManager;
|
|
16
|
-
if (!manager) {
|
|
17
|
-
return { success: false, message: 'Token management not initialized' };
|
|
18
|
-
}
|
|
19
|
-
const result = await manager.createToken(dataArg.name, dataArg.scopes, dataArg.expiresInDays ?? null, dataArg.identity.userId);
|
|
20
|
-
return { success: true, tokenId: result.id, tokenValue: result.rawToken };
|
|
21
|
-
}));
|
|
22
|
-
// List API tokens
|
|
23
|
-
router.addTypedHandler(new plugins.typedrequest.TypedHandler('listApiTokens', async (dataArg) => {
|
|
24
|
-
const manager = this.opsServerRef.dcRouterRef.apiTokenManager;
|
|
25
|
-
if (!manager) {
|
|
26
|
-
return { tokens: [] };
|
|
27
|
-
}
|
|
28
|
-
return { tokens: manager.listTokens() };
|
|
29
|
-
}));
|
|
30
|
-
// Revoke API token
|
|
31
|
-
router.addTypedHandler(new plugins.typedrequest.TypedHandler('revokeApiToken', async (dataArg) => {
|
|
32
|
-
const manager = this.opsServerRef.dcRouterRef.apiTokenManager;
|
|
33
|
-
if (!manager) {
|
|
34
|
-
return { success: false, message: 'Token management not initialized' };
|
|
35
|
-
}
|
|
36
|
-
const ok = await manager.revokeToken(dataArg.id);
|
|
37
|
-
return { success: ok, message: ok ? undefined : 'Token not found' };
|
|
38
|
-
}));
|
|
39
|
-
// Roll API token
|
|
40
|
-
router.addTypedHandler(new plugins.typedrequest.TypedHandler('rollApiToken', async (dataArg) => {
|
|
41
|
-
const manager = this.opsServerRef.dcRouterRef.apiTokenManager;
|
|
42
|
-
if (!manager) {
|
|
43
|
-
return { success: false, message: 'Token management not initialized' };
|
|
44
|
-
}
|
|
45
|
-
const result = await manager.rollToken(dataArg.id);
|
|
46
|
-
if (!result) {
|
|
47
|
-
return { success: false, message: 'Token not found' };
|
|
48
|
-
}
|
|
49
|
-
return { success: true, tokenValue: result.rawToken };
|
|
50
|
-
}));
|
|
51
|
-
// Toggle API token
|
|
52
|
-
router.addTypedHandler(new plugins.typedrequest.TypedHandler('toggleApiToken', async (dataArg) => {
|
|
53
|
-
const manager = this.opsServerRef.dcRouterRef.apiTokenManager;
|
|
54
|
-
if (!manager) {
|
|
55
|
-
return { success: false, message: 'Token management not initialized' };
|
|
56
|
-
}
|
|
57
|
-
const ok = await manager.toggleToken(dataArg.id, dataArg.enabled);
|
|
58
|
-
return { success: ok, message: ok ? undefined : 'Token not found' };
|
|
59
|
-
}));
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXRva2VuLmhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9vcHNzZXJ2ZXIvaGFuZGxlcnMvYXBpLXRva2VuLmhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEtBQUssVUFBVSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlELE1BQU0sT0FBTyxlQUFlO0lBQ047SUFBcEIsWUFBb0IsWUFBdUI7UUFBdkIsaUJBQVksR0FBWixZQUFZLENBQVc7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixrRUFBa0U7UUFDbEUsK0VBQStFO1FBQy9FLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1FBRTdDLG1CQUFtQjtRQUNuQixNQUFNLENBQUMsZUFBZSxDQUNwQixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUNuQyxnQkFBZ0IsRUFDaEIsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztZQUM5RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLENBQUM7WUFDekUsQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FDdEMsT0FBTyxDQUFDLElBQUksRUFDWixPQUFPLENBQUMsTUFBTSxFQUNkLE9BQU8sQ0FBQyxhQUFhLElBQUksSUFBSSxFQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDeEIsQ0FBQztZQUNGLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUUsQ0FBQyxDQUNGLENBQ0YsQ0FBQztRQUVGLGtCQUFrQjtRQUNsQixNQUFNLENBQUMsZUFBZSxDQUNwQixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUNuQyxlQUFlLEVBQ2YsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztZQUM5RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN4QixDQUFDO1lBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztRQUMxQyxDQUFDLENBQ0YsQ0FDRixDQUFDO1FBRUYsbUJBQW1CO1FBQ25CLE1BQU0sQ0FBQyxlQUFlLENBQ3BCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQ25DLGdCQUFnQixFQUNoQixLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO1lBQzlELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsQ0FBQztZQUN6RSxDQUFDO1lBQ0QsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdEUsQ0FBQyxDQUNGLENBQ0YsQ0FBQztRQUVGLGlCQUFpQjtRQUNqQixNQUFNLENBQUMsZUFBZSxDQUNwQixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUNuQyxjQUFjLEVBQ2QsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztZQUM5RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLENBQUM7WUFDekUsQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3hELENBQUM7WUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hELENBQUMsQ0FDRixDQUNGLENBQUM7UUFFRixtQkFBbUI7UUFDbkIsTUFBTSxDQUFDLGVBQWUsQ0FDcEIsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FDbkMsZ0JBQWdCLEVBQ2hCLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUM7WUFDOUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxDQUFDO1lBQ3pFLENBQUM7WUFDRCxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RFLENBQUMsQ0FDRixDQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YifQ==
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { OpsServer } from '../classes.opsserver.js';
|
|
2
|
-
export declare class CertificateHandler {
|
|
3
|
-
private opsServerRef;
|
|
4
|
-
constructor(opsServerRef: OpsServer);
|
|
5
|
-
private registerHandlers;
|
|
6
|
-
/**
|
|
7
|
-
* Build domain-centric certificate overview.
|
|
8
|
-
* Instead of one row per route, we produce one row per unique domain.
|
|
9
|
-
*/
|
|
10
|
-
private buildCertificateOverview;
|
|
11
|
-
private buildSummary;
|
|
12
|
-
/**
|
|
13
|
-
* Legacy route-based reprovisioning
|
|
14
|
-
*/
|
|
15
|
-
private reprovisionCertificateByRoute;
|
|
16
|
-
/**
|
|
17
|
-
* Domain-based reprovisioning — clears backoff first, then triggers provision
|
|
18
|
-
*/
|
|
19
|
-
private reprovisionCertificateDomain;
|
|
20
|
-
/**
|
|
21
|
-
* Delete certificate data for a domain from storage
|
|
22
|
-
*/
|
|
23
|
-
private deleteCertificate;
|
|
24
|
-
/**
|
|
25
|
-
* Export certificate data for a domain as ICert-shaped JSON
|
|
26
|
-
*/
|
|
27
|
-
private exportCertificate;
|
|
28
|
-
/**
|
|
29
|
-
* Import a certificate from ICert-shaped JSON
|
|
30
|
-
*/
|
|
31
|
-
private importCertificate;
|
|
32
|
-
}
|