Skip to content

Commit 39bc959

Browse files
committed
wip: removing EventBus
[ci skip]
1 parent 43c57f9 commit 39bc959

File tree

3 files changed

+83
-84
lines changed

3 files changed

+83
-84
lines changed

src/PolykeyAgent.ts

Lines changed: 22 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ import Discovery from './discovery/Discovery';
3131
import SessionManager from './sessions/SessionManager';
3232
import IdentitiesManager from './identities/IdentitiesManager';
3333
import { providers } from './identities';
34-
import { EventBus, captureRejectionSymbol } from './events';
3534
import config from './config';
3635
import * as errors from './errors';
3736
import * as utils from './utils';
3837
import * as keysUtils from './keys/utils';
38+
import * as keysEvents from './keys/events';
3939
import * as nodesUtils from './nodes/utils';
4040
import * as nodesEvents from './nodes/events';
4141
import * as workersUtils from './workers/utils';
@@ -99,15 +99,6 @@ interface PolykeyAgent extends CreateDestroyStartStop {}
9999
new errors.ErrorPolykeyAgentDestroyed(),
100100
)
101101
class PolykeyAgent {
102-
/**
103-
* Event symbols
104-
* These represent event topics
105-
*/
106-
public static readonly eventSymbols = {
107-
[CertManager.name]: Symbol(CertManager.name),
108-
} as {
109-
readonly CertManager: unique symbol;
110-
};
111102

112103
/**
113104
* Create the Polykey Agent.
@@ -240,9 +231,6 @@ class PolykeyAgent {
240231
const dbPath = path.join(statePath, config.paths.dbBase);
241232
const keysPath = path.join(statePath, config.paths.keysBase);
242233
const vaultsPath = path.join(statePath, config.paths.vaultsBase);
243-
const events = new EventBus({
244-
captureRejections: true,
245-
});
246234
let pkAgentProm: PromiseDeconstructed<PolykeyAgent> | undefined;
247235
try {
248236
status =
@@ -322,8 +310,6 @@ class PolykeyAgent {
322310
taskManager,
323311
certDuration: optionsDefaulted.keys.certDuration,
324312
certRenewLeadTime: optionsDefaulted.keys.certRenewLeadTime,
325-
changeCallback: async (data) =>
326-
events.emitAsync(PolykeyAgent.eventSymbols.CertManager, data),
327313
logger: logger.getChild(CertManager.name),
328314
fresh,
329315
}));
@@ -574,7 +560,6 @@ class PolykeyAgent {
574560
rpcServerClient,
575561
webSocketServerClient,
576562
rpcServerAgent,
577-
events,
578563
fs,
579564
logger,
580565
});
@@ -614,7 +599,6 @@ class PolykeyAgent {
614599
public readonly vaultManager: VaultManager;
615600
public readonly notificationsManager: NotificationsManager;
616601
public readonly sessionManager: SessionManager;
617-
public readonly events: EventBus;
618602
public readonly fs: FileSystem;
619603
public readonly logger: Logger;
620604
public readonly rpcServerClient: RPCServer;
@@ -649,7 +633,6 @@ class PolykeyAgent {
649633
rpcServerClient,
650634
webSocketServerClient,
651635
rpcServerAgent,
652-
events,
653636
fs,
654637
logger,
655638
}: {
@@ -674,7 +657,6 @@ class PolykeyAgent {
674657
rpcServerClient: RPCServer;
675658
webSocketServerClient: WebSocketServer;
676659
rpcServerAgent: RPCServer;
677-
events: EventBus;
678660
fs: FileSystem;
679661
logger: Logger;
680662
}) {
@@ -700,7 +682,6 @@ class PolykeyAgent {
700682
this.rpcServerClient = rpcServerClient;
701683
this.webSocketServerClient = webSocketServerClient;
702684
this.rpcServerAgent = rpcServerAgent;
703-
this.events = events;
704685
this.fs = fs;
705686
}
706687

@@ -727,43 +708,26 @@ class PolykeyAgent {
727708
});
728709
try {
729710
this.logger.info(`Starting ${this.constructor.name}`);
730-
// Set up error handling for event handlers
731-
this.events[captureRejectionSymbol] = (err, event: symbol) => {
732-
let msg = `EventBus error for ${event.toString()}`;
733-
if (err instanceof errors.ErrorPolykey) {
734-
msg += `: ${err.name}: ${err.description}`;
735-
if (err.message !== '') {
736-
msg += ` - ${err.message}`;
737-
}
738-
} else {
739-
msg += `: ${err.name}`;
740-
if (err.message !== '') {
741-
msg += `: ${err.message}`;
742-
}
743-
}
744-
this.logger.error(msg);
745-
throw err;
746-
};
747711
// Register event handlers
748-
this.events.on(
749-
PolykeyAgent.eventSymbols.CertManager,
750-
async (data: CertManagerChangeData) => {
751-
this.logger.info(`${KeyRing.name} change propagating`);
752-
await this.status.updateStatusLive({
753-
nodeId: data.nodeId,
754-
});
755-
await this.nodeManager.resetBuckets();
756-
// Update the sigchain
757-
await this.sigchain.onKeyRingChange();
758-
const tlsConfig: TLSConfig = {
759-
keyPrivatePem: keysUtils.privateKeyToPEM(data.keyPair.privateKey),
760-
certChainPem: await this.certManager.getCertPEMsChainPEM(),
761-
};
762-
this.webSocketServerClient.setTlsConfig(tlsConfig);
763-
this.nodeConnectionManager.updateTlsConfig(tlsConfig);
764-
this.logger.info(`${KeyRing.name} change propagated`);
765-
},
766-
);
712+
// FIXME: we need to handle the EventCertManagerCertChanged event to update the status
713+
const handleCertChange = async (evt: keysEvents.EventsCertManagerCertChange) => {
714+
const data = evt.detail
715+
this.logger.info(`${KeyRing.name} change propagating`);
716+
await this.status.updateStatusLive({
717+
nodeId: data.nodeId,
718+
});
719+
await this.nodeManager.resetBuckets();
720+
// Update the sigchain
721+
await this.sigchain.onKeyRingChange();
722+
const tlsConfig: TLSConfig = {
723+
keyPrivatePem: keysUtils.privateKeyToPEM(data.keyPair.privateKey),
724+
certChainPem: await this.certManager.getCertPEMsChainPEM(),
725+
};
726+
this.webSocketServerClient.setTlsConfig(tlsConfig);
727+
this.nodeConnectionManager.updateTlsConfig(tlsConfig);
728+
this.logger.info(`${KeyRing.name} change propagated`);
729+
}
730+
this.certManager.addEventListener(keysEvents.EventsCertManagerCertChange.name, handleCertChange);
767731
await this.status.start({ pid: process.pid });
768732
await this.schema.start({ fresh });
769733
// Starting modules
@@ -854,7 +818,7 @@ class PolykeyAgent {
854818
this.logger.warn(
855819
`Failed Starting ${this.constructor.name} with ${e.message}`,
856820
);
857-
this.events.removeAllListeners();
821+
this.certManager.removeEventListener(keysEvents.EventsCertManagerCertChange.name, handleCertChange);
858822
await this.status?.beginStop({ pid: process.pid });
859823
await this.taskManager?.stopProcessing();
860824
await this.taskManager?.stopTasks();
@@ -892,7 +856,7 @@ class PolykeyAgent {
892856
*/
893857
public async stop() {
894858
this.logger.info(`Stopping ${this.constructor.name}`);
895-
this.events.removeAllListeners();
859+
this.certManager.removeEventListener(keysEvents.EventsCertManagerCertChange.name, handleCertChange);
896860
await this.status.beginStop({ pid: process.pid });
897861
await this.taskManager.stopProcessing();
898862
await this.taskManager.stopTasks();

src/keys/CertManager.ts

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import type {
44
PrivateKey,
55
Certificate,
66
CertificateASN1,
7-
CertManagerChangeData,
87
CertificatePEM,
98
KeyPair,
109
RecoveryCode,
@@ -24,7 +23,9 @@ import {
2423
import { Lock } from '@matrixai/async-locks';
2524
import * as keysUtils from './utils';
2625
import * as keysErrors from './errors';
26+
import * as events from './events';
2727
import * as ids from '../ids';
28+
import config from '../config';
2829

2930
/**
3031
* This signal reason indicates we want to stop the renewal
@@ -37,6 +38,14 @@ interface CertManager extends CreateDestroyStartStop {}
3738
@CreateDestroyStartStop(
3839
new keysErrors.ErrorCertManagerRunning(),
3940
new keysErrors.ErrorCertManagerDestroyed(),
41+
{
42+
eventStart: events.EventsCertManagerStart,
43+
eventStarted: events.EventsCertManagerStarted,
44+
eventStop: events.EventsCertManagerStop,
45+
eventStopped: events.EventsCertManagerStopped,
46+
eventDestroy: events.EventsCertManagerDestroy,
47+
eventDestroyed: events.EventsCertManagerDestroyed,
48+
},
4049
)
4150
class CertManager {
4251
/**
@@ -57,9 +66,8 @@ class CertManager {
5766
db,
5867
keyRing,
5968
taskManager,
60-
certDuration = 31536000,
61-
certRenewLeadTime = 86400,
62-
changeCallback,
69+
certDuration = config.defaultsUser.certDuration,
70+
certRenewLeadTime = config.defaultsUser.certRenewLeadTime,
6371
workerManager,
6472
logger = new Logger(this.name),
6573
subjectAttrsExtra,
@@ -72,7 +80,6 @@ class CertManager {
7280
taskManager: TaskManager;
7381
certDuration?: number;
7482
certRenewLeadTime?: number;
75-
changeCallback?: (data: CertManagerChangeData) => any;
7683
workerManager?: PolykeyWorkerManagerInterface;
7784
logger?: Logger;
7885
subjectAttrsExtra?: Array<{ [key: string]: Array<string> }>;
@@ -88,7 +95,6 @@ class CertManager {
8895
taskManager,
8996
certDuration,
9097
certRenewLeadTime,
91-
changeCallback,
9298
workerManager,
9399
logger,
94100
});
@@ -112,7 +118,6 @@ class CertManager {
112118
protected db: DB;
113119
protected keyRing: KeyRing;
114120
protected taskManager: TaskManager;
115-
protected changeCallback?: (data: CertManagerChangeData) => any;
116121
protected workerManager?: PolykeyWorkerManagerInterface;
117122
protected generateCertId: () => CertId;
118123
protected dbPath: LevelPath = [this.constructor.name];
@@ -147,7 +152,6 @@ class CertManager {
147152
taskManager,
148153
certDuration,
149154
certRenewLeadTime,
150-
changeCallback,
151155
workerManager,
152156
logger,
153157
}: {
@@ -156,7 +160,6 @@ class CertManager {
156160
taskManager: TaskManager;
157161
certDuration: number;
158162
certRenewLeadTime: number;
159-
changeCallback?: (data: CertManagerChangeData) => any;
160163
workerManager?: PolykeyWorkerManagerInterface;
161164
logger: Logger;
162165
}) {
@@ -166,7 +169,6 @@ class CertManager {
166169
this.taskManager = taskManager;
167170
this.certDuration = certDuration;
168171
this.certRenewLeadTime = certRenewLeadTime;
169-
this.changeCallback = changeCallback;
170172
this.workerManager = workerManager;
171173
}
172174

@@ -452,14 +454,14 @@ class CertManager {
452454
if (this.tasksRunning) {
453455
await this.setupRenewCurrentCertTask(now);
454456
}
455-
if (this.changeCallback != null) {
456-
await this.changeCallback({
457+
this.dispatchEvent(new events.EventsCertManagerCertChange({
458+
detail: {
457459
nodeId: this.keyRing.getNodeId(),
458460
keyPair: this.keyRing.keyPair,
459461
cert: certNew,
460462
recoveryCode: recoveryCodeNew!,
461-
});
462-
}
463+
},
464+
}));
463465
this.logger.info('Renewed certificate chain with new key pair');
464466
});
465467
return certNew!;
@@ -516,14 +518,14 @@ class CertManager {
516518
if (this.tasksRunning) {
517519
await this.setupRenewCurrentCertTask(now);
518520
}
519-
if (this.changeCallback != null) {
520-
await this.changeCallback({
521+
this.dispatchEvent(new events.EventsCertManagerCertChange({
522+
detail: {
521523
nodeId: this.keyRing.getNodeId(),
522524
keyPair: this.keyRing.keyPair,
523525
cert: certNew,
524526
recoveryCode: undefined,
525-
});
526-
}
527+
},
528+
}));
527529
this.logger.info('Renewed certificate chain with current key pair');
528530
});
529531
return certNew!;
@@ -587,14 +589,14 @@ class CertManager {
587589
if (this.tasksRunning) {
588590
await this.setupRenewCurrentCertTask(now);
589591
}
590-
if (this.changeCallback != null) {
591-
await this.changeCallback({
592+
this.dispatchEvent(new events.EventsCertManagerCertChange({
593+
detail: {
592594
nodeId: this.keyRing.getNodeId(),
593595
keyPair: this.keyRing.keyPair,
594596
cert: certNew!,
595597
recoveryCode: recoveryCodeNew!,
596-
});
597-
}
598+
},
599+
}));
598600
this.logger.info('Resetted certificate chain with new key pair');
599601
});
600602
return certNew!;
@@ -646,13 +648,14 @@ class CertManager {
646648
if (this.tasksRunning) {
647649
await this.setupRenewCurrentCertTask(now);
648650
}
649-
if (this.changeCallback != null) {
650-
await this.changeCallback({
651+
this.dispatchEvent(new events.EventsCertManagerCertChange({
652+
detail: {
651653
nodeId: this.keyRing.getNodeId(),
652654
keyPair: this.keyRing.keyPair,
653655
cert: certNew,
654-
});
655-
}
656+
recoveryCode: undefined,
657+
},
658+
}));
656659
this.logger.info('Resetted certificate chain with current key pair');
657660
});
658661
return certNew!;

src/keys/events.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { AbstractEvent } from '@matrixai/events';
2+
import { CertManagerChangeData } from "./types";
3+
4+
abstract class EventsKeys<T = null> extends AbstractEvent<T> {}
5+
6+
abstract class EventsCertManager<T = null> extends EventsKeys<T> {}
7+
8+
class EventsCertManagerStart extends EventsCertManager {}
9+
10+
class EventsCertManagerStarted extends EventsCertManager {}
11+
12+
class EventsCertManagerStop extends EventsCertManager {}
13+
14+
class EventsCertManagerStopped extends EventsCertManager {}
15+
16+
class EventsCertManagerDestroy extends EventsCertManager {}
17+
18+
class EventsCertManagerDestroyed extends EventsCertManager {}
19+
20+
class EventsCertManagerCertChange extends EventsCertManager<CertManagerChangeData> {}
21+
22+
export {
23+
EventsKeys,
24+
EventsCertManager,
25+
EventsCertManagerStart,
26+
EventsCertManagerStarted,
27+
EventsCertManagerStop,
28+
EventsCertManagerStopped,
29+
EventsCertManagerDestroy,
30+
EventsCertManagerDestroyed,
31+
EventsCertManagerCertChange,
32+
}

0 commit comments

Comments
 (0)