Skip to content

Commit d34ba6d

Browse files
DrFacepalmCMCDragonkai
authored andcommitted
Refactor foundation
1 parent 71c8441 commit d34ba6d

25 files changed

+11500
-3337
lines changed

.env.example

-3
This file was deleted.

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -121,3 +121,7 @@ dist
121121
.yarn/build-state.yml
122122
.yarn/install-state.gz
123123
.pnp.*
124+
125+
# editors
126+
.vscode
127+
.idea

.gitlab-ci.yml

+2
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,5 @@ packages:
6262
--attr package.windows.x64.exe
6363
--attr package.windows.ia32.exe
6464
--attr package.darwin.x64.zip
65+
only:
66+
- master

agentTest.ts

+178
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
import Logger from '@matrixai/logger';
2+
3+
import { ClientService, GRPCClientClient } from '@matrixai/polykey/src/client';
4+
import createClientService from '@matrixai/polykey/src/client/clientService';
5+
import KeyManager from '@matrixai/polykey/src/keys/KeyManager';
6+
import VaultManager from '@matrixai/polykey/src/vaults/VaultManager';
7+
import NodeManager from '@matrixai/polykey/src/nodes/NodeManager';
8+
import GestaltGraph from '@matrixai/polykey/src/gestalts/GestaltGraph';
9+
import SessionManager from '@matrixai/polykey/src/session/SessionManager';
10+
import IdentitiesManager from '@matrixai/polykey/src/identities/IdentitiesManager';
11+
import ForwardProxy from '@matrixai/polykey/src/network/ForwardProxy';
12+
import ReverseProxy from '@matrixai/polykey/src/network/ReverseProxy';
13+
import GitBackend from '@matrixai/polykey/src/git/GitBackend';
14+
import GRPCServer from '@matrixai/polykey/src/grpc/GRPCServer';
15+
import { AgentService, createAgentService } from '@matrixai/polykey/src/agent';
16+
import { Host, Port } from '@matrixai/polykey/src/network/types';
17+
import { certNodeId } from '@matrixai/polykey/src/network/utils';
18+
import { Lockfile } from '@matrixai/polykey/src/lockfile';
19+
import { sleep } from '@matrixai/polykey/src/utils';
20+
import path from 'path';
21+
import * as utils from '@matrixai/polykey/src/utils';
22+
import * as errors from '@matrixai/polykey/src/errors';
23+
import { WorkerManager } from '@matrixai/polykey/src/workers';
24+
import fs from 'fs';
25+
26+
const nodePath = './tmp/';
27+
const keysPath = './tmp/keys';
28+
const nodesPath = './tmp/nodes';
29+
const vaultsPath = './tmp/vaults';
30+
const identitiesPath = './tmp/identities';
31+
const gestaltsPath = './tmp/gestalts';
32+
const grpcHost = '127.0.0.1';
33+
const grpcPort = 0;
34+
const fresh = false;
35+
const authToken = 'asdf';
36+
const password = 'Password';
37+
38+
async function main() {
39+
// Constructing.
40+
const logger = new Logger('Polykey');
41+
const keyManager: KeyManager = new KeyManager({ keysPath, logger });
42+
const vaultManager = new VaultManager({
43+
vaultsPath,
44+
keyManager,
45+
logger,
46+
});
47+
const fwdProxy = new ForwardProxy({ authToken, logger });
48+
const revProxy = new ReverseProxy({ logger });
49+
const nodeManager = new NodeManager({
50+
fwdProxy,
51+
keyManager,
52+
nodesPath,
53+
revProxy,
54+
logger,
55+
});
56+
const identitiesManager = new IdentitiesManager({
57+
identitiesPath,
58+
keyManager,
59+
logger,
60+
});
61+
const gestaltGraph = new GestaltGraph({
62+
gestaltsPath,
63+
keyManager,
64+
logger,
65+
});
66+
const sessionManager = new SessionManager({
67+
keyManager,
68+
logger,
69+
});
70+
const gitBackend = new GitBackend({
71+
getVault: vaultManager.getVault.bind(vaultManager),
72+
getVaultID: vaultManager.getVaultIds.bind(vaultManager),
73+
getVaultNames: vaultManager.listVaults.bind(vaultManager),
74+
logger: logger,
75+
});
76+
const workerManager = new WorkerManager({ logger });
77+
const lockfile = new Lockfile({
78+
nodePath: nodePath,
79+
logger: logger,
80+
});
81+
82+
const clientService = createClientService({
83+
gestaltGraph,
84+
identitiesManager,
85+
keyManager,
86+
nodeManager,
87+
sessionManager,
88+
vaultManager,
89+
});
90+
const agentService = createAgentService({
91+
keyManager,
92+
vaultManager,
93+
nodeManager,
94+
gitBackend,
95+
});
96+
const grpcServer = new GRPCServer({
97+
services: [
98+
[ClientService, clientService],
99+
[AgentService, agentService],
100+
],
101+
logger,
102+
});
103+
104+
if (
105+
(await Lockfile.checkLock(fs, path.join(nodePath, 'agent-lock.json'))) !==
106+
'DOESNOTEXIST'
107+
) {
108+
// Interrogate Lock File
109+
const lock = await Lockfile.parseLock(
110+
fs,
111+
path.join(nodePath, 'agent-lock.json'),
112+
);
113+
114+
if (utils.pidIsRunning(lock.pid)) {
115+
logger.error(`PolykeyAgent already started at pid: ${lock.pid}`);
116+
throw new errors.ErrorPolykey(
117+
`PolykeyAgent already started at pid: ${lock.pid}`,
118+
);
119+
}
120+
}
121+
122+
//starting everything.
123+
await workerManager.start();
124+
await keyManager.start({ password, fresh });
125+
keyManager.setWorkerManager(workerManager);
126+
//Getting tlsConfig information
127+
const keyPrivatePem = keyManager.getRootKeyPairPem().privateKey;
128+
const certChainPem = await keyManager.getRootCertChainPem();
129+
const cert = keyManager.getRootCert();
130+
const nodeId = certNodeId(cert);
131+
132+
await vaultManager.start({ fresh });
133+
await grpcServer.start({
134+
host: grpcHost as Host,
135+
port: grpcPort as Port,
136+
});
137+
await fwdProxy.start({
138+
tlsConfig: {
139+
keyPrivatePem: keyPrivatePem,
140+
certChainPem: certChainPem,
141+
},
142+
});
143+
await revProxy.start({
144+
serverHost: grpcHost as Host,
145+
serverPort: grpcPort as Port,
146+
tlsConfig: {
147+
keyPrivatePem: keyPrivatePem,
148+
certChainPem: certChainPem,
149+
},
150+
});
151+
await lockfile.start({ nodeId });
152+
await lockfile.updateLockfile('host', grpcHost);
153+
await lockfile.updateLockfile('port', grpcServer.getPort());
154+
await lockfile.updateLockfile('fwdProxyHost', fwdProxy.getProxyHost());
155+
await lockfile.updateLockfile('fwdProxyPort', fwdProxy.getProxyPort());
156+
await nodeManager.start({ nodeId, fresh });
157+
await identitiesManager.start({ fresh });
158+
await gestaltGraph.start({ fresh });
159+
await sessionManager.start({});
160+
161+
// //sleep while running or wait for an event.
162+
// await sleep(600000);
163+
164+
// //Stopping.
165+
// await lockfile.stop();
166+
// await sessionManager.stop();
167+
// await gestaltGraph.stop();
168+
// await identitiesManager.stop();
169+
// await nodeManager.stop();
170+
// await revProxy.stop();
171+
// await fwdProxy.stop();
172+
// await grpcServer.stop();
173+
// await vaultManager.stop();
174+
// await keyManager.stop();
175+
// await workerManager.stop();
176+
}
177+
178+
main().then(() => console.log('Done'));

clientTest.ts

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import Logger, { LogLevel, StreamHandler } from '@matrixai/logger';
2+
3+
import path from 'path';
4+
import fs from 'fs';
5+
import { PolykeyClient } from '@matrixai/polykey/src';
6+
import { clientPB, GRPCClientClient } from '@matrixai/polykey/src/client';
7+
import { Lockfile } from '@matrixai/polykey/src/lockfile';
8+
import { ErrorClientClientNotStarted } from '@matrixai/polykey/src/client/errors';
9+
import { NodeId } from '@matrixai/polykey/src/nodes/types';
10+
import { Host, Port } from '@matrixai/polykey/src/network/types';
11+
12+
let grpcHost: Host;
13+
let grpcPort: Port;
14+
15+
async function main() {
16+
// let client: PolykeyClient;
17+
// let grpcClient: GRPCClientClient;
18+
19+
const nodePath = './tmp/';
20+
const lockPath = path.join(nodePath, Lockfile.LOCKFILE_NAME);
21+
22+
const logger = new Logger('PolykeyClient');
23+
// const lockfile = new Lockfile({ nodePath, fs, logger });
24+
const status = await Lockfile.checkLock(fs, lockPath);
25+
if (status === 'UNLOCKED') {
26+
throw new ErrorClientClientNotStarted(
27+
'Polykey Lockfile not locked. Is the PolykeyAgent started?',
28+
);
29+
} else if (status === 'DOESNOTEXIST') {
30+
throw new ErrorClientClientNotStarted(
31+
'Polykey Lockfile not found. Is the PolykeyAgent started?',
32+
);
33+
}
34+
const lock = await Lockfile.parseLock(fs, lockPath);
35+
console.log(lock);
36+
grpcHost = lock.host as Host;
37+
grpcPort = lock.port as Port;
38+
39+
const grpcClient = new GRPCClientClient({
40+
nodeId: lock.nodeId as NodeId,
41+
host: grpcHost as Host,
42+
port: grpcPort as Port,
43+
logger,
44+
});
45+
await grpcClient.start({ timeout: 30000 });
46+
47+
const echoMessage = new clientPB.EchoMessage();
48+
echoMessage.setChallenge('Hello World!');
49+
const res = await grpcClient.echo(echoMessage);
50+
console.log(res.getChallenge());
51+
grpcClient.stop();
52+
}
53+
main();

0 commit comments

Comments
 (0)