greybel-mock-environment 1.0.3 → 1.0.4

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 +12 -47
  3. package/dist/environment.js +114 -367
  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,25 @@
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
- getForwardedPortOfRouter(router: Router, port: number): {
39
- computer: Computer;
40
- port: Port;
41
- } | 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
23
  setupLibraries(): void;
58
24
  getLocal(): {
59
25
  computer: Computer;
@@ -61,10 +27,9 @@ export default class MockEnvironment {
61
27
  };
62
28
  connectLocal(router: Router): void;
63
29
  getRouterByIp(ipAddress: string): Router | null;
30
+ getSwitchByIp(ipAddress: string): Switch | null;
64
31
  getComputersOfRouterByIp(ipAddress: string): Computer[];
65
32
  findRouterViaNS(name: string): Router;
66
33
  getEmailViaLogin(email: string, password: string): EMail | null;
67
34
  getEmail(email: string): EMail | null;
68
- isValidIp(target: string): boolean;
69
- isLanIp(target: string): boolean;
70
35
  }
@@ -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,55 @@ 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
- MockEnvironment.prototype.getForwardedPortOfRouter = function (router, port) {
194
- var e_1, _a, e_2, _b;
195
- 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) {
237
- return null;
238
- }
239
- 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']
349
- };
350
- };
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
82
  MockEnvironment.prototype.setupLibraries = function () {
378
83
  var me = this;
379
- me.generateVulnerabilitiesForLibrary(types_1.Library.CRYPTO, { local: true });
380
- me.generateVulnerabilitiesForLibrary(types_1.Library.FTP, {
84
+ var vulnerabilityGenerator = me.vulnerabilityGenerator;
85
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.CRYPTO, {
86
+ local: true
87
+ });
88
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.FTP, {
381
89
  local: true,
382
90
  remote: true
383
91
  });
384
- me.generateVulnerabilitiesForLibrary(types_1.Library.HTTP, {
92
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.HTTP, {
385
93
  local: true,
386
94
  remote: true
387
95
  });
388
- me.generateVulnerabilitiesForLibrary(types_1.Library.INIT, { local: true });
389
- me.generateVulnerabilitiesForLibrary(types_1.Library.KERNEL_MODULE, {
96
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.INIT, {
97
+ local: true
98
+ });
99
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.KERNEL_MODULE, {
390
100
  local: true
391
101
  });
392
- me.generateVulnerabilitiesForLibrary(types_1.Library.KERNEL_ROUTER, {
102
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.KERNEL_ROUTER, {
393
103
  remote: true
394
104
  });
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, {
105
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.METAXPLOIT, { local: true });
106
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.NET, {
107
+ local: true
108
+ });
109
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.RSHELL, {
398
110
  local: true,
399
111
  remote: true
400
112
  });
401
- me.generateVulnerabilitiesForLibrary(types_1.Library.SMTP, {
113
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.SMTP, {
402
114
  local: true,
403
115
  remote: true
404
116
  });
405
- me.generateVulnerabilitiesForLibrary(types_1.Library.SQL, {
117
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.SQL, {
406
118
  local: true,
407
119
  remote: true
408
120
  });
409
- me.generateVulnerabilitiesForLibrary(types_1.Library.SSH, {
121
+ vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.SSH, {
410
122
  local: true,
411
123
  remote: true
412
124
  });
@@ -420,19 +132,57 @@ var MockEnvironment = /** @class */ (function () {
420
132
  };
421
133
  };
422
134
  MockEnvironment.prototype.connectLocal = function (router) {
423
- this.localComputer.router = router;
135
+ var me = this;
136
+ var serverMap = me.networkGenerator.serverMap;
137
+ if (!serverMap.has(router.publicIp)) {
138
+ throw new Error("Router with ip ".concat(router.publicIp, " is unknown in serverMap."));
139
+ }
140
+ var localComputer = me.localComputer;
141
+ if (localComputer.router) {
142
+ localComputer.router.devices.delete(localComputer.localIp);
143
+ }
144
+ var serverMapGenerator = serverMap.get(router.publicIp);
145
+ var localIp = serverMapGenerator.generateLocalIp(router);
146
+ localComputer.router = router;
147
+ localComputer.localIp = localIp;
148
+ router.devices.set(localIp, localComputer);
424
149
  };
425
150
  MockEnvironment.prototype.getRouterByIp = function (ipAddress) {
426
151
  var me = this;
427
- if (!me.isValidIp(ipAddress)) {
152
+ if ((0, utils_1.isValidIp)(ipAddress)) {
153
+ return null;
154
+ }
155
+ var serverMap = me.networkGenerator.serverMap;
156
+ if (serverMap.has(ipAddress)) {
157
+ return serverMap.get(ipAddress).router;
158
+ }
159
+ return me.networkGenerator.generateRouter({
160
+ publicIp: ipAddress
161
+ });
162
+ };
163
+ MockEnvironment.prototype.getSwitchByIp = function (ipAddress) {
164
+ var e_1, _a;
165
+ var me = this;
166
+ if (!(0, utils_1.isValidIp)(ipAddress) || !(0, utils_1.isLanIp)(ipAddress)) {
428
167
  return null;
429
168
  }
430
- return (me.routers.find(function (item) {
431
- return item.publicIp === ipAddress;
432
- }) ||
433
- me.generateRouter({
434
- publicIp: ipAddress
435
- }));
169
+ var localRouter = me.localComputer.router;
170
+ try {
171
+ for (var _b = __values(localRouter.devices), _c = _b.next(); !_c.done; _c = _b.next()) {
172
+ var _d = __read(_c.value, 2), localIp = _d[0], device = _d[1];
173
+ if (localIp === ipAddress && device instanceof types_1.Switch) {
174
+ return device;
175
+ }
176
+ }
177
+ }
178
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
179
+ finally {
180
+ try {
181
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
182
+ }
183
+ finally { if (e_1) throw e_1.error; }
184
+ }
185
+ return null;
436
186
  };
437
187
  MockEnvironment.prototype.getComputersOfRouterByIp = function (ipAddress) {
438
188
  var me = this;
@@ -440,29 +190,26 @@ var MockEnvironment = /** @class */ (function () {
440
190
  if (!router) {
441
191
  return [];
442
192
  }
443
- return me.computers.filter(function (v) {
444
- return v.router.publicIp === router.publicIp;
445
- });
193
+ var devices = Array.from(router.devices.values());
194
+ return devices.filter(function (d) { return d instanceof types_1.Computer; });
446
195
  };
447
196
  MockEnvironment.prototype.findRouterViaNS = function (name) {
448
197
  var me = this;
449
- return me.routers.find(function (item) {
198
+ var serverMap = me.networkGenerator.serverMap;
199
+ var routers = Array.from(serverMap.values()).map(function (g) { return g.router; });
200
+ return routers.find(function (item) {
450
201
  return item.domain === name;
451
202
  });
452
203
  };
453
204
  MockEnvironment.prototype.getEmailViaLogin = function (email, password) {
454
205
  var me = this;
455
- return me.emails.find(function (v) { return v.email === email && v.password === password; });
206
+ var emails = me.emailGenerator.emails;
207
+ return emails.find(function (v) { return v.email === email && v.password === password; });
456
208
  };
457
209
  MockEnvironment.prototype.getEmail = function (email) {
458
210
  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);
211
+ var emails = me.emailGenerator.emails;
212
+ return emails.find(function (v) { return v.email === email; });
466
213
  };
467
214
  return MockEnvironment;
468
215
  }());
@@ -0,0 +1,19 @@
1
+ import { RandomSeed } from 'random-seed';
2
+ export interface BasicGeneratorOptions {
3
+ seed: string;
4
+ }
5
+ export default class BasicGenerator {
6
+ passwordRng: RandomSeed;
7
+ usernameRng: RandomSeed;
8
+ tldRng: RandomSeed;
9
+ bankIdRng: RandomSeed;
10
+ macAddressRng: RandomSeed;
11
+ uuidRng: RandomSeed;
12
+ constructor({ seed }: BasicGeneratorOptions);
13
+ generateDomain(): string;
14
+ generateUsername(): string;
15
+ generatePassword(): string;
16
+ generateBankNumber(): string;
17
+ generateMAC(): string;
18
+ generateUUID(): string;
19
+ }