Skip to content

Commit 0690e76

Browse files
authored
Merge pull request #361 from MatrixAI/Single_proxy_socket
refactor: combined `ForwardProxy` and `ReverseProxy` into `Proxy`
2 parents 1436b17 + 4e45138 commit 0690e76

90 files changed

Lines changed: 2722 additions & 3235 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/PolykeyAgent.ts

Lines changed: 34 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ import { Discovery } from './discovery';
2121
import { SessionManager } from './sessions';
2222
import { GRPCServer } from './grpc';
2323
import { IdentitiesManager, providers } from './identities';
24-
import ForwardProxy from './network/ForwardProxy';
25-
import ReverseProxy from './network/ReverseProxy';
24+
import Proxy from './network/Proxy';
2625
import { EventBus, captureRejectionSymbol } from './events';
2726
import { createAgentService, AgentServiceService } from './agent';
2827
import { createClientService, ClientServiceService } from './client';
@@ -31,13 +30,10 @@ import * as utils from './utils';
3130
import * as errors from './errors';
3231

3332
type NetworkConfig = {
33+
forwardHost?: Host;
34+
forwardPort?: Port;
3435
proxyHost?: Host;
3536
proxyPort?: Port;
36-
egressHost?: Host;
37-
egressPort?: Port;
38-
// ReverseProxy
39-
ingressHost?: Host;
40-
ingressPort?: Port;
4137
// GRPCServer for agent service
4238
agentHost?: Host;
4339
agentPort?: Port;
@@ -59,8 +55,7 @@ class PolykeyAgent {
5955
nodePath = config.defaults.nodePath,
6056
keysConfig = {},
6157
networkConfig = {},
62-
forwardProxyConfig = {},
63-
reverseProxyConfig = {},
58+
proxyConfig = {},
6459
nodeConnectionManagerConfig = {},
6560
seedNodes = {},
6661
// Optional dependencies
@@ -72,8 +67,7 @@ class PolykeyAgent {
7267
sigchain,
7368
acl,
7469
gestaltGraph,
75-
fwdProxy,
76-
revProxy,
70+
proxy,
7771
nodeGraph,
7872
nodeConnectionManager,
7973
nodeManager,
@@ -95,16 +89,12 @@ class PolykeyAgent {
9589
dbKeyBits?: number;
9690
recoveryCode?: string;
9791
};
98-
forwardProxyConfig?: {
92+
proxyConfig?: {
9993
authToken?: string;
10094
connConnectTime?: number;
10195
connTimeoutTime?: number;
10296
connPingIntervalTime?: number;
10397
};
104-
reverseProxyConfig?: {
105-
connConnectTime?: number;
106-
connTimeoutTime?: number;
107-
};
10898
nodeConnectionManagerConfig?: {
10999
connConnectTime?: number;
110100
connTimeoutTime?: number;
@@ -120,8 +110,7 @@ class PolykeyAgent {
120110
sigchain?: Sigchain;
121111
acl?: ACL;
122112
gestaltGraph?: GestaltGraph;
123-
fwdProxy?: ForwardProxy;
124-
revProxy?: ReverseProxy;
113+
proxy?: Proxy;
125114
nodeGraph?: NodeGraph;
126115
nodeConnectionManager?: NodeConnectionManager;
127116
nodeManager?: NodeManager;
@@ -147,14 +136,10 @@ class PolykeyAgent {
147136
...config.defaults.keysConfig,
148137
...utils.filterEmptyObject(keysConfig),
149138
};
150-
const forwardProxyConfig_ = {
139+
const proxyConfig_ = {
151140
authToken: (await keysUtils.getRandomBytes(10)).toString(),
152-
...config.defaults.forwardProxyConfig,
153-
...utils.filterEmptyObject(forwardProxyConfig),
154-
};
155-
const reverseProxyConfig_ = {
156-
...config.defaults.reverseProxyConfig,
157-
...utils.filterEmptyObject(reverseProxyConfig),
141+
...config.defaults.proxyConfig,
142+
...utils.filterEmptyObject(proxyConfig),
158143
};
159144
const nodeConnectionManagerConfig_ = {
160145
...config.defaults.nodeConnectionManagerConfig,
@@ -256,17 +241,11 @@ class PolykeyAgent {
256241
logger: logger.getChild(GestaltGraph.name),
257242
fresh,
258243
}));
259-
fwdProxy =
260-
fwdProxy ??
261-
new ForwardProxy({
262-
...forwardProxyConfig_,
263-
logger: logger.getChild(ForwardProxy.name),
264-
});
265-
revProxy =
266-
revProxy ??
267-
new ReverseProxy({
268-
...reverseProxyConfig_,
269-
logger: logger.getChild(ReverseProxy.name),
244+
proxy =
245+
proxy ??
246+
new Proxy({
247+
...proxyConfig_,
248+
logger: logger.getChild(Proxy.name),
270249
});
271250
nodeGraph =
272251
nodeGraph ??
@@ -281,8 +260,7 @@ class PolykeyAgent {
281260
new NodeConnectionManager({
282261
keyManager,
283262
nodeGraph,
284-
fwdProxy,
285-
revProxy,
263+
proxy,
286264
seedNodes,
287265
...nodeConnectionManagerConfig_,
288266
logger: logger.getChild(NodeConnectionManager.name),
@@ -359,8 +337,7 @@ class PolykeyAgent {
359337
await notificationsManager?.stop();
360338
await vaultManager?.stop();
361339
await discovery?.stop();
362-
await revProxy?.stop();
363-
await fwdProxy?.stop();
340+
await proxy?.stop();
364341
await gestaltGraph?.stop();
365342
await acl?.stop();
366343
await sigchain?.stop();
@@ -381,8 +358,7 @@ class PolykeyAgent {
381358
sigchain,
382359
acl,
383360
gestaltGraph,
384-
fwdProxy,
385-
revProxy,
361+
proxy,
386362
nodeGraph,
387363
nodeConnectionManager,
388364
nodeManager,
@@ -414,8 +390,7 @@ class PolykeyAgent {
414390
public readonly sigchain: Sigchain;
415391
public readonly acl: ACL;
416392
public readonly gestaltGraph: GestaltGraph;
417-
public readonly fwdProxy: ForwardProxy;
418-
public readonly revProxy: ReverseProxy;
393+
public readonly proxy: Proxy;
419394
public readonly nodeGraph: NodeGraph;
420395
public readonly nodeConnectionManager: NodeConnectionManager;
421396
public readonly nodeManager: NodeManager;
@@ -440,8 +415,7 @@ class PolykeyAgent {
440415
sigchain,
441416
acl,
442417
gestaltGraph,
443-
fwdProxy,
444-
revProxy,
418+
proxy,
445419
nodeGraph,
446420
nodeConnectionManager,
447421
nodeManager,
@@ -464,8 +438,7 @@ class PolykeyAgent {
464438
sigchain: Sigchain;
465439
acl: ACL;
466440
gestaltGraph: GestaltGraph;
467-
fwdProxy: ForwardProxy;
468-
revProxy: ReverseProxy;
441+
proxy: Proxy;
469442
nodeGraph: NodeGraph;
470443
nodeConnectionManager: NodeConnectionManager;
471444
nodeManager: NodeManager;
@@ -489,8 +462,7 @@ class PolykeyAgent {
489462
this.sigchain = sigchain;
490463
this.acl = acl;
491464
this.gestaltGraph = gestaltGraph;
492-
this.fwdProxy = fwdProxy;
493-
this.revProxy = revProxy;
465+
this.proxy = proxy;
494466
this.discovery = discovery;
495467
this.nodeGraph = nodeGraph;
496468
this.nodeConnectionManager = nodeConnectionManager;
@@ -541,8 +513,7 @@ class PolykeyAgent {
541513
nodeId: keyChangeData.nodeId,
542514
});
543515
await this.nodeManager.refreshBuckets();
544-
this.fwdProxy.setTLSConfig(keyChangeData.tlsConfig);
545-
this.revProxy.setTLSConfig(keyChangeData.tlsConfig);
516+
this.proxy.setTLSConfig(keyChangeData.tlsConfig);
546517
this.grpcServerClient.setTLSConfig(keyChangeData.tlsConfig);
547518
this.logger.info('Propagated root keypair change');
548519
},
@@ -563,7 +534,7 @@ class PolykeyAgent {
563534
notificationsManager: this.notificationsManager,
564535
acl: this.acl,
565536
gestaltGraph: this.gestaltGraph,
566-
revProxy: this.revProxy,
537+
proxy: this.proxy,
567538
});
568539
const clientService = createClientService({
569540
pkAgent: this,
@@ -581,8 +552,7 @@ class PolykeyAgent {
581552
acl: this.acl,
582553
grpcServerClient: this.grpcServerClient,
583554
grpcServerAgent: this.grpcServerAgent,
584-
fwdProxy: this.fwdProxy,
585-
revProxy: this.revProxy,
555+
proxy: this.proxy,
586556
fs: this.fs,
587557
});
588558
// Starting modules
@@ -613,18 +583,13 @@ class PolykeyAgent {
613583
host: networkConfig_.agentHost,
614584
port: networkConfig_.agentPort,
615585
});
616-
await this.fwdProxy.start({
617-
proxyHost: networkConfig_.proxyHost,
618-
proxyPort: networkConfig_.proxyPort,
619-
egressHost: networkConfig_.egressHost,
620-
egressPort: networkConfig_.egressPort,
621-
tlsConfig,
622-
});
623-
await this.revProxy.start({
586+
await this.proxy.start({
587+
forwardHost: networkConfig_.forwardHost,
588+
forwardPort: networkConfig_.forwardPort,
624589
serverHost: this.grpcServerAgent.getHost(),
625590
serverPort: this.grpcServerAgent.getPort(),
626-
ingressHost: networkConfig_.ingressHost,
627-
ingressPort: networkConfig_.ingressPort,
591+
proxyHost: networkConfig_.proxyHost,
592+
proxyPort: networkConfig_.proxyPort,
628593
tlsConfig,
629594
});
630595
await this.nodeConnectionManager.start();
@@ -639,8 +604,8 @@ class PolykeyAgent {
639604
nodeId: this.keyManager.getNodeId(),
640605
clientHost: this.grpcServerClient.getHost(),
641606
clientPort: this.grpcServerClient.getPort(),
642-
ingressHost: this.revProxy.getIngressHost(),
643-
ingressPort: this.revProxy.getIngressPort(),
607+
proxyHost: this.proxy.getProxyHost(),
608+
proxyPort: this.proxy.getProxyPort(),
644609
});
645610
this.logger.info(`Started ${this.constructor.name}`);
646611
} catch (e) {
@@ -650,8 +615,7 @@ class PolykeyAgent {
650615
await this.notificationsManager?.stop();
651616
await this.vaultManager?.stop();
652617
await this.discovery?.stop();
653-
await this.revProxy?.stop();
654-
await this.fwdProxy?.stop();
618+
await this.proxy?.stop();
655619
await this.grpcServerAgent?.stop();
656620
await this.grpcServerClient?.stop();
657621
await this.gestaltGraph?.stop();
@@ -679,8 +643,7 @@ class PolykeyAgent {
679643
await this.discovery.stop();
680644
await this.nodeConnectionManager.stop();
681645
await this.nodeGraph.stop();
682-
await this.revProxy.stop();
683-
await this.fwdProxy.stop();
646+
await this.proxy.stop();
684647
await this.grpcServerAgent.stop();
685648
await this.grpcServerClient.stop();
686649
await this.gestaltGraph.stop();

src/agent/service/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import type { Sigchain } from '../../sigchain';
1010
import type { ACL } from '../../acl';
1111
import type { GestaltGraph } from '../../gestalts';
1212
import type { IAgentServiceServer } from '../../proto/js/polykey/v1/agent_service_grpc_pb';
13-
import type ReverseProxy from '../../network/ReverseProxy';
13+
import type Proxy from '../../network/Proxy';
1414
import echo from './echo';
1515
import nodesChainDataGet from './nodesChainDataGet';
1616
import nodesClaimsGet from './nodesClaimsGet';
@@ -34,9 +34,9 @@ function createService(container: {
3434
sigchain: Sigchain;
3535
acl: ACL;
3636
gestaltGraph: GestaltGraph;
37-
revProxy: ReverseProxy;
37+
proxy: Proxy;
3838
}): IAgentServiceServer {
39-
const connectionInfoGet = agentUtils.connectionInfoGetter(container.revProxy);
39+
const connectionInfoGet = agentUtils.connectionInfoGetter(container.proxy);
4040
const container_ = {
4141
...container,
4242
connectionInfoGet: connectionInfoGet,

src/agent/service/nodesHolePunchMessageSend.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ function nodesHolePunchMessageSend({
5151
// back to the source node.
5252
if (keyManager.getNodeId().equals(targetId)) {
5353
const [host, port] = networkUtils.parseAddress(
54-
call.request.getEgressAddress(),
54+
call.request.getProxyAddress(),
5555
);
5656
await nodeConnectionManager.holePunchReverse(host, port);
5757
// Otherwise, find if node in table

src/agent/service/vaultsGitInfoGet.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ function vaultsGitInfoGet({
5050
if (connectionInfo == null) {
5151
throw new agentErrors.ErrorConnectionInfoMissing();
5252
}
53-
const nodeId = connectionInfo.nodeId;
53+
const nodeId = connectionInfo.remoteNodeId;
5454
const nodeIdEncoded = nodesUtils.encodeNodeId(nodeId);
5555
const actionType = validationUtils.parseVaultAction(request.getAction());
5656
const permissions = await acl.getNodePerm(nodeId);

src/agent/service/vaultsGitPackGet.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ function vaultsGitPackGet({
3737
if (connectionInfo == null) {
3838
throw new agentErrors.ErrorConnectionInfoMissing();
3939
}
40-
const nodeId = connectionInfo.nodeId;
40+
const nodeId = connectionInfo.remoteNodeId;
4141
const nodeIdEncoded = nodesUtils.encodeNodeId(nodeId);
4242
// Getting vaultId
4343
const vaultNameOrId = meta.get('vaultNameOrId').pop()!.toString();

src/agent/service/vaultsScan.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ function vaultsScan({
2626
if (connectionInfo == null) {
2727
throw new agentErrors.ErrorConnectionInfoMissing();
2828
}
29-
const nodeId = connectionInfo.nodeId;
29+
const nodeId = connectionInfo.remoteNodeId;
3030
try {
3131
const listResponse = vaultManager.handleScanVaults(nodeId);
3232
for await (const {

src/agent/utils.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import type { Host, Port } from 'network/types';
2-
import type ReverseProxy from 'network/ReverseProxy';
2+
import type Proxy from 'network/Proxy';
33
import type { ConnectionInfoGet } from './types';
44
import type { ServerSurfaceCall } from '@grpc/grpc-js/build/src/server-call';
55

6-
function connectionInfoGetter(revProxy: ReverseProxy): ConnectionInfoGet {
6+
function connectionInfoGetter(proxy: Proxy): ConnectionInfoGet {
77
return (call: ServerSurfaceCall) => {
88
let urlString = call.getPeer();
99
if (!/^.*:\/\//.test(urlString)) urlString = 'pk://' + urlString;
1010
const url = new URL(urlString);
11-
return revProxy.getConnectionInfoByProxy(
11+
return proxy.getConnectionInfoByReverse(
1212
url.hostname as Host,
1313
parseInt(url.port) as Port,
1414
);

src/bin/agent/CommandStart.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ class CommandStart extends CommandPolykey {
2222
this.addOption(binOptions.rootKeyPairBits);
2323
this.addOption(binOptions.clientHost);
2424
this.addOption(binOptions.clientPort);
25-
this.addOption(binOptions.ingressHost);
26-
this.addOption(binOptions.ingressPort);
25+
this.addOption(binOptions.proxyHost);
26+
this.addOption(binOptions.proxyPort);
2727
this.addOption(binOptions.connTimeoutTime);
2828
this.addOption(binOptions.seedNodes);
2929
this.addOption(binOptions.network);
@@ -83,17 +83,14 @@ class CommandStart extends CommandPolykey {
8383
rootKeyPairBits: options.rootKeyPairBits,
8484
recoveryCode: recoveryCodeIn,
8585
},
86-
forwardProxyConfig: {
87-
connTimeoutTime: options.connTimeoutTime,
88-
},
89-
reverseProxyConfig: {
86+
proxyConfig: {
9087
connTimeoutTime: options.connTimeoutTime,
9188
},
9289
networkConfig: {
9390
clientHost: options.clientHost,
9491
clientPort: options.clientPort,
95-
ingressHost: options.ingressHost,
96-
ingressPort: options.ingressPort,
92+
proxyHost: options.proxyHost,
93+
proxyPort: options.proxyPort,
9794
},
9895
seedNodes,
9996
fresh: options.fresh,

0 commit comments

Comments
 (0)