mirror of
https://github.com/AikidoSec/safe-chain.git
synced 2026-05-26 12:10:49 +00:00
Merge branch 'improved-shell-integration' into zsh-safe-chain-detection
This commit is contained in:
commit
e12faf6f45
5 changed files with 32 additions and 16 deletions
|
|
@ -1,4 +1,4 @@
|
|||
import { execSync } from "child_process";
|
||||
import { execSync, spawnSync } from "child_process";
|
||||
import * as os from "os";
|
||||
import fs from "fs";
|
||||
|
||||
|
|
@ -13,11 +13,12 @@ export const knownAikidoTools = [
|
|||
export function doesExecutableExistOnSystem(executableName) {
|
||||
try {
|
||||
if (os.platform() === "win32") {
|
||||
execSync(`where ${executableName}`, { stdio: "ignore" });
|
||||
const result = spawnSync("where", [executableName], { stdio: "ignore" });
|
||||
return result.status === 0;
|
||||
} else {
|
||||
execSync(`which ${executableName}`, { stdio: "ignore" });
|
||||
const result = spawnSync("which", [executableName], { stdio: "ignore" });
|
||||
return result.status === 0;
|
||||
}
|
||||
return true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -46,6 +47,7 @@ export function addLineToFile(filePath, line) {
|
|||
if (!fs.existsSync(filePath)) {
|
||||
fs.writeFileSync(filePath, "", "utf-8");
|
||||
}
|
||||
|
||||
const fileContent = fs.readFileSync(filePath, "utf-8");
|
||||
const updatedContent = fileContent + os.EOL + line;
|
||||
fs.writeFileSync(filePath, updatedContent, "utf-8");
|
||||
|
|
|
|||
|
|
@ -27,10 +27,10 @@ function setup(tools) {
|
|||
const startupFile = execAndGetOutput(startupFileCommand, executableName);
|
||||
teardown();
|
||||
|
||||
for (const tool of tools) {
|
||||
for (const { tool, aikidoCommand } of tools) {
|
||||
addLineToFile(
|
||||
startupFile,
|
||||
`alias ${tool}="aikido-${tool}" # Safe-chain alias for ${tool}`
|
||||
`alias ${tool}="${aikidoCommand}" # Safe-chain alias for ${tool}`
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,11 @@ describe("Bash shell integration", () => {
|
|||
|
||||
describe("setup", () => {
|
||||
it("should add aliases for all provided tools", () => {
|
||||
const tools = ["npm", "npx", "yarn"];
|
||||
const tools = [
|
||||
{ tool: "npm", aikidoCommand: "aikido-npm" },
|
||||
{ tool: "npx", aikidoCommand: "aikido-npx" },
|
||||
{ tool: "yarn", aikidoCommand: "aikido-yarn" }
|
||||
];
|
||||
|
||||
const result = bash.setup(tools);
|
||||
assert.strictEqual(result, true);
|
||||
|
|
@ -85,7 +89,7 @@ describe("Bash shell integration", () => {
|
|||
"utf-8"
|
||||
);
|
||||
|
||||
const tools = ["npm"];
|
||||
const tools = [{ tool: "npm", aikidoCommand: "aikido-npm" }];
|
||||
bash.setup(tools);
|
||||
|
||||
const content = fs.readFileSync(mockStartupFile, "utf-8");
|
||||
|
|
@ -171,7 +175,10 @@ describe("Bash shell integration", () => {
|
|||
|
||||
describe("integration tests", () => {
|
||||
it("should handle complete setup and teardown cycle", () => {
|
||||
const tools = ["npm", "yarn"];
|
||||
const tools = [
|
||||
{ tool: "npm", aikidoCommand: "aikido-npm" },
|
||||
{ tool: "yarn", aikidoCommand: "aikido-yarn" }
|
||||
];
|
||||
|
||||
// Setup
|
||||
bash.setup(tools);
|
||||
|
|
@ -187,7 +194,7 @@ describe("Bash shell integration", () => {
|
|||
});
|
||||
|
||||
it("should handle multiple setup calls", () => {
|
||||
const tools = ["npm"];
|
||||
const tools = [{ tool: "npm", aikidoCommand: "aikido-npm" }];
|
||||
|
||||
bash.setup(tools);
|
||||
bash.setup(tools);
|
||||
|
|
|
|||
|
|
@ -27,10 +27,10 @@ function setup(tools) {
|
|||
const startupFile = execAndGetOutput(startupFileCommand, executableName);
|
||||
teardown();
|
||||
|
||||
for (const tool of tools) {
|
||||
for (const { tool, aikidoCommand } of tools) {
|
||||
addLineToFile(
|
||||
startupFile,
|
||||
`alias ${tool} "aikido-${tool}" # Safe-chain alias for ${tool}`
|
||||
`alias ${tool} "${aikidoCommand}" # Safe-chain alias for ${tool}`
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,11 @@ describe("Fish shell integration", () => {
|
|||
|
||||
describe("setup", () => {
|
||||
it("should add aliases for all provided tools", () => {
|
||||
const tools = ["npm", "npx", "yarn"];
|
||||
const tools = [
|
||||
{ tool: "npm", aikidoCommand: "aikido-npm" },
|
||||
{ tool: "npx", aikidoCommand: "aikido-npx" },
|
||||
{ tool: "yarn", aikidoCommand: "aikido-yarn" }
|
||||
];
|
||||
|
||||
const result = fish.setup(tools);
|
||||
assert.strictEqual(result, true);
|
||||
|
|
@ -75,7 +79,7 @@ describe("Fish shell integration", () => {
|
|||
// Pre-populate file with existing aliases
|
||||
fs.writeFileSync(mockStartupFile, 'alias npm "old-npm"\nalias npx "old-npx"\n', "utf-8");
|
||||
|
||||
const tools = ["npm"];
|
||||
const tools = [{ tool: "npm", aikidoCommand: "aikido-npm" }];
|
||||
fish.setup(tools);
|
||||
|
||||
const content = fs.readFileSync(mockStartupFile, "utf-8");
|
||||
|
|
@ -161,7 +165,10 @@ describe("Fish shell integration", () => {
|
|||
|
||||
describe("integration tests", () => {
|
||||
it("should handle complete setup and teardown cycle", () => {
|
||||
const tools = ["npm", "yarn"];
|
||||
const tools = [
|
||||
{ tool: "npm", aikidoCommand: "aikido-npm" },
|
||||
{ tool: "yarn", aikidoCommand: "aikido-yarn" }
|
||||
];
|
||||
|
||||
// Setup
|
||||
fish.setup(tools);
|
||||
|
|
@ -177,7 +184,7 @@ describe("Fish shell integration", () => {
|
|||
});
|
||||
|
||||
it("should handle multiple setup calls", () => {
|
||||
const tools = ["npm"];
|
||||
const tools = [{ tool: "npm", aikidoCommand: "aikido-npm" }];
|
||||
|
||||
fish.setup(tools);
|
||||
fish.setup(tools);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue