This commit is contained in:
@ -11,53 +11,69 @@
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/evp.h>
|
||||
|
||||
using json = nlohmann::json;
|
||||
// using json = nlohmann::json;
|
||||
|
||||
// std::string base64_decode(const std::string& encoded) {
|
||||
// BIO* bio, *b64;
|
||||
// int decodeLen = (encoded.length() * 3) / 4;
|
||||
// std::string decoded(decodeLen, '\0');
|
||||
// bio = BIO_new_mem_buf(encoded.data(), encoded.length());
|
||||
// b64 = BIO_new(BIO_f_base64());
|
||||
// bio = BIO_push(b64, bio);
|
||||
// BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
|
||||
// int len = BIO_read(bio, &decoded[0], encoded.length());
|
||||
// decoded.resize(len > 0 ? len : 0);
|
||||
// BIO_free_all(bio);
|
||||
// return decoded;
|
||||
// }
|
||||
|
||||
// int main(int argc, char* argv[]) {
|
||||
// if (argc != 2) {
|
||||
// std::cerr << "Usage: runner BASE64COMMAND\n";
|
||||
// return -1;
|
||||
// }
|
||||
// std::string decoded = base64_decode(argv[1]);
|
||||
// json j;
|
||||
// try {
|
||||
// j = json::parse(decoded);
|
||||
// } catch (...) {
|
||||
// std::cerr << "Invalid JSON in decoded command\n";
|
||||
// return -1;
|
||||
// }
|
||||
// std::string command = j.value("command", "");
|
||||
// std::vector<std::string> args = j.value("args", std::vector<std::string>{});
|
||||
// std::string working_dir = j.value("working_dir", "");
|
||||
// std::map<std::string, std::string> env = j.value("env", std::map<std::string, std::string>{});
|
||||
// bool silent = j.value("silent", false);
|
||||
// bool interactive = j.value("interactive", false);
|
||||
// sSSHInfo* sshinfo = nullptr;
|
||||
// sSSHInfo ssh;
|
||||
// if (j.contains("sshinfo")) {
|
||||
// ssh.host = j["sshinfo"].value("host", "");
|
||||
// ssh.user = j["sshinfo"].value("user", "");
|
||||
// ssh.port = j["sshinfo"].value("port", "");
|
||||
// sshinfo = &ssh;
|
||||
// }
|
||||
// std::string output;
|
||||
// int ret = execute_cmd(command, args, working_dir, env, silent, interactive, sshinfo, &output);
|
||||
// if (!silent && !output.empty()) {
|
||||
// std::cout << output;
|
||||
// }
|
||||
// return ret;
|
||||
// }
|
||||
|
||||
std::string base64_decode(const std::string& encoded) {
|
||||
BIO* bio, *b64;
|
||||
int decodeLen = (encoded.length() * 3) / 4;
|
||||
std::string decoded(decodeLen, '\0');
|
||||
bio = BIO_new_mem_buf(encoded.data(), encoded.length());
|
||||
b64 = BIO_new(BIO_f_base64());
|
||||
bio = BIO_push(b64, bio);
|
||||
BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
|
||||
int len = BIO_read(bio, &decoded[0], encoded.length());
|
||||
decoded.resize(len > 0 ? len : 0);
|
||||
BIO_free_all(bio);
|
||||
return decoded;
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
if (argc != 2) {
|
||||
std::cerr << "Usage: runner BASE64COMMAND\n";
|
||||
return -1;
|
||||
}
|
||||
std::string decoded = base64_decode(argv[1]);
|
||||
json j;
|
||||
try {
|
||||
j = json::parse(decoded);
|
||||
} catch (...) {
|
||||
std::cerr << "Invalid JSON in decoded command\n";
|
||||
return -1;
|
||||
}
|
||||
std::string command = j.value("command", "");
|
||||
std::vector<std::string> args = j.value("args", std::vector<std::string>{});
|
||||
std::string working_dir = j.value("working_dir", "");
|
||||
std::map<std::string, std::string> env = j.value("env", std::map<std::string, std::string>{});
|
||||
bool silent = j.value("silent", false);
|
||||
bool interactive = j.value("interactive", false);
|
||||
sSSHInfo* sshinfo = nullptr;
|
||||
sSSHInfo ssh;
|
||||
if (j.contains("sshinfo")) {
|
||||
ssh.host = j["sshinfo"].value("host", "");
|
||||
ssh.user = j["sshinfo"].value("user", "");
|
||||
ssh.port = j["sshinfo"].value("port", "");
|
||||
sshinfo = &ssh;
|
||||
}
|
||||
std::string output;
|
||||
int ret = execute_cmd(command, args, working_dir, env, silent, interactive, sshinfo, &output);
|
||||
if (!silent && !output.empty()) {
|
||||
std::cout << output;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
std::string command = "docker";
|
||||
std::vector<std::string> args = {"exec", "-it", "squashkiwi", "/bin/bash"};
|
||||
std::string working_dir = ".";
|
||||
std::map<std::string, std::string> env = {};
|
||||
bool silent = false;
|
||||
bool interactive = true;
|
||||
runner::sSSHInfo ssh;
|
||||
ssh.host = "10.10.10.13";
|
||||
ssh.user = "katie";
|
||||
ssh.port = "22";
|
||||
|
||||
runner::execute_cmd(command, args, working_dir, env, silent, interactive, &ssh);
|
||||
}
|
Reference in New Issue
Block a user