greybel-mock-environment 1.0.9 → 1.1.0

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.
package/dist/fs.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ import * as Type from './types';
2
+ export declare function getUserFolder(parent: Type.FSEntity, user: string): Type.Folder;
3
+ export declare function getDefaultFileSystem(users: Type.User[]): Type.Folder;
4
+ export interface PermissionSegment {
5
+ x: boolean;
6
+ w: boolean;
7
+ r: boolean;
8
+ }
9
+ export interface PermissionMap {
10
+ u: PermissionSegment;
11
+ g: PermissionSegment;
12
+ o: PermissionSegment;
13
+ }
14
+ export declare function getPermissionSegmentValueByString(flag: PermissionSegment, flagType: string): boolean;
15
+ export declare function setPermissionSegmentValueByString(flag: PermissionSegment, flagType: string, value: boolean): void;
16
+ export declare function getPermissionSegmentByString(flag: PermissionMap, userType: string): PermissionSegment;
17
+ export declare function transformFlagsToPermissions(permissionMap: PermissionMap): string;
18
+ export declare function parsePermissions(file: Type.FSEntity): PermissionMap;
19
+ export declare function getPermissions(user: Type.User, file: Type.FSEntity): PermissionSegment;
20
+ export declare function getFile(entity: Type.FSEntity, path: string[]): Type.FSEntity | null;
21
+ export declare function hasFile(folder: Type.Folder, fileName: string): boolean;
22
+ export declare function getFileIndex(folder: Type.Folder, fileName: string): {
23
+ isFolder: boolean;
24
+ index: number;
25
+ };
26
+ export declare function putFile(folder: Type.Folder, file: Type.File): void;
27
+ export declare function removeFile(folder: Type.Folder, fileName: string): boolean;
28
+ export declare function traverseChildren(entity: Type.FSEntity, callback: (v: Type.FSEntity) => void, skip?: boolean): void;
29
+ export declare function copyFile(entity: Type.FSEntity, parent: Type.FSEntity): Type.FSEntity;
30
+ export declare function getHomePath(user: Type.User, computer: Type.Computer): string[] | null;
31
+ export declare function getFilePath(entity: Type.FSEntity): string[] | null;
32
+ export declare function getTraversalPath(path: string | null, currentLocation: string[] | null): null | string[];
33
+ export declare function getFileLibrary(file: Type.File): Type.Library | null;
34
+ export declare function getServiceLibrary(service: Type.Service): Type.Library | null;
35
+ export declare function getUserByVulnerability(vulActionUser: Type.VulnerabilityActionUser, computer: Type.Computer): Type.User;
36
+ export declare function changePassword(computer: Type.Computer, username: string, password: string): boolean;
package/dist/fs.js ADDED
@@ -0,0 +1,784 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __read = (this && this.__read) || function (o, n) {
26
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
27
+ if (!m) return o;
28
+ var i = m.call(o), r, ar = [], e;
29
+ try {
30
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
31
+ }
32
+ catch (error) { e = { error: error }; }
33
+ finally {
34
+ try {
35
+ if (r && !r.done && (m = i["return"])) m.call(i);
36
+ }
37
+ finally { if (e) throw e.error; }
38
+ }
39
+ return ar;
40
+ };
41
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
42
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
43
+ if (ar || !(i in from)) {
44
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
45
+ ar[i] = from[i];
46
+ }
47
+ }
48
+ return to.concat(ar || Array.prototype.slice.call(from));
49
+ };
50
+ var __importDefault = (this && this.__importDefault) || function (mod) {
51
+ return (mod && mod.__esModule) ? mod : { "default": mod };
52
+ };
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.changePassword = exports.getUserByVulnerability = exports.getServiceLibrary = exports.getFileLibrary = exports.getTraversalPath = exports.getFilePath = exports.getHomePath = exports.copyFile = exports.traverseChildren = exports.removeFile = exports.putFile = exports.getFileIndex = exports.hasFile = exports.getFile = exports.getPermissions = exports.parsePermissions = exports.transformFlagsToPermissions = exports.getPermissionSegmentByString = exports.setPermissionSegmentValueByString = exports.getPermissionSegmentValueByString = exports.getDefaultFileSystem = exports.getUserFolder = void 0;
55
+ var blueimp_md5_1 = __importDefault(require("blueimp-md5"));
56
+ var Type = __importStar(require("./types"));
57
+ function getEtcAptFiles(parent) {
58
+ return [
59
+ {
60
+ name: 'sources.txt',
61
+ permissions: '-rw-r-----',
62
+ owner: 'root',
63
+ content: "{\n\t\t\t\"official_server\": true,\n\t\t\t\"sourceList\": {}\n\t\t}",
64
+ type: Type.FileType.Plain,
65
+ parent: parent
66
+ }
67
+ ];
68
+ }
69
+ function getEtcAptFolder(parent) {
70
+ var aptFolder = {
71
+ name: 'apt',
72
+ permissions: 'drwxr-x---',
73
+ owner: 'root',
74
+ isFolder: true,
75
+ folders: [],
76
+ files: [],
77
+ parent: parent
78
+ };
79
+ aptFolder.files = getEtcAptFiles(aptFolder);
80
+ return aptFolder;
81
+ }
82
+ function getEtcFiles(parent, users) {
83
+ return [
84
+ {
85
+ name: 'passwd',
86
+ permissions: '-rw-r-----',
87
+ owner: 'root',
88
+ content: users.map(function (v) { return "".concat(v.username, ":").concat(v.passwordHashed); }).join('\n'),
89
+ type: Type.FileType.Plain,
90
+ parent: parent
91
+ },
92
+ {
93
+ name: 'xorg.conf',
94
+ permissions: '-rw-r-----',
95
+ owner: 'root',
96
+ content: "",
97
+ type: Type.FileType.Plain,
98
+ parent: parent
99
+ },
100
+ {
101
+ name: 'fstab',
102
+ permissions: '-rw-r-----',
103
+ owner: 'root',
104
+ content: "",
105
+ type: Type.FileType.Plain,
106
+ parent: parent
107
+ }
108
+ ];
109
+ }
110
+ function getEtcFolder(parent, users) {
111
+ var etcFolder = {
112
+ name: 'etc',
113
+ permissions: 'drwxr-x---',
114
+ owner: 'root',
115
+ isFolder: true,
116
+ folders: [],
117
+ files: [],
118
+ parent: parent
119
+ };
120
+ etcFolder.folders = [getEtcAptFolder(etcFolder)];
121
+ etcFolder.files = getEtcFiles(etcFolder, users);
122
+ return etcFolder;
123
+ }
124
+ function getLibFiles(parent) {
125
+ return [
126
+ {
127
+ name: 'init.so',
128
+ permissions: '-rw-r-----',
129
+ owner: 'root',
130
+ type: Type.FileType.Init,
131
+ parent: parent
132
+ },
133
+ {
134
+ name: 'kernel_module.so',
135
+ permissions: '-rw-r-----',
136
+ owner: 'root',
137
+ type: Type.FileType.KernelModule,
138
+ parent: parent
139
+ },
140
+ {
141
+ name: 'net.so',
142
+ permissions: '-rw-r-----',
143
+ owner: 'root',
144
+ type: Type.FileType.Net,
145
+ parent: parent
146
+ },
147
+ {
148
+ name: 'aptclient.so',
149
+ permissions: '-rw-r--r--',
150
+ owner: 'root',
151
+ type: Type.FileType.AptClient,
152
+ parent: parent
153
+ },
154
+ {
155
+ name: 'crypto.so',
156
+ permissions: '-rw-r--r--',
157
+ owner: 'root',
158
+ type: Type.FileType.Crypto,
159
+ parent: parent
160
+ },
161
+ {
162
+ name: 'metaxploit.so',
163
+ permissions: '-rw-r--r--',
164
+ owner: 'root',
165
+ type: Type.FileType.Metaxploit,
166
+ parent: parent
167
+ },
168
+ {
169
+ name: 'blockchain.so',
170
+ permissions: '-rw-r--r--',
171
+ owner: 'root',
172
+ type: Type.FileType.Blockchain,
173
+ parent: parent
174
+ },
175
+ {
176
+ name: 'ssh.so',
177
+ permissions: '-rw-r--r--',
178
+ owner: 'root',
179
+ type: Type.FileType.SSH,
180
+ parent: parent
181
+ },
182
+ {
183
+ name: 'ftp.so',
184
+ permissions: '-rw-r--r--',
185
+ owner: 'root',
186
+ type: Type.FileType.FTP,
187
+ parent: parent
188
+ },
189
+ {
190
+ name: 'http.so',
191
+ permissions: '-rw-r--r--',
192
+ owner: 'root',
193
+ type: Type.FileType.HTTP,
194
+ parent: parent
195
+ },
196
+ {
197
+ name: 'chat.so',
198
+ permissions: '-rw-r--r--',
199
+ owner: 'root',
200
+ type: Type.FileType.Chat,
201
+ parent: parent
202
+ },
203
+ {
204
+ name: 'rshell.so',
205
+ permissions: '-rw-r--r--',
206
+ owner: 'root',
207
+ type: Type.FileType.RShell,
208
+ parent: parent
209
+ },
210
+ {
211
+ name: 'repository.so',
212
+ permissions: '-rw-r--r--',
213
+ owner: 'root',
214
+ type: Type.FileType.Repository,
215
+ parent: parent
216
+ }
217
+ ];
218
+ }
219
+ function getLibFolder(parent) {
220
+ var libFolder = {
221
+ name: 'lib',
222
+ permissions: 'drwxrwx---',
223
+ owner: 'root',
224
+ isFolder: true,
225
+ folders: [],
226
+ files: [],
227
+ parent: parent
228
+ };
229
+ libFolder.files = getLibFiles(libFolder);
230
+ return libFolder;
231
+ }
232
+ function getSysFiles(parent) {
233
+ return [
234
+ {
235
+ name: 'xorg.sys',
236
+ permissions: '-r-x------',
237
+ owner: 'root',
238
+ type: Type.FileType.System,
239
+ parent: parent
240
+ },
241
+ {
242
+ name: 'config.sys',
243
+ permissions: '-rw-------',
244
+ owner: 'root',
245
+ type: Type.FileType.System,
246
+ parent: parent
247
+ },
248
+ {
249
+ name: 'network.cfg',
250
+ permissions: '-rw-------',
251
+ owner: 'root',
252
+ type: Type.FileType.System,
253
+ parent: parent
254
+ }
255
+ ];
256
+ }
257
+ function getSysFolder(parent) {
258
+ var sysFolder = {
259
+ name: 'sys',
260
+ permissions: 'drwxr-xr-x',
261
+ owner: 'root',
262
+ isFolder: true,
263
+ folders: [],
264
+ files: [],
265
+ parent: parent
266
+ };
267
+ sysFolder.files = getSysFiles(sysFolder);
268
+ return sysFolder;
269
+ }
270
+ function getDefaultHomeFolders(parent, owner, permissions) {
271
+ return [
272
+ {
273
+ name: 'Desktop',
274
+ permissions: permissions,
275
+ owner: owner,
276
+ isFolder: true,
277
+ folders: [],
278
+ files: [],
279
+ parent: parent
280
+ },
281
+ {
282
+ name: 'Downloads',
283
+ permissions: permissions,
284
+ owner: owner,
285
+ isFolder: true,
286
+ folders: [],
287
+ files: [],
288
+ parent: parent
289
+ },
290
+ {
291
+ name: 'Config',
292
+ permissions: permissions,
293
+ owner: owner,
294
+ isFolder: true,
295
+ folders: [],
296
+ files: [],
297
+ parent: parent
298
+ },
299
+ {
300
+ name: '.Trash',
301
+ permissions: permissions,
302
+ owner: owner,
303
+ isFolder: true,
304
+ folders: [],
305
+ files: [],
306
+ parent: parent
307
+ }
308
+ ];
309
+ }
310
+ function getRootFolder(parent) {
311
+ var rootFolder = {
312
+ name: 'root',
313
+ permissions: 'drwxr-----',
314
+ owner: 'root',
315
+ isFolder: true,
316
+ folders: [],
317
+ files: [],
318
+ parent: parent
319
+ };
320
+ rootFolder.folders = getDefaultHomeFolders(rootFolder, 'root', 'drwxrwx---');
321
+ return rootFolder;
322
+ }
323
+ function getUserFolder(parent, user) {
324
+ var userFolder = {
325
+ name: user,
326
+ permissions: 'drwxr-----',
327
+ owner: user,
328
+ isFolder: true,
329
+ folders: [],
330
+ files: [],
331
+ parent: parent
332
+ };
333
+ userFolder.folders = getDefaultHomeFolders(userFolder, user, 'drwxrwx---');
334
+ return userFolder;
335
+ }
336
+ exports.getUserFolder = getUserFolder;
337
+ function getGuestFolder(parent) {
338
+ var guestFolder = {
339
+ name: 'guest',
340
+ permissions: 'drwxrwxrwx',
341
+ owner: 'guest',
342
+ isFolder: true,
343
+ folders: [],
344
+ files: [],
345
+ parent: parent
346
+ };
347
+ guestFolder.folders = getDefaultHomeFolders(guestFolder, 'guest', 'drwxrwxrwx');
348
+ return guestFolder;
349
+ }
350
+ function getHomeFolder(parent, users) {
351
+ var homeFolder = {
352
+ name: 'home',
353
+ permissions: 'drwxr-xr-x',
354
+ owner: 'root',
355
+ isFolder: true,
356
+ folders: [],
357
+ files: [],
358
+ parent: parent
359
+ };
360
+ homeFolder.folders = __spreadArray(__spreadArray([], __read(users
361
+ .filter(function (v) { return v.username !== 'root'; })
362
+ .map(function (v) { return getUserFolder(homeFolder, v.username); })), false), [
363
+ getGuestFolder(homeFolder)
364
+ ], false);
365
+ return homeFolder;
366
+ }
367
+ function getVarFolder(parent) {
368
+ return {
369
+ name: 'var',
370
+ permissions: 'drwxr-xr-x',
371
+ owner: 'root',
372
+ isFolder: true,
373
+ folders: [],
374
+ files: [],
375
+ parent: parent
376
+ };
377
+ }
378
+ function getBinFolder(parent) {
379
+ return {
380
+ name: 'bin',
381
+ permissions: 'drwxrwxr-x',
382
+ owner: 'root',
383
+ isFolder: true,
384
+ folders: [],
385
+ files: [],
386
+ parent: parent
387
+ };
388
+ }
389
+ function getUsrBinFolder(parent) {
390
+ return {
391
+ name: 'bin',
392
+ permissions: 'drwxrwxr-x',
393
+ owner: 'root',
394
+ isFolder: true,
395
+ folders: [],
396
+ files: [],
397
+ parent: parent
398
+ };
399
+ }
400
+ function getUsrFolder(parent) {
401
+ var usrFolder = {
402
+ name: 'usr',
403
+ permissions: 'drwxrwxr-x',
404
+ owner: 'root',
405
+ isFolder: true,
406
+ folders: [],
407
+ files: [],
408
+ parent: parent
409
+ };
410
+ usrFolder.folders = [getUsrBinFolder(usrFolder)];
411
+ return usrFolder;
412
+ }
413
+ function getBootFiles(parent) {
414
+ return [
415
+ {
416
+ name: 'System.map',
417
+ permissions: '-rw-------',
418
+ owner: 'root',
419
+ type: Type.FileType.System,
420
+ parent: parent
421
+ },
422
+ {
423
+ name: 'inittrd.img',
424
+ permissions: '-r--------',
425
+ owner: 'root',
426
+ type: Type.FileType.System,
427
+ parent: parent
428
+ },
429
+ {
430
+ name: 'kernel.img',
431
+ permissions: '-r--------',
432
+ owner: 'root',
433
+ type: Type.FileType.System,
434
+ parent: parent
435
+ }
436
+ ];
437
+ }
438
+ function getBootFolder(parent) {
439
+ var bootFolder = {
440
+ name: 'sys',
441
+ permissions: 'drwxr-xr-x',
442
+ owner: 'root',
443
+ isFolder: true,
444
+ folders: [],
445
+ files: [],
446
+ parent: parent
447
+ };
448
+ bootFolder.files = getBootFiles(bootFolder);
449
+ return bootFolder;
450
+ }
451
+ function getDefaultFileSystem(users) {
452
+ var defaultSystem = {
453
+ name: '',
454
+ permissions: 'drwxr--r--',
455
+ owner: 'root',
456
+ isFolder: true,
457
+ isProtected: true,
458
+ files: [],
459
+ folders: []
460
+ };
461
+ defaultSystem.folders = [
462
+ getEtcFolder(defaultSystem, users),
463
+ getLibFolder(defaultSystem),
464
+ getSysFolder(defaultSystem),
465
+ getRootFolder(defaultSystem),
466
+ getHomeFolder(defaultSystem, users),
467
+ getVarFolder(defaultSystem),
468
+ getBinFolder(defaultSystem),
469
+ getUsrFolder(defaultSystem),
470
+ getBootFolder(defaultSystem)
471
+ ];
472
+ return defaultSystem;
473
+ }
474
+ exports.getDefaultFileSystem = getDefaultFileSystem;
475
+ function getPermissionSegmentValueByString(flag, flagType) {
476
+ switch (flagType) {
477
+ case 'x':
478
+ return flag.x;
479
+ case 'w':
480
+ return flag.w;
481
+ case 'r':
482
+ return flag.r;
483
+ default:
484
+ throw new Error('Invalid permission flag type.');
485
+ }
486
+ }
487
+ exports.getPermissionSegmentValueByString = getPermissionSegmentValueByString;
488
+ function setPermissionSegmentValueByString(flag, flagType, value) {
489
+ switch (flagType) {
490
+ case 'x': {
491
+ flag.x = value;
492
+ break;
493
+ }
494
+ case 'w': {
495
+ flag.w = value;
496
+ break;
497
+ }
498
+ case 'r': {
499
+ flag.r = value;
500
+ break;
501
+ }
502
+ default:
503
+ throw new Error('Invalid permission flag type.');
504
+ }
505
+ }
506
+ exports.setPermissionSegmentValueByString = setPermissionSegmentValueByString;
507
+ function getPermissionSegmentByString(flag, userType) {
508
+ switch (userType) {
509
+ case 'u':
510
+ return flag.u;
511
+ case 'g':
512
+ return flag.g;
513
+ case 'o':
514
+ return flag.o;
515
+ default:
516
+ throw new Error('Invalid permission user type.');
517
+ }
518
+ }
519
+ exports.getPermissionSegmentByString = getPermissionSegmentByString;
520
+ function transformFlagsToPermissions(permissionMap) {
521
+ var segments = [
522
+ permissionMap.u,
523
+ permissionMap.g,
524
+ permissionMap.o
525
+ ].map(function (map) {
526
+ return "".concat(map.r ? 'r' : '-').concat(map.w ? 'w' : '-').concat(map.x ? 'x' : '-');
527
+ });
528
+ return segments.join('');
529
+ }
530
+ exports.transformFlagsToPermissions = transformFlagsToPermissions;
531
+ function parsePermissions(file) {
532
+ var permSegments = file.permissions.substr(1).match(/.{1,3}/g);
533
+ if (permSegments.length !== 3) {
534
+ throw Error('Invalid permissions.');
535
+ }
536
+ var _a = __read(permSegments, 3), u = _a[0], g = _a[1], o = _a[2];
537
+ return {
538
+ u: {
539
+ r: u[0] !== '-',
540
+ w: u[1] !== '-',
541
+ x: u[2] !== '-'
542
+ },
543
+ g: {
544
+ r: g[0] !== '-',
545
+ w: g[1] !== '-',
546
+ x: g[2] !== '-'
547
+ },
548
+ o: {
549
+ r: o[0] !== '-',
550
+ w: o[1] !== '-',
551
+ x: o[2] !== '-'
552
+ }
553
+ };
554
+ }
555
+ exports.parsePermissions = parsePermissions;
556
+ function getPermissions(user, file) {
557
+ // g is ignored for now
558
+ // todo: add group logic
559
+ var parsedPermissions = parsePermissions(file);
560
+ if (file.owner === user.username) {
561
+ return parsedPermissions.u;
562
+ }
563
+ return parsedPermissions.o;
564
+ }
565
+ exports.getPermissions = getPermissions;
566
+ function getFile(entity, path) {
567
+ if (!path || !entity.isFolder) {
568
+ return null;
569
+ }
570
+ if (path.length === 0) {
571
+ return entity;
572
+ }
573
+ var nextPath = [].concat(path);
574
+ var currentSegment = nextPath.shift();
575
+ var folder = entity;
576
+ var nextEntity = folder.files.find(function (item) { return item.name === currentSegment; }) ||
577
+ folder.folders.find(function (item) { return item.name === currentSegment; });
578
+ if (!nextEntity) {
579
+ return null;
580
+ }
581
+ if (nextPath.length === 0) {
582
+ return nextEntity;
583
+ }
584
+ return getFile(nextEntity, nextPath);
585
+ }
586
+ exports.getFile = getFile;
587
+ function hasFile(folder, fileName) {
588
+ return !!getFileIndex(folder, fileName);
589
+ }
590
+ exports.hasFile = hasFile;
591
+ function getFileIndex(folder, fileName) {
592
+ var fileIndex = folder.files.findIndex(function (item) { return item.name === fileName; });
593
+ if (fileIndex !== -1 && fileIndex !== undefined) {
594
+ return {
595
+ isFolder: false,
596
+ index: fileIndex
597
+ };
598
+ }
599
+ var folderIndex = folder.folders.findIndex(function (item) { return item.name === fileName; });
600
+ if (folderIndex !== -1 && folderIndex !== undefined) {
601
+ return {
602
+ isFolder: true,
603
+ index: folderIndex
604
+ };
605
+ }
606
+ return null;
607
+ }
608
+ exports.getFileIndex = getFileIndex;
609
+ function putFile(folder, file) {
610
+ removeFile(folder, file.name);
611
+ file.parent = folder;
612
+ folder.files.push(file);
613
+ }
614
+ exports.putFile = putFile;
615
+ function removeFile(folder, fileName) {
616
+ var result = getFileIndex(folder, fileName);
617
+ if (!result) {
618
+ return false;
619
+ }
620
+ var isFolder = result.isFolder, index = result.index;
621
+ var entity;
622
+ if (isFolder) {
623
+ entity = folder.folders[index];
624
+ entity.deleted = true;
625
+ folder.folders.splice(index, 1);
626
+ }
627
+ else {
628
+ entity = folder.files[index];
629
+ entity.deleted = true;
630
+ folder.files.splice(index, 1);
631
+ }
632
+ traverseChildren(entity, function (item) {
633
+ item.deleted = true;
634
+ });
635
+ return true;
636
+ }
637
+ exports.removeFile = removeFile;
638
+ function traverseChildren(entity, callback, skip) {
639
+ if (!entity.isFolder) {
640
+ return;
641
+ }
642
+ var folder = entity;
643
+ if (!skip) {
644
+ callback(entity);
645
+ }
646
+ folder.files.forEach(function (item) { return callback(item); });
647
+ folder.folders.forEach(function (item) {
648
+ return traverseChildren(item, callback);
649
+ });
650
+ }
651
+ exports.traverseChildren = traverseChildren;
652
+ function copyFile(entity, parent) {
653
+ var newEntity = {
654
+ name: entity.name,
655
+ permissions: entity.permissions,
656
+ owner: entity.owner,
657
+ isFolder: entity.isFolder,
658
+ parent: parent
659
+ };
660
+ if (entity.isFolder) {
661
+ var folder = entity;
662
+ var newFolder_1 = newEntity;
663
+ newFolder_1.files = folder.files.map(function (item) { return copyFile(item, newFolder_1); });
664
+ newFolder_1.folders = folder.folders.map(function (item) { return copyFile(item, newFolder_1); });
665
+ return newFolder_1;
666
+ }
667
+ var file = entity;
668
+ var newFile = newEntity;
669
+ newFile.content = file.content;
670
+ newFile.type = file.type;
671
+ return newFile;
672
+ }
673
+ exports.copyFile = copyFile;
674
+ function getHomePath(user, computer) {
675
+ var path;
676
+ switch (user.username) {
677
+ case 'root':
678
+ path = '/root';
679
+ break;
680
+ case 'guest':
681
+ path = '/home/guest';
682
+ break;
683
+ default:
684
+ path = '/home/' + user.username;
685
+ }
686
+ var traversalPath = getTraversalPath(path, []);
687
+ var folder = getFile(computer.fileSystem, traversalPath);
688
+ return folder ? traversalPath : null;
689
+ }
690
+ exports.getHomePath = getHomePath;
691
+ function getFilePath(entity) {
692
+ var path = [entity.name];
693
+ var current = entity.parent;
694
+ while (current && current.name !== '') {
695
+ path.unshift(current.name);
696
+ current = current.parent;
697
+ }
698
+ return path;
699
+ }
700
+ exports.getFilePath = getFilePath;
701
+ function getTraversalPath(path, currentLocation) {
702
+ if (!path) {
703
+ return null;
704
+ }
705
+ else if (path === '/') {
706
+ return [];
707
+ }
708
+ path = path.replace(/\/+$/i, '');
709
+ if (path.startsWith('/')) {
710
+ return path.substr(1).split('/');
711
+ }
712
+ if (currentLocation) {
713
+ return currentLocation.concat(path.split('/'));
714
+ }
715
+ return path.split('/');
716
+ }
717
+ exports.getTraversalPath = getTraversalPath;
718
+ function getFileLibrary(file) {
719
+ switch (file.type) {
720
+ case Type.FileType.AptClient:
721
+ return Type.Library.APT;
722
+ case Type.FileType.Crypto:
723
+ return Type.Library.CRYPTO;
724
+ case Type.FileType.Init:
725
+ return Type.Library.INIT;
726
+ case Type.FileType.KernelModule:
727
+ return Type.Library.KERNEL_MODULE;
728
+ case Type.FileType.Metaxploit:
729
+ return Type.Library.METAXPLOIT;
730
+ case Type.FileType.Net:
731
+ return Type.Library.NET;
732
+ default:
733
+ }
734
+ return null;
735
+ }
736
+ exports.getFileLibrary = getFileLibrary;
737
+ function getServiceLibrary(service) {
738
+ switch (service) {
739
+ case Type.Service.FTP:
740
+ return Type.Library.FTP;
741
+ case Type.Service.HTTP:
742
+ return Type.Library.HTTP;
743
+ case Type.Service.RSHELL:
744
+ return Type.Library.RSHELL;
745
+ case Type.Service.SMTP:
746
+ return Type.Library.SMTP;
747
+ case Type.Service.SQL:
748
+ return Type.Library.SQL;
749
+ case Type.Service.SSH:
750
+ return Type.Library.SSH;
751
+ default:
752
+ }
753
+ return null;
754
+ }
755
+ exports.getServiceLibrary = getServiceLibrary;
756
+ function getUserByVulnerability(vulActionUser, computer) {
757
+ switch (vulActionUser) {
758
+ case Type.VulnerabilityActionUser.NORMAL:
759
+ return computer.users[1];
760
+ case Type.VulnerabilityActionUser.ROOT:
761
+ return computer.users[0];
762
+ default:
763
+ }
764
+ return {
765
+ username: 'guest',
766
+ password: '',
767
+ passwordHashed: '',
768
+ email: '',
769
+ bankNumber: ''
770
+ };
771
+ }
772
+ exports.getUserByVulnerability = getUserByVulnerability;
773
+ function changePassword(computer, username, password) {
774
+ var user = computer.users.find(function (item) {
775
+ return item.username === username && item.password === password;
776
+ });
777
+ if (user) {
778
+ user.password = password;
779
+ user.passwordHashed = (0, blueimp_md5_1.default)(password);
780
+ return true;
781
+ }
782
+ return false;
783
+ }
784
+ exports.changePassword = changePassword;
@@ -30,7 +30,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
30
30
  Object.defineProperty(exports, "__esModule", { value: true });
31
31
  exports.ServerMapGenerator = void 0;
32
32
  var random_seed_1 = __importDefault(require("random-seed"));
33
- var default_fs_1 = require("../default-fs");
33
+ var fs_1 = require("../fs");
34
34
  var types_1 = require("../types");
35
35
  var ServerMapGenerator = /** @class */ (function () {
36
36
  function ServerMapGenerator(_a) {
@@ -70,7 +70,7 @@ var ServerMapGenerator = /** @class */ (function () {
70
70
  activeNetCard: options.activeNetCard || networkDevice.type,
71
71
  networkDevices: options.networkDevices || [networkDevice],
72
72
  users: options.users || switchUsers,
73
- fileSystem: options.fileSystem || (0, default_fs_1.getDefaultFileSystem)(switchUsers),
73
+ fileSystem: options.fileSystem || (0, fs_1.getDefaultFileSystem)(switchUsers),
74
74
  bssid: options.bssid || basicGenerator.generateUUID(),
75
75
  essid: options.essid || basicGenerator.generateUUID()
76
76
  });
@@ -97,7 +97,7 @@ var ServerMapGenerator = /** @class */ (function () {
97
97
  activeNetCard: networkDevice.type,
98
98
  networkDevices: [networkDevice],
99
99
  users: computerUsers,
100
- fileSystem: (0, default_fs_1.getDefaultFileSystem)(computerUsers)
100
+ fileSystem: (0, fs_1.getDefaultFileSystem)(computerUsers)
101
101
  });
102
102
  computer.ports = me.generatePorts(computer);
103
103
  router.devices.set(computer.localIp, computer);
@@ -161,7 +161,7 @@ var NetworkGenerator = /** @class */ (function () {
161
161
  activeNetCard: networkDevice.type,
162
162
  networkDevices: [networkDevice],
163
163
  users: computerUsers,
164
- fileSystem: (0, default_fs_1.getDefaultFileSystem)(computerUsers)
164
+ fileSystem: (0, fs_1.getDefaultFileSystem)(computerUsers)
165
165
  });
166
166
  return computer;
167
167
  };
@@ -192,7 +192,7 @@ var NetworkGenerator = /** @class */ (function () {
192
192
  activeNetCard: options.activeNetCard || networkDevice.type,
193
193
  networkDevices: options.networkDevices || [networkDevice],
194
194
  users: options.users || routerUsers,
195
- fileSystem: options.fileSystem || (0, default_fs_1.getDefaultFileSystem)(routerUsers),
195
+ fileSystem: options.fileSystem || (0, fs_1.getDefaultFileSystem)(routerUsers),
196
196
  bssid: options.bssid || basicGenerator.generateUUID(),
197
197
  essid: options.essid || basicGenerator.generateUUID()
198
198
  });
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export * as FS from './default-fs';
1
+ export * as FS from './fs';
2
2
  export { default as MockEnvironment } from './environment';
3
3
  export * as Generators from './generators';
4
4
  export * as Type from './types';
package/dist/index.js CHANGED
@@ -27,7 +27,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.isValidIp = exports.isLanIp = exports.Type = exports.Generators = exports.MockEnvironment = exports.FS = void 0;
30
- exports.FS = __importStar(require("./default-fs"));
30
+ exports.FS = __importStar(require("./fs"));
31
31
  var environment_1 = require("./environment");
32
32
  Object.defineProperty(exports, "MockEnvironment", { enumerable: true, get: function () { return __importDefault(environment_1).default; } });
33
33
  exports.Generators = __importStar(require("./generators"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "greybel-mock-environment",
3
- "version": "1.0.9",
3
+ "version": "1.1.0",
4
4
  "description": "Mock environment",
5
5
  "main": "dist/index",
6
6
  "typings": "dist/index",
@@ -1,3 +0,0 @@
1
- import { Folder, FSEntity, User } from './types';
2
- export declare function getUserFolder(parent: FSEntity, user: string): Folder;
3
- export declare function getDefaultFileSystem(users: User[]): Folder;
@@ -1,447 +0,0 @@
1
- "use strict";
2
- var __read = (this && this.__read) || function (o, n) {
3
- var m = typeof Symbol === "function" && o[Symbol.iterator];
4
- if (!m) return o;
5
- var i = m.call(o), r, ar = [], e;
6
- try {
7
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
- }
9
- catch (error) { e = { error: error }; }
10
- finally {
11
- try {
12
- if (r && !r.done && (m = i["return"])) m.call(i);
13
- }
14
- finally { if (e) throw e.error; }
15
- }
16
- return ar;
17
- };
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
- Object.defineProperty(exports, "__esModule", { value: true });
28
- exports.getDefaultFileSystem = exports.getUserFolder = void 0;
29
- var types_1 = require("./types");
30
- function getEtcAptFiles(parent) {
31
- return [
32
- {
33
- name: 'sources.txt',
34
- permissions: '-rw-r-----',
35
- owner: 'root',
36
- content: "{\n\t\t\t\"official_server\": true,\n\t\t\t\"sourceList\": {}\n\t\t}",
37
- type: types_1.FileType.Plain,
38
- parent: parent
39
- }
40
- ];
41
- }
42
- function getEtcAptFolder(parent) {
43
- var aptFolder = {
44
- name: 'apt',
45
- permissions: 'drwxr-x---',
46
- owner: 'root',
47
- isFolder: true,
48
- folders: [],
49
- files: [],
50
- parent: parent
51
- };
52
- aptFolder.files = getEtcAptFiles(aptFolder);
53
- return aptFolder;
54
- }
55
- function getEtcFiles(parent, users) {
56
- return [
57
- {
58
- name: 'passwd',
59
- permissions: '-rw-r-----',
60
- owner: 'root',
61
- content: users.map(function (v) { return "".concat(v.username, ":").concat(v.passwordHashed); }).join('\n'),
62
- type: types_1.FileType.Plain,
63
- parent: parent
64
- },
65
- {
66
- name: 'xorg.conf',
67
- permissions: '-rw-r-----',
68
- owner: 'root',
69
- content: "",
70
- type: types_1.FileType.Plain,
71
- parent: parent
72
- },
73
- {
74
- name: 'fstab',
75
- permissions: '-rw-r-----',
76
- owner: 'root',
77
- content: "",
78
- type: types_1.FileType.Plain,
79
- parent: parent
80
- }
81
- ];
82
- }
83
- function getEtcFolder(parent, users) {
84
- var etcFolder = {
85
- name: 'etc',
86
- permissions: 'drwxr-x---',
87
- owner: 'root',
88
- isFolder: true,
89
- folders: [],
90
- files: [],
91
- parent: parent
92
- };
93
- etcFolder.folders = [getEtcAptFolder(etcFolder)];
94
- etcFolder.files = getEtcFiles(etcFolder, users);
95
- return etcFolder;
96
- }
97
- function getLibFiles(parent) {
98
- return [
99
- {
100
- name: 'init.so',
101
- permissions: '-rw-r-----',
102
- owner: 'root',
103
- type: types_1.FileType.Init,
104
- parent: parent
105
- },
106
- {
107
- name: 'kernel_module.so',
108
- permissions: '-rw-r-----',
109
- owner: 'root',
110
- type: types_1.FileType.KernelModule,
111
- parent: parent
112
- },
113
- {
114
- name: 'net.so',
115
- permissions: '-rw-r-----',
116
- owner: 'root',
117
- type: types_1.FileType.Net,
118
- parent: parent
119
- },
120
- {
121
- name: 'aptclient.so',
122
- permissions: '-rw-r--r--',
123
- owner: 'root',
124
- type: types_1.FileType.AptClient,
125
- parent: parent
126
- },
127
- {
128
- name: 'crypto.so',
129
- permissions: '-rw-r--r--',
130
- owner: 'root',
131
- type: types_1.FileType.Crypto,
132
- parent: parent
133
- },
134
- {
135
- name: 'metaxploit.so',
136
- permissions: '-rw-r--r--',
137
- owner: 'root',
138
- type: types_1.FileType.Metaxploit,
139
- parent: parent
140
- },
141
- {
142
- name: 'blockchain.so',
143
- permissions: '-rw-r--r--',
144
- owner: 'root',
145
- type: types_1.FileType.Blockchain,
146
- parent: parent
147
- },
148
- {
149
- name: 'ssh.so',
150
- permissions: '-rw-r--r--',
151
- owner: 'root',
152
- type: types_1.FileType.SSH,
153
- parent: parent
154
- },
155
- {
156
- name: 'ftp.so',
157
- permissions: '-rw-r--r--',
158
- owner: 'root',
159
- type: types_1.FileType.FTP,
160
- parent: parent
161
- },
162
- {
163
- name: 'http.so',
164
- permissions: '-rw-r--r--',
165
- owner: 'root',
166
- type: types_1.FileType.HTTP,
167
- parent: parent
168
- },
169
- {
170
- name: 'chat.so',
171
- permissions: '-rw-r--r--',
172
- owner: 'root',
173
- type: types_1.FileType.Chat,
174
- parent: parent
175
- },
176
- {
177
- name: 'rshell.so',
178
- permissions: '-rw-r--r--',
179
- owner: 'root',
180
- type: types_1.FileType.RShell,
181
- parent: parent
182
- },
183
- {
184
- name: 'repository.so',
185
- permissions: '-rw-r--r--',
186
- owner: 'root',
187
- type: types_1.FileType.Repository,
188
- parent: parent
189
- }
190
- ];
191
- }
192
- function getLibFolder(parent) {
193
- var libFolder = {
194
- name: 'lib',
195
- permissions: 'drwxrwx---',
196
- owner: 'root',
197
- isFolder: true,
198
- folders: [],
199
- files: [],
200
- parent: parent
201
- };
202
- libFolder.files = getLibFiles(libFolder);
203
- return libFolder;
204
- }
205
- function getSysFiles(parent) {
206
- return [
207
- {
208
- name: 'xorg.sys',
209
- permissions: '-r-x------',
210
- owner: 'root',
211
- type: types_1.FileType.System,
212
- parent: parent
213
- },
214
- {
215
- name: 'config.sys',
216
- permissions: '-rw-------',
217
- owner: 'root',
218
- type: types_1.FileType.System,
219
- parent: parent
220
- },
221
- {
222
- name: 'network.cfg',
223
- permissions: '-rw-------',
224
- owner: 'root',
225
- type: types_1.FileType.System,
226
- parent: parent
227
- }
228
- ];
229
- }
230
- function getSysFolder(parent) {
231
- var sysFolder = {
232
- name: 'sys',
233
- permissions: 'drwxr-xr-x',
234
- owner: 'root',
235
- isFolder: true,
236
- folders: [],
237
- files: [],
238
- parent: parent
239
- };
240
- sysFolder.files = getSysFiles(sysFolder);
241
- return sysFolder;
242
- }
243
- function getDefaultHomeFolders(parent, owner, permissions) {
244
- return [
245
- {
246
- name: 'Desktop',
247
- permissions: permissions,
248
- owner: owner,
249
- isFolder: true,
250
- folders: [],
251
- files: [],
252
- parent: parent
253
- },
254
- {
255
- name: 'Downloads',
256
- permissions: permissions,
257
- owner: owner,
258
- isFolder: true,
259
- folders: [],
260
- files: [],
261
- parent: parent
262
- },
263
- {
264
- name: 'Config',
265
- permissions: permissions,
266
- owner: owner,
267
- isFolder: true,
268
- folders: [],
269
- files: [],
270
- parent: parent
271
- },
272
- {
273
- name: '.Trash',
274
- permissions: permissions,
275
- owner: owner,
276
- isFolder: true,
277
- folders: [],
278
- files: [],
279
- parent: parent
280
- }
281
- ];
282
- }
283
- function getRootFolder(parent) {
284
- var rootFolder = {
285
- name: 'root',
286
- permissions: 'drwxr-----',
287
- owner: 'root',
288
- isFolder: true,
289
- folders: [],
290
- files: [],
291
- parent: parent
292
- };
293
- rootFolder.folders = getDefaultHomeFolders(rootFolder, 'root', 'drwxrwx---');
294
- return rootFolder;
295
- }
296
- function getUserFolder(parent, user) {
297
- var userFolder = {
298
- name: user,
299
- permissions: 'drwxr-----',
300
- owner: user,
301
- isFolder: true,
302
- folders: [],
303
- files: [],
304
- parent: parent
305
- };
306
- userFolder.folders = getDefaultHomeFolders(userFolder, user, 'drwxrwx---');
307
- return userFolder;
308
- }
309
- exports.getUserFolder = getUserFolder;
310
- function getGuestFolder(parent) {
311
- var guestFolder = {
312
- name: 'guest',
313
- permissions: 'drwxrwxrwx',
314
- owner: 'guest',
315
- isFolder: true,
316
- folders: [],
317
- files: [],
318
- parent: parent
319
- };
320
- guestFolder.folders = getDefaultHomeFolders(guestFolder, 'guest', 'drwxrwxrwx');
321
- return guestFolder;
322
- }
323
- function getHomeFolder(parent, users) {
324
- var homeFolder = {
325
- name: 'home',
326
- permissions: 'drwxr-xr-x',
327
- owner: 'root',
328
- isFolder: true,
329
- folders: [],
330
- files: [],
331
- parent: parent
332
- };
333
- homeFolder.folders = __spreadArray(__spreadArray([], __read(users
334
- .filter(function (v) { return v.username !== 'root'; })
335
- .map(function (v) { return getUserFolder(homeFolder, v.username); })), false), [
336
- getGuestFolder(homeFolder)
337
- ], false);
338
- return homeFolder;
339
- }
340
- function getVarFolder(parent) {
341
- return {
342
- name: 'var',
343
- permissions: 'drwxr-xr-x',
344
- owner: 'root',
345
- isFolder: true,
346
- folders: [],
347
- files: [],
348
- parent: parent
349
- };
350
- }
351
- function getBinFolder(parent) {
352
- return {
353
- name: 'bin',
354
- permissions: 'drwxrwxr-x',
355
- owner: 'root',
356
- isFolder: true,
357
- folders: [],
358
- files: [],
359
- parent: parent
360
- };
361
- }
362
- function getUsrBinFolder(parent) {
363
- return {
364
- name: 'bin',
365
- permissions: 'drwxrwxr-x',
366
- owner: 'root',
367
- isFolder: true,
368
- folders: [],
369
- files: [],
370
- parent: parent
371
- };
372
- }
373
- function getUsrFolder(parent) {
374
- var usrFolder = {
375
- name: 'usr',
376
- permissions: 'drwxrwxr-x',
377
- owner: 'root',
378
- isFolder: true,
379
- folders: [],
380
- files: [],
381
- parent: parent
382
- };
383
- usrFolder.folders = [getUsrBinFolder(usrFolder)];
384
- return usrFolder;
385
- }
386
- function getBootFiles(parent) {
387
- return [
388
- {
389
- name: 'System.map',
390
- permissions: '-rw-------',
391
- owner: 'root',
392
- type: types_1.FileType.System,
393
- parent: parent
394
- },
395
- {
396
- name: 'inittrd.img',
397
- permissions: '-r--------',
398
- owner: 'root',
399
- type: types_1.FileType.System,
400
- parent: parent
401
- },
402
- {
403
- name: 'kernel.img',
404
- permissions: '-r--------',
405
- owner: 'root',
406
- type: types_1.FileType.System,
407
- parent: parent
408
- }
409
- ];
410
- }
411
- function getBootFolder(parent) {
412
- var bootFolder = {
413
- name: 'sys',
414
- permissions: 'drwxr-xr-x',
415
- owner: 'root',
416
- isFolder: true,
417
- folders: [],
418
- files: [],
419
- parent: parent
420
- };
421
- bootFolder.files = getBootFiles(bootFolder);
422
- return bootFolder;
423
- }
424
- function getDefaultFileSystem(users) {
425
- var defaultSystem = {
426
- name: '',
427
- permissions: 'drwxr--r--',
428
- owner: 'root',
429
- isFolder: true,
430
- isProtected: true,
431
- files: [],
432
- folders: []
433
- };
434
- defaultSystem.folders = [
435
- getEtcFolder(defaultSystem, users),
436
- getLibFolder(defaultSystem),
437
- getSysFolder(defaultSystem),
438
- getRootFolder(defaultSystem),
439
- getHomeFolder(defaultSystem, users),
440
- getVarFolder(defaultSystem),
441
- getBinFolder(defaultSystem),
442
- getUsrFolder(defaultSystem),
443
- getBootFolder(defaultSystem)
444
- ];
445
- return defaultSystem;
446
- }
447
- exports.getDefaultFileSystem = getDefaultFileSystem;