diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index 45aa152..de0b17b 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -21,7 +21,7 @@ #include "library/sysadm-zfs.h" #include "library/sysadm-pkg.h" #include "library/sysadm-users.h" - +#include "library/sysadm-servicemanager.h" #define DEBUG 0 @@ -89,6 +89,8 @@ RestOutputStruct::ExitCode WebSocket::AvailableSubsystems(bool allaccess, QJsonO // - User Manager out->insert("sysadm/users","read/write"); + //- Service Manager + out->insert("sysadm/services","read/write"); return RestOutputStruct::OK; } @@ -141,6 +143,8 @@ RestOutputStruct::ExitCode WebSocket::EvaluateBackendRequest(const RestInputStru return EvaluateSysadmPkgRequest(IN.args, out); }else if(namesp=="sysadm" && name=="users"){ return EvaluateSysadmUserRequest(IN.fullaccess, AUTHSYSTEM->userForToken(SockAuthToken), IN.args, out); + }else if(namesp=="sysadm" && name=="services"){ + return EvaluateSysadmServiceRequest(IN.args, out); }else{ return RestOutputStruct::BADREQUEST; } @@ -992,3 +996,26 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmUserRequest(bool allaccess, return (ok ? RestOutputStruct::OK : RestOutputStruct::BADREQUEST); } + +// SERVICE MANAGER (sysadm/services) +RestOutputStruct::ExitCode WebSocket::EvaluateSysadmServiceRequest(const QJsonValue in_args, QJsonObject *out){ + bool ok = false; + QString action = in_args.toObject().value("action").toString(); + sysadm::ServiceManager SMGR; + if(action=="list_services"){ + QList list = SMGR.GetServices(); + QJsonObject services; + for(int i=0; iinsert("services",services); + } + + return (ok ? RestOutputStruct::OK : RestOutputStruct::BADREQUEST); +} diff --git a/src/server/WebSocket.h b/src/server/WebSocket.h index 220c4ba..a1df3ad 100644 --- a/src/server/WebSocket.h +++ b/src/server/WebSocket.h @@ -92,7 +92,9 @@ private: RestOutputStruct::ExitCode EvaluateSysadmPkgRequest(const QJsonValue in_args, QJsonObject *out); // -- sysadm User Mgmt API 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); + private slots: void sendReply(QString msg); void checkConnection(); //see if the current connection is still open/valid diff --git a/src/server/library/sysadm-servicemanager.cpp b/src/server/library/sysadm-servicemanager.cpp index 0a12acd..e2c93b5 100644 --- a/src/server/library/sysadm-servicemanager.cpp +++ b/src/server/library/sysadm-servicemanager.cpp @@ -1,25 +1,33 @@ #include "sysadm-servicemanager.h" #include "sysadm-general.h" + +#include +#include + using namespace sysadm; ServiceManager::ServiceManager(QString chroot, QString ip) { this->chroot = chroot; this->ip = ip; - loadServices(); + //loadServices(); } Service ServiceManager::GetService(QString serviceName) { - for(Service service : services) - { - if(service.Name == serviceName) - return service; + if(!services.isEmpty()){ + for(int i=0; i ServiceManager::GetServices() +QList ServiceManager::GetServices() { + if(services.isEmpty()){ loadServices(); } return services; } @@ -83,7 +91,7 @@ void ServiceManager::Disable(Service service) General::setConfFileValue( chroot + "/etc/rc.conf", service.Tag, service.Tag + "=\"NO\"", -1); } -void ServiceManager::loadServices() +Service ServiceManager::loadServices(QString name) { QString tmp; bool valid; @@ -101,10 +109,11 @@ void ServiceManager::loadServices() directory.setSorting( QDir::Name ); if ( directory.count() == 0 ) - return; + return Service(); for (unsigned int i = 0; i < directory.count(); i++ ) { + if(!name.isEmpty() && directory[i]!=name){ continue; } //not the right service - go to the next one service = Service(); QFile file( dir + "/" + directory[i] ); @@ -163,10 +172,11 @@ void ServiceManager::loadServices() service.Tag = service.Directory + "_enable"; if ( service.Name.indexOf("$") == 0 ) service.Name = service.Directory; - + if(!name.isEmpty() ){ return service; } //found the requested service - return it services << service; //qDebug() << "Added Service:" << cDir << service.Directory << service.Name << service.Tag; } } } + return Service(); } diff --git a/src/server/library/sysadm-servicemanager.h b/src/server/library/sysadm-servicemanager.h index 6b70d06..1721bfb 100644 --- a/src/server/library/sysadm-servicemanager.h +++ b/src/server/library/sysadm-servicemanager.h @@ -1,6 +1,9 @@ #ifndef SERVICEMANAGER_H #define SERVICEMANAGER_H -#include + +#include +#include + namespace sysadm{ struct Service{ Service() @@ -35,7 +38,7 @@ public: * @brief GetServices getter for the vector of services * @return returns the vector of services on the system */ - QVector GetServices(); + QList GetServices(); /** * @brief Start starts a service @@ -64,8 +67,8 @@ public: */ void Disable(Service service); private: - QVector services; - void loadServices(); + QList services; + Service loadServices(QString service = ""); //Return struct is optional - only used for a single service search QString chroot; QString ip; };