75 lines
2.6 KiB
C++
75 lines
2.6 KiB
C++
#ifndef EXECUTE_HPP
|
|
#define EXECUTE_HPP
|
|
|
|
#include <string>
|
|
#include <map>
|
|
|
|
namespace dropshell {
|
|
|
|
class sCommand;
|
|
|
|
// mode bitset
|
|
enum class cMode {
|
|
Defaults = 0,
|
|
Interactive = 1,
|
|
Silent = 2,
|
|
CaptureOutput = 4
|
|
};
|
|
|
|
inline cMode operator&(cMode lhs, cMode rhs) {return static_cast<cMode>(static_cast<int>(lhs) & static_cast<int>(rhs));}
|
|
inline cMode operator+(cMode lhs, cMode rhs) {return static_cast<cMode>(static_cast<int>(lhs) | static_cast<int>(rhs));}
|
|
inline cMode operator-(cMode lhs, cMode rhs) {return static_cast<cMode>(static_cast<int>(lhs) & ~static_cast<int>(rhs));}
|
|
inline cMode operator|(cMode lhs, cMode rhs) {return static_cast<cMode>(static_cast<int>(lhs) | static_cast<int>(rhs));}
|
|
inline cMode operator|=(cMode & lhs, cMode rhs) {return lhs = lhs | rhs;}
|
|
inline bool hasFlag(cMode mode, cMode flag) {return (mode & flag) == flag;}
|
|
|
|
|
|
typedef struct sSSHInfo {
|
|
std::string host;
|
|
std::string user;
|
|
std::string port;
|
|
std::string server_ID; // dropshell name for server.
|
|
} sSSHInfo;
|
|
|
|
bool execute_local_command(std::string command, std::string * output = nullptr, cMode mode = cMode::Defaults);
|
|
bool execute_local_command(std::string directory_to_run_in, std::string command_to_run, const std::map<std::string, std::string> & env_vars, std::string * output = nullptr, cMode mode = cMode::Defaults);
|
|
bool execute_ssh_command(const sSSHInfo & ssh_info, const sCommand & remote_command, cMode mode = cMode::Defaults, std::string * output = nullptr);
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
|
|
// class to hold a command to run on the remote server.
|
|
class sCommand {
|
|
public:
|
|
sCommand(std::string directory_to_run_in, std::string command_to_run, const std::map<std::string, std::string> & env_vars) :
|
|
mDir(directory_to_run_in), mCmd(command_to_run), mVars(env_vars) {}
|
|
|
|
std::string get_directory_to_run_in() const { return mDir; }
|
|
std::string get_command_to_run() const { return mCmd; }
|
|
const std::map<std::string, std::string>& get_env_vars() const { return mVars; }
|
|
|
|
void add_env_var(const std::string& key, const std::string& value) { mVars[key] = value; }
|
|
|
|
bool empty() const { return mCmd.empty(); }
|
|
|
|
std::string construct_cmd(std::string agent_path) const;
|
|
|
|
private:
|
|
std::string makesafecmd(std::string agent_path, const std::string& command) const;
|
|
|
|
private:
|
|
std::string mDir;
|
|
std::string mCmd;
|
|
std::map<std::string, std::string> mVars;
|
|
};
|
|
|
|
bool EXITSTATUSCHECK(int ret);
|
|
|
|
|
|
} // namespace dropshell
|
|
|
|
|
|
|
|
#endif
|