greybel-mock-environment 1.0.3 → 1.0.5

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.
Files changed (47) hide show
  1. package/dist/default-fs.d.ts +2 -2
  2. package/dist/environment.d.ts +13 -44
  3. package/dist/environment.js +119 -360
  4. package/dist/generators/basic.d.ts +19 -0
  5. package/dist/generators/basic.js +83 -0
  6. package/dist/generators/email.d.ts +17 -0
  7. package/dist/generators/email.js +24 -0
  8. package/dist/generators/index.d.ts +5 -0
  9. package/dist/generators/index.js +16 -0
  10. package/dist/generators/network.d.ts +48 -0
  11. package/dist/generators/network.js +238 -0
  12. package/dist/generators/user.d.ts +15 -0
  13. package/dist/generators/user.js +29 -0
  14. package/dist/generators/vulnerability.d.ts +20 -0
  15. package/dist/generators/vulnerability.js +114 -0
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.js +5 -1
  18. package/dist/types/computer.d.ts +9 -0
  19. package/dist/types/computer.js +29 -0
  20. package/dist/types/device.d.ts +21 -0
  21. package/dist/types/device.js +15 -0
  22. package/dist/types/email.d.ts +16 -0
  23. package/dist/types/email.js +20 -0
  24. package/dist/types/file-system.d.ts +56 -0
  25. package/dist/types/file-system.js +74 -0
  26. package/dist/types/index.d.ts +11 -0
  27. package/dist/types/index.js +36 -0
  28. package/dist/types/network-device.d.ts +11 -0
  29. package/dist/types/network-device.js +12 -0
  30. package/dist/types/port.d.ts +14 -0
  31. package/dist/types/port.js +13 -0
  32. package/dist/types/router.d.ts +13 -0
  33. package/dist/types/router.js +32 -0
  34. package/dist/types/service.d.ts +9 -0
  35. package/dist/types/service.js +20 -0
  36. package/dist/types/switch.d.ts +8 -0
  37. package/dist/types/switch.js +29 -0
  38. package/dist/types/user.d.ts +14 -0
  39. package/dist/types/user.js +18 -0
  40. package/dist/types/vulnerabilities.d.ts +63 -0
  41. package/dist/{types.js → types/vulnerabilities.js} +16 -39
  42. package/dist/types/wifi-network.d.ts +20 -0
  43. package/dist/types/wifi-network.js +16 -0
  44. package/dist/utils.d.ts +2 -0
  45. package/dist/utils.js +11 -0
  46. package/package.json +1 -1
  47. package/dist/types.d.ts +0 -152
@@ -1,3 +1,3 @@
1
- import { FileSystemEntity, Folder, User } from './types';
2
- export declare function getUserFolder(parent: FileSystemEntity, user: string): Folder;
1
+ import { Folder, FSEntity, User } from './types';
2
+ export declare function getUserFolder(parent: FSEntity, user: string): Folder;
3
3
  export declare function getDefaultFileSystem(users: User[]): Folder;
@@ -1,59 +1,29 @@
1
- import { RandomSeed } from 'random-seed';
2
- import { Computer, EMail, Library, Network, NetworkDevice, Port, Router, User, Vulnerability } from './types';
1
+ import BasicGenerator from './generators/basic';
2
+ import EmailGenerator from './generators/email';
3
+ import NetworkGenerator from './generators/network';
4
+ import UserGenerator from './generators/user';
5
+ import VulnerabilityGenerator from './generators/vulnerability';
6
+ import { Computer, EMail, Port, Router, Switch, User } from './types';
3
7
  export default class MockEnvironment {
4
8
  seed: string;
5
- vulnerabilityRng: RandomSeed;
6
- bankIdRng: RandomSeed;
7
- networkRng: RandomSeed;
8
- macAddressRng: RandomSeed;
9
- uuidRng: RandomSeed;
10
- passwordRng: RandomSeed;
11
- usernameRng: RandomSeed;
12
- portRng: RandomSeed;
13
- users: User[];
14
- routers: Router[];
15
- computers: Computer[];
16
- vulnerabilities: Vulnerability[];
17
- networks: Network[];
18
- emails: EMail[];
9
+ basicGenerator: BasicGenerator;
10
+ emailGenerator: EmailGenerator;
11
+ userGenerator: UserGenerator;
12
+ vulnerabilityGenerator: VulnerabilityGenerator;
13
+ networkGenerator: NetworkGenerator;
19
14
  localComputer: Computer;
20
15
  constructor(seed: string, localUser: {
21
16
  username: string;
22
17
  password: string;
23
18
  });
24
- generateUser(username: string, password: string): User;
25
- generateDomain(): string;
26
- generateEmail(options: {
27
- name?: string;
28
- domain?: string;
29
- password?: string;
30
- }): string;
31
- generateRouter(options?: Partial<Router>): Router;
32
- generateComputer(router: Router | null, users: User[], rootPassword?: string): Computer;
33
- generatePorts(computer: Computer): Port[];
34
19
  getComputerInLan(ipAddress: string, router: Router): Computer | null;
35
20
  getComputersOfRouter(router: Router): Computer[];
36
21
  getPortsOfRouter(router: Router): Port[];
37
22
  getForwardedPortsOfRouter(router: Router): Port[];
38
23
  getForwardedPortOfRouter(router: Router, port: number): {
39
- computer: Computer;
40
24
  port: Port;
25
+ computer: Computer;
41
26
  } | null;
42
- generateNetworkDevice(): NetworkDevice;
43
- generateIp(): string;
44
- generateLocalIp(): string;
45
- generateMAC(): string;
46
- generateUUID(): string;
47
- generateUsername(): string;
48
- generatePassword(): string;
49
- generateNetwork(router: Router, options?: Partial<Network>): Network;
50
- generateVulnerabilityAddress(): string;
51
- generateVulnerability(library: Library, memAddress: string, remote: boolean): Vulnerability;
52
- generateSectorVulnerabilities(library: Library, sector: string, remote: boolean): Vulnerability[];
53
- generateVulnerabilitiesForLibrary(library: Library, options?: {
54
- remote?: boolean;
55
- local?: boolean;
56
- }): void;
57
27
  setupLibraries(): void;
58
28
  getLocal(): {
59
29
  computer: Computer;
@@ -61,10 +31,9 @@ export default class MockEnvironment {
61
31
  };
62
32
  connectLocal(router: Router): void;
63
33
  getRouterByIp(ipAddress: string): Router | null;
34
+ getSwitchByIp(ipAddress: string): Switch | null;
64
35
  getComputersOfRouterByIp(ipAddress: string): Computer[];
65
36
  findRouterViaNS(name: string): Router;
66
37
  getEmailViaLogin(email: string, password: string): EMail | null;
67
38
  getEmail(email: string): EMail | null;
68
- isValidIp(target: string): boolean;
69
- isLanIp(target: string): boolean;
70
39
  }
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __values = (this && this.__values) || function(o) {
3
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
4
+ if (m) return m.call(o);
5
+ if (o && typeof o.length === "number") return {
6
+ next: function () {
7
+ if (o && i >= o.length) o = void 0;
8
+ return { value: o && o[i++], done: !o };
9
+ }
10
+ };
11
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
12
+ };
2
13
  var __read = (this && this.__read) || function (o, n) {
3
14
  var m = typeof Symbol === "function" && o[Symbol.iterator];
4
15
  if (!m) return o;
@@ -15,157 +26,43 @@ var __read = (this && this.__read) || function (o, n) {
15
26
  }
16
27
  return ar;
17
28
  };
18
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
20
- if (ar || !(i in from)) {
21
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22
- ar[i] = from[i];
23
- }
24
- }
25
- return to.concat(ar || Array.prototype.slice.call(from));
26
- };
27
- var __values = (this && this.__values) || function(o) {
28
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
29
- if (m) return m.call(o);
30
- if (o && typeof o.length === "number") return {
31
- next: function () {
32
- if (o && i >= o.length) o = void 0;
33
- return { value: o && o[i++], done: !o };
34
- }
35
- };
36
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
37
- };
38
29
  var __importDefault = (this && this.__importDefault) || function (mod) {
39
30
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
31
  };
41
32
  Object.defineProperty(exports, "__esModule", { value: true });
42
- var blueimp_md5_1 = __importDefault(require("blueimp-md5"));
43
- var random_seed_1 = __importDefault(require("random-seed"));
44
- var default_fs_1 = require("./default-fs");
33
+ var basic_1 = __importDefault(require("./generators/basic"));
34
+ var email_1 = __importDefault(require("./generators/email"));
35
+ var network_1 = __importDefault(require("./generators/network"));
36
+ var user_1 = __importDefault(require("./generators/user"));
37
+ var vulnerability_1 = __importDefault(require("./generators/vulnerability"));
45
38
  var types_1 = require("./types");
46
- var randomUsernameGenerator = require('random-username-generator');
39
+ var utils_1 = require("./utils");
47
40
  var MockEnvironment = /** @class */ (function () {
48
41
  function MockEnvironment(seed, localUser) {
49
42
  if (seed === void 0) { seed = 'test'; }
50
43
  this.seed = seed;
51
- this.vulnerabilityRng = random_seed_1.default.create("".concat(seed, "-vul-number"));
52
- this.bankIdRng = random_seed_1.default.create("".concat(seed, "-bank-number"));
53
- this.networkRng = random_seed_1.default.create("".concat(seed, "-network-devices"));
54
- this.macAddressRng = random_seed_1.default.create("".concat(seed, "-mac-address"));
55
- this.uuidRng = random_seed_1.default.create("".concat(seed, "-uuid"));
56
- this.passwordRng = random_seed_1.default.create("".concat(seed, "-password"));
57
- this.usernameRng = random_seed_1.default.create("".concat(seed, "-username"));
58
- this.portRng = random_seed_1.default.create("".concat(seed, "-port"));
59
- this.users = [];
60
- this.routers = [];
61
- this.computers = [];
62
- this.vulnerabilities = [];
63
- this.networks = [];
64
- this.emails = [];
65
- this.localComputer = this.generateComputer(null, [this.generateUser(localUser.username, localUser.password)], 'test');
44
+ this.basicGenerator = new basic_1.default({ seed: seed });
45
+ this.emailGenerator = new email_1.default({
46
+ seed: seed,
47
+ basicGenerator: this.basicGenerator
48
+ });
49
+ this.userGenerator = new user_1.default({
50
+ seed: seed,
51
+ basicGenerator: this.basicGenerator,
52
+ emailGenerator: this.emailGenerator
53
+ });
54
+ this.vulnerabilityGenerator = new vulnerability_1.default({
55
+ seed: seed,
56
+ basicGenerator: this.basicGenerator
57
+ });
58
+ this.networkGenerator = new network_1.default({
59
+ seed: seed,
60
+ basicGenerator: this.basicGenerator,
61
+ userGenerator: this.userGenerator,
62
+ emailGenerator: this.emailGenerator
63
+ });
64
+ this.localComputer = this.networkGenerator.generateLocalComputer([this.userGenerator.generate(localUser.username, localUser.password)], 'test');
66
65
  }
67
- MockEnvironment.prototype.generateUser = function (username, password) {
68
- var me = this;
69
- var user = {
70
- username: username,
71
- password: password,
72
- passwordHashed: (0, blueimp_md5_1.default)(password),
73
- email: me.generateEmail({
74
- name: username,
75
- password: password
76
- }),
77
- userBankNumber: me.bankIdRng.random().toString(36).substring(2, 10)
78
- };
79
- me.users.push(user);
80
- return user;
81
- };
82
- MockEnvironment.prototype.generateDomain = function () {
83
- var me = this;
84
- return "".concat(me.generateUsername(), ".").concat(['org', 'com', 'de', 'tv'][me.networkRng.intBetween(0, 3)]);
85
- };
86
- MockEnvironment.prototype.generateEmail = function (options) {
87
- var me = this;
88
- var email = "".concat(options.name || me.generateUsername(), "@").concat(options.domain || me.generateDomain());
89
- me.emails.push({
90
- email: email,
91
- password: options.password || me.generatePassword(),
92
- messages: new Map()
93
- });
94
- return email;
95
- };
96
- MockEnvironment.prototype.generateRouter = function (options) {
97
- if (options === void 0) { options = {}; }
98
- var me = this;
99
- var networkDevice = me.generateNetworkDevice();
100
- var routerUsers = [
101
- me.generateUser('root', me.generatePassword()),
102
- me.generateUser(me.generateUsername(), me.generatePassword())
103
- ];
104
- var domain = me.generateDomain();
105
- var name = me.generateUsername();
106
- var router = {
107
- domain: options.domain || "www.".concat(domain),
108
- whoisDescription: options.whoisDescription ||
109
- [
110
- "Domain name: ".concat(domain),
111
- "Administrative contact: ".concat(name),
112
- "Email address: ".concat(me.generateEmail({ name: name, domain: domain })),
113
- 'Phone: 123456891'
114
- ].join('\n'),
115
- publicIp: options.publicIp || me.generateIp(),
116
- localIp: options.localIp || me.generateLocalIp(),
117
- activeNetCard: options.activeNetCard || networkDevice.type,
118
- networkDevices: options.networkDevices || [networkDevice],
119
- users: options.users || routerUsers,
120
- fileSystem: options.fileSystem || (0, default_fs_1.getDefaultFileSystem)(routerUsers)
121
- };
122
- for (var index = me.networkRng.intBetween(4, 10); index >= 0; index--) {
123
- me.generateComputer(router, [
124
- me.generateUser(me.generateUsername(), me.generatePassword())
125
- ]);
126
- }
127
- me.routers.push(router);
128
- return router;
129
- };
130
- MockEnvironment.prototype.generateComputer = function (router, users, rootPassword) {
131
- var me = this;
132
- var networkDevice = me.generateNetworkDevice();
133
- var computerUsers = __spreadArray([
134
- me.generateUser('root', rootPassword || me.generatePassword())
135
- ], __read(users), false);
136
- var computer = {
137
- router: router,
138
- localIp: me.generateLocalIp(),
139
- activeNetCard: networkDevice.type,
140
- networkDevices: [networkDevice],
141
- users: computerUsers,
142
- fileSystem: (0, default_fs_1.getDefaultFileSystem)(computerUsers),
143
- ports: []
144
- };
145
- computer.ports = me.generatePorts(computer);
146
- me.computers.push(computer);
147
- return computer;
148
- };
149
- MockEnvironment.prototype.generatePorts = function (computer) {
150
- var me = this;
151
- var portNumber = me.portRng.intBetween(1, 1000);
152
- var router = computer.router;
153
- var forwarded = false;
154
- if (router) {
155
- var forwardedPort = me.getForwardedPortOfRouter(router, portNumber);
156
- if (!forwardedPort) {
157
- forwarded = me.networkRng.intBetween(0, 2) === 1;
158
- }
159
- }
160
- return __spreadArray([], __read(Array(me.portRng.intBetween(1, 3)).keys()), false).map(function () {
161
- return {
162
- port: me.portRng.intBetween(1, 1000),
163
- isClosed: !!me.portRng.intBetween(0, 1),
164
- service: types_1.ServiceList[me.portRng.intBetween(0, 5)],
165
- forwarded: forwarded
166
- };
167
- });
168
- };
169
66
  MockEnvironment.prototype.getComputerInLan = function (ipAddress, router) {
170
67
  var me = this;
171
68
  return me.getComputersOfRouter(router).find(function (v) {
@@ -173,240 +70,67 @@ var MockEnvironment = /** @class */ (function () {
173
70
  });
174
71
  };
175
72
  MockEnvironment.prototype.getComputersOfRouter = function (router) {
176
- var me = this;
177
- return me.computers.filter(function (v) {
178
- var _a;
179
- return ((_a = v.router) === null || _a === void 0 ? void 0 : _a.publicIp) === router.publicIp;
180
- });
73
+ return Array.from(router.devices.values()).filter(function (d) { return d instanceof types_1.Computer; });
181
74
  };
182
75
  MockEnvironment.prototype.getPortsOfRouter = function (router) {
183
- var me = this;
184
- var computers = me.getComputersOfRouter(router);
185
- return [].concat.apply([], __spreadArray([], __read(computers.map(function (v) {
186
- return v.ports;
187
- })), false));
76
+ return Array.from(router.ports.values());
188
77
  };
189
78
  MockEnvironment.prototype.getForwardedPortsOfRouter = function (router) {
190
79
  var me = this;
191
80
  return me.getPortsOfRouter(router).filter(function (v) { return v.forwarded; });
192
81
  };
193
82
  MockEnvironment.prototype.getForwardedPortOfRouter = function (router, port) {
194
- var e_1, _a, e_2, _b;
195
83
  var me = this;
196
- var computers = me.computers.filter(function (v) {
197
- var _a;
198
- return ((_a = v.router) === null || _a === void 0 ? void 0 : _a.publicIp) === router.publicIp;
199
- });
200
- var computerResult;
201
- var portResult;
202
- try {
203
- for (var computers_1 = __values(computers), computers_1_1 = computers_1.next(); !computers_1_1.done; computers_1_1 = computers_1.next()) {
204
- var item = computers_1_1.value;
205
- if (item.ports) {
206
- try {
207
- for (var _c = (e_2 = void 0, __values(item.ports)), _d = _c.next(); !_d.done; _d = _c.next()) {
208
- var itemPort = _d.value;
209
- if (itemPort.port === port && itemPort.forwarded) {
210
- computerResult = item;
211
- portResult = itemPort;
212
- break;
213
- }
214
- }
215
- }
216
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
217
- finally {
218
- try {
219
- if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
220
- }
221
- finally { if (e_2) throw e_2.error; }
222
- }
223
- }
224
- if (computerResult || portResult) {
225
- break;
226
- }
227
- }
228
- }
229
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
230
- finally {
231
- try {
232
- if (computers_1_1 && !computers_1_1.done && (_a = computers_1.return)) _a.call(computers_1);
233
- }
234
- finally { if (e_1) throw e_1.error; }
235
- }
236
- if (!computerResult || !portResult) {
84
+ var computers = me.getComputersOfRouter(router);
85
+ var computer = computers.find(function (c) { return c.ports.has(port); });
86
+ if (!computer) {
237
87
  return null;
238
88
  }
239
89
  return {
240
- computer: computerResult,
241
- port: portResult
242
- };
243
- };
244
- MockEnvironment.prototype.generateNetworkDevice = function () {
245
- return {
246
- type: this.networkRng.intBetween(0, 1) === 0 ? 'wlan0' : 'eth0',
247
- id: this.networkRng.random().toString(36).substring(2, 10),
248
- active: true
249
- };
250
- };
251
- MockEnvironment.prototype.generateIp = function () {
252
- var me = this;
253
- return "".concat(me.networkRng.intBetween(0, 255), ".").concat(me.networkRng.intBetween(0, 255), ".").concat(me.networkRng.intBetween(0, 255), ".").concat(me.networkRng.intBetween(0, 255));
254
- };
255
- MockEnvironment.prototype.generateLocalIp = function () {
256
- var me = this;
257
- return "192.168.".concat(me.networkRng.intBetween(0, 255), ".").concat(me.networkRng.intBetween(0, 255));
258
- };
259
- MockEnvironment.prototype.generateMAC = function () {
260
- var me = this;
261
- var d = '0123456789ABCDEF';
262
- return __spreadArray([], __read(Array(6).keys()), false).map(function () {
263
- return (d[me.macAddressRng.intBetween(0, 15)] +
264
- d[me.macAddressRng.intBetween(0, 15)]);
265
- })
266
- .join(':');
267
- };
268
- MockEnvironment.prototype.generateUUID = function () {
269
- var me = this;
270
- var dt = me.uuidRng.random();
271
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
272
- var r = (dt + me.uuidRng.random() * 16) % 16 | 0;
273
- dt = Math.floor(dt / 16);
274
- return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);
275
- });
276
- };
277
- MockEnvironment.prototype.generateUsername = function () {
278
- var me = this;
279
- var nativeMath = Math.random;
280
- Math.random = function () { return me.usernameRng.random(); };
281
- var username = randomUsernameGenerator.generate();
282
- Math.random = nativeMath;
283
- return username;
284
- };
285
- MockEnvironment.prototype.generatePassword = function () {
286
- var me = this;
287
- return me.passwordRng.string(me.passwordRng.intBetween(4, 8));
288
- };
289
- MockEnvironment.prototype.generateNetwork = function (router, options) {
290
- if (options === void 0) { options = {}; }
291
- var me = this;
292
- var network = {
293
- mac: options.mac || me.generateMAC(),
294
- percentage: options.percentage || me.networkRng.intBetween(20, 70),
295
- name: options.name || me.generateUsername(),
296
- bssid: options.bssid || me.generateUUID(),
297
- essid: options.essid || me.generateUUID(),
298
- password: options.password || me.generatePassword(),
299
- router: router
300
- };
301
- me.networks.push(network);
302
- return network;
303
- };
304
- MockEnvironment.prototype.generateVulnerabilityAddress = function () {
305
- var me = this;
306
- var d = '0123456789ABCDEF';
307
- return ('0x' +
308
- __spreadArray([], __read(Array(8).keys()), false).map(function () {
309
- return d[me.vulnerabilityRng.intBetween(0, 15)];
310
- })
311
- .join(''));
312
- };
313
- MockEnvironment.prototype.generateVulnerability = function (library, memAddress, remote) {
314
- var me = this;
315
- var requirementAmount = me.vulnerabilityRng.intBetween(0, 3);
316
- var required = [];
317
- var action = types_1.VulnerabilityActionList[me.vulnerabilityRng.intBetween(0, 4)];
318
- var user;
319
- while (required.length < requirementAmount) {
320
- var index = me.vulnerabilityRng.intBetween(0, 6);
321
- var req = types_1.VulnerabilityRequirementList[index];
322
- if (!required.includes(req)) {
323
- required.push(req);
324
- }
325
- }
326
- var userType = me.vulnerabilityRng.intBetween(0, 5);
327
- switch (userType) {
328
- case 0:
329
- user = types_1.VulnerabilityActionUser.ROOT;
330
- break;
331
- case 1:
332
- case 2:
333
- user = types_1.VulnerabilityActionUser.NORMAL;
334
- break;
335
- default:
336
- user = types_1.VulnerabilityActionUser.GUEST;
337
- break;
338
- }
339
- return {
340
- required: required,
341
- memAddress: memAddress,
342
- sector: me.vulnerabilityRng.random().toString(36).substring(2, 12),
343
- details: 'loop in array',
344
- remote: remote,
345
- library: library,
346
- action: action,
347
- user: user,
348
- folder: ['home', 'guest']
90
+ computer: computer,
91
+ port: computer.ports.get(port)
349
92
  };
350
93
  };
351
- MockEnvironment.prototype.generateSectorVulnerabilities = function (library, sector, remote) {
352
- var _a;
353
- var me = this;
354
- var vulAmount = me.vulnerabilityRng.intBetween(1, 4);
355
- var result = [];
356
- for (var index = vulAmount; index >= 0; index--) {
357
- result.push(me.generateVulnerability(library, sector, remote));
358
- }
359
- (_a = this.vulnerabilities).push.apply(_a, __spreadArray([], __read(result), false));
360
- return result;
361
- };
362
- MockEnvironment.prototype.generateVulnerabilitiesForLibrary = function (library, options) {
363
- if (options === void 0) { options = {}; }
364
- var me = this;
365
- var address = me.generateVulnerabilityAddress();
366
- for (var amount = me.vulnerabilityRng.intBetween(2, 5); amount >= 0; amount--) {
367
- if (options.remote)
368
- me.generateSectorVulnerabilities(library, address, true);
369
- if (options.local)
370
- me.generateSectorVulnerabilities(library, address, false);
371
- address =
372
- me.vulnerabilityRng.intBetween(0, 3) === 1
373
- ? me.generateVulnerabilityAddress()
374
- : address;
375
- }
376
- };
377
94
  MockEnvironment.prototype.setupLibraries = function () {
378
95
  var me = this;
379
- me.generateVulnerabilitiesForLibrary(types_1.Library.CRYPTO, { local: true });
380
- me.generateVulnerabilitiesForLibrary(types_1.Library.FTP, {
96
+ var vulnerabilityGenerator = me.vulnerabilityGenerator;
97
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.CRYPTO, {
98
+ local: true
99
+ });
100
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.FTP, {
381
101
  local: true,
382
102
  remote: true
383
103
  });
384
- me.generateVulnerabilitiesForLibrary(types_1.Library.HTTP, {
104
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.HTTP, {
385
105
  local: true,
386
106
  remote: true
387
107
  });
388
- me.generateVulnerabilitiesForLibrary(types_1.Library.INIT, { local: true });
389
- me.generateVulnerabilitiesForLibrary(types_1.Library.KERNEL_MODULE, {
108
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.INIT, {
109
+ local: true
110
+ });
111
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.KERNEL_MODULE, {
390
112
  local: true
391
113
  });
392
- me.generateVulnerabilitiesForLibrary(types_1.Library.KERNEL_ROUTER, {
114
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.KERNEL_ROUTER, {
393
115
  remote: true
394
116
  });
395
- me.generateVulnerabilitiesForLibrary(types_1.Library.METAXPLOIT, { local: true });
396
- me.generateVulnerabilitiesForLibrary(types_1.Library.NET, { local: true });
397
- me.generateVulnerabilitiesForLibrary(types_1.Library.RSHELL, {
117
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.METAXPLOIT, { local: true });
118
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.NET, {
119
+ local: true
120
+ });
121
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.RSHELL, {
398
122
  local: true,
399
123
  remote: true
400
124
  });
401
- me.generateVulnerabilitiesForLibrary(types_1.Library.SMTP, {
125
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.SMTP, {
402
126
  local: true,
403
127
  remote: true
404
128
  });
405
- me.generateVulnerabilitiesForLibrary(types_1.Library.SQL, {
129
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.SQL, {
406
130
  local: true,
407
131
  remote: true
408
132
  });
409
- me.generateVulnerabilitiesForLibrary(types_1.Library.SSH, {
133
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.SSH, {
410
134
  local: true,
411
135
  remote: true
412
136
  });
@@ -420,19 +144,57 @@ var MockEnvironment = /** @class */ (function () {
420
144
  };
421
145
  };
422
146
  MockEnvironment.prototype.connectLocal = function (router) {
423
- this.localComputer.router = router;
147
+ var me = this;
148
+ var serverMap = me.networkGenerator.serverMap;
149
+ if (!serverMap.has(router.publicIp)) {
150
+ throw new Error("Router with ip ".concat(router.publicIp, " is unknown in serverMap."));
151
+ }
152
+ var localComputer = me.localComputer;
153
+ if (localComputer.router) {
154
+ localComputer.router.devices.delete(localComputer.localIp);
155
+ }
156
+ var serverMapGenerator = serverMap.get(router.publicIp);
157
+ var localIp = serverMapGenerator.generateLocalIp(router);
158
+ localComputer.router = router;
159
+ localComputer.localIp = localIp;
160
+ router.devices.set(localIp, localComputer);
424
161
  };
425
162
  MockEnvironment.prototype.getRouterByIp = function (ipAddress) {
426
163
  var me = this;
427
- if (!me.isValidIp(ipAddress)) {
164
+ if ((0, utils_1.isValidIp)(ipAddress)) {
428
165
  return null;
429
166
  }
430
- return (me.routers.find(function (item) {
431
- return item.publicIp === ipAddress;
432
- }) ||
433
- me.generateRouter({
434
- publicIp: ipAddress
435
- }));
167
+ var serverMap = me.networkGenerator.serverMap;
168
+ if (serverMap.has(ipAddress)) {
169
+ return serverMap.get(ipAddress).router;
170
+ }
171
+ return me.networkGenerator.generateRouter({
172
+ publicIp: ipAddress
173
+ });
174
+ };
175
+ MockEnvironment.prototype.getSwitchByIp = function (ipAddress) {
176
+ var e_1, _a;
177
+ var me = this;
178
+ if (!(0, utils_1.isValidIp)(ipAddress) || !(0, utils_1.isLanIp)(ipAddress)) {
179
+ return null;
180
+ }
181
+ var localRouter = me.localComputer.router;
182
+ try {
183
+ for (var _b = __values(localRouter.devices), _c = _b.next(); !_c.done; _c = _b.next()) {
184
+ var _d = __read(_c.value, 2), localIp = _d[0], device = _d[1];
185
+ if (localIp === ipAddress && device instanceof types_1.Switch) {
186
+ return device;
187
+ }
188
+ }
189
+ }
190
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
191
+ finally {
192
+ try {
193
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
194
+ }
195
+ finally { if (e_1) throw e_1.error; }
196
+ }
197
+ return null;
436
198
  };
437
199
  MockEnvironment.prototype.getComputersOfRouterByIp = function (ipAddress) {
438
200
  var me = this;
@@ -440,29 +202,26 @@ var MockEnvironment = /** @class */ (function () {
440
202
  if (!router) {
441
203
  return [];
442
204
  }
443
- return me.computers.filter(function (v) {
444
- return v.router.publicIp === router.publicIp;
445
- });
205
+ var devices = Array.from(router.devices.values());
206
+ return devices.filter(function (d) { return d instanceof types_1.Computer; });
446
207
  };
447
208
  MockEnvironment.prototype.findRouterViaNS = function (name) {
448
209
  var me = this;
449
- return me.routers.find(function (item) {
210
+ var serverMap = me.networkGenerator.serverMap;
211
+ var routers = Array.from(serverMap.values()).map(function (g) { return g.router; });
212
+ return routers.find(function (item) {
450
213
  return item.domain === name;
451
214
  });
452
215
  };
453
216
  MockEnvironment.prototype.getEmailViaLogin = function (email, password) {
454
217
  var me = this;
455
- return me.emails.find(function (v) { return v.email === email && v.password === password; });
218
+ var emails = me.emailGenerator.emails;
219
+ return emails.find(function (v) { return v.email === email && v.password === password; });
456
220
  };
457
221
  MockEnvironment.prototype.getEmail = function (email) {
458
222
  var me = this;
459
- return me.emails.find(function (v) { return v.email === email; });
460
- };
461
- MockEnvironment.prototype.isValidIp = function (target) {
462
- return /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(target);
463
- };
464
- MockEnvironment.prototype.isLanIp = function (target) {
465
- return /^1(0|27|69\.254|72\.(1[6-9]|2[0-9]|3[0-1])|92\.168)\./.test(target);
223
+ var emails = me.emailGenerator.emails;
224
+ return emails.find(function (v) { return v.email === email; });
466
225
  };
467
226
  return MockEnvironment;
468
227
  }());