diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index 3bb35aa..79d68e7 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -22,7 +22,7 @@ #include "library/sysadm-pkg.h" #include "library/sysadm-users.h" #include "library/sysadm-servicemanager.h" - +#include "library/sysadm-firewall.h" #define DEBUG 0 //#define SCLISTDELIM QString("::::") //SysCache List Delimiter @@ -91,6 +91,8 @@ RestOutputStruct::ExitCode WebSocket::AvailableSubsystems(bool allaccess, QJsonO out->insert("sysadm/users","read/write"); //- Service Manager out->insert("sysadm/services","read/write"); + // - Firewall Manager + out->insert("sysadm/firewall","read/write"); return RestOutputStruct::OK; } @@ -145,6 +147,8 @@ RestOutputStruct::ExitCode WebSocket::EvaluateBackendRequest(const RestInputStru return EvaluateSysadmUserRequest(IN.fullaccess, AUTHSYSTEM->userForToken(SockAuthToken), IN.args, out); }else if(namesp=="sysadm" && name=="services"){ return EvaluateSysadmServiceRequest(IN.args, out); + }else if(namesp=="sysadm" && name=="firewall"){ + return EvaluateSysadmFirewallRequest(IN.args, out); }else{ return RestOutputStruct::BADREQUEST; } @@ -1096,3 +1100,34 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmServiceRequest(const QJsonVa } return (ok ? RestOutputStruct::OK : RestOutputStruct::BADREQUEST); } + +// FIREWALL MANAGER (sysadm/firewall) +RestOutputStruct::ExitCode WebSocket::EvaluateSysadmFirewallRequest(const QJsonValue in_args, QJsonObject *out){ + bool ok = false; + QString action = in_args.toObject().value("action").toString(); + sysadm::Firewall FMGR; + //Now perform actions as needed + if(action=="known_ports"){ + ok = true; + QList all = FMGR.allPorts(); //this is all known ports (number/type, name, description) - it does not know about open/closed + for(int i=0; i0 && (all[i-1].Keyword == all[i].Keyword) ){ + obj.insert("description", all[i-1].Description); + }else{ + obj.insert("description", all[i].Description); + } + out->insert(obj.value("port").toString(), obj); //use the port number/type as the unique identifier + } + } + + + //Evaluate outputs + if(out->keys().isEmpty()){ + if(ok){ out->insert("result","success"); } + else{ out->insert("error","error"); } + } + return (ok ? RestOutputStruct::OK : RestOutputStruct::BADREQUEST); +} diff --git a/src/server/WebSocket.h b/src/server/WebSocket.h index a1df3ad..53a4750 100644 --- a/src/server/WebSocket.h +++ b/src/server/WebSocket.h @@ -94,6 +94,8 @@ private: RestOutputStruct::ExitCode EvaluateSysadmUserRequest(bool allaccess, QString user, const QJsonValue in_args, QJsonObject *out); // -- sysadm Service Manager API RestOutputStruct::ExitCode EvaluateSysadmServiceRequest(const QJsonValue in_args, QJsonObject *out); + // -- sysadm Firewall Manager API + RestOutputStruct::ExitCode EvaluateSysadmFirewallRequest(const QJsonValue in_args, QJsonObject *out); private slots: void sendReply(QString msg); diff --git a/src/server/library/sysadm-firewall.cpp b/src/server/library/sysadm-firewall.cpp index 4cc84d2..0044729 100644 --- a/src/server/library/sysadm-firewall.cpp +++ b/src/server/library/sysadm-firewall.cpp @@ -93,7 +93,7 @@ QList Firewall::allPorts(){ PortInfo info; info.Keyword = line[0]; info.Port = line[1].section("/",0,0).toInt(); - info.Type = line[1].section("/",1,1).toInt(); + info.Type = line[1].section("/",1,1); if(line.length()>2){ info.Description = line.mid(2,-1).join(" "); }