diff --git a/build b/build index 86ee83a..aaa6442 100644 --- a/build +++ b/build @@ -1 +1 @@ -40 \ No newline at end of file +41 \ No newline at end of file diff --git a/src/RESTAPI/RESTAPI_subusers_handler.cpp b/src/RESTAPI/RESTAPI_subusers_handler.cpp index 4385a37..827e050 100644 --- a/src/RESTAPI/RESTAPI_subusers_handler.cpp +++ b/src/RESTAPI/RESTAPI_subusers_handler.cpp @@ -10,8 +10,7 @@ namespace OpenWifi { void RESTAPI_subusers_handler::DoGet() { - std::vector Users; - bool IdOnly = (GetParameter("idOnly","false")=="true"); + bool IdOnly = GetBoolParameter("idOnly"); auto operatorId = GetParameter("operatorId"); auto nameSearch = GetParameter("nameSearch"); auto emailSearch = GetParameter("emailSearch"); @@ -36,46 +35,46 @@ namespace OpenWifi { auto count = StorageService()->UserDB().Count(); return ReturnCountOnly(count); } else if(QB_.Select.empty()) { - Poco::JSON::Array ArrayObj; - Poco::JSON::Object Answer; std::string whereClause; if(!operatorId.empty()) { whereClause = baseQuery.empty() ? fmt::format(" owner='{}' ", operatorId) : fmt::format(" owner='{}' and {} ", operatorId, baseQuery); } - if (StorageService()->SubDB().GetUsers(QB_.Offset, QB_.Limit, Users, whereClause)) { - for (auto &i : Users) { - Poco::JSON::Object Obj; - if (IdOnly) { - ArrayObj.add(i.id); - } else { - Sanitize(UserInfo_, i); - i.to_json(Obj); - ArrayObj.add(Obj); - } + + SecurityObjects::UserInfoList Users; + if (StorageService()->SubDB().GetUsers(QB_.Offset, QB_.Limit, Users.users, whereClause)) { + for (auto &i : Users.users) { + Sanitize(UserInfo_, i); } } - Answer.set(RESTAPI::Protocol::USERS, ArrayObj); + + if(IdOnly) { + Poco::JSON::Array Arr; + Poco::JSON::Object Answer; + + for(const auto &i:Users.users) { + Arr.add(i.id); + } + Answer.set("users",Arr); + return ReturnObject(Answer); + } + + Poco::JSON::Object Answer; + Users.to_json(Answer); return ReturnObject(Answer); } else { - Poco::JSON::Array ArrayObj; + SecurityObjects::UserInfoList Users; for(auto &i:SelectedRecords()) { SecurityObjects::UserInfo UInfo; - auto tI{i}; - if(StorageService()->SubDB().GetUserById(tI,UInfo)) { + if(StorageService()->SubDB().GetUserById(i,UInfo)) { Poco::JSON::Object Obj; - if (IdOnly) { - ArrayObj.add(UInfo.id); - } else { - Sanitize(UserInfo_, UInfo); - UInfo.to_json(Obj); - ArrayObj.add(Obj); - } + Sanitize(UserInfo_, UInfo); + Users.users.emplace_back(UInfo); } } - Poco::JSON::Object RetObj; - RetObj.set(RESTAPI::Protocol::USERS, ArrayObj); - return ReturnObject(RetObj); + Poco::JSON::Object Answer; + Users.to_json(Answer); + return ReturnObject(Answer); } } } \ No newline at end of file diff --git a/src/RESTAPI/RESTAPI_users_handler.cpp b/src/RESTAPI/RESTAPI_users_handler.cpp index 5709c9a..0e0fa1c 100644 --- a/src/RESTAPI/RESTAPI_users_handler.cpp +++ b/src/RESTAPI/RESTAPI_users_handler.cpp @@ -9,7 +9,6 @@ namespace OpenWifi { void RESTAPI_users_handler::DoGet() { - std::vector Users; bool IdOnly = (GetParameter("idOnly","false")=="true"); auto nameSearch = GetParameter("nameSearch"); auto emailSearch = GetParameter("emailSearch"); @@ -24,41 +23,36 @@ namespace OpenWifi { } if(QB_.Select.empty()) { - Poco::JSON::Array ArrayObj; - Poco::JSON::Object Answer; - if (StorageService()->UserDB().GetUsers(QB_.Offset, QB_.Limit, Users, baseQuery )) { - for (auto &i : Users) { - Poco::JSON::Object Obj; - if (IdOnly) { - ArrayObj.add(i.id); - } else { - Sanitize(UserInfo_, i); - i.to_json(Obj); - ArrayObj.add(Obj); - } + SecurityObjects::UserInfoList Users; + if(StorageService()->UserDB().GetUsers(QB_.Offset, QB_.Limit, Users.users, baseQuery)) { + for (auto &i : Users.users) { + Sanitize(UserInfo_, i); + } + if(IdOnly) { + Poco::JSON::Array Arr; + for(const auto &i:Users.users) + Arr.add(i.id); + Poco::JSON::Object Answer; + Answer.set("users", Arr); + return ReturnObject(Answer); } } - Answer.set(RESTAPI::Protocol::USERS, ArrayObj); + Poco::JSON::Object Answer; + Users.to_json(Answer); return ReturnObject(Answer); } else { - Poco::JSON::Array ArrayObj; + SecurityObjects::UserInfoList Users; for(auto &i:SelectedRecords()) { SecurityObjects::UserInfo UInfo; - auto tI{i}; if(StorageService()->UserDB().GetUserById(i,UInfo)) { Poco::JSON::Object Obj; - if (IdOnly) { - ArrayObj.add(UInfo.id); - } else { - Sanitize(UserInfo_, UInfo); - UInfo.to_json(Obj); - ArrayObj.add(Obj); - } + Sanitize(UserInfo_, UInfo); + Users.users.emplace_back(UInfo); } } - Poco::JSON::Object RetObj; - RetObj.set(RESTAPI::Protocol::USERS, ArrayObj); - return ReturnObject(RetObj); + Poco::JSON::Object Answer; + Users.to_json(Answer); + return ReturnObject(Answer); } } } \ No newline at end of file diff --git a/src/RESTObjects/RESTAPI_SecurityObjects.cpp b/src/RESTObjects/RESTAPI_SecurityObjects.cpp index 3a5eea0..cab581f 100644 --- a/src/RESTObjects/RESTAPI_SecurityObjects.cpp +++ b/src/RESTObjects/RESTAPI_SecurityObjects.cpp @@ -301,6 +301,20 @@ namespace OpenWifi::SecurityObjects { return false; }; + void UserInfoList::to_json(Poco::JSON::Object &Obj) const { + field_to_json(Obj,"users",users); + } + + bool UserInfoList::from_json(const Poco::JSON::Object::Ptr &Obj) { + try { + field_from_json(Obj,"users",users); + return true; + } catch (...) { + std::cout << "Cannot parse: InternalServiceInfo" << std::endl; + } + return false; + } + void InternalServiceInfo::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj,"privateURI",privateURI); field_to_json(Obj,"publicURI",publicURI); diff --git a/src/RESTObjects/RESTAPI_SecurityObjects.h b/src/RESTObjects/RESTAPI_SecurityObjects.h index eb52358..1cc0df6 100644 --- a/src/RESTObjects/RESTAPI_SecurityObjects.h +++ b/src/RESTObjects/RESTAPI_SecurityObjects.h @@ -146,6 +146,13 @@ namespace OpenWifi { }; typedef std::vector UserInfoVec; + struct UserInfoList { + std::vector users; + + void to_json(Poco::JSON::Object &Obj) const; + bool from_json(const Poco::JSON::Object::Ptr &Obj); + }; + // bool append_from_json(Poco::JSON::Object::Ptr Obj, const UserInfo &UInfo, NoteInfoVec & Notes); bool MergeNotes(Poco::JSON::Object::Ptr Obj, const UserInfo &UInfo, NoteInfoVec & Notes); bool MergeNotes(const NoteInfoVec & NewNotes, const UserInfo &UInfo, NoteInfoVec & ExistingNotes);