typescript-virtual-container 1.1.2 → 1.1.3
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/VirtualUserManager/index.d.ts +7 -0
- package/dist/VirtualUserManager/index.d.ts.map +1 -1
- package/dist/VirtualUserManager/index.js +15 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -0
- package/dist/commands/passwd.d.ts +3 -0
- package/dist/commands/passwd.d.ts.map +1 -0
- package/dist/commands/passwd.js +21 -0
- package/dist/modules/neofetch.d.ts.map +1 -1
- package/dist/modules/neofetch.js +0 -1
- package/package.json +1 -1
- package/src/VirtualUserManager/index.ts +18 -0
- package/src/commands/index.ts +2 -0
- package/src/commands/passwd.ts +25 -0
- package/src/modules/neofetch.ts +0 -2
- package/tests/users.test.ts +13 -0
|
@@ -103,6 +103,13 @@ export declare class VirtualUserManager {
|
|
|
103
103
|
* @param password Initial plaintext password.
|
|
104
104
|
*/
|
|
105
105
|
addUser(username: string, password: string): Promise<void>;
|
|
106
|
+
/**
|
|
107
|
+
* Updates password for an existing user account.
|
|
108
|
+
*
|
|
109
|
+
* @param username Username to update.
|
|
110
|
+
* @param password New plaintext password.
|
|
111
|
+
*/
|
|
112
|
+
setPassword(username: string, password: string): Promise<void>;
|
|
106
113
|
/**
|
|
107
114
|
* Deletes existing non-root user account.
|
|
108
115
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/VirtualUserManager/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/VirtualUserManager/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -163,6 +163,21 @@ export class VirtualUserManager {
|
|
|
163
163
|
}
|
|
164
164
|
await this.persist();
|
|
165
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* Updates password for an existing user account.
|
|
168
|
+
*
|
|
169
|
+
* @param username Username to update.
|
|
170
|
+
* @param password New plaintext password.
|
|
171
|
+
*/
|
|
172
|
+
async setPassword(username, password) {
|
|
173
|
+
this.validateUsername(username);
|
|
174
|
+
this.validatePassword(password);
|
|
175
|
+
if (!this.users.has(username)) {
|
|
176
|
+
throw new Error(`passwd: user '${username}' does not exist`);
|
|
177
|
+
}
|
|
178
|
+
this.users.set(username, this.createRecord(username, password));
|
|
179
|
+
await this.persist();
|
|
180
|
+
}
|
|
166
181
|
/**
|
|
167
182
|
* Deletes existing non-root user account.
|
|
168
183
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EACX,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACX,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EACX,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACX,MAAM,mBAAmB,CAAC;AAgG3B,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAsBzD;AAED,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EAAE,EAChB,GAAG,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,GAClE,WAAW,CAMb;AAED,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAK1C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAKnE;AAsDD,wBAAsB,UAAU,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,YAAY,EACnB,KAAK,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,CAAC,CA6DxB"}
|
package/dist/commands/index.js
CHANGED
|
@@ -16,6 +16,7 @@ import { lsCommand } from "./ls";
|
|
|
16
16
|
import { mkdirCommand } from "./mkdir";
|
|
17
17
|
import { nanoCommand } from "./nano";
|
|
18
18
|
import { neofetchCommand } from "./neofetch";
|
|
19
|
+
import { passwdCommand } from "./passwd";
|
|
19
20
|
import { pwdCommand } from "./pwd";
|
|
20
21
|
import { rmCommand } from "./rm";
|
|
21
22
|
import { setCommand } from "./set";
|
|
@@ -45,6 +46,7 @@ const BASE_COMMANDS = [
|
|
|
45
46
|
neofetchCommand,
|
|
46
47
|
htopCommand,
|
|
47
48
|
adduserCommand,
|
|
49
|
+
passwdCommand,
|
|
48
50
|
deluserCommand,
|
|
49
51
|
sudoCommand,
|
|
50
52
|
suCommand,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passwd.d.ts","sourceRoot":"","sources":["../../src/commands/passwd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,aAAa,EAAE,WAsB3B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const passwdCommand = {
|
|
2
|
+
name: "passwd",
|
|
3
|
+
params: ["<username> <password>"],
|
|
4
|
+
run: async ({ authUser, args, shell }) => {
|
|
5
|
+
const [username, password] = args;
|
|
6
|
+
if (!username || !password) {
|
|
7
|
+
return {
|
|
8
|
+
stderr: "passwd: usage: passwd <username> <password>",
|
|
9
|
+
exitCode: 1,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
if (authUser !== "root" && authUser !== username) {
|
|
13
|
+
return { stderr: "passwd: permission denied", exitCode: 1 };
|
|
14
|
+
}
|
|
15
|
+
await shell.users.setPassword(username, password);
|
|
16
|
+
return {
|
|
17
|
+
stdout: `passwd: password updated for '${username}'`,
|
|
18
|
+
exitCode: 0,
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neofetch.d.ts","sourceRoot":"","sources":["../../src/modules/neofetch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAsGvD,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"neofetch.d.ts","sourceRoot":"","sources":["../../src/modules/neofetch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAsGvD,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAkKD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA0E9D"}
|
package/dist/modules/neofetch.js
CHANGED
|
@@ -193,7 +193,6 @@ function resolveDefaults(info) {
|
|
|
193
193
|
if (info.uptimeSeconds === undefined) {
|
|
194
194
|
info.uptimeSeconds = Math.round(processUptime);
|
|
195
195
|
}
|
|
196
|
-
console.log("Resolving neofetch info with shellProps:", shellProps);
|
|
197
196
|
return {
|
|
198
197
|
user: info.user,
|
|
199
198
|
host: info.host,
|
package/package.json
CHANGED
|
@@ -222,6 +222,24 @@ export class VirtualUserManager {
|
|
|
222
222
|
await this.persist();
|
|
223
223
|
}
|
|
224
224
|
|
|
225
|
+
/**
|
|
226
|
+
* Updates password for an existing user account.
|
|
227
|
+
*
|
|
228
|
+
* @param username Username to update.
|
|
229
|
+
* @param password New plaintext password.
|
|
230
|
+
*/
|
|
231
|
+
public async setPassword(username: string, password: string): Promise<void> {
|
|
232
|
+
this.validateUsername(username);
|
|
233
|
+
this.validatePassword(password);
|
|
234
|
+
|
|
235
|
+
if (!this.users.has(username)) {
|
|
236
|
+
throw new Error(`passwd: user '${username}' does not exist`);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
this.users.set(username, this.createRecord(username, password));
|
|
240
|
+
await this.persist();
|
|
241
|
+
}
|
|
242
|
+
|
|
225
243
|
/**
|
|
226
244
|
* Deletes existing non-root user account.
|
|
227
245
|
*
|
package/src/commands/index.ts
CHANGED
|
@@ -23,6 +23,7 @@ import { lsCommand } from "./ls";
|
|
|
23
23
|
import { mkdirCommand } from "./mkdir";
|
|
24
24
|
import { nanoCommand } from "./nano";
|
|
25
25
|
import { neofetchCommand } from "./neofetch";
|
|
26
|
+
import { passwdCommand } from "./passwd";
|
|
26
27
|
import { pwdCommand } from "./pwd";
|
|
27
28
|
import { rmCommand } from "./rm";
|
|
28
29
|
import { setCommand } from "./set";
|
|
@@ -53,6 +54,7 @@ const BASE_COMMANDS: ShellModule[] = [
|
|
|
53
54
|
neofetchCommand,
|
|
54
55
|
htopCommand,
|
|
55
56
|
adduserCommand,
|
|
57
|
+
passwdCommand,
|
|
56
58
|
deluserCommand,
|
|
57
59
|
sudoCommand,
|
|
58
60
|
suCommand,
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ShellModule } from "../types/commands";
|
|
2
|
+
|
|
3
|
+
export const passwdCommand: ShellModule = {
|
|
4
|
+
name: "passwd",
|
|
5
|
+
params: ["<username> <password>"],
|
|
6
|
+
run: async ({ authUser, args, shell }) => {
|
|
7
|
+
const [username, password] = args;
|
|
8
|
+
if (!username || !password) {
|
|
9
|
+
return {
|
|
10
|
+
stderr: "passwd: usage: passwd <username> <password>",
|
|
11
|
+
exitCode: 1,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (authUser !== "root" && authUser !== username) {
|
|
16
|
+
return { stderr: "passwd: permission denied", exitCode: 1 };
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
await shell.users.setPassword(username, password);
|
|
20
|
+
return {
|
|
21
|
+
stdout: `passwd: password updated for '${username}'`,
|
|
22
|
+
exitCode: 0,
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
};
|
package/src/modules/neofetch.ts
CHANGED
|
@@ -255,8 +255,6 @@ function resolveDefaults(info: NeofetchInfo): Required<NeofetchInfo> {
|
|
|
255
255
|
info.uptimeSeconds = Math.round(processUptime);
|
|
256
256
|
}
|
|
257
257
|
|
|
258
|
-
console.log("Resolving neofetch info with shellProps:", shellProps);
|
|
259
|
-
|
|
260
258
|
return {
|
|
261
259
|
user: info.user,
|
|
262
260
|
host: info.host,
|
package/tests/users.test.ts
CHANGED
|
@@ -38,6 +38,19 @@ describe("VirtualUserManager auto sudo", () => {
|
|
|
38
38
|
expect(users.isSudoer("bob")).toBe(false);
|
|
39
39
|
});
|
|
40
40
|
});
|
|
41
|
+
|
|
42
|
+
test("updates password for existing user", async () => {
|
|
43
|
+
await withTempVfs(async (vfs) => {
|
|
44
|
+
const users = new VirtualUserManager(vfs, "root-pass");
|
|
45
|
+
await users.initialize();
|
|
46
|
+
await users.addUser("alice", "alice-pass");
|
|
47
|
+
|
|
48
|
+
await users.setPassword("alice", "new-pass");
|
|
49
|
+
|
|
50
|
+
expect(users.verifyPassword("alice", "new-pass")).toBe(true);
|
|
51
|
+
expect(users.verifyPassword("alice", "alice-pass")).toBe(false);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
41
54
|
});
|
|
42
55
|
|
|
43
56
|
describe("VirtualUserManager quotas", () => {
|