@p0security/cli 0.20.6 → 0.20.7
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/build/dist/commands/login.js +6 -6
- package/build/dist/commands/login.js.map +1 -1
- package/build/dist/plugins/azure/ssh.js +8 -1
- package/build/dist/plugins/azure/ssh.js.map +1 -1
- package/build/dist/plugins/azure/tunnel.js +60 -26
- package/build/dist/plugins/azure/tunnel.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -64,8 +64,6 @@ const login = (args, options) => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
64
64
|
if (identity && loggedIn) {
|
|
65
65
|
// If no org is provided, and the user is logged in, use the one from the identity
|
|
66
66
|
orgSlug = identity.org.slug;
|
|
67
|
-
(0, stdio_1.print2)(`You are currently logged in to the ${orgSlug} organization.`);
|
|
68
|
-
(0, stdio_1.print2)(`The current session expires in ${formatTimeLeft(tokenTimeRemaining)}.`);
|
|
69
67
|
}
|
|
70
68
|
else {
|
|
71
69
|
throw "The organization ID is required. Please provide it as an argument or set the P0_ORG environment variable.";
|
|
@@ -77,10 +75,6 @@ const login = (args, options) => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
77
75
|
// Force login if user is switching organizations or if --refresh argument is provided
|
|
78
76
|
loggedIn = false;
|
|
79
77
|
}
|
|
80
|
-
else {
|
|
81
|
-
(0, stdio_1.print2)(`You are already logged in to the ${orgSlug} organization.`);
|
|
82
|
-
(0, stdio_1.print2)(`The current session expires in ${formatTimeLeft(tokenTimeRemaining)}.`);
|
|
83
|
-
}
|
|
84
78
|
}
|
|
85
79
|
}
|
|
86
80
|
if (options === null || options === void 0 ? void 0 : options.debug) {
|
|
@@ -106,6 +100,12 @@ const login = (args, options) => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
106
100
|
if (!loggedIn) {
|
|
107
101
|
(0, stdio_1.print2)(`You are now logged in to the ${orgSlug} organization, and can use the p0 CLI.`);
|
|
108
102
|
}
|
|
103
|
+
else {
|
|
104
|
+
(0, stdio_1.print2)(`You are currently logged in to the ${orgSlug} organization.`);
|
|
105
|
+
}
|
|
106
|
+
if (tokenTimeRemaining > 0) {
|
|
107
|
+
(0, stdio_1.print2)(`The current session expires in ${formatTimeLeft(tokenTimeRemaining)}.`);
|
|
108
|
+
}
|
|
109
109
|
});
|
|
110
110
|
exports.login = login;
|
|
111
111
|
const loginCommand = (yargs) => yargs.command("login [org]", "Log in using a web browser", (yargs) => yargs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/login.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;GASG;AACH,wCAAkD;AAClD,0CAMyB;AACzB,8CAA+C;AAC/C,oDAA0D;AAC1D,wCAA4C;AAC5C,4CAA0C;AAC1C,4CAAkD;AAKlD,MAAM,gCAAgC,GAAG,CAAC,GAAG,EAAE,CAAC;AAEhD,MAAM,aAAa,GAAG,CAAO,WAAoB,EAAE,KAAe,EAAE,EAAE;;IACpE,MAAM,MAAM,GACV,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,WAAW,mCACxB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,KAAK,EAAE;QACT,IAAA,cAAM,EAAC,uBAAuB,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,SAAS,EAAE,CAAC,CAAC;KACtD;IAED,MAAM,OAAO,GAAG,MAAM,IAAI,sBAAc,CAAC,MAAM,CAAC,CAAC;IAEjD,IAAI,CAAC,OAAO;QAAE,MAAM,yCAAyC,CAAC;IAE9D,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAEjD,MAAM,IAAA,oBAAa,EAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC,CAAA,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,EAAE;IACzC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,kCAAkC;IACzF,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,YAAY,GAAG,EAAE,CAAC;IAC5B,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3B,CAAC,CAAC;AAEF;;;;;;GAMG;AACI,MAAM,KAAK,GAAG,CACnB,IAAyC,EACzC,OAAyD,EACzD,EAAE;IACF,qDAAqD;IACrD,MAAM,QAAQ,GAAG,MAAM,IAAA,sBAAe,GAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAEhE,MAAM,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,yBAAkB,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvE,IAAI,QAAQ,GAAG,kBAAkB,GAAG,gCAAgC,CAAC;IACrE,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,QAAQ,IAAI,QAAQ,EAAE;YACxB,kFAAkF;YAClF,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,7 @@ This file is part of @p0security/cli
|
|
|
24
24
|
You should have received a copy of the GNU General Public License along with @p0security/cli. If not, see <https://www.gnu.org/licenses/>.
|
|
25
25
|
**/
|
|
26
26
|
const ssh_1 = require("../../commands/shared/ssh");
|
|
27
|
+
const util_1 = require("../../util");
|
|
27
28
|
const shared_1 = require("../ssh/shared");
|
|
28
29
|
const auth_1 = require("./auth");
|
|
29
30
|
const install_1 = require("./install");
|
|
@@ -72,7 +73,13 @@ exports.azureSshProvider = {
|
|
|
72
73
|
}
|
|
73
74
|
return undefined;
|
|
74
75
|
},
|
|
75
|
-
proxyCommand: (_, port) =>
|
|
76
|
+
proxyCommand: (_, port) => {
|
|
77
|
+
const targetPort = port !== null && port !== void 0 ? port : "22";
|
|
78
|
+
// On Windows, use ncat (from nmap). On Unix/Mac, use nc.
|
|
79
|
+
// Both have the same command line syntax: command localhost port
|
|
80
|
+
const command = (0, util_1.getOperatingSystem)() === "win" ? "ncat" : "nc";
|
|
81
|
+
return [command, "localhost", targetPort];
|
|
82
|
+
},
|
|
76
83
|
reproCommands: (request, additionalData) => {
|
|
77
84
|
var _a;
|
|
78
85
|
const { command: azAccountClearExe, args: azAccountClearArgs } = (0, auth_1.azAccountClearCommand)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../../../src/plugins/azure/ssh.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA;;;;;;;;;GASG;AACH,mDAA0D;AAE1D,0CAA2D;AAC3D,iCAKgB;AAChB,uCAA4C;AAC5C,qCAKkB;AAClB,qCAAyE;AAMzE,0DAA6B;AAE7B,MAAM,2BAA2B,GAAG;IAClC;QACE,mEAAmE;QACnE,OAAO,EAAE,uCAAuC;KACjD;CACO,CAAC;AAEX,MAAM,yBAAyB,GAAG;IAChC;QACE,OAAO,EAAE,8BAA8B;KACxC;CACO,CAAC;AAEX,qFAAqF;AACrF,kFAAkF;AAClF,iFAAiF;AACjF,kFAAkF;AAClF,yDAAyD;AACzD,MAAM,4BAA4B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtC,QAAA,gBAAgB,GAIzB;IACF,+CAA+C;IAC/C,kBAAkB,EAAE,GAAS,EAAE;QAC7B,4CAA4C;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC,CAAA;IAED,aAAa,EAAE,GAAS,EAAE;QACxB,IAAI,CAAC,CAAC,MAAM,IAAA,yBAAe,GAAE,CAAC,EAAE;YAC9B,MAAM,uDAAuD,CAAC;SAC/D;IACH,CAAC,CAAA;IAED,YAAY,EAAE,iBAAiB;IAE/B,oBAAoB,EAAE,qDAAqD;IAE3E,wBAAwB;IACxB,oBAAoB,EAAE,SAAS;IAE/B,oBAAoB,EAAE,4BAA4B;IAElD,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;QACxC,IAAI,IAAA,mBAAa,EAAC,OAAO,CAAC,EAAE;YAC1B,uCACK,OAAO;gBACV,6GAA6G;gBAC7G,mEAAmE;gBACnE,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,CAAC,KAAK,CAAC,IAClB;SACH;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,YAAY,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../../../src/plugins/azure/ssh.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,7 @@ const retry_1 = require("../../common/retry");
|
|
|
24
24
|
const stdio_1 = require("../../drivers/stdio");
|
|
25
25
|
const util_1 = require("../../util");
|
|
26
26
|
const auth_1 = require("./auth");
|
|
27
|
+
const node_child_process_1 = require("node:child_process");
|
|
27
28
|
const TUNNEL_READY_STRING = "Tunnel is ready";
|
|
28
29
|
// Ignore these debug messages from the tunnel process; they are far too noisy and spam the terminal with useless info
|
|
29
30
|
// anytime the SSH/SCP session has network activity.
|
|
@@ -67,11 +68,20 @@ const spawnBastionTunnelInBackground = (request, port, options) => {
|
|
|
67
68
|
const { command, args } = (0, exports.azBastionTunnelCommand)(request, port);
|
|
68
69
|
if (debug)
|
|
69
70
|
(0, stdio_1.print2)("Spawning Azure Bastion tunnel process...");
|
|
70
|
-
|
|
71
|
-
//
|
|
71
|
+
const isWindows = (0, util_1.getOperatingSystem)() === "win";
|
|
72
|
+
// Spawn the process:
|
|
73
|
+
// - On Unix: use detached mode so it's in its own process group for easy cleanup
|
|
74
|
+
// - On Windows: don't use detached mode as it doesn't work reliably with cmd.exe wrapper
|
|
75
|
+
// and process tree killing; instead rely on unref() and proper stdio handling
|
|
72
76
|
const child = (0, util_1.spawnWithCleanEnv)(command, args, {
|
|
73
|
-
detached:
|
|
77
|
+
detached: !isWindows,
|
|
78
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
79
|
+
windowsHide: true, // Prevent console window on Windows
|
|
74
80
|
});
|
|
81
|
+
// On Windows, unref immediately to prevent blocking, since we can't rely on detached mode
|
|
82
|
+
if (isWindows) {
|
|
83
|
+
child.unref();
|
|
84
|
+
}
|
|
75
85
|
child.on("exit", (code) => {
|
|
76
86
|
processExited = true;
|
|
77
87
|
if (code === 0) {
|
|
@@ -116,40 +126,64 @@ const spawnBastionTunnelInBackground = (request, port, options) => {
|
|
|
116
126
|
}
|
|
117
127
|
if (str.includes(TUNNEL_READY_STRING)) {
|
|
118
128
|
(0, stdio_1.print2)("Azure Bastion tunnel is ready.");
|
|
129
|
+
// On Unix, unref the child process so the parent can exit without waiting for it
|
|
130
|
+
// (On Windows, we already unref'd immediately after spawn)
|
|
131
|
+
if (!isWindows) {
|
|
132
|
+
child.unref();
|
|
133
|
+
}
|
|
119
134
|
resolve({
|
|
120
135
|
killTunnel: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
121
136
|
if (processSignalledToExit || processExited)
|
|
122
137
|
return;
|
|
123
138
|
processSignalledToExit = true;
|
|
124
139
|
if (child.pid) {
|
|
125
|
-
// Kill the process and all its descendents via killing the process group; this is only possible
|
|
126
|
-
// because we launched the process with `detached: true` above. This is necessary because `az` is
|
|
127
|
-
// actually a bash script that spawns a Python process, and we need to kill the Python process as well.
|
|
128
|
-
// SIGINT is equivalent to pressing Ctrl-C in the terminal; allows for the tunnel process to perform any
|
|
129
|
-
// necessary cleanup of its own before exiting. The negative PID is what indicates that we want to kill
|
|
130
|
-
// the whole process group.
|
|
131
140
|
try {
|
|
132
|
-
if (
|
|
133
|
-
|
|
141
|
+
if (isWindows) {
|
|
142
|
+
// On Windows, use taskkill to kill the process tree since negative PIDs don't work
|
|
143
|
+
// /F = force, /T = kill tree (all child processes), /PID = process ID
|
|
144
|
+
if (debug) {
|
|
145
|
+
(0, stdio_1.print2)(`Killing Azure Bastion tunnel process tree (${child.pid}) on Windows...`);
|
|
146
|
+
}
|
|
147
|
+
const killProcess = (0, node_child_process_1.spawn)("taskkill", [
|
|
148
|
+
"/F",
|
|
149
|
+
"/T",
|
|
150
|
+
"/PID",
|
|
151
|
+
child.pid.toString(),
|
|
152
|
+
]);
|
|
153
|
+
killProcess.on("exit", (code) => {
|
|
154
|
+
if (debug && code !== 0) {
|
|
155
|
+
(0, stdio_1.print2)(`taskkill exited with code ${code} (process may have already exited)`);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
134
158
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
if (
|
|
143
|
-
|
|
144
|
-
|
|
159
|
+
else {
|
|
160
|
+
// Kill the process and all its descendents via killing the process group; this is only possible
|
|
161
|
+
// because we launched the process with `detached: true` above. This is necessary because `az` is
|
|
162
|
+
// actually a bash script that spawns a Python process, and we need to kill the Python process as well.
|
|
163
|
+
// SIGINT is equivalent to pressing Ctrl-C in the terminal; allows for the tunnel process to perform any
|
|
164
|
+
// necessary cleanup of its own before exiting. The negative PID is what indicates that we want to kill
|
|
165
|
+
// the whole process group.
|
|
166
|
+
if (debug) {
|
|
167
|
+
(0, stdio_1.print2)(`Sending SIGINT to Azure Bastion tunnel process (${child.pid})...`);
|
|
168
|
+
}
|
|
169
|
+
process.kill(-child.pid, "SIGINT");
|
|
170
|
+
// Give the tunnel a chance to quit gracefully after the SIGINT
|
|
171
|
+
const SPIN_WAIT_MS = 250;
|
|
172
|
+
for (let spins = 0; spins < 20; spins++) {
|
|
173
|
+
yield (0, util_1.sleep)(SPIN_WAIT_MS);
|
|
174
|
+
if (processExited) {
|
|
175
|
+
if (debug) {
|
|
176
|
+
(0, stdio_1.print2)(`Azure Bastion tunnel process exited after SIGINT after ${spins * SPIN_WAIT_MS} ms.`);
|
|
177
|
+
}
|
|
178
|
+
return;
|
|
145
179
|
}
|
|
146
|
-
return;
|
|
147
180
|
}
|
|
181
|
+
// If still not exited, force kill
|
|
182
|
+
if (debug) {
|
|
183
|
+
(0, stdio_1.print2)(`Azure Bastion tunnel process (${child.pid}) not responding, sending SIGKILL...`);
|
|
184
|
+
}
|
|
185
|
+
process.kill(-child.pid, "SIGKILL");
|
|
148
186
|
}
|
|
149
|
-
if (debug) {
|
|
150
|
-
(0, stdio_1.print2)(`Azure Bastion tunnel process (${child.pid}) not responding, sending SIGKILL...`);
|
|
151
|
-
}
|
|
152
|
-
process.kill(-child.pid, "SIGKILL");
|
|
153
187
|
}
|
|
154
188
|
catch (error) {
|
|
155
189
|
// Ignore the error and move on; we might as well just exit without waiting since we can't control
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../../../src/plugins/azure/tunnel.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;GASG;AACH,8CAAoD;AACpD,+CAA6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../../../src/plugins/azure/tunnel.ts"],"names":[],"mappings":"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"}
|