greybel-mock-environment 1.2.2 → 1.2.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.
- package/dist/environment.d.ts +9 -1
- package/dist/environment.js +49 -11
- package/dist/generators/basic.d.ts +3 -0
- package/dist/generators/basic.js +8 -0
- package/dist/generators/network.d.ts +1 -3
- package/dist/generators/network.js +24 -20
- package/dist/index.d.ts +1 -1
- package/dist/types/device.d.ts +22 -2
- package/dist/types/device.js +151 -4
- package/dist/types/file-system.d.ts +12 -6
- package/dist/types/file-system.js +50 -27
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.js +7 -3
- package/dist/types/location.d.ts +11 -0
- package/dist/types/location.js +23 -0
- package/dist/types/net-card.d.ts +5 -0
- package/dist/types/net-card.js +9 -0
- package/dist/types/network-device.d.ts +3 -2
- package/dist/types/process.d.ts +16 -0
- package/dist/types/process.js +22 -0
- package/dist/types/router.d.ts +10 -0
- package/dist/types/router.js +10 -0
- package/dist/types/user.d.ts +2 -2
- package/dist/utils.d.ts +5 -3
- package/dist/utils.js +21 -8
- package/package.json +1 -1
- package/dist/types/wifi-network.d.ts +0 -16
- package/dist/types/wifi-network.js +0 -14
package/dist/environment.d.ts
CHANGED
|
@@ -3,8 +3,14 @@ import EmailGenerator from './generators/email';
|
|
|
3
3
|
import NetworkGenerator from './generators/network';
|
|
4
4
|
import UserGenerator from './generators/user';
|
|
5
5
|
import VulnerabilityGenerator from './generators/vulnerability';
|
|
6
|
-
import { Computer, EMail, Port, Router, Session, Switch } from './types';
|
|
6
|
+
import { Computer, Device, EMail, Location, Port, Router, Session, Switch } from './types';
|
|
7
|
+
export interface RouterLocation {
|
|
8
|
+
distance: number;
|
|
9
|
+
percentage: number;
|
|
10
|
+
router: Router;
|
|
11
|
+
}
|
|
7
12
|
export default class MockEnvironment {
|
|
13
|
+
readonly WIFI_MAX_DISTANCE: number;
|
|
8
14
|
seed: string;
|
|
9
15
|
basicGenerator: BasicGenerator;
|
|
10
16
|
emailGenerator: EmailGenerator;
|
|
@@ -29,7 +35,9 @@ export default class MockEnvironment {
|
|
|
29
35
|
setupLocalSession(username: string, password: string): void;
|
|
30
36
|
getLatestSession(): Session;
|
|
31
37
|
getLocal(): Session;
|
|
38
|
+
connect(router: Router, device: Device): void;
|
|
32
39
|
connectLocal(router: Router): void;
|
|
40
|
+
findRoutersCloseToLocation(loc: Location): RouterLocation[];
|
|
33
41
|
getRouterByIp(ipAddress: string): Router | null;
|
|
34
42
|
getSwitchByIp(ipAddress: string): Switch | null;
|
|
35
43
|
findRouterViaNS(name: string): Router;
|
package/dist/environment.js
CHANGED
|
@@ -40,6 +40,7 @@ var utils_1 = require("./utils");
|
|
|
40
40
|
var MockEnvironment = /** @class */ (function () {
|
|
41
41
|
function MockEnvironment(seed, localUser) {
|
|
42
42
|
if (seed === void 0) { seed = 'test'; }
|
|
43
|
+
this.WIFI_MAX_DISTANCE = 10;
|
|
43
44
|
var me = this;
|
|
44
45
|
me.seed = seed;
|
|
45
46
|
me.basicGenerator = new basic_1.default({ seed: seed });
|
|
@@ -164,21 +165,58 @@ var MockEnvironment = /** @class */ (function () {
|
|
|
164
165
|
MockEnvironment.prototype.getLocal = function () {
|
|
165
166
|
return this.localSession;
|
|
166
167
|
};
|
|
167
|
-
MockEnvironment.prototype.
|
|
168
|
+
MockEnvironment.prototype.connect = function (router, device) {
|
|
169
|
+
if (!(device instanceof types_1.Computer) && !(device instanceof types_1.Switch)) {
|
|
170
|
+
throw new Error('Cannot connect router to router.');
|
|
171
|
+
}
|
|
172
|
+
if (device.router) {
|
|
173
|
+
device.router.devices.delete(device.localIp);
|
|
174
|
+
}
|
|
168
175
|
var me = this;
|
|
169
176
|
var serverMap = me.networkGenerator.serverMap;
|
|
170
177
|
if (!serverMap.has(router.publicIp)) {
|
|
171
178
|
throw new Error("Router with ip ".concat(router.publicIp, " is unknown in serverMap."));
|
|
172
179
|
}
|
|
173
|
-
var computer = me.localSession.computer;
|
|
174
|
-
if (computer.router) {
|
|
175
|
-
computer.router.devices.delete(computer.localIp);
|
|
176
|
-
}
|
|
177
180
|
var serverMapGenerator = serverMap.get(router.publicIp);
|
|
178
181
|
var localIp = serverMapGenerator.generateLocalIp(router);
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
router.devices.set(localIp,
|
|
182
|
+
device.router = router;
|
|
183
|
+
device.localIp = localIp;
|
|
184
|
+
router.devices.set(localIp, device);
|
|
185
|
+
};
|
|
186
|
+
MockEnvironment.prototype.connectLocal = function (router) {
|
|
187
|
+
this.connect(router, this.localSession.computer);
|
|
188
|
+
};
|
|
189
|
+
MockEnvironment.prototype.findRoutersCloseToLocation = function (loc) {
|
|
190
|
+
var e_1, _a;
|
|
191
|
+
var me = this;
|
|
192
|
+
var getDistance = function (routerLoc) {
|
|
193
|
+
var y = routerLoc.x - loc.x;
|
|
194
|
+
var x = routerLoc.y - loc.y;
|
|
195
|
+
return Math.sqrt(x * x + y * y);
|
|
196
|
+
};
|
|
197
|
+
var result = [];
|
|
198
|
+
try {
|
|
199
|
+
for (var _b = __values(me.networkGenerator.serverMap.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
200
|
+
var serverMapGenerator = _c.value;
|
|
201
|
+
var distance = getDistance(serverMapGenerator.router.location);
|
|
202
|
+
if (distance < me.WIFI_MAX_DISTANCE) {
|
|
203
|
+
var percentage = Math.round(((me.WIFI_MAX_DISTANCE - distance) * 100) / me.WIFI_MAX_DISTANCE);
|
|
204
|
+
result.push({
|
|
205
|
+
percentage: percentage,
|
|
206
|
+
distance: distance,
|
|
207
|
+
router: serverMapGenerator.router
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
213
|
+
finally {
|
|
214
|
+
try {
|
|
215
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
216
|
+
}
|
|
217
|
+
finally { if (e_1) throw e_1.error; }
|
|
218
|
+
}
|
|
219
|
+
return result;
|
|
182
220
|
};
|
|
183
221
|
MockEnvironment.prototype.getRouterByIp = function (ipAddress) {
|
|
184
222
|
var me = this;
|
|
@@ -194,7 +232,7 @@ var MockEnvironment = /** @class */ (function () {
|
|
|
194
232
|
});
|
|
195
233
|
};
|
|
196
234
|
MockEnvironment.prototype.getSwitchByIp = function (ipAddress) {
|
|
197
|
-
var
|
|
235
|
+
var e_2, _a;
|
|
198
236
|
var me = this;
|
|
199
237
|
if (!(0, utils_1.isValidIp)(ipAddress) || !(0, utils_1.isLanIp)(ipAddress)) {
|
|
200
238
|
return null;
|
|
@@ -208,12 +246,12 @@ var MockEnvironment = /** @class */ (function () {
|
|
|
208
246
|
}
|
|
209
247
|
}
|
|
210
248
|
}
|
|
211
|
-
catch (
|
|
249
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
212
250
|
finally {
|
|
213
251
|
try {
|
|
214
252
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
215
253
|
}
|
|
216
|
-
finally { if (
|
|
254
|
+
finally { if (e_2) throw e_2.error; }
|
|
217
255
|
}
|
|
218
256
|
return null;
|
|
219
257
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RandomSeed } from 'random-seed';
|
|
2
|
+
import { Location } from '../types/location';
|
|
2
3
|
export interface BasicGeneratorOptions {
|
|
3
4
|
seed: string;
|
|
4
5
|
}
|
|
@@ -9,6 +10,7 @@ export default class BasicGenerator {
|
|
|
9
10
|
bankIdRng: RandomSeed;
|
|
10
11
|
macAddressRng: RandomSeed;
|
|
11
12
|
uuidRng: RandomSeed;
|
|
13
|
+
locationRng: RandomSeed;
|
|
12
14
|
constructor({ seed }: BasicGeneratorOptions);
|
|
13
15
|
generateDomain(): string;
|
|
14
16
|
generateUsername(): string;
|
|
@@ -16,4 +18,5 @@ export default class BasicGenerator {
|
|
|
16
18
|
generateBankNumber(): string;
|
|
17
19
|
generateMAC(): string;
|
|
18
20
|
generateUUID(): string;
|
|
21
|
+
generateLocation(): Location;
|
|
19
22
|
}
|
package/dist/generators/basic.js
CHANGED
|
@@ -29,6 +29,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
29
29
|
};
|
|
30
30
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
31
|
var random_seed_1 = __importDefault(require("random-seed"));
|
|
32
|
+
var location_1 = require("../types/location");
|
|
32
33
|
var randomUsernameGenerator = require('random-username-generator');
|
|
33
34
|
var BasicGenerator = /** @class */ (function () {
|
|
34
35
|
function BasicGenerator(_a) {
|
|
@@ -39,6 +40,7 @@ var BasicGenerator = /** @class */ (function () {
|
|
|
39
40
|
this.tldRng = random_seed_1.default.create("".concat(seed, "-tld"));
|
|
40
41
|
this.bankIdRng = random_seed_1.default.create("".concat(seed, "-bank-number"));
|
|
41
42
|
this.uuidRng = random_seed_1.default.create("".concat(seed, "-uuid"));
|
|
43
|
+
this.locationRng = random_seed_1.default.create("".concat(seed, "-location"));
|
|
42
44
|
}
|
|
43
45
|
BasicGenerator.prototype.generateDomain = function () {
|
|
44
46
|
var me = this;
|
|
@@ -78,6 +80,12 @@ var BasicGenerator = /** @class */ (function () {
|
|
|
78
80
|
return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);
|
|
79
81
|
});
|
|
80
82
|
};
|
|
83
|
+
BasicGenerator.prototype.generateLocation = function () {
|
|
84
|
+
return new location_1.Location({
|
|
85
|
+
x: this.locationRng.floatBetween(0, 50),
|
|
86
|
+
y: this.locationRng.floatBetween(0, 50)
|
|
87
|
+
});
|
|
88
|
+
};
|
|
81
89
|
return BasicGenerator;
|
|
82
90
|
}());
|
|
83
91
|
exports.default = BasicGenerator;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RandomSeed } from 'random-seed';
|
|
2
2
|
import { FSCreationVariation } from '../fs';
|
|
3
|
-
import { Computer, NetworkDevice, Port, Router, Switch, User
|
|
3
|
+
import { Computer, NetworkDevice, Port, Router, Switch, User } from '../types';
|
|
4
4
|
import BasicGenerator from './basic';
|
|
5
5
|
import EmailGenerator from './email';
|
|
6
6
|
import UserGenerator from './user';
|
|
@@ -39,12 +39,10 @@ export default class NetworkGenerator {
|
|
|
39
39
|
networkRng: RandomSeed;
|
|
40
40
|
portRng: RandomSeed;
|
|
41
41
|
serverMap: Map<string, ServerMapGenerator>;
|
|
42
|
-
wifiNetworks: WifiNetwork[];
|
|
43
42
|
constructor({ seed, basicGenerator, userGenerator, emailGenerator }: NetworkGeneratorOptions);
|
|
44
43
|
generateIp(): string;
|
|
45
44
|
generateDifficulty(): FSCreationVariation;
|
|
46
45
|
generateLocalComputer(users: User[], rootPassword?: string): Computer;
|
|
47
46
|
generateRouter(options?: Partial<Router>): Router;
|
|
48
47
|
generateNetworkDevice(): NetworkDevice;
|
|
49
|
-
generateWifiNetwork(router: Router, options?: Partial<WifiNetwork>): WifiNetwork;
|
|
50
48
|
}
|
|
@@ -32,6 +32,7 @@ exports.ServerMapGenerator = void 0;
|
|
|
32
32
|
var random_seed_1 = __importDefault(require("random-seed"));
|
|
33
33
|
var fs_1 = require("../fs");
|
|
34
34
|
var types_1 = require("../types");
|
|
35
|
+
var net_card_1 = require("../types/net-card");
|
|
35
36
|
var ServerMapGenerator = /** @class */ (function () {
|
|
36
37
|
function ServerMapGenerator(_a) {
|
|
37
38
|
var router = _a.router, networkRng = _a.networkRng, portRng = _a.portRng, basicGenerator = _a.basicGenerator, userGenerator = _a.userGenerator, networkGenerator = _a.networkGenerator;
|
|
@@ -78,7 +79,13 @@ var ServerMapGenerator = /** @class */ (function () {
|
|
|
78
79
|
ownerType: fs_1.FSDeviceOwnerType.Npc
|
|
79
80
|
}),
|
|
80
81
|
bssid: options.bssid || basicGenerator.generateUUID(),
|
|
81
|
-
essid: options.essid || basicGenerator.generateUUID()
|
|
82
|
+
essid: options.essid || basicGenerator.generateUUID(),
|
|
83
|
+
mac: options.mac || basicGenerator.generateMAC(),
|
|
84
|
+
location: options.location || basicGenerator.generateLocation(),
|
|
85
|
+
wifi: {
|
|
86
|
+
credentials: switchUsers[1],
|
|
87
|
+
name: basicGenerator.generateUsername()
|
|
88
|
+
}
|
|
82
89
|
});
|
|
83
90
|
for (var index = me.networkRng.intBetween(2, 4); index >= 0; index--) {
|
|
84
91
|
me.generateComputer(subSwitch, [
|
|
@@ -112,7 +119,9 @@ var ServerMapGenerator = /** @class */ (function () {
|
|
|
112
119
|
type: fs_1.FSDeviceType.Computer,
|
|
113
120
|
difficulty: networkGenerator.generateDifficulty(),
|
|
114
121
|
ports: ports
|
|
115
|
-
})
|
|
122
|
+
}),
|
|
123
|
+
mac: basicGenerator.generateMAC(),
|
|
124
|
+
location: basicGenerator.generateLocation()
|
|
116
125
|
});
|
|
117
126
|
router.devices.set(computer.localIp, computer);
|
|
118
127
|
return computer;
|
|
@@ -151,7 +160,6 @@ var NetworkGenerator = /** @class */ (function () {
|
|
|
151
160
|
this.networkRng = random_seed_1.default.create("".concat(seed, "-network"));
|
|
152
161
|
this.portRng = random_seed_1.default.create("".concat(seed, "-port"));
|
|
153
162
|
this.serverMap = new Map();
|
|
154
|
-
this.wifiNetworks = [];
|
|
155
163
|
}
|
|
156
164
|
NetworkGenerator.prototype.generateIp = function () {
|
|
157
165
|
var me = this;
|
|
@@ -186,7 +194,9 @@ var NetworkGenerator = /** @class */ (function () {
|
|
|
186
194
|
users: computerUsers,
|
|
187
195
|
ownerType: fs_1.FSDeviceOwnerType.Player,
|
|
188
196
|
type: fs_1.FSDeviceType.Computer
|
|
189
|
-
})
|
|
197
|
+
}),
|
|
198
|
+
mac: basicGenerator.generateMAC(),
|
|
199
|
+
location: basicGenerator.generateLocation()
|
|
190
200
|
});
|
|
191
201
|
return computer;
|
|
192
202
|
};
|
|
@@ -226,7 +236,13 @@ var NetworkGenerator = /** @class */ (function () {
|
|
|
226
236
|
difficulty: me.generateDifficulty()
|
|
227
237
|
}),
|
|
228
238
|
bssid: options.bssid || basicGenerator.generateUUID(),
|
|
229
|
-
essid: options.essid || basicGenerator.generateUUID()
|
|
239
|
+
essid: options.essid || basicGenerator.generateUUID(),
|
|
240
|
+
mac: options.mac || basicGenerator.generateMAC(),
|
|
241
|
+
location: options.location || basicGenerator.generateLocation(),
|
|
242
|
+
wifi: {
|
|
243
|
+
credentials: routerUsers[1],
|
|
244
|
+
name: basicGenerator.generateUsername()
|
|
245
|
+
}
|
|
230
246
|
});
|
|
231
247
|
var serverMapGenerator = new ServerMapGenerator({
|
|
232
248
|
router: router,
|
|
@@ -249,25 +265,13 @@ var NetworkGenerator = /** @class */ (function () {
|
|
|
249
265
|
};
|
|
250
266
|
NetworkGenerator.prototype.generateNetworkDevice = function () {
|
|
251
267
|
return {
|
|
252
|
-
type: this.networkRng.intBetween(0, 1) === 0
|
|
268
|
+
type: this.networkRng.intBetween(0, 1) === 0
|
|
269
|
+
? net_card_1.NetCard.Wifi
|
|
270
|
+
: net_card_1.NetCard.Ethernet,
|
|
253
271
|
id: this.networkRng.random().toString(36).substring(2, 10),
|
|
254
272
|
active: true
|
|
255
273
|
};
|
|
256
274
|
};
|
|
257
|
-
NetworkGenerator.prototype.generateWifiNetwork = function (router, options) {
|
|
258
|
-
if (options === void 0) { options = {}; }
|
|
259
|
-
var me = this;
|
|
260
|
-
var basicGenerator = me.basicGenerator;
|
|
261
|
-
var wifiNetwork = new types_1.WifiNetwork({
|
|
262
|
-
mac: options.mac || basicGenerator.generateMAC(),
|
|
263
|
-
percentage: options.percentage || me.networkRng.intBetween(20, 70),
|
|
264
|
-
name: options.name || basicGenerator.generateUsername(),
|
|
265
|
-
password: options.password || basicGenerator.generatePassword(),
|
|
266
|
-
router: router
|
|
267
|
-
});
|
|
268
|
-
me.wifiNetworks.push(wifiNetwork);
|
|
269
|
-
return wifiNetwork;
|
|
270
|
-
};
|
|
271
275
|
return NetworkGenerator;
|
|
272
276
|
}());
|
|
273
277
|
exports.default = NetworkGenerator;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { default as MockEnvironment } from './environment';
|
|
1
|
+
export { default as MockEnvironment, RouterLocation } from './environment';
|
|
2
2
|
export * as FS from './fs';
|
|
3
3
|
export * as Generators from './generators';
|
|
4
4
|
export { default as MockTranspiler } from './mock-transpiler';
|
package/dist/types/device.d.ts
CHANGED
|
@@ -1,27 +1,47 @@
|
|
|
1
1
|
import { FSDeviceOwnerType, FSDeviceType } from '../fs';
|
|
2
2
|
import { Entity, File, Folder } from './file-system';
|
|
3
|
+
import { Location } from './location';
|
|
4
|
+
import { NetCard } from './net-card';
|
|
3
5
|
import { NetworkDevice } from './network-device';
|
|
4
6
|
import { Port } from './port';
|
|
7
|
+
import { Process, ProcessOptions } from './process';
|
|
5
8
|
import { User } from './user';
|
|
6
9
|
import { VulnerabilityActionUser } from './vulnerabilities';
|
|
7
10
|
export interface DeviceOptions {
|
|
8
11
|
localIp: string;
|
|
9
|
-
activeNetCard:
|
|
12
|
+
activeNetCard: NetCard;
|
|
13
|
+
location: Location;
|
|
10
14
|
networkDevices?: NetworkDevice[];
|
|
11
15
|
users?: User[];
|
|
12
16
|
fileSystem: Folder;
|
|
13
17
|
ports?: Map<number, Port>;
|
|
14
18
|
ownerType?: FSDeviceOwnerType;
|
|
19
|
+
mac: string;
|
|
15
20
|
}
|
|
16
21
|
export declare class Device {
|
|
17
22
|
localIp: string;
|
|
18
|
-
activeNetCard:
|
|
23
|
+
activeNetCard: NetCard;
|
|
24
|
+
location: Location;
|
|
19
25
|
networkDevices: NetworkDevice[];
|
|
20
26
|
users: User[];
|
|
21
27
|
fileSystem: Folder;
|
|
22
28
|
ports: Map<number, Port>;
|
|
23
29
|
ownerType: FSDeviceOwnerType;
|
|
30
|
+
processes: Map<number, Process>;
|
|
31
|
+
groups: Map<string, Set<string>>;
|
|
32
|
+
mac: string;
|
|
24
33
|
constructor(options: DeviceOptions);
|
|
34
|
+
initialize(): void;
|
|
35
|
+
getNetworkDeviceMap(): Map<string, NetworkDevice>;
|
|
36
|
+
findUser(userName: string): User;
|
|
37
|
+
addUser(userName: string, password: string): boolean;
|
|
38
|
+
removeUser(userName: string): boolean;
|
|
39
|
+
updatePasswd(): boolean;
|
|
40
|
+
createUserFolder(userName: string): boolean;
|
|
41
|
+
addProcess(options: Omit<ProcessOptions, 'pid'>): Device;
|
|
42
|
+
removeProcess(pid: number): boolean;
|
|
43
|
+
addGroup(userName: string, groupName: string): boolean;
|
|
44
|
+
removeGroup(userName: string, groupName: string): boolean;
|
|
25
45
|
getDeviceType(): FSDeviceType;
|
|
26
46
|
findByLanIp(_ip: string): Device;
|
|
27
47
|
getRouter(): Device;
|
package/dist/types/device.js
CHANGED
|
@@ -31,19 +31,166 @@ exports.Device = void 0;
|
|
|
31
31
|
var fs_1 = require("../fs");
|
|
32
32
|
var utils_1 = require("../utils");
|
|
33
33
|
var file_system_1 = require("./file-system");
|
|
34
|
+
var net_card_1 = require("./net-card");
|
|
35
|
+
var process_1 = require("./process");
|
|
34
36
|
var service_1 = require("./service");
|
|
35
37
|
var user_1 = require("./user");
|
|
36
38
|
var vulnerabilities_1 = require("./vulnerabilities");
|
|
37
39
|
var Device = /** @class */ (function () {
|
|
38
40
|
function Device(options) {
|
|
39
41
|
this.localIp = options.localIp;
|
|
40
|
-
this.activeNetCard = options.activeNetCard;
|
|
42
|
+
this.activeNetCard = options.activeNetCard || net_card_1.NetCard.None;
|
|
43
|
+
this.location = options.location;
|
|
41
44
|
this.networkDevices = options.networkDevices || [];
|
|
42
45
|
this.users = options.users || [];
|
|
43
46
|
this.fileSystem = options.fileSystem;
|
|
44
47
|
this.ports = options.ports || new Map();
|
|
45
48
|
this.ownerType = options.ownerType || fs_1.FSDeviceOwnerType.Npc;
|
|
49
|
+
this.mac = options.mac;
|
|
50
|
+
this.processes = new Map();
|
|
51
|
+
this.groups = new Map();
|
|
52
|
+
this.initialize();
|
|
46
53
|
}
|
|
54
|
+
Device.prototype.initialize = function () {
|
|
55
|
+
this.addProcess({
|
|
56
|
+
owner: this.findUser('root'),
|
|
57
|
+
command: 'kernel_task',
|
|
58
|
+
protected: true
|
|
59
|
+
}).addProcess({
|
|
60
|
+
owner: this.findUser('root'),
|
|
61
|
+
command: 'Xorg',
|
|
62
|
+
protected: true
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
Device.prototype.getNetworkDeviceMap = function () {
|
|
66
|
+
var e_1, _a;
|
|
67
|
+
var result = new Map();
|
|
68
|
+
var wifiIndex = 0;
|
|
69
|
+
var ethIndex = 0;
|
|
70
|
+
try {
|
|
71
|
+
for (var _b = __values(this.networkDevices), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
72
|
+
var networkDevice = _c.value;
|
|
73
|
+
var type = void 0;
|
|
74
|
+
if (networkDevice.type === net_card_1.NetCard.Wifi) {
|
|
75
|
+
type = "wlan".concat(wifiIndex++);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
type = "eth".concat(ethIndex++);
|
|
79
|
+
}
|
|
80
|
+
result.set(type, networkDevice);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
84
|
+
finally {
|
|
85
|
+
try {
|
|
86
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
87
|
+
}
|
|
88
|
+
finally { if (e_1) throw e_1.error; }
|
|
89
|
+
}
|
|
90
|
+
return result;
|
|
91
|
+
};
|
|
92
|
+
Device.prototype.findUser = function (userName) {
|
|
93
|
+
return this.users.find(function (u) { return u.username === userName; }) || null;
|
|
94
|
+
};
|
|
95
|
+
Device.prototype.addUser = function (userName, password) {
|
|
96
|
+
var existing = this.findUser(userName);
|
|
97
|
+
if (existing !== null) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
var user = new user_1.User({
|
|
101
|
+
username: userName,
|
|
102
|
+
password: password
|
|
103
|
+
});
|
|
104
|
+
this.users.push(user);
|
|
105
|
+
return true;
|
|
106
|
+
};
|
|
107
|
+
Device.prototype.removeUser = function (userName) {
|
|
108
|
+
var index = this.users.findIndex(function (u) { return u.username === userName; });
|
|
109
|
+
if (index === -1) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
this.users.splice(index, 1);
|
|
113
|
+
return true;
|
|
114
|
+
};
|
|
115
|
+
Device.prototype.updatePasswd = function () {
|
|
116
|
+
var etcFolder = this.getFile(['etc']);
|
|
117
|
+
if (etcFolder instanceof file_system_1.Folder) {
|
|
118
|
+
var file = new file_system_1.File({
|
|
119
|
+
name: 'passwd',
|
|
120
|
+
permissions: '-rw-r-----',
|
|
121
|
+
owner: 'root',
|
|
122
|
+
content: this.users
|
|
123
|
+
.map(function (v) { return "".concat(v.username, ":").concat(v.passwordHashed); })
|
|
124
|
+
.join('\n'),
|
|
125
|
+
type: file_system_1.FileType.Plain
|
|
126
|
+
});
|
|
127
|
+
etcFolder.putFile(file);
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
return false;
|
|
131
|
+
};
|
|
132
|
+
Device.prototype.createUserFolder = function (userName) {
|
|
133
|
+
var homeFolder = this.getFile(['home']);
|
|
134
|
+
if (homeFolder instanceof file_system_1.Folder) {
|
|
135
|
+
var userFolder = (0, fs_1.getUserFolder)({
|
|
136
|
+
parent: homeFolder,
|
|
137
|
+
users: this.users,
|
|
138
|
+
type: this.getDeviceType(),
|
|
139
|
+
ownerType: fs_1.FSDeviceOwnerType.Player
|
|
140
|
+
}, userName);
|
|
141
|
+
homeFolder.putFolder(userFolder);
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
return false;
|
|
145
|
+
};
|
|
146
|
+
Device.prototype.addProcess = function (options) {
|
|
147
|
+
var pid = (0, utils_1.getRandomInt)(10, 9000);
|
|
148
|
+
var process = new process_1.Process({
|
|
149
|
+
owner: options.owner,
|
|
150
|
+
pid: pid,
|
|
151
|
+
command: options.command,
|
|
152
|
+
protected: options.protected
|
|
153
|
+
});
|
|
154
|
+
this.processes.set(pid, process);
|
|
155
|
+
return this;
|
|
156
|
+
};
|
|
157
|
+
Device.prototype.removeProcess = function (pid) {
|
|
158
|
+
if (this.processes.has(pid)) {
|
|
159
|
+
var process_2 = this.processes.get(pid);
|
|
160
|
+
if (!process_2.protected) {
|
|
161
|
+
this.processes.delete(pid);
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return false;
|
|
166
|
+
};
|
|
167
|
+
Device.prototype.addGroup = function (userName, groupName) {
|
|
168
|
+
var user = this.findUser(userName);
|
|
169
|
+
if (user === null) {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
if (!this.groups.has(groupName)) {
|
|
173
|
+
this.groups.set(groupName, new Set());
|
|
174
|
+
}
|
|
175
|
+
var groups = this.groups.get(groupName);
|
|
176
|
+
groups.add(user.username);
|
|
177
|
+
return true;
|
|
178
|
+
};
|
|
179
|
+
Device.prototype.removeGroup = function (userName, groupName) {
|
|
180
|
+
var user = this.findUser(userName);
|
|
181
|
+
if (user === null) {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
if (!this.groups.has(groupName)) {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
var groups = this.groups.get(groupName);
|
|
188
|
+
groups.delete(user.username);
|
|
189
|
+
if (groups.size === 0) {
|
|
190
|
+
this.groups.delete(groupName);
|
|
191
|
+
}
|
|
192
|
+
return true;
|
|
193
|
+
};
|
|
47
194
|
Device.prototype.getDeviceType = function () {
|
|
48
195
|
return fs_1.FSDeviceType.Unknown;
|
|
49
196
|
};
|
|
@@ -96,7 +243,7 @@ var Device = /** @class */ (function () {
|
|
|
96
243
|
});
|
|
97
244
|
};
|
|
98
245
|
Device.prototype.findPort = function (portNumber) {
|
|
99
|
-
var
|
|
246
|
+
var e_2, _a;
|
|
100
247
|
try {
|
|
101
248
|
for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
102
249
|
var _d = __read(_c.value, 2), pn = _d[0], port = _d[1];
|
|
@@ -104,12 +251,12 @@ var Device = /** @class */ (function () {
|
|
|
104
251
|
return port;
|
|
105
252
|
}
|
|
106
253
|
}
|
|
107
|
-
catch (
|
|
254
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
108
255
|
finally {
|
|
109
256
|
try {
|
|
110
257
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
111
258
|
}
|
|
112
|
-
finally { if (
|
|
259
|
+
finally { if (e_2) throw e_2.error; }
|
|
113
260
|
}
|
|
114
261
|
return null;
|
|
115
262
|
};
|
|
@@ -2,6 +2,7 @@ import { PermissionMap, PermissionSegment } from '../utils';
|
|
|
2
2
|
import { Library } from './library';
|
|
3
3
|
import { User } from './user';
|
|
4
4
|
import { Version } from './version';
|
|
5
|
+
export declare const FILE_CONTENT_LIMIT = 160000;
|
|
5
6
|
export declare enum FileType {
|
|
6
7
|
Plain = 0,
|
|
7
8
|
Bin = 1,
|
|
@@ -25,6 +26,7 @@ export declare enum FileType {
|
|
|
25
26
|
}
|
|
26
27
|
export interface EntityOptions {
|
|
27
28
|
name: string;
|
|
29
|
+
group?: string;
|
|
28
30
|
permissions: string;
|
|
29
31
|
owner: string;
|
|
30
32
|
isFolder?: boolean;
|
|
@@ -36,15 +38,17 @@ export declare class Entity {
|
|
|
36
38
|
name: string;
|
|
37
39
|
permissions: string;
|
|
38
40
|
owner: string;
|
|
41
|
+
group: string;
|
|
39
42
|
isFolder?: boolean;
|
|
40
43
|
isProtected?: boolean;
|
|
41
44
|
deleted?: boolean;
|
|
42
45
|
constructor(options: EntityOptions, parent?: Entity);
|
|
46
|
+
getSize(): number;
|
|
43
47
|
getPath(): string[] | null;
|
|
44
48
|
getEntity(_path: string[]): Entity | null;
|
|
45
|
-
|
|
49
|
+
copy(): Entity;
|
|
46
50
|
parsePermissions(): PermissionMap;
|
|
47
|
-
getPermissions(user: User): PermissionSegment;
|
|
51
|
+
getPermissions(user: User, groups: Map<string, Set<string>>): PermissionSegment;
|
|
48
52
|
}
|
|
49
53
|
export interface FileOptions extends Omit<EntityOptions, 'isFolder'> {
|
|
50
54
|
content?: string;
|
|
@@ -58,7 +62,8 @@ export declare class File extends Entity {
|
|
|
58
62
|
allowImport: boolean;
|
|
59
63
|
version: Version;
|
|
60
64
|
constructor(options: FileOptions, parent?: Entity);
|
|
61
|
-
|
|
65
|
+
getSize(): number;
|
|
66
|
+
copy(): File;
|
|
62
67
|
getLibraryType(): Library | null;
|
|
63
68
|
}
|
|
64
69
|
export interface FolderOptions extends Omit<EntityOptions, 'isFolder'> {
|
|
@@ -76,10 +81,11 @@ export declare class Folder extends Entity {
|
|
|
76
81
|
getEntity(path: string[]): Entity | null;
|
|
77
82
|
getEntityFileIndex(entityName: string): FolderIndexResult;
|
|
78
83
|
getEntityFolderIndex(entityName: string): FolderIndexResult;
|
|
84
|
+
copy(recursive?: boolean): Folder;
|
|
79
85
|
getEntityIndex(entityName: string): FolderIndexResult;
|
|
80
86
|
hasFile(entityName: string): boolean;
|
|
81
87
|
putFile(file: File): File;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
traverseChildren(callback: (v: Entity) => void
|
|
88
|
+
putFolder(folder: Folder): Folder;
|
|
89
|
+
removeEntity(entityName: string): boolean;
|
|
90
|
+
traverseChildren(callback: (v: Entity) => void): void;
|
|
85
91
|
}
|
|
@@ -42,9 +42,10 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
42
42
|
return ar;
|
|
43
43
|
};
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
-
exports.Folder = exports.File = exports.Entity = exports.FileType = void 0;
|
|
45
|
+
exports.Folder = exports.File = exports.Entity = exports.FileType = exports.FILE_CONTENT_LIMIT = void 0;
|
|
46
46
|
var library_1 = require("./library");
|
|
47
47
|
var version_1 = require("./version");
|
|
48
|
+
exports.FILE_CONTENT_LIMIT = 160000;
|
|
48
49
|
var FileType;
|
|
49
50
|
(function (FileType) {
|
|
50
51
|
FileType[FileType["Plain"] = 0] = "Plain";
|
|
@@ -73,10 +74,14 @@ var Entity = /** @class */ (function () {
|
|
|
73
74
|
this.name = options.name;
|
|
74
75
|
this.permissions = options.permissions;
|
|
75
76
|
this.owner = options.owner;
|
|
77
|
+
this.group = options.group || options.owner;
|
|
76
78
|
this.isFolder = options.isFolder;
|
|
77
79
|
this.isProtected = options.isProtected;
|
|
78
80
|
this.deleted = options.deleted;
|
|
79
81
|
}
|
|
82
|
+
Entity.prototype.getSize = function () {
|
|
83
|
+
return 0;
|
|
84
|
+
};
|
|
80
85
|
Entity.prototype.getPath = function () {
|
|
81
86
|
var path = [this.name];
|
|
82
87
|
var current = this.parent;
|
|
@@ -89,13 +94,13 @@ var Entity = /** @class */ (function () {
|
|
|
89
94
|
Entity.prototype.getEntity = function (_path) {
|
|
90
95
|
return null;
|
|
91
96
|
};
|
|
92
|
-
Entity.prototype.
|
|
97
|
+
Entity.prototype.copy = function () {
|
|
93
98
|
var newEntity = new Entity({
|
|
94
99
|
name: this.name,
|
|
95
100
|
permissions: this.permissions,
|
|
96
101
|
owner: this.owner,
|
|
97
102
|
isFolder: this.isFolder
|
|
98
|
-
}
|
|
103
|
+
});
|
|
99
104
|
return newEntity;
|
|
100
105
|
};
|
|
101
106
|
Entity.prototype.parsePermissions = function () {
|
|
@@ -122,13 +127,22 @@ var Entity = /** @class */ (function () {
|
|
|
122
127
|
}
|
|
123
128
|
};
|
|
124
129
|
};
|
|
125
|
-
Entity.prototype.getPermissions = function (user) {
|
|
126
|
-
|
|
127
|
-
|
|
130
|
+
Entity.prototype.getPermissions = function (user, groups) {
|
|
131
|
+
if (user.username === 'root') {
|
|
132
|
+
return {
|
|
133
|
+
r: true,
|
|
134
|
+
w: true,
|
|
135
|
+
x: true
|
|
136
|
+
};
|
|
137
|
+
}
|
|
128
138
|
var parsedPermissions = this.parsePermissions();
|
|
129
139
|
if (this.owner === user.username) {
|
|
130
140
|
return parsedPermissions.u;
|
|
131
141
|
}
|
|
142
|
+
else if (groups.has(this.owner) &&
|
|
143
|
+
groups.get(this.owner).has(user.username)) {
|
|
144
|
+
return parsedPermissions.g;
|
|
145
|
+
}
|
|
132
146
|
return parsedPermissions.o;
|
|
133
147
|
};
|
|
134
148
|
return Entity;
|
|
@@ -144,15 +158,20 @@ var File = /** @class */ (function (_super) {
|
|
|
144
158
|
_this.version = new version_1.Version({ version: options.version });
|
|
145
159
|
return _this;
|
|
146
160
|
}
|
|
147
|
-
File.prototype.
|
|
148
|
-
|
|
161
|
+
File.prototype.getSize = function () {
|
|
162
|
+
return Math.round((100 * this.content.length) / exports.FILE_CONTENT_LIMIT) * 100;
|
|
163
|
+
};
|
|
164
|
+
File.prototype.copy = function () {
|
|
165
|
+
var newEntity = new File({
|
|
149
166
|
name: this.name,
|
|
150
167
|
permissions: this.permissions,
|
|
151
168
|
owner: this.owner,
|
|
152
169
|
content: this.content,
|
|
153
|
-
type: this.type
|
|
154
|
-
|
|
155
|
-
|
|
170
|
+
type: this.type,
|
|
171
|
+
allowImport: this.allowImport,
|
|
172
|
+
version: this.version.toString()
|
|
173
|
+
});
|
|
174
|
+
return newEntity;
|
|
156
175
|
};
|
|
157
176
|
File.prototype.getLibraryType = function () {
|
|
158
177
|
switch (this.type) {
|
|
@@ -222,6 +241,16 @@ var Folder = /** @class */ (function (_super) {
|
|
|
222
241
|
}
|
|
223
242
|
return null;
|
|
224
243
|
};
|
|
244
|
+
Folder.prototype.copy = function (recursive) {
|
|
245
|
+
var newEntity = new Folder({
|
|
246
|
+
name: this.name,
|
|
247
|
+
permissions: this.permissions,
|
|
248
|
+
owner: this.owner,
|
|
249
|
+
folders: recursive ? this.folders.map(function (f) { return f.copy(); }) : [],
|
|
250
|
+
files: recursive ? this.files.map(function (f) { return f.copy(); }) : []
|
|
251
|
+
});
|
|
252
|
+
return newEntity;
|
|
253
|
+
};
|
|
225
254
|
Folder.prototype.getEntityIndex = function (entityName) {
|
|
226
255
|
return (this.getEntityFileIndex(entityName) ||
|
|
227
256
|
this.getEntityFolderIndex(entityName));
|
|
@@ -230,12 +259,18 @@ var Folder = /** @class */ (function (_super) {
|
|
|
230
259
|
return !!this.getEntityIndex(entityName);
|
|
231
260
|
};
|
|
232
261
|
Folder.prototype.putFile = function (file) {
|
|
233
|
-
this.
|
|
262
|
+
this.removeEntity(file.name);
|
|
234
263
|
file.parent = this;
|
|
235
264
|
this.files.push(file);
|
|
236
265
|
return file;
|
|
237
266
|
};
|
|
238
|
-
Folder.prototype.
|
|
267
|
+
Folder.prototype.putFolder = function (folder) {
|
|
268
|
+
this.removeEntity(folder.name);
|
|
269
|
+
folder.parent = this;
|
|
270
|
+
this.folders.push(folder);
|
|
271
|
+
return folder;
|
|
272
|
+
};
|
|
273
|
+
Folder.prototype.removeEntity = function (entityName) {
|
|
239
274
|
var result = this.getEntityIndex(entityName);
|
|
240
275
|
if (!result) {
|
|
241
276
|
return false;
|
|
@@ -256,20 +291,8 @@ var Folder = /** @class */ (function (_super) {
|
|
|
256
291
|
}
|
|
257
292
|
return true;
|
|
258
293
|
};
|
|
259
|
-
Folder.prototype.
|
|
260
|
-
|
|
261
|
-
name: this.name,
|
|
262
|
-
permissions: this.permissions,
|
|
263
|
-
owner: this.owner
|
|
264
|
-
}, toFolder);
|
|
265
|
-
this.files = this.files.map(function (item) { return item.copyEntity(newFolder); });
|
|
266
|
-
this.folders = this.folders.map(function (item) { return item.copyEntity(newFolder); });
|
|
267
|
-
return newFolder;
|
|
268
|
-
};
|
|
269
|
-
Folder.prototype.traverseChildren = function (callback, skip) {
|
|
270
|
-
if (!skip) {
|
|
271
|
-
callback(this);
|
|
272
|
-
}
|
|
294
|
+
Folder.prototype.traverseChildren = function (callback) {
|
|
295
|
+
callback(this);
|
|
273
296
|
this.files.forEach(function (item) { return callback(item); });
|
|
274
297
|
this.folders.forEach(function (item) { return item.traverseChildren(callback); });
|
|
275
298
|
};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -3,12 +3,14 @@ export { Device } from './device';
|
|
|
3
3
|
export { EMail, EMailMessage } from './email';
|
|
4
4
|
export { File, FileType, Folder, Entity as FSEntity } from './file-system';
|
|
5
5
|
export { Library } from './library';
|
|
6
|
+
export { Location } from './location';
|
|
7
|
+
export { NetCard } from './net-card';
|
|
6
8
|
export { NetworkDevice } from './network-device';
|
|
7
9
|
export { Port } from './port';
|
|
10
|
+
export { Process } from './process';
|
|
8
11
|
export { Router } from './router';
|
|
9
12
|
export { Service, ServiceList } from './service';
|
|
10
13
|
export { Session } from './session';
|
|
11
14
|
export { Switch } from './switch';
|
|
12
15
|
export { User } from './user';
|
|
13
16
|
export { Vulnerability, VulnerabilityAction, VulnerabilityActionList, VulnerabilityActionUser, VulnerabilityRequirementList, VulnerabilityRequirements } from './vulnerabilities';
|
|
14
|
-
export { WifiNetwork } from './wifi-network';
|
package/dist/types/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.VulnerabilityRequirements = exports.VulnerabilityRequirementList = exports.VulnerabilityActionUser = exports.VulnerabilityActionList = exports.VulnerabilityAction = exports.Vulnerability = exports.User = exports.Switch = exports.Session = exports.ServiceList = exports.Service = exports.Router = exports.Process = exports.Port = exports.NetworkDevice = exports.NetCard = exports.Location = exports.Library = exports.FSEntity = exports.Folder = exports.FileType = exports.File = exports.EMailMessage = exports.EMail = exports.Device = exports.Computer = void 0;
|
|
4
4
|
var computer_1 = require("./computer");
|
|
5
5
|
Object.defineProperty(exports, "Computer", { enumerable: true, get: function () { return computer_1.Computer; } });
|
|
6
6
|
var device_1 = require("./device");
|
|
@@ -15,10 +15,16 @@ Object.defineProperty(exports, "Folder", { enumerable: true, get: function () {
|
|
|
15
15
|
Object.defineProperty(exports, "FSEntity", { enumerable: true, get: function () { return file_system_1.Entity; } });
|
|
16
16
|
var library_1 = require("./library");
|
|
17
17
|
Object.defineProperty(exports, "Library", { enumerable: true, get: function () { return library_1.Library; } });
|
|
18
|
+
var location_1 = require("./location");
|
|
19
|
+
Object.defineProperty(exports, "Location", { enumerable: true, get: function () { return location_1.Location; } });
|
|
20
|
+
var net_card_1 = require("./net-card");
|
|
21
|
+
Object.defineProperty(exports, "NetCard", { enumerable: true, get: function () { return net_card_1.NetCard; } });
|
|
18
22
|
var network_device_1 = require("./network-device");
|
|
19
23
|
Object.defineProperty(exports, "NetworkDevice", { enumerable: true, get: function () { return network_device_1.NetworkDevice; } });
|
|
20
24
|
var port_1 = require("./port");
|
|
21
25
|
Object.defineProperty(exports, "Port", { enumerable: true, get: function () { return port_1.Port; } });
|
|
26
|
+
var process_1 = require("./process");
|
|
27
|
+
Object.defineProperty(exports, "Process", { enumerable: true, get: function () { return process_1.Process; } });
|
|
22
28
|
var router_1 = require("./router");
|
|
23
29
|
Object.defineProperty(exports, "Router", { enumerable: true, get: function () { return router_1.Router; } });
|
|
24
30
|
var service_1 = require("./service");
|
|
@@ -37,5 +43,3 @@ Object.defineProperty(exports, "VulnerabilityActionList", { enumerable: true, ge
|
|
|
37
43
|
Object.defineProperty(exports, "VulnerabilityActionUser", { enumerable: true, get: function () { return vulnerabilities_1.VulnerabilityActionUser; } });
|
|
38
44
|
Object.defineProperty(exports, "VulnerabilityRequirementList", { enumerable: true, get: function () { return vulnerabilities_1.VulnerabilityRequirementList; } });
|
|
39
45
|
Object.defineProperty(exports, "VulnerabilityRequirements", { enumerable: true, get: function () { return vulnerabilities_1.VulnerabilityRequirements; } });
|
|
40
|
-
var wifi_network_1 = require("./wifi-network");
|
|
41
|
-
Object.defineProperty(exports, "WifiNetwork", { enumerable: true, get: function () { return wifi_network_1.WifiNetwork; } });
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Location = void 0;
|
|
4
|
+
var Location = /** @class */ (function () {
|
|
5
|
+
function Location(options) {
|
|
6
|
+
this.x = options.x;
|
|
7
|
+
this.y = options.y;
|
|
8
|
+
}
|
|
9
|
+
Location.prototype.offset = function (x, y) {
|
|
10
|
+
return new Location({
|
|
11
|
+
x: this.x + x,
|
|
12
|
+
y: this.y + y
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
Location.prototype.fork = function () {
|
|
16
|
+
return new Location({
|
|
17
|
+
x: this.x,
|
|
18
|
+
y: this.y
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
return Location;
|
|
22
|
+
}());
|
|
23
|
+
exports.Location = Location;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NetCard = void 0;
|
|
4
|
+
var NetCard;
|
|
5
|
+
(function (NetCard) {
|
|
6
|
+
NetCard["Ethernet"] = "ETHERNET";
|
|
7
|
+
NetCard["Wifi"] = "WIFI";
|
|
8
|
+
NetCard["None"] = "NONE";
|
|
9
|
+
})(NetCard = exports.NetCard || (exports.NetCard = {}));
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { NetCard } from './net-card';
|
|
1
2
|
export interface NetworkDeviceOptions {
|
|
2
|
-
type:
|
|
3
|
+
type: NetCard;
|
|
3
4
|
id: string;
|
|
4
5
|
active: boolean;
|
|
5
6
|
}
|
|
6
7
|
export declare class NetworkDevice {
|
|
7
|
-
type:
|
|
8
|
+
type: NetCard;
|
|
8
9
|
id: string;
|
|
9
10
|
active: boolean;
|
|
10
11
|
constructor(options: NetworkDeviceOptions);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { User } from './user';
|
|
2
|
+
export declare class ProcessOptions {
|
|
3
|
+
owner: User;
|
|
4
|
+
pid: number;
|
|
5
|
+
command: string;
|
|
6
|
+
protected?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare class Process {
|
|
9
|
+
owner: User;
|
|
10
|
+
pid: number;
|
|
11
|
+
cpu: number;
|
|
12
|
+
mem: number;
|
|
13
|
+
command: string;
|
|
14
|
+
protected: boolean;
|
|
15
|
+
constructor(options: ProcessOptions);
|
|
16
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Process = exports.ProcessOptions = void 0;
|
|
4
|
+
var utils_1 = require("../utils");
|
|
5
|
+
var ProcessOptions = /** @class */ (function () {
|
|
6
|
+
function ProcessOptions() {
|
|
7
|
+
}
|
|
8
|
+
return ProcessOptions;
|
|
9
|
+
}());
|
|
10
|
+
exports.ProcessOptions = ProcessOptions;
|
|
11
|
+
var Process = /** @class */ (function () {
|
|
12
|
+
function Process(options) {
|
|
13
|
+
this.owner = options.owner;
|
|
14
|
+
this.pid = options.pid;
|
|
15
|
+
this.cpu = (0, utils_1.getRandom)(2, 15);
|
|
16
|
+
this.mem = (0, utils_1.getRandom)(5, 33);
|
|
17
|
+
this.command = options.command;
|
|
18
|
+
this.protected = options.protected;
|
|
19
|
+
}
|
|
20
|
+
return Process;
|
|
21
|
+
}());
|
|
22
|
+
exports.Process = Process;
|
package/dist/types/router.d.ts
CHANGED
|
@@ -2,12 +2,17 @@ import { FSDeviceType } from '../fs';
|
|
|
2
2
|
import { Computer } from './computer';
|
|
3
3
|
import { Device, DeviceOptions } from './device';
|
|
4
4
|
import { Port } from './port';
|
|
5
|
+
import { User } from './user';
|
|
5
6
|
export interface RouterOptions extends DeviceOptions {
|
|
6
7
|
bssid: string;
|
|
7
8
|
essid: string;
|
|
8
9
|
publicIp?: string;
|
|
9
10
|
domain: string;
|
|
10
11
|
whoisDescription: string;
|
|
12
|
+
wifi: {
|
|
13
|
+
credentials: User;
|
|
14
|
+
name: string;
|
|
15
|
+
};
|
|
11
16
|
}
|
|
12
17
|
export declare class Router extends Device {
|
|
13
18
|
bssid: string;
|
|
@@ -16,7 +21,12 @@ export declare class Router extends Device {
|
|
|
16
21
|
domain: string;
|
|
17
22
|
whoisDescription: string;
|
|
18
23
|
devices: Map<string, Device>;
|
|
24
|
+
wifi: {
|
|
25
|
+
credentials: User;
|
|
26
|
+
name: string;
|
|
27
|
+
};
|
|
19
28
|
constructor(options: RouterOptions);
|
|
29
|
+
changeIp(sourceIp: string, targetIp: string): boolean;
|
|
20
30
|
getDeviceType(): FSDeviceType;
|
|
21
31
|
getRouter(): Device;
|
|
22
32
|
findByLanIp(ip: string): Device;
|
package/dist/types/router.js
CHANGED
|
@@ -56,8 +56,18 @@ var Router = /** @class */ (function (_super) {
|
|
|
56
56
|
_this.domain = options.domain;
|
|
57
57
|
_this.whoisDescription = options.whoisDescription;
|
|
58
58
|
_this.devices = new Map();
|
|
59
|
+
_this.wifi = options.wifi;
|
|
59
60
|
return _this;
|
|
60
61
|
}
|
|
62
|
+
Router.prototype.changeIp = function (sourceIp, targetIp) {
|
|
63
|
+
if (!this.devices.has(sourceIp) || this.devices.has(targetIp)) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
var device = this.devices.get(sourceIp);
|
|
67
|
+
this.devices.delete(sourceIp);
|
|
68
|
+
this.devices.set(targetIp, device);
|
|
69
|
+
device.localIp = targetIp;
|
|
70
|
+
};
|
|
61
71
|
Router.prototype.getDeviceType = function () {
|
|
62
72
|
return fs_1.FSDeviceType.Router;
|
|
63
73
|
};
|
package/dist/types/user.d.ts
CHANGED
package/dist/utils.d.ts
CHANGED
|
@@ -14,9 +14,11 @@ export interface PermissionMap {
|
|
|
14
14
|
o: PermissionSegment;
|
|
15
15
|
}
|
|
16
16
|
export declare function getServiceLibrary(service: Service): Library | null;
|
|
17
|
-
export declare function
|
|
18
|
-
export declare function
|
|
17
|
+
export declare function getFlagTypeByString(flag: PermissionSegment, flagType: string): boolean;
|
|
18
|
+
export declare function setFlagTypeByString(flag: PermissionSegment, flagType: string, value: boolean): void;
|
|
19
19
|
export declare function getPermissionSegmentByString(flag: PermissionMap, userType: string): PermissionSegment;
|
|
20
|
-
export declare function
|
|
20
|
+
export declare function transformFlagsToString(permissionMap: PermissionMap): string;
|
|
21
21
|
export declare function getUserPath(user: User): string;
|
|
22
22
|
export declare function getTraversalPath(path: string | null, currentLocation?: string[]): null | string[];
|
|
23
|
+
export declare function getRandom(min: number, max: number): number;
|
|
24
|
+
export declare function getRandomInt(min: number, max: number): number;
|
package/dist/utils.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getTraversalPath = exports.getUserPath = exports.
|
|
6
|
+
exports.getRandomInt = exports.getRandom = exports.getTraversalPath = exports.getUserPath = exports.transformFlagsToString = exports.getPermissionSegmentByString = exports.setFlagTypeByString = exports.getFlagTypeByString = exports.getServiceLibrary = exports.isLanIp = exports.isValidIp = void 0;
|
|
7
|
+
var random_seed_1 = __importDefault(require("random-seed"));
|
|
4
8
|
var library_1 = require("./types/library");
|
|
5
9
|
var service_1 = require("./types/service");
|
|
6
10
|
function isValidIp(target) {
|
|
@@ -30,7 +34,7 @@ function getServiceLibrary(service) {
|
|
|
30
34
|
return null;
|
|
31
35
|
}
|
|
32
36
|
exports.getServiceLibrary = getServiceLibrary;
|
|
33
|
-
function
|
|
37
|
+
function getFlagTypeByString(flag, flagType) {
|
|
34
38
|
switch (flagType) {
|
|
35
39
|
case 'x':
|
|
36
40
|
return flag.x;
|
|
@@ -42,8 +46,8 @@ function getPermissionSegmentValueByString(flag, flagType) {
|
|
|
42
46
|
throw new Error('Invalid permission flag type.');
|
|
43
47
|
}
|
|
44
48
|
}
|
|
45
|
-
exports.
|
|
46
|
-
function
|
|
49
|
+
exports.getFlagTypeByString = getFlagTypeByString;
|
|
50
|
+
function setFlagTypeByString(flag, flagType, value) {
|
|
47
51
|
switch (flagType) {
|
|
48
52
|
case 'x': {
|
|
49
53
|
flag.x = value;
|
|
@@ -61,7 +65,7 @@ function setPermissionSegmentValueByString(flag, flagType, value) {
|
|
|
61
65
|
throw new Error('Invalid permission flag type.');
|
|
62
66
|
}
|
|
63
67
|
}
|
|
64
|
-
exports.
|
|
68
|
+
exports.setFlagTypeByString = setFlagTypeByString;
|
|
65
69
|
function getPermissionSegmentByString(flag, userType) {
|
|
66
70
|
switch (userType) {
|
|
67
71
|
case 'u':
|
|
@@ -75,13 +79,13 @@ function getPermissionSegmentByString(flag, userType) {
|
|
|
75
79
|
}
|
|
76
80
|
}
|
|
77
81
|
exports.getPermissionSegmentByString = getPermissionSegmentByString;
|
|
78
|
-
function
|
|
82
|
+
function transformFlagsToString(permissionMap) {
|
|
79
83
|
var segments = [permissionMap.u, permissionMap.g, permissionMap.o].map(function (map) {
|
|
80
84
|
return "".concat(map.r ? 'r' : '-').concat(map.w ? 'w' : '-').concat(map.x ? 'x' : '-');
|
|
81
85
|
});
|
|
82
|
-
return segments.join('');
|
|
86
|
+
return "d".concat(segments.join(''));
|
|
83
87
|
}
|
|
84
|
-
exports.
|
|
88
|
+
exports.transformFlagsToString = transformFlagsToString;
|
|
85
89
|
function getUserPath(user) {
|
|
86
90
|
switch (user.username) {
|
|
87
91
|
case 'root':
|
|
@@ -110,3 +114,12 @@ function getTraversalPath(path, currentLocation) {
|
|
|
110
114
|
return path.split('/');
|
|
111
115
|
}
|
|
112
116
|
exports.getTraversalPath = getTraversalPath;
|
|
117
|
+
var utilRng = random_seed_1.default.create('util');
|
|
118
|
+
function getRandom(min, max) {
|
|
119
|
+
return utilRng.floatBetween(min, max);
|
|
120
|
+
}
|
|
121
|
+
exports.getRandom = getRandom;
|
|
122
|
+
function getRandomInt(min, max) {
|
|
123
|
+
return utilRng.intBetween(min, max);
|
|
124
|
+
}
|
|
125
|
+
exports.getRandomInt = getRandomInt;
|
package/package.json
CHANGED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Router } from './router';
|
|
2
|
-
export interface WifiNetworkOptions {
|
|
3
|
-
password: string;
|
|
4
|
-
router: Router;
|
|
5
|
-
mac: string;
|
|
6
|
-
percentage: number;
|
|
7
|
-
name: string;
|
|
8
|
-
}
|
|
9
|
-
export declare class WifiNetwork {
|
|
10
|
-
password: string;
|
|
11
|
-
router: Router;
|
|
12
|
-
mac: string;
|
|
13
|
-
percentage: number;
|
|
14
|
-
name: string;
|
|
15
|
-
constructor(options: WifiNetworkOptions);
|
|
16
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WifiNetwork = void 0;
|
|
4
|
-
var WifiNetwork = /** @class */ (function () {
|
|
5
|
-
function WifiNetwork(options) {
|
|
6
|
-
this.password = options.password;
|
|
7
|
-
this.router = options.router;
|
|
8
|
-
this.mac = options.mac;
|
|
9
|
-
this.percentage = options.percentage;
|
|
10
|
-
this.name = options.name;
|
|
11
|
-
}
|
|
12
|
-
return WifiNetwork;
|
|
13
|
-
}());
|
|
14
|
-
exports.WifiNetwork = WifiNetwork;
|