From 1fd947f5b4b6c3dcd7ee3c8a5dc382d62a74114c Mon Sep 17 00:00:00 2001 From: Ken Moore Date: Wed, 17 Aug 2016 12:15:48 -0400 Subject: [PATCH] API CHANGE: Add a new action to the sysadm/users class: "groupmod" This action allows for modifying a given group on the system REQUIRED: "name"="" and any one of these options is also required: "users":["array of users"] (will set the list of users for this group) "add_users":["array of users"] (will add the listed users to the current users) "remove_users":["array of users"] (will remove the listed users from the current users) Example API Request (JSON) { "id":"sample", "namespace":"sysadm", "name":"users", "args":{ "action":"groupmod", "name":"operator", "users":["user1","user2"] } } --- src/server/WebBackend.cpp | 3 ++ src/server/library/sysadm-users.cpp | 43 ++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index 6d22613..45aa152 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -962,6 +962,9 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmUserRequest(bool allaccess, if(ok){ out->insert("result","success"); } else{ out->insert("error","Could not delete group"); } + }else if(action=="groupmod" && allaccess){ + ok = sysadm::UserManager::modifyGroup(out, in_args.toObject() ); + }else if(action=="personacrypt_init"){ qDebug() << "got PC init request:" << in_args << allaccess << user; bool go = true; diff --git a/src/server/library/sysadm-users.cpp b/src/server/library/sysadm-users.cpp index d8e3b98..05bd8bd 100644 --- a/src/server/library/sysadm-users.cpp +++ b/src/server/library/sysadm-users.cpp @@ -277,7 +277,48 @@ bool UserManager::removeGroup(QString name){ bool UserManager::modifyGroup(QJsonObject* out, QJsonObject input){ bool ok = false; - + // REQUIRED: "name" + // OPTIONAL: "users", "add_users", "remove_users" (only one of these at a time) - all a string or array of strings + if(input.contains("name")){ + QStringList args; + QString group = input.value("name").toString(); + if(input.contains("users")){ + QStringList users; + ok = true; //got valid inputs + if(input.value("users").isString()){ users << input.value("users").toString(); } //only one user + else if(input.value("users").isArray()){ users = General::JsonArrayToStringList(input.value("users").toArray()); } + else{ ok = false; } //actually invalid - could not read users + if(ok){ + args << "groupmod" << "-n" << group << "-M" << users.join(","); + } + }else if(input.contains("add_users")){ + QStringList users; + ok = true; //got valid inputs + if(input.value("add_users").isString()){ users << input.value("add_users").toString(); } //only one user + else if(input.value("add_users").isArray()){ users =General:: JsonArrayToStringList(input.value("add_users").toArray()); } + else{ ok = false; } //actually invalid - could not read users + if(ok){ + args << "groupmod" << "-n" << group << "-m" << users.join(","); + } + }else if(input.contains("remove_users")){ + QStringList users; + ok = true; //got valid inputs + if(input.value("remove_users").isString()){ users << input.value("remove_users").toString(); } //only one user + else if(input.value("remove_users").isArray()){ users = General::JsonArrayToStringList(input.value("remove_users").toArray()); } + else{ ok = false; } //actually invalid - could not read users + if(ok){ + args << "groupmod" << "-n" << group << "-d" << users.join(","); + } + } + if(!args.isEmpty()){ + QString res = General::RunCommand(ok, "pw", args); + if(!ok){ out->insert("error",res); } + else{ out->insert("result","success"); } + }else{ + ok = false; //nothing to do + } + } + return ok; }