typescript-virtual-container 1.1.1-b → 1.1.1-c
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/.vscode/settings.json +1 -1
- package/dist/SSHClient/index.d.ts +138 -0
- package/dist/SSHClient/index.d.ts.map +1 -0
- package/dist/SSHClient/index.js +216 -0
- package/dist/SSHMimic/exec.d.ts +4 -0
- package/dist/SSHMimic/exec.d.ts.map +1 -0
- package/dist/SSHMimic/exec.js +21 -0
- package/dist/SSHMimic/executor.d.ts +9 -0
- package/dist/SSHMimic/executor.d.ts.map +1 -0
- package/dist/SSHMimic/executor.js +131 -0
- package/dist/SSHMimic/hostKey.d.ts +2 -0
- package/dist/SSHMimic/hostKey.d.ts.map +1 -0
- package/dist/SSHMimic/hostKey.js +17 -0
- package/dist/SSHMimic/index.d.ts +39 -0
- package/dist/SSHMimic/index.d.ts.map +1 -0
- package/dist/SSHMimic/index.js +113 -0
- package/dist/SSHMimic/loginFormat.d.ts +2 -0
- package/dist/SSHMimic/loginFormat.d.ts.map +1 -0
- package/dist/SSHMimic/loginFormat.js +10 -0
- package/dist/SSHMimic/prompt.d.ts +2 -0
- package/dist/SSHMimic/prompt.d.ts.map +1 -0
- package/dist/SSHMimic/prompt.js +9 -0
- package/dist/VirtualFileSystem/archive.d.ts +5 -0
- package/dist/VirtualFileSystem/archive.d.ts.map +1 -0
- package/dist/VirtualFileSystem/archive.js +56 -0
- package/dist/VirtualFileSystem/index.d.ts +131 -0
- package/dist/VirtualFileSystem/index.d.ts.map +1 -0
- package/dist/VirtualFileSystem/index.js +355 -0
- package/dist/VirtualFileSystem/internalTypes.d.ts +18 -0
- package/dist/VirtualFileSystem/internalTypes.d.ts.map +1 -0
- package/dist/VirtualFileSystem/internalTypes.js +0 -0
- package/dist/VirtualFileSystem/path.d.ts +9 -0
- package/dist/VirtualFileSystem/path.d.ts.map +1 -0
- package/dist/VirtualFileSystem/path.js +49 -0
- package/dist/VirtualFileSystem/snapshot.d.ts +5 -0
- package/dist/VirtualFileSystem/snapshot.d.ts.map +1 -0
- package/dist/VirtualFileSystem/snapshot.js +59 -0
- package/dist/VirtualFileSystem/tree.d.ts +3 -0
- package/dist/VirtualFileSystem/tree.d.ts.map +1 -0
- package/dist/VirtualFileSystem/tree.js +19 -0
- package/dist/VirtualShell/index.d.ts +86 -0
- package/dist/VirtualShell/index.d.ts.map +1 -0
- package/dist/VirtualShell/index.js +129 -0
- package/dist/VirtualShell/shell.d.ts +5 -0
- package/dist/VirtualShell/shell.d.ts.map +1 -0
- package/dist/VirtualShell/shell.js +473 -0
- package/dist/VirtualShell/shellParser.d.ts +4 -0
- package/dist/VirtualShell/shellParser.d.ts.map +1 -0
- package/dist/VirtualShell/shellParser.js +207 -0
- package/dist/VirtualUserManager/index.d.ts +168 -0
- package/dist/VirtualUserManager/index.d.ts.map +1 -0
- package/dist/VirtualUserManager/index.js +375 -0
- package/dist/commands/adduser.d.ts +3 -0
- package/dist/commands/adduser.d.ts.map +1 -0
- package/dist/commands/adduser.js +18 -0
- package/dist/commands/cat.d.ts +3 -0
- package/dist/commands/cat.d.ts.map +1 -0
- package/dist/commands/cat.js +15 -0
- package/dist/commands/cd.d.ts +3 -0
- package/dist/commands/cd.d.ts.map +1 -0
- package/dist/commands/cd.js +17 -0
- package/dist/commands/clear.d.ts +3 -0
- package/dist/commands/clear.d.ts.map +1 -0
- package/dist/commands/clear.js +5 -0
- package/dist/commands/command-helpers.d.ts +23 -0
- package/dist/commands/command-helpers.d.ts.map +1 -0
- package/dist/commands/command-helpers.js +139 -0
- package/dist/commands/curl.d.ts +3 -0
- package/dist/commands/curl.d.ts.map +1 -0
- package/dist/commands/curl.js +44 -0
- package/dist/commands/deluser.d.ts +3 -0
- package/dist/commands/deluser.d.ts.map +1 -0
- package/dist/commands/deluser.js +15 -0
- package/dist/commands/echo.d.ts +3 -0
- package/dist/commands/echo.d.ts.map +1 -0
- package/dist/commands/echo.js +22 -0
- package/dist/commands/env.d.ts +3 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +18 -0
- package/dist/commands/exit.d.ts +3 -0
- package/dist/commands/exit.d.ts.map +1 -0
- package/dist/commands/exit.js +5 -0
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +34 -0
- package/dist/commands/grep.d.ts +3 -0
- package/dist/commands/grep.d.ts.map +1 -0
- package/dist/commands/grep.js +69 -0
- package/dist/commands/help.d.ts +3 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +7 -0
- package/dist/commands/helpers.d.ts +26 -0
- package/dist/commands/helpers.d.ts.map +1 -0
- package/dist/commands/helpers.js +160 -0
- package/dist/commands/hostname.d.ts +3 -0
- package/dist/commands/hostname.d.ts.map +1 -0
- package/dist/commands/hostname.js +5 -0
- package/dist/commands/htop.d.ts +3 -0
- package/dist/commands/htop.d.ts.map +1 -0
- package/dist/commands/htop.js +10 -0
- package/dist/commands/index.d.ts +8 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +212 -0
- package/dist/commands/ls.d.ts +3 -0
- package/dist/commands/ls.d.ts.map +1 -0
- package/dist/commands/ls.js +47 -0
- package/dist/commands/mkdir.d.ts +3 -0
- package/dist/commands/mkdir.d.ts.map +1 -0
- package/dist/commands/mkdir.js +21 -0
- package/dist/commands/nano.d.ts +3 -0
- package/dist/commands/nano.d.ts.map +1 -0
- package/dist/commands/nano.js +27 -0
- package/dist/commands/neofetch.d.ts +3 -0
- package/dist/commands/neofetch.d.ts.map +1 -0
- package/dist/commands/neofetch.js +32 -0
- package/dist/commands/pwd.d.ts +3 -0
- package/dist/commands/pwd.d.ts.map +1 -0
- package/dist/commands/pwd.js +5 -0
- package/dist/commands/rm.d.ts +3 -0
- package/dist/commands/rm.d.ts.map +1 -0
- package/dist/commands/rm.js +29 -0
- package/dist/commands/set.d.ts +7 -0
- package/dist/commands/set.d.ts.map +1 -0
- package/dist/commands/set.js +64 -0
- package/dist/commands/sh.d.ts +4 -0
- package/dist/commands/sh.d.ts.map +1 -0
- package/dist/commands/sh.js +45 -0
- package/dist/commands/su.d.ts +3 -0
- package/dist/commands/su.d.ts.map +1 -0
- package/dist/commands/su.js +24 -0
- package/dist/commands/sudo.d.ts +3 -0
- package/dist/commands/sudo.d.ts.map +1 -0
- package/dist/commands/sudo.js +47 -0
- package/dist/commands/touch.d.ts +3 -0
- package/dist/commands/touch.d.ts.map +1 -0
- package/dist/commands/touch.js +18 -0
- package/dist/commands/tree.d.ts +3 -0
- package/dist/commands/tree.d.ts.map +1 -0
- package/dist/commands/tree.js +11 -0
- package/dist/commands/unset.d.ts +3 -0
- package/dist/commands/unset.d.ts.map +1 -0
- package/dist/commands/unset.js +15 -0
- package/dist/commands/wget.d.ts +3 -0
- package/dist/commands/wget.d.ts.map +1 -0
- package/dist/commands/wget.js +113 -0
- package/dist/commands/who.d.ts +3 -0
- package/dist/commands/who.d.ts.map +1 -0
- package/dist/commands/who.js +15 -0
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +5 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/modules/neofetch.d.ts +19 -0
- package/dist/modules/neofetch.d.ts.map +1 -0
- package/dist/modules/neofetch.js +284 -0
- package/dist/modules/shellInteractive.d.ts +6 -0
- package/dist/modules/shellInteractive.d.ts.map +1 -0
- package/dist/modules/shellInteractive.js +26 -0
- package/dist/modules/shellRuntime.d.ts +11 -0
- package/dist/modules/shellRuntime.d.ts.map +1 -0
- package/dist/modules/shellRuntime.js +52 -0
- package/dist/standalone.d.ts +2 -0
- package/dist/standalone.d.ts.map +1 -0
- package/dist/standalone.js +25 -0
- package/dist/types/commands.d.ts +89 -0
- package/dist/types/commands.d.ts.map +1 -0
- package/dist/types/commands.js +0 -0
- package/dist/types/pipeline.d.ts +23 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +0 -0
- package/dist/types/streams.d.ts +32 -0
- package/dist/types/streams.d.ts.map +1 -0
- package/dist/types/streams.js +0 -0
- package/dist/types/vfs.d.ts +71 -0
- package/dist/types/vfs.d.ts.map +1 -0
- package/dist/types/vfs.js +0 -0
- package/package.json +4 -2
- package/src/VirtualShell/shell.ts +3 -3
- package/src/commands/neofetch.ts +1 -1
- package/{modules → src/modules}/neofetch.ts +56 -51
- package/{modules → src/modules}/shellInteractive.ts +16 -4
- package/tsconfig.json +19 -8
- /package/{modules → src/modules}/shellRuntime.ts +0 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/** Parse a shell command line into a structured pipeline */
|
|
2
|
+
export function parseShellPipeline(rawInput) {
|
|
3
|
+
const trimmed = rawInput.trim();
|
|
4
|
+
if (!trimmed) {
|
|
5
|
+
return { commands: [], isValid: true };
|
|
6
|
+
}
|
|
7
|
+
const commands = [];
|
|
8
|
+
const tokenized = tokenizePipeline(trimmed);
|
|
9
|
+
if (tokenized.error) {
|
|
10
|
+
return {
|
|
11
|
+
commands: [],
|
|
12
|
+
isValid: false,
|
|
13
|
+
error: tokenized.error,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
const pipeTokens = tokenized.tokens;
|
|
17
|
+
for (const token of pipeTokens) {
|
|
18
|
+
const cmd = parseCommandWithRedirections(token);
|
|
19
|
+
if (!cmd.isValid) {
|
|
20
|
+
return {
|
|
21
|
+
commands: [],
|
|
22
|
+
isValid: false,
|
|
23
|
+
error: cmd.error,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (cmd.command) {
|
|
27
|
+
commands.push(cmd.command);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return { commands, isValid: true };
|
|
31
|
+
}
|
|
32
|
+
/** Tokenize input by pipes, respecting quoted strings */
|
|
33
|
+
function tokenizePipeline(input) {
|
|
34
|
+
const tokens = [];
|
|
35
|
+
let current = "";
|
|
36
|
+
let inQuotes = false;
|
|
37
|
+
let quoteChar = "";
|
|
38
|
+
let i = 0;
|
|
39
|
+
while (i < input.length) {
|
|
40
|
+
const ch = input[i];
|
|
41
|
+
if ((ch === '"' || ch === "'") && (i === 0 || input[i - 1] !== "\\")) {
|
|
42
|
+
if (!inQuotes) {
|
|
43
|
+
inQuotes = true;
|
|
44
|
+
quoteChar = ch;
|
|
45
|
+
}
|
|
46
|
+
else if (ch === quoteChar) {
|
|
47
|
+
inQuotes = false;
|
|
48
|
+
}
|
|
49
|
+
current += ch;
|
|
50
|
+
i++;
|
|
51
|
+
}
|
|
52
|
+
else if (ch === "|" && !inQuotes) {
|
|
53
|
+
if (!current.trim()) {
|
|
54
|
+
return {
|
|
55
|
+
tokens: [],
|
|
56
|
+
error: "Syntax error near unexpected token '|'",
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
tokens.push(current.trim());
|
|
60
|
+
current = "";
|
|
61
|
+
i++;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
current += ch;
|
|
65
|
+
i++;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (inQuotes) {
|
|
69
|
+
return {
|
|
70
|
+
tokens: [],
|
|
71
|
+
error: "Syntax error: unterminated quote",
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if (!current.trim()) {
|
|
75
|
+
return {
|
|
76
|
+
tokens: [],
|
|
77
|
+
error: "Syntax error near unexpected token '|'",
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
tokens.push(current.trim());
|
|
81
|
+
return { tokens };
|
|
82
|
+
}
|
|
83
|
+
/** Parse a single command with its redirections (>, >>, <) */
|
|
84
|
+
function parseCommandWithRedirections(token) {
|
|
85
|
+
const parts = tokenizeCommand(token);
|
|
86
|
+
if (parts.length === 0) {
|
|
87
|
+
return { isValid: true };
|
|
88
|
+
}
|
|
89
|
+
const cmdParts = [];
|
|
90
|
+
let inputFile;
|
|
91
|
+
let outputFile;
|
|
92
|
+
let appendOutput = false;
|
|
93
|
+
let i = 0;
|
|
94
|
+
while (i < parts.length) {
|
|
95
|
+
const part = parts[i];
|
|
96
|
+
if (part === "<") {
|
|
97
|
+
i++;
|
|
98
|
+
if (i >= parts.length) {
|
|
99
|
+
return {
|
|
100
|
+
isValid: false,
|
|
101
|
+
error: "Syntax error: expected filename after <",
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
inputFile = parts[i];
|
|
105
|
+
i++;
|
|
106
|
+
}
|
|
107
|
+
else if (part === ">>") {
|
|
108
|
+
i++;
|
|
109
|
+
if (i >= parts.length) {
|
|
110
|
+
return {
|
|
111
|
+
isValid: false,
|
|
112
|
+
error: "Syntax error: expected filename after >>",
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
outputFile = parts[i];
|
|
116
|
+
appendOutput = true;
|
|
117
|
+
i++;
|
|
118
|
+
}
|
|
119
|
+
else if (part === ">") {
|
|
120
|
+
i++;
|
|
121
|
+
if (i >= parts.length) {
|
|
122
|
+
return {
|
|
123
|
+
isValid: false,
|
|
124
|
+
error: "Syntax error: expected filename after >",
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
outputFile = parts[i];
|
|
128
|
+
appendOutput = false;
|
|
129
|
+
i++;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
cmdParts.push(part);
|
|
133
|
+
i++;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (cmdParts.length === 0) {
|
|
137
|
+
return { isValid: true };
|
|
138
|
+
}
|
|
139
|
+
const name = cmdParts[0].toLowerCase();
|
|
140
|
+
const args = cmdParts.slice(1);
|
|
141
|
+
return {
|
|
142
|
+
command: {
|
|
143
|
+
name,
|
|
144
|
+
args,
|
|
145
|
+
inputFile,
|
|
146
|
+
outputFile,
|
|
147
|
+
appendOutput,
|
|
148
|
+
},
|
|
149
|
+
isValid: true,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/** Tokenize a command, respecting quotes and handling >> vs > */
|
|
153
|
+
function tokenizeCommand(input) {
|
|
154
|
+
const tokens = [];
|
|
155
|
+
let current = "";
|
|
156
|
+
let inQuotes = false;
|
|
157
|
+
let quoteChar = "";
|
|
158
|
+
let i = 0;
|
|
159
|
+
while (i < input.length) {
|
|
160
|
+
const ch = input[i];
|
|
161
|
+
const next = input[i + 1];
|
|
162
|
+
// Handle quotes
|
|
163
|
+
if ((ch === '"' || ch === "'") && (i === 0 || input[i - 1] !== "\\")) {
|
|
164
|
+
if (!inQuotes) {
|
|
165
|
+
inQuotes = true;
|
|
166
|
+
quoteChar = ch;
|
|
167
|
+
}
|
|
168
|
+
else if (ch === quoteChar) {
|
|
169
|
+
inQuotes = false;
|
|
170
|
+
quoteChar = "";
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
current += ch;
|
|
174
|
+
}
|
|
175
|
+
i++;
|
|
176
|
+
}
|
|
177
|
+
else if (ch === " " && !inQuotes) {
|
|
178
|
+
if (current) {
|
|
179
|
+
tokens.push(current);
|
|
180
|
+
current = "";
|
|
181
|
+
}
|
|
182
|
+
i++;
|
|
183
|
+
}
|
|
184
|
+
else if ((ch === ">" || ch === "<") && !inQuotes) {
|
|
185
|
+
if (current) {
|
|
186
|
+
tokens.push(current);
|
|
187
|
+
current = "";
|
|
188
|
+
}
|
|
189
|
+
if (ch === ">" && next === ">") {
|
|
190
|
+
tokens.push(">>");
|
|
191
|
+
i += 2;
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
tokens.push(ch);
|
|
195
|
+
i++;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
current += ch;
|
|
200
|
+
i++;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (current) {
|
|
204
|
+
tokens.push(current);
|
|
205
|
+
}
|
|
206
|
+
return tokens;
|
|
207
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import type VirtualFileSystem from "../VirtualFileSystem";
|
|
2
|
+
/** Persisted virtual user credential record. */
|
|
3
|
+
export interface VirtualUserRecord {
|
|
4
|
+
/** Unique login name. */
|
|
5
|
+
username: string;
|
|
6
|
+
/** Per-user random salt used for password hashing. */
|
|
7
|
+
salt: string;
|
|
8
|
+
/** Scrypt-derived password hash in hex encoding. */
|
|
9
|
+
passwordHash: string;
|
|
10
|
+
}
|
|
11
|
+
/** Runtime representation of authenticated SSH session. */
|
|
12
|
+
export interface VirtualActiveSession {
|
|
13
|
+
/** Stable session identifier (UUID). */
|
|
14
|
+
id: string;
|
|
15
|
+
/** Username bound to session. */
|
|
16
|
+
username: string;
|
|
17
|
+
/** Virtual terminal identifier (pts/*). */
|
|
18
|
+
tty: string;
|
|
19
|
+
/** Remote client IP or host label. */
|
|
20
|
+
remoteAddress: string;
|
|
21
|
+
/** ISO-8601 start timestamp. */
|
|
22
|
+
startedAt: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Persistent user, sudoers, and active-session manager for the shell runtime.
|
|
26
|
+
*
|
|
27
|
+
* Passwords are hashed with scrypt and stored in the backing virtual filesystem.
|
|
28
|
+
*/
|
|
29
|
+
export declare class VirtualUserManager {
|
|
30
|
+
private readonly vfs;
|
|
31
|
+
private readonly defaultRootPassword;
|
|
32
|
+
private readonly autoSudoForNewUsers;
|
|
33
|
+
private readonly usersPath;
|
|
34
|
+
private readonly sudoersPath;
|
|
35
|
+
private readonly quotasPath;
|
|
36
|
+
private readonly authDirPath;
|
|
37
|
+
private readonly users;
|
|
38
|
+
private readonly sudoers;
|
|
39
|
+
private readonly quotas;
|
|
40
|
+
private readonly activeSessions;
|
|
41
|
+
private nextTty;
|
|
42
|
+
/**
|
|
43
|
+
* Creates a user manager instance backed by a virtual filesystem.
|
|
44
|
+
*
|
|
45
|
+
* @param vfs Backing virtual filesystem used for persistence.
|
|
46
|
+
* @param defaultRootPassword Initial root password used when root is created.
|
|
47
|
+
* @param autoSudoForNewUsers Whether newly created users are added to sudoers.
|
|
48
|
+
*/
|
|
49
|
+
constructor(vfs: VirtualFileSystem, defaultRootPassword?: string, autoSudoForNewUsers?: boolean);
|
|
50
|
+
/**
|
|
51
|
+
* Loads users/sudoers from disk and ensures root account exists.
|
|
52
|
+
*/
|
|
53
|
+
initialize(): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Sets max allowed bytes under /home/<username>.
|
|
56
|
+
*
|
|
57
|
+
* @param username Target username.
|
|
58
|
+
* @param maxBytes Quota ceiling in bytes.
|
|
59
|
+
*/
|
|
60
|
+
setQuotaBytes(username: string, maxBytes: number): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Removes quota for a user.
|
|
63
|
+
*
|
|
64
|
+
* @param username Target username.
|
|
65
|
+
*/
|
|
66
|
+
clearQuota(username: string): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Gets configured quota in bytes for a user.
|
|
69
|
+
*
|
|
70
|
+
* @param username Target username.
|
|
71
|
+
* @returns Quota in bytes, or null when unlimited.
|
|
72
|
+
*/
|
|
73
|
+
getQuotaBytes(username: string): number | null;
|
|
74
|
+
/**
|
|
75
|
+
* Computes current usage under /home/<username>.
|
|
76
|
+
*
|
|
77
|
+
* @param username Target username.
|
|
78
|
+
* @returns Current usage in bytes.
|
|
79
|
+
*/
|
|
80
|
+
getUsageBytes(username: string): number;
|
|
81
|
+
/**
|
|
82
|
+
* Validates that writing file content would not exceed user quota.
|
|
83
|
+
*
|
|
84
|
+
* Quotas are enforced only for writes inside /home/<username>.
|
|
85
|
+
*
|
|
86
|
+
* @param username Authenticated user.
|
|
87
|
+
* @param targetPath Target file path.
|
|
88
|
+
* @param nextContent New file content.
|
|
89
|
+
*/
|
|
90
|
+
assertWriteWithinQuota(username: string, targetPath: string, nextContent: string | Buffer): void;
|
|
91
|
+
/**
|
|
92
|
+
* Verifies plaintext password against stored record.
|
|
93
|
+
*
|
|
94
|
+
* @param username User login name.
|
|
95
|
+
* @param password Plaintext password candidate.
|
|
96
|
+
* @returns True when credentials are valid.
|
|
97
|
+
*/
|
|
98
|
+
verifyPassword(username: string, password: string): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Creates user, home directory, and sudo access entry.
|
|
101
|
+
*
|
|
102
|
+
* @param username New username.
|
|
103
|
+
* @param password Initial plaintext password.
|
|
104
|
+
*/
|
|
105
|
+
addUser(username: string, password: string): Promise<void>;
|
|
106
|
+
/**
|
|
107
|
+
* Deletes existing non-root user account.
|
|
108
|
+
*
|
|
109
|
+
* @param username Username to remove.
|
|
110
|
+
*/
|
|
111
|
+
deleteUser(username: string): Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* Checks whether user is member of sudoers set.
|
|
114
|
+
*
|
|
115
|
+
* @param username Username to test.
|
|
116
|
+
* @returns True when user can run sudo.
|
|
117
|
+
*/
|
|
118
|
+
isSudoer(username: string): boolean;
|
|
119
|
+
/**
|
|
120
|
+
* Grants sudo access to existing user.
|
|
121
|
+
*
|
|
122
|
+
* @param username Username to promote.
|
|
123
|
+
*/
|
|
124
|
+
addSudoer(username: string): Promise<void>;
|
|
125
|
+
/**
|
|
126
|
+
* Revokes sudo access from user.
|
|
127
|
+
*
|
|
128
|
+
* @param username Username to demote.
|
|
129
|
+
*/
|
|
130
|
+
removeSudoer(username: string): Promise<void>;
|
|
131
|
+
/**
|
|
132
|
+
* Registers active session and allocates tty id.
|
|
133
|
+
*
|
|
134
|
+
* @param username Session username.
|
|
135
|
+
* @param remoteAddress Session source address.
|
|
136
|
+
* @returns Registered session descriptor.
|
|
137
|
+
*/
|
|
138
|
+
registerSession(username: string, remoteAddress: string): VirtualActiveSession;
|
|
139
|
+
/**
|
|
140
|
+
* Unregisters active session when connection closes.
|
|
141
|
+
*
|
|
142
|
+
* @param sessionId Session identifier; ignored when nullish.
|
|
143
|
+
*/
|
|
144
|
+
unregisterSession(sessionId: string | null | undefined): void;
|
|
145
|
+
/**
|
|
146
|
+
* Updates username/address metadata for existing session.
|
|
147
|
+
*
|
|
148
|
+
* @param sessionId Session identifier; ignored when nullish.
|
|
149
|
+
* @param username New username value.
|
|
150
|
+
* @param remoteAddress New remote address value.
|
|
151
|
+
*/
|
|
152
|
+
updateSession(sessionId: string | null | undefined, username: string, remoteAddress: string): void;
|
|
153
|
+
/**
|
|
154
|
+
* Lists active sessions sorted by start time.
|
|
155
|
+
*
|
|
156
|
+
* @returns Snapshot of active session descriptors.
|
|
157
|
+
*/
|
|
158
|
+
listActiveSessions(): VirtualActiveSession[];
|
|
159
|
+
private loadFromVfs;
|
|
160
|
+
private loadSudoersFromVfs;
|
|
161
|
+
private loadQuotasFromVfs;
|
|
162
|
+
private persist;
|
|
163
|
+
private createRecord;
|
|
164
|
+
private hashPassword;
|
|
165
|
+
private validateUsername;
|
|
166
|
+
private validatePassword;
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/VirtualUserManager/index.ts"],"names":[],"mappings":"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"}
|