mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-04-21 17:17:49 +01:00
96 lines
3.6 KiB
TypeScript
96 lines
3.6 KiB
TypeScript
/**
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
*/
|
|
|
|
import { TerminalKind } from "../../../Contracts/ViewModels";
|
|
import { userContext } from "../../../UserContext";
|
|
|
|
export const getCommands = (terminalKind: TerminalKind, key: string) => {
|
|
let databaseacc = userContext.databaseAccount;
|
|
let endpoint;
|
|
switch (terminalKind) {
|
|
case TerminalKind.Postgres:
|
|
endpoint = databaseacc.properties.postgresqlEndpoint;
|
|
break;
|
|
case TerminalKind.Mongo:
|
|
endpoint = databaseacc.properties.mongoEndpoint;
|
|
break;
|
|
case TerminalKind.VCoreMongo:
|
|
endpoint = databaseacc.properties.vcoreMongoEndpoint;
|
|
break;
|
|
case TerminalKind.Cassandra:
|
|
endpoint = databaseacc.properties.cassandraEndpoint;
|
|
break;
|
|
default:
|
|
throw new Error("Unknown Terminal Kind");
|
|
}
|
|
|
|
let config = {
|
|
host: getHostFromUrl(endpoint),
|
|
name: databaseacc.name,
|
|
password: key,
|
|
endpoint: endpoint
|
|
};
|
|
|
|
return commands(terminalKind, config).join("\n").concat("\n");
|
|
};
|
|
|
|
export interface CommandConfig {
|
|
host: string,
|
|
name: string,
|
|
password: string,
|
|
endpoint: string
|
|
}
|
|
|
|
export const commands = (terminalKind: TerminalKind, config?: CommandConfig): string[] => {
|
|
switch (terminalKind) {
|
|
case TerminalKind.Postgres:
|
|
return [
|
|
"curl -s https://ipinfo.io",
|
|
"curl -LO https://ftp.postgresql.org/pub/source/v15.2/postgresql-15.2.tar.bz2",
|
|
"tar -xvjf postgresql-15.2.tar.bz2",
|
|
"cd postgresql-15.2",
|
|
"mkdir ~/pgsql",
|
|
"curl -LO https://ftp.gnu.org/gnu/readline/readline-8.1.tar.gz",
|
|
"tar -xvzf readline-8.1.tar.gz",
|
|
"cd readline-8.1",
|
|
"./configure --prefix=$HOME/pgsql"
|
|
];
|
|
case TerminalKind.Mongo || TerminalKind.VCoreMongo:
|
|
return [
|
|
"curl -s https://ipinfo.io",
|
|
"curl -LO https://downloads.mongodb.com/compass/mongosh-2.3.8-linux-x64.tgz",
|
|
"tar -xvzf mongosh-2.3.8-linux-x64.tgz",
|
|
"mkdir -p ~/mongosh && mv mongosh-2.3.8-linux-x64/* ~/mongosh/",
|
|
"echo 'export PATH=$PATH:$HOME/mongosh/bin' >> ~/.bashrc",
|
|
"source ~/.bashrc",
|
|
"mongosh --version",
|
|
`mongosh --host ${config.host} --port 10255 --username ${config.name} --password ${config.password} --ssl --sslAllowInvalidCertificates`
|
|
];
|
|
case TerminalKind.Cassandra:
|
|
return [
|
|
"curl -s https://ipinfo.io",
|
|
"curl -LO https://archive.apache.org/dist/cassandra/5.0.3/apache-cassandra-5.0.3-bin.tar.gz",
|
|
"tar -xvzf apache-cassandra-5.0.3-bin.tar.gz",
|
|
"mkdir -p ~/cassandra && mv apache-cassandra-5.0.3/* ~/cassandra/",
|
|
"echo 'export PATH=$PATH:$HOME/cassandra/bin' >> ~/.bashrc",
|
|
"echo 'export SSL_VERSION=TLSv1_2' >> ~/.bashrc",
|
|
"echo 'export SSL_VALIDATE=false' >> ~/.bashrc",
|
|
"source ~/.bashrc",
|
|
|
|
`cqlsh ${config.host} 10350 -u ${config.name} -p ${config.password} --ssl --protocol-version=4`
|
|
];
|
|
default:
|
|
return ["echo Unknown Shell"];
|
|
}
|
|
}
|
|
|
|
const getHostFromUrl = (mongoEndpoint: string): string => {
|
|
try {
|
|
const url = new URL(mongoEndpoint);
|
|
return url.hostname;
|
|
} catch (error) {
|
|
console.error("Invalid Mongo Endpoint URL:", error);
|
|
return "";
|
|
}
|
|
}; |