@p0security/cli 0.18.9 → 0.18.11
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/__tests__/login.test.js +17 -10
- package/build/dist/commands/__tests__/login.test.js.map +1 -1
- package/build/dist/commands/__tests__/request.test.js +64 -9
- package/build/dist/commands/__tests__/request.test.js.map +1 -1
- package/build/dist/commands/__tests__/ssh.test.js +75 -51
- package/build/dist/commands/__tests__/ssh.test.js.map +1 -1
- package/build/dist/commands/allow.js +3 -2
- package/build/dist/commands/allow.js.map +1 -1
- package/build/dist/commands/aws/__tests__/role.test.js +18 -12
- package/build/dist/commands/aws/__tests__/role.test.js.map +1 -1
- package/build/dist/commands/aws/index.js +0 -4
- package/build/dist/commands/aws/index.js.map +1 -1
- package/build/dist/commands/aws/permission-set.js +1 -2
- package/build/dist/commands/aws/permission-set.js.map +1 -1
- package/build/dist/commands/aws/role.js +1 -2
- package/build/dist/commands/aws/role.js.map +1 -1
- package/build/dist/commands/grant.js +12 -2
- package/build/dist/commands/grant.js.map +1 -1
- package/build/dist/commands/index.js +2 -0
- package/build/dist/commands/index.js.map +1 -1
- package/build/dist/commands/kubeconfig.js +1 -2
- package/build/dist/commands/kubeconfig.js.map +1 -1
- package/build/dist/commands/login.js +19 -27
- package/build/dist/commands/login.js.map +1 -1
- package/build/dist/commands/logout.d.ts +2 -0
- package/build/dist/commands/logout.js +61 -0
- package/build/dist/commands/logout.js.map +1 -0
- package/build/dist/commands/ls.js +1 -2
- package/build/dist/commands/ls.js.map +1 -1
- package/build/dist/commands/request.js +12 -2
- package/build/dist/commands/request.js.map +1 -1
- package/build/dist/commands/scp.js +1 -2
- package/build/dist/commands/scp.js.map +1 -1
- package/build/dist/commands/shared/index.d.ts +7 -4
- package/build/dist/commands/shared/index.js +20 -45
- package/build/dist/commands/shared/index.js.map +1 -1
- package/build/dist/commands/shared/request.d.ts +3 -0
- package/build/dist/commands/shared/request.js +105 -59
- package/build/dist/commands/shared/request.js.map +1 -1
- package/build/dist/commands/shared/ssh.js +21 -12
- package/build/dist/commands/shared/ssh.js.map +1 -1
- package/build/dist/commands/ssh-proxy.js +2 -3
- package/build/dist/commands/ssh-proxy.js.map +1 -1
- package/build/dist/commands/ssh-resolve.js +2 -3
- package/build/dist/commands/ssh-resolve.js.map +1 -1
- package/build/dist/commands/ssh.js +3 -4
- package/build/dist/commands/ssh.js.map +1 -1
- package/build/dist/common/keys.js +40 -7
- package/build/dist/common/keys.js.map +1 -1
- package/build/dist/drivers/__tests__/api.test.d.ts +1 -0
- package/build/dist/drivers/__tests__/api.test.js +688 -0
- package/build/dist/drivers/__tests__/api.test.js.map +1 -0
- package/build/dist/drivers/api.d.ts +11 -1
- package/build/dist/drivers/api.js +247 -30
- package/build/dist/drivers/api.js.map +1 -1
- package/build/dist/drivers/auth/index.js +23 -10
- package/build/dist/drivers/auth/index.js.map +1 -1
- package/build/dist/drivers/auth/path.d.ts +2 -0
- package/build/dist/drivers/auth/path.js +19 -1
- package/build/dist/drivers/auth/path.js.map +1 -1
- package/build/dist/drivers/config.js +10 -18
- package/build/dist/drivers/config.js.map +1 -1
- package/build/dist/drivers/env.d.ts +1 -1
- package/build/dist/drivers/env.js +2 -2
- package/build/dist/drivers/env.js.map +1 -1
- package/build/dist/drivers/firestore.d.ts +0 -10
- package/build/dist/drivers/firestore.js +3 -43
- package/build/dist/drivers/firestore.js.map +1 -1
- package/build/dist/drivers/org.d.ts +1 -0
- package/build/dist/drivers/org.js +43 -0
- package/build/dist/drivers/org.js.map +1 -0
- package/build/dist/opentelemetry/instrumentation.js +6 -14
- package/build/dist/opentelemetry/instrumentation.js.map +1 -1
- package/build/dist/plugins/aws/config.js +3 -6
- package/build/dist/plugins/aws/config.js.map +1 -1
- package/build/dist/plugins/azure/login.d.ts +3 -0
- package/build/dist/plugins/azure/login.js +86 -0
- package/build/dist/plugins/azure/login.js.map +1 -0
- package/build/dist/plugins/google/ssh-key.js +9 -9
- package/build/dist/plugins/google/ssh-key.js.map +1 -1
- package/build/dist/plugins/kubeconfig/index.js +12 -10
- package/build/dist/plugins/kubeconfig/index.js.map +1 -1
- package/build/dist/plugins/login.js +11 -9
- package/build/dist/plugins/login.js.map +1 -1
- package/build/dist/plugins/self-hosted/ssh.d.ts +3 -0
- package/build/dist/plugins/self-hosted/ssh.js +80 -0
- package/build/dist/plugins/self-hosted/ssh.js.map +1 -0
- package/build/dist/plugins/self-hosted/types.d.ts +31 -0
- package/build/dist/plugins/self-hosted/types.js +3 -0
- package/build/dist/plugins/self-hosted/types.js.map +1 -0
- package/build/dist/types/identity.d.ts +2 -1
- package/build/dist/types/org.d.ts +2 -0
- package/build/dist/types/request.d.ts +1 -1
- package/build/dist/types/ssh.d.ts +5 -4
- package/build/dist/types/ssh.js +6 -1
- package/build/dist/types/ssh.js.map +1 -1
- package/build/dist/util.d.ts +3 -0
- package/build/dist/util.js +19 -3
- package/build/dist/util.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -4
- package/build/dist/testing/firestore.d.ts +0 -2
- package/build/dist/testing/firestore.js +0 -17
- package/build/dist/testing/firestore.js.map +0 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** Copyright © 2024-present P0 Security
|
|
2
|
+
|
|
3
|
+
This file is part of @p0security/cli
|
|
4
|
+
|
|
5
|
+
@p0security/cli is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License.
|
|
6
|
+
|
|
7
|
+
@p0security/cli is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
8
|
+
|
|
9
|
+
You should have received a copy of the GNU General Public License along with @p0security/cli. If not, see <https://www.gnu.org/licenses/>.
|
|
10
|
+
**/
|
|
11
|
+
import { PermissionSpec } from "../../types/request";
|
|
12
|
+
import { CliPermissionSpec } from "../../types/ssh";
|
|
13
|
+
import { CommonSshPermissionSpec } from "../ssh/types";
|
|
14
|
+
export type SelfHostedSshPermission = CommonSshPermissionSpec & {
|
|
15
|
+
provider: "self-hosted";
|
|
16
|
+
resource: {
|
|
17
|
+
hostname: string;
|
|
18
|
+
publicIp: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export type SelfHostedSshGenerated = {
|
|
22
|
+
linuxUserName: string;
|
|
23
|
+
publicKey: string;
|
|
24
|
+
};
|
|
25
|
+
export type SelfHostedSshPermissionSpec = PermissionSpec<"ssh", SelfHostedSshPermission, SelfHostedSshGenerated>;
|
|
26
|
+
export type SelfHostedSsh = CliPermissionSpec<SelfHostedSshPermissionSpec, undefined>;
|
|
27
|
+
export type SelfHostedSshRequest = {
|
|
28
|
+
type: "self-hosted";
|
|
29
|
+
linuxUserName: string;
|
|
30
|
+
id: string;
|
|
31
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/plugins/self-hosted/types.ts"],"names":[],"mappings":""}
|
|
@@ -37,6 +37,8 @@ type BaseOrgData = {
|
|
|
37
37
|
usePassword?: boolean;
|
|
38
38
|
tenantId: string;
|
|
39
39
|
config: Config;
|
|
40
|
+
/** Swaps API auth to tokens from the ssoProvider, rather than firebase */
|
|
41
|
+
useProviderToken?: boolean;
|
|
40
42
|
};
|
|
41
43
|
/** Publicly readable organization data */
|
|
42
44
|
export type RawOrgData = BaseOrgData & ({
|
|
@@ -12,14 +12,15 @@ import { CommandArgs, SshAdditionalSetup } from "../commands/shared/ssh";
|
|
|
12
12
|
import { AwsSsh, AwsSshPermissionSpec, AwsSshRequest } from "../plugins/aws/types";
|
|
13
13
|
import { AzureSsh, AzureSshPermissionSpec, AzureSshRequest } from "../plugins/azure/types";
|
|
14
14
|
import { GcpSsh, GcpSshPermissionSpec, GcpSshRequest } from "../plugins/google/types";
|
|
15
|
+
import { SelfHostedSsh, SelfHostedSshPermissionSpec, SelfHostedSshRequest } from "../plugins/self-hosted/types";
|
|
15
16
|
import { Authn } from "./identity";
|
|
16
17
|
import { PermissionRequest } from "./request";
|
|
17
|
-
export type CliSshRequest = AwsSsh | AzureSsh | GcpSsh;
|
|
18
|
-
export type PluginSshRequest = AwsSshPermissionSpec | AzureSshPermissionSpec | GcpSshPermissionSpec;
|
|
18
|
+
export type CliSshRequest = AwsSsh | AzureSsh | GcpSsh | SelfHostedSsh;
|
|
19
|
+
export type PluginSshRequest = AwsSshPermissionSpec | AzureSshPermissionSpec | GcpSshPermissionSpec | SelfHostedSshPermissionSpec;
|
|
19
20
|
export type CliPermissionSpec<P extends PluginSshRequest, C extends object | undefined> = P & {
|
|
20
21
|
cliLocalData: C;
|
|
21
22
|
};
|
|
22
|
-
export declare const SupportedSshProviders: readonly ["aws", "azure", "gcloud"];
|
|
23
|
+
export declare const SupportedSshProviders: readonly ["aws", "azure", "gcloud", "self-hosted"];
|
|
23
24
|
export type SupportedSshProvider = (typeof SupportedSshProviders)[number];
|
|
24
25
|
export type AccessPattern = {
|
|
25
26
|
/** If the error matches this string, indicates that access is not provisioned */
|
|
@@ -87,4 +88,4 @@ export type SshProvider<PR extends PluginSshRequest = PluginSshRequest, O extend
|
|
|
87
88
|
debug?: boolean;
|
|
88
89
|
}) => Promise<PermissionRequest<CliSshRequest>>;
|
|
89
90
|
};
|
|
90
|
-
export type SshRequest = AwsSshRequest | AzureSshRequest | GcpSshRequest;
|
|
91
|
+
export type SshRequest = AwsSshRequest | AzureSshRequest | GcpSshRequest | SelfHostedSshRequest;
|
package/build/dist/types/ssh.js
CHANGED
|
@@ -2,5 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SupportedSshProviders = void 0;
|
|
4
4
|
// The prefix of installed SSH accounts in P0 is the provider name
|
|
5
|
-
exports.SupportedSshProviders = [
|
|
5
|
+
exports.SupportedSshProviders = [
|
|
6
|
+
"aws",
|
|
7
|
+
"azure",
|
|
8
|
+
"gcloud",
|
|
9
|
+
"self-hosted",
|
|
10
|
+
];
|
|
6
11
|
//# sourceMappingURL=ssh.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../../src/types/ssh.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../../src/types/ssh.ts"],"names":[],"mappings":";;;AAgDA,kEAAkE;AACrD,QAAA,qBAAqB,GAAG;IACnC,KAAK;IACL,OAAO;IACP,QAAQ;IACR,aAAa;CACL,CAAC"}
|
package/build/dist/util.d.ts
CHANGED
|
@@ -47,3 +47,6 @@ export declare const unexpectedValueError: (value: any) => Error;
|
|
|
47
47
|
*/
|
|
48
48
|
export declare const ciEquals: (a: string, b: string) => boolean;
|
|
49
49
|
export declare const delay: (ms: number) => Promise<unknown>;
|
|
50
|
+
type OperatingSystem = "linux" | "mac" | "unknown" | "win";
|
|
51
|
+
export declare const getOperatingSystem: () => OperatingSystem;
|
|
52
|
+
export {};
|
package/build/dist/util.js
CHANGED
|
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.delay = exports.ciEquals = exports.unexpectedValueError = exports.assertNever = exports.conditionalAbortBeforeThrow = exports.throwAssertNever = exports.exec = exports.timeout = exports.sleep = exports.P0_PATH = exports.getAppPath = void 0;
|
|
15
|
+
exports.getOperatingSystem = exports.delay = exports.ciEquals = exports.unexpectedValueError = exports.assertNever = exports.conditionalAbortBeforeThrow = exports.throwAssertNever = exports.exec = exports.timeout = exports.sleep = exports.P0_PATH = exports.getAppPath = void 0;
|
|
16
16
|
/** Copyright © 2024-present P0 Security
|
|
17
17
|
|
|
18
18
|
This file is part of @p0security/cli
|
|
@@ -31,9 +31,9 @@ const node_process_1 = require("node:process");
|
|
|
31
31
|
const typescript_1 = require("typescript");
|
|
32
32
|
const getAppPath = () => { var _a; return (_a = node_process_1.env.P0_APP_PATH) !== null && _a !== void 0 ? _a : "p0"; };
|
|
33
33
|
exports.getAppPath = getAppPath;
|
|
34
|
-
exports.P0_PATH = node_path_1.default.join(node_os_1.default.homedir(), env_1.
|
|
34
|
+
exports.P0_PATH = node_path_1.default.join(node_os_1.default.homedir(), env_1.defaultConfig.environment === "production"
|
|
35
35
|
? ".p0"
|
|
36
|
-
: `.p0-${env_1.
|
|
36
|
+
: `.p0-${env_1.defaultConfig.environment}`);
|
|
37
37
|
/** Waits the specified delay (in ms)
|
|
38
38
|
*
|
|
39
39
|
* The returned promise is cancelable:
|
|
@@ -124,4 +124,20 @@ const ciEquals = (a, b) => a.localeCompare(b, undefined, { sensitivity: "accent"
|
|
|
124
124
|
exports.ciEquals = ciEquals;
|
|
125
125
|
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
126
126
|
exports.delay = delay;
|
|
127
|
+
const getOperatingSystem = () => {
|
|
128
|
+
const platform = process.platform;
|
|
129
|
+
if (platform === "win32") {
|
|
130
|
+
return "win";
|
|
131
|
+
}
|
|
132
|
+
else if (platform === "darwin") {
|
|
133
|
+
return "mac";
|
|
134
|
+
}
|
|
135
|
+
else if (platform === "linux") {
|
|
136
|
+
return "linux";
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
return "unknown";
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
exports.getOperatingSystem = getOperatingSystem;
|
|
127
143
|
//# sourceMappingURL=util.js.map
|
package/build/dist/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA;;;;;;;;;GASG;AACH,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
|