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.
@@ -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;
@@ -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.connectLocal = function (router) {
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
- computer.router = router;
180
- computer.localIp = localIp;
181
- router.devices.set(localIp, computer);
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 e_1, _a;
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 (e_1_1) { e_1 = { error: e_1_1 }; }
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 (e_1) throw e_1.error; }
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
  }
@@ -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, WifiNetwork } from '../types';
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 ? 'wlan0' : 'eth0',
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';
@@ -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: string;
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: string;
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;
@@ -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 e_1, _a;
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 (e_1_1) { e_1 = { error: e_1_1 }; }
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 (e_1) throw e_1.error; }
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
- copyEntity(toFolder: Entity): Entity;
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
- copyEntity(toFolder: Entity): File;
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
- removeFile(entityName: string): boolean;
83
- copyEntity(toFolder: Entity): Folder;
84
- traverseChildren(callback: (v: Entity) => void, skip?: boolean): 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.copyEntity = function (toFolder) {
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
- }, toFolder);
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
- // g is ignored for now
127
- // todo: add group logic
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.copyEntity = function (toFolder) {
148
- var newFile = new File({
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
- }, toFolder);
155
- return newFile;
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.removeFile(file.name);
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.removeFile = function (entityName) {
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.copyEntity = function (toFolder) {
260
- var newFolder = new Folder({
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
  };
@@ -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';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WifiNetwork = 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.Port = exports.NetworkDevice = exports.Library = exports.FSEntity = exports.Folder = exports.FileType = exports.File = exports.EMailMessage = exports.EMail = exports.Device = exports.Computer = void 0;
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,11 @@
1
+ export interface LocationOptions {
2
+ x: number;
3
+ y: number;
4
+ }
5
+ export declare class Location {
6
+ x: number;
7
+ y: number;
8
+ constructor(options: LocationOptions);
9
+ offset(x: number, y: number): Location;
10
+ fork(): Location;
11
+ }
@@ -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,5 @@
1
+ export declare enum NetCard {
2
+ Ethernet = "ETHERNET",
3
+ Wifi = "WIFI",
4
+ None = "NONE"
5
+ }
@@ -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: string;
3
+ type: NetCard;
3
4
  id: string;
4
5
  active: boolean;
5
6
  }
6
7
  export declare class NetworkDevice {
7
- type: string;
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;
@@ -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;
@@ -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
  };
@@ -1,8 +1,8 @@
1
1
  export interface UserOptions {
2
2
  username: string;
3
3
  password: string;
4
- email: string;
5
- bankNumber: string;
4
+ email?: string;
5
+ bankNumber?: string;
6
6
  }
7
7
  export declare class User {
8
8
  username: string;
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 getPermissionSegmentValueByString(flag: PermissionSegment, flagType: string): boolean;
18
- export declare function setPermissionSegmentValueByString(flag: PermissionSegment, flagType: string, value: boolean): void;
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 transformFlagsToPermissions(permissionMap: PermissionMap): string;
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.transformFlagsToPermissions = exports.getPermissionSegmentByString = exports.setPermissionSegmentValueByString = exports.getPermissionSegmentValueByString = exports.getServiceLibrary = exports.isLanIp = exports.isValidIp = void 0;
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 getPermissionSegmentValueByString(flag, flagType) {
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.getPermissionSegmentValueByString = getPermissionSegmentValueByString;
46
- function setPermissionSegmentValueByString(flag, flagType, value) {
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.setPermissionSegmentValueByString = setPermissionSegmentValueByString;
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 transformFlagsToPermissions(permissionMap) {
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.transformFlagsToPermissions = transformFlagsToPermissions;
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,6 +1,6 @@
1
1
  {
2
2
  "name": "greybel-mock-environment",
3
- "version": "1.2.2",
3
+ "version": "1.2.4",
4
4
  "description": "Mock environment",
5
5
  "main": "dist/index",
6
6
  "typings": "dist/index",
@@ -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;