Files
wlan-cloud-ucentralfms/src/RESTObjects/RESTAPI_SecurityObjects.cpp
2023-02-27 22:30:51 -08:00

741 lines
23 KiB
C++

//
// License type: BSD 3-Clause License
// License copy: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE
//
// Created by Stephane Bourque on 2021-03-04.
// Arilia Wireless Inc.
//
#include "Poco/JSON/Parser.h"
#include "Poco/JSON/Stringifier.h"
#include "RESTAPI_SecurityObjects.h"
#include "framework/RESTAPI_utils.h"
using OpenWifi::RESTAPI_utils::field_from_json;
using OpenWifi::RESTAPI_utils::field_to_json;
namespace OpenWifi::SecurityObjects {
void AclTemplate::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "Read", Read_);
field_to_json(Obj, "ReadWrite", ReadWrite_);
field_to_json(Obj, "ReadWriteCreate", ReadWriteCreate_);
field_to_json(Obj, "Delete", Delete_);
field_to_json(Obj, "PortalLogin", PortalLogin_);
}
ResourceAccessType ResourceAccessTypeFromString(const std::string &s) {
if (!Poco::icompare(s, "READ"))
return READ;
if (!Poco::icompare(s, "MODIFY"))
return MODIFY;
if (!Poco::icompare(s, "DELETE"))
return DELETE;
if (!Poco::icompare(s, "CREATE"))
return CREATE;
if (!Poco::icompare(s, "TEST"))
return TEST;
if (!Poco::icompare(s, "MOVE"))
return MOVE;
return NONE;
}
std::string ResourceAccessTypeToString(const ResourceAccessType &T) {
switch (T) {
case READ:
return "READ";
case MODIFY:
return "MODIFY";
case DELETE:
return "DELETE";
case CREATE:
return "CREATE";
case TEST:
return "TEST";
case MOVE:
return "MOVE";
default:
return "NONE";
}
}
USER_ROLE UserTypeFromString(const std::string &U) {
if (!Poco::icompare(U, "root"))
return ROOT;
else if (!Poco::icompare(U, "admin"))
return ADMIN;
else if (!Poco::icompare(U, "subscriber"))
return SUBSCRIBER;
else if (!Poco::icompare(U, "partner"))
return PARTNER;
else if (!Poco::icompare(U, "csr"))
return CSR;
else if (!Poco::icompare(U, "system"))
return SYSTEM;
else if (!Poco::icompare(U, "installer"))
return INSTALLER;
else if (!Poco::icompare(U, "noc"))
return NOC;
else if (!Poco::icompare(U, "accounting"))
return ACCOUNTING;
return UNKNOWN;
}
std::string UserTypeToString(USER_ROLE U) {
switch (U) {
case ROOT:
return "root";
case ADMIN:
return "admin";
case SUBSCRIBER:
return "subscriber";
case PARTNER:
return "partner";
case CSR:
return "csr";
case SYSTEM:
return "system";
case INSTALLER:
return "installer";
case NOC:
return "noc";
case ACCOUNTING:
return "accounting";
case UNKNOWN:
default:
return "unknown";
}
}
bool AclTemplate::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "Read", Read_);
field_from_json(Obj, "ReadWrite", ReadWrite_);
field_from_json(Obj, "ReadWriteCreate", ReadWriteCreate_);
field_from_json(Obj, "Delete", Delete_);
field_from_json(Obj, "PortalLogin", PortalLogin_);
return true;
} catch (...) {
std::cout << "Cannot parse: AclTemplate" << std::endl;
}
return false;
}
void WebToken::to_json(Poco::JSON::Object &Obj) const {
Poco::JSON::Object AclTemplateObj;
acl_template_.to_json(AclTemplateObj);
field_to_json(Obj, "access_token", access_token_);
field_to_json(Obj, "refresh_token", refresh_token_);
field_to_json(Obj, "token_type", token_type_);
field_to_json(Obj, "expires_in", expires_in_);
field_to_json(Obj, "idle_timeout", idle_timeout_);
field_to_json(Obj, "created", created_);
field_to_json(Obj, "username", username_);
field_to_json(Obj, "userMustChangePassword", userMustChangePassword);
field_to_json(Obj, "errorCode", errorCode);
Obj.set("aclTemplate", AclTemplateObj);
field_to_json(Obj, "errorCode", errorCode);
field_to_json(Obj, "lastRefresh", lastRefresh_);
}
bool WebToken::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
if (Obj->isObject("aclTemplate")) {
Poco::JSON::Object::Ptr AclTemplate = Obj->getObject("aclTemplate");
acl_template_.from_json(AclTemplate);
}
field_from_json(Obj, "access_token", access_token_);
field_from_json(Obj, "refresh_token", refresh_token_);
field_from_json(Obj, "token_type", token_type_);
field_from_json(Obj, "expires_in", expires_in_);
field_from_json(Obj, "idle_timeout", idle_timeout_);
field_from_json(Obj, "created", created_);
field_from_json(Obj, "username", username_);
field_from_json(Obj, "userMustChangePassword", userMustChangePassword);
field_from_json(Obj, "lastRefresh", lastRefresh_);
return true;
} catch (...) {
std::cout << "Cannot parse: WebToken" << std::endl;
}
return false;
}
void MobilePhoneNumber::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "number", number);
field_to_json(Obj, "verified", verified);
field_to_json(Obj, "primary", primary);
}
bool MobilePhoneNumber::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "number", number);
field_from_json(Obj, "verified", verified);
field_from_json(Obj, "primary", primary);
return true;
} catch (...) {
std::cout << "Cannot parse: MobilePhoneNumber" << std::endl;
}
return false;
};
void MfaAuthInfo::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "enabled", enabled);
field_to_json(Obj, "method", method);
}
bool MfaAuthInfo::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "enabled", enabled);
field_from_json(Obj, "method", method);
return true;
} catch (...) {
std::cout << "Cannot parse: MfaAuthInfo" << std::endl;
}
return false;
}
void UserLoginLoginExtensions::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "mobiles", mobiles);
field_to_json(Obj, "mfa", mfa);
field_to_json(Obj, "authenticatorSecret", authenticatorSecret);
}
bool UserLoginLoginExtensions::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "mobiles", mobiles);
field_from_json(Obj, "mfa", mfa);
field_from_json(Obj, "authenticatorSecret", authenticatorSecret);
return true;
} catch (...) {
std::cout << "Cannot parse: UserLoginLoginExtensions" << std::endl;
}
return false;
}
void MFAChallengeRequest::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "uuid", uuid);
field_to_json(Obj, "question", question);
field_to_json(Obj, "created", created);
field_to_json(Obj, "method", method);
}
bool MFAChallengeRequest::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "uuid", uuid);
field_from_json(Obj, "question", question);
field_from_json(Obj, "created", created);
field_from_json(Obj, "method", method);
return true;
} catch (...) {
std::cout << "Cannot parse: MFAChallengeRequest" << std::endl;
}
return false;
};
void MFAChallengeResponse::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "uuid", uuid);
field_to_json(Obj, "answer", answer);
}
bool MFAChallengeResponse::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "uuid", uuid);
field_from_json(Obj, "answer", answer);
return true;
} catch (...) {
std::cout << "Cannot parse: MFAChallengeResponse" << std::endl;
}
return false;
}
void UserInfo::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "id", id);
field_to_json(Obj, "name", name);
field_to_json(Obj, "description", description);
field_to_json(Obj, "avatar", avatar);
field_to_json(Obj, "email", email);
field_to_json(Obj, "validated", validated);
field_to_json(Obj, "validationEmail", validationEmail);
field_to_json(Obj, "validationDate", validationDate);
field_to_json(Obj, "creationDate", creationDate);
field_to_json(Obj, "validationURI", validationURI);
field_to_json(Obj, "changePassword", changePassword);
field_to_json(Obj, "lastLogin", lastLogin);
field_to_json(Obj, "currentLoginURI", currentLoginURI);
field_to_json(Obj, "lastPasswordChange", lastPasswordChange);
field_to_json(Obj, "lastEmailCheck", lastEmailCheck);
field_to_json(Obj, "waitingForEmailCheck", waitingForEmailCheck);
field_to_json(Obj, "locale", locale);
field_to_json(Obj, "notes", notes);
field_to_json(Obj, "location", location);
field_to_json(Obj, "owner", owner);
field_to_json(Obj, "suspended", suspended);
field_to_json(Obj, "blackListed", blackListed);
field_to_json<USER_ROLE>(Obj, "userRole", userRole, UserTypeToString);
field_to_json(Obj, "userTypeProprietaryInfo", userTypeProprietaryInfo);
field_to_json(Obj, "securityPolicy", securityPolicy);
field_to_json(Obj, "securityPolicyChange", securityPolicyChange);
field_to_json(Obj, "currentPassword", currentPassword);
field_to_json(Obj, "lastPasswords", lastPasswords);
field_to_json(Obj, "oauthType", oauthType);
field_to_json(Obj, "oauthUserInfo", oauthUserInfo);
field_to_json(Obj, "modified", modified);
field_to_json(Obj, "signingUp", signingUp);
};
bool UserInfo::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "id", id);
field_from_json(Obj, "name", name);
field_from_json(Obj, "description", description);
field_from_json(Obj, "avatar", avatar);
field_from_json(Obj, "email", email);
field_from_json(Obj, "validationEmail", validationEmail);
field_from_json(Obj, "validationURI", validationURI);
field_from_json(Obj, "currentLoginURI", currentLoginURI);
field_from_json(Obj, "locale", locale);
field_from_json(Obj, "notes", notes);
field_from_json(Obj, "location", location);
field_from_json(Obj, "owner", owner);
field_from_json<USER_ROLE>(Obj, "userRole", userRole, UserTypeFromString);
field_from_json(Obj, "securityPolicy", securityPolicy);
field_from_json(Obj, "userTypeProprietaryInfo", userTypeProprietaryInfo);
field_from_json(Obj, "validationDate", validationDate);
field_from_json(Obj, "creationDate", creationDate);
field_from_json(Obj, "lastLogin", lastLogin);
field_from_json(Obj, "lastPasswordChange", lastPasswordChange);
field_from_json(Obj, "lastEmailCheck", lastEmailCheck);
field_from_json(Obj, "securityPolicyChange", securityPolicyChange);
field_from_json(Obj, "validated", validated);
field_from_json(Obj, "changePassword", changePassword);
field_from_json(Obj, "waitingForEmailCheck", waitingForEmailCheck);
field_from_json(Obj, "suspended", suspended);
field_from_json(Obj, "blackListed", blackListed);
field_from_json(Obj, "currentPassword", currentPassword);
field_from_json(Obj, "lastPasswords", lastPasswords);
field_from_json(Obj, "oauthType", oauthType);
field_from_json(Obj, "oauthUserInfo", oauthUserInfo);
field_from_json(Obj, "modified", modified);
field_from_json(Obj, "signingUp", signingUp);
return true;
} catch (const Poco::Exception &E) {
std::cout << "Cannot parse: UserInfo" << std::endl;
}
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);
field_to_json(Obj, "token", token);
};
bool InternalServiceInfo::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "privateURI", privateURI);
field_from_json(Obj, "publicURI", publicURI);
field_from_json(Obj, "token", token);
return true;
} catch (...) {
std::cout << "Cannot parse: InternalServiceInfo" << std::endl;
}
return false;
};
void InternalSystemServices::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "key", key);
field_to_json(Obj, "version", version);
field_to_json(Obj, "services", services);
};
bool InternalSystemServices::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "key", key);
field_from_json(Obj, "version", version);
field_from_json(Obj, "services", services);
return true;
} catch (...) {
std::cout << "Cannot parse: InternalSystemServices" << std::endl;
}
return false;
};
void SystemEndpoint::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "type", type);
field_to_json(Obj, "id", id);
field_to_json(Obj, "vendor", vendor);
field_to_json(Obj, "uri", uri);
field_to_json(Obj, "authenticationType", authenticationType);
};
bool SystemEndpoint::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "type", type);
field_from_json(Obj, "id", id);
field_from_json(Obj, "vendor", vendor);
field_from_json(Obj, "uri", uri);
field_from_json(Obj, "authenticationType", authenticationType);
return true;
} catch (...) {
std::cout << "Cannot parse: SystemEndpoint" << std::endl;
}
return false;
};
void SystemEndpointList::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "endpoints", endpoints);
}
bool SystemEndpointList::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "endpoints", endpoints);
return true;
} catch (...) {
std::cout << "Cannot parse: SystemEndpointList" << std::endl;
}
return false;
}
void UserInfoAndPolicy::to_json(Poco::JSON::Object &Obj) const {
Poco::JSON::Object UI, TI;
userinfo.to_json(UI);
webtoken.to_json(TI);
Obj.set("tokenInfo", TI);
Obj.set("userInfo", UI);
}
bool UserInfoAndPolicy::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "tokenInfo", webtoken);
field_from_json(Obj, "userInfo", userinfo);
return true;
} catch (...) {
std::cout << "Cannot parse: UserInfoAndPolicy" << std::endl;
}
return false;
}
void NoteInfo::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "created", created);
field_to_json(Obj, "createdBy", createdBy);
field_to_json(Obj, "note", note);
}
bool NoteInfo::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "created", created);
field_from_json(Obj, "createdBy", createdBy);
field_from_json(Obj, "note", note);
return true;
} catch (...) {
std::cout << "Cannot parse: NoteInfo" << std::endl;
}
return false;
}
bool MergeNotes(Poco::JSON::Object::Ptr Obj, const UserInfo &UInfo, NoteInfoVec &Notes) {
try {
if (Obj->has("notes") && Obj->isArray("notes")) {
SecurityObjects::NoteInfoVec NIV;
NIV = RESTAPI_utils::to_object_array<SecurityObjects::NoteInfo>(
Obj->get("notes").toString());
for (auto const &i : NIV) {
SecurityObjects::NoteInfo ii{.created = (uint64_t)Utils::Now(),
.createdBy = UInfo.email,
.note = i.note};
Notes.push_back(ii);
}
}
return true;
} catch (...) {
std::cout << "Cannot parse: MergeNotes" << std::endl;
}
return false;
}
bool MergeNotes(const NoteInfoVec &NewNotes, const UserInfo &UInfo,
NoteInfoVec &ExistingNotes) {
for (auto const &i : NewNotes) {
SecurityObjects::NoteInfo ii{
.created = (uint64_t)Utils::Now(), .createdBy = UInfo.email, .note = i.note};
ExistingNotes.push_back(ii);
}
return true;
}
void ProfileAction::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "resource", resource);
field_to_json<ResourceAccessType>(Obj, "access", access, ResourceAccessTypeToString);
}
bool ProfileAction::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "resource", resource);
field_from_json<ResourceAccessType>(Obj, "access", access,
ResourceAccessTypeFromString);
return true;
} catch (...) {
std::cout << "Cannot parse: ProfileAction" << std::endl;
}
return false;
}
void SecurityProfile::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "id", id);
field_to_json(Obj, "name", name);
field_to_json(Obj, "description", description);
field_to_json(Obj, "policy", policy);
field_to_json(Obj, "role", role);
field_to_json(Obj, "notes", notes);
}
bool SecurityProfile::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "id", id);
field_from_json(Obj, "name", name);
field_from_json(Obj, "description", description);
field_from_json(Obj, "policy", policy);
field_from_json(Obj, "role", role);
field_from_json(Obj, "notes", notes);
return true;
} catch (...) {
std::cout << "Cannot parse: SecurityProfile" << std::endl;
}
return false;
}
void SecurityProfileList::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "profiles", profiles);
}
bool SecurityProfileList::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "profiles", profiles);
return true;
} catch (...) {
std::cout << "Cannot parse: SecurityProfileList" << std::endl;
}
return false;
}
void ActionLink::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "id", id);
field_to_json(Obj, "action", action);
field_to_json(Obj, "userId", userId);
field_to_json(Obj, "actionTemplate", actionTemplate);
field_to_json(Obj, "variables", variables);
field_to_json(Obj, "locale", locale);
field_to_json(Obj, "message", message);
field_to_json(Obj, "sent", sent);
field_to_json(Obj, "created", created);
field_to_json(Obj, "expires", expires);
field_to_json(Obj, "completed", completed);
field_to_json(Obj, "canceled", canceled);
field_to_json(Obj, "userAction", userAction);
}
bool ActionLink::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "id", id);
field_from_json(Obj, "action", action);
field_from_json(Obj, "userId", userId);
field_from_json(Obj, "actionTemplate", actionTemplate);
field_from_json(Obj, "variables", variables);
field_from_json(Obj, "locale", locale);
field_from_json(Obj, "message", message);
field_from_json(Obj, "sent", sent);
field_from_json(Obj, "created", created);
field_from_json(Obj, "expires", expires);
field_from_json(Obj, "completed", completed);
field_from_json(Obj, "canceled", canceled);
field_from_json(Obj, "userAction", userAction);
return true;
} catch (...) {
std::cout << "Cannot parse: ActionLink" << std::endl;
}
return false;
}
void Preferences::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "id", id);
field_to_json(Obj, "modified", modified);
field_to_json(Obj, "data", data);
}
bool Preferences::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "id", id);
field_from_json(Obj, "modified", modified);
field_from_json(Obj, "data", data);
return true;
} catch (...) {
std::cout << "Cannot parse: Preferences" << std::endl;
}
return false;
}
void SubMfaConfig::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "id", id);
field_to_json(Obj, "type", type);
field_to_json(Obj, "sms", sms);
field_to_json(Obj, "email", email);
}
bool SubMfaConfig::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "id", id);
field_from_json(Obj, "type", type);
field_from_json(Obj, "sms", sms);
field_from_json(Obj, "email", email);
return true;
} catch (...) {
std::cout << "Cannot parse: SubMfaConfig" << std::endl;
}
return false;
}
void Token::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "token", token);
field_to_json(Obj, "refreshToken", refreshToken);
field_to_json(Obj, "tokenType", tokenType);
field_to_json(Obj, "userName", userName);
field_to_json(Obj, "created", created);
field_to_json(Obj, "expires", expires);
field_to_json(Obj, "idleTimeout", idleTimeout);
field_to_json(Obj, "revocationDate", revocationDate);
field_to_json(Obj, "lastRefresh", lastRefresh);
}
bool Token::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "token", token);
field_from_json(Obj, "refreshToken", refreshToken);
field_from_json(Obj, "tokenType", tokenType);
field_from_json(Obj, "userName", userName);
field_from_json(Obj, "created", created);
field_from_json(Obj, "expires", expires);
field_from_json(Obj, "idleTimeout", idleTimeout);
field_from_json(Obj, "revocationDate", revocationDate);
field_from_json(Obj, "lastRefresh", lastRefresh);
return true;
} catch (...) {
std::cout << "Cannot parse: Token" << std::endl;
}
return false;
}
void LoginRecordInfo::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "sessionId", sessionId);
field_to_json(Obj, "userId", userId);
field_to_json(Obj, "email", email);
field_to_json(Obj, "login", login);
field_to_json(Obj, "logout", logout);
}
void ApiKeyAccessRight::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "service", service);
field_to_json(Obj, "access", access);
}
bool ApiKeyAccessRight::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "service", service);
field_from_json(Obj, "access", access);
return true;
} catch (...) {
std::cout << "Cannot parse: Token" << std::endl;
}
return false;
}
void ApiKeyAccessRightList::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "acls", acls);
}
bool ApiKeyAccessRightList::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "acls", acls);
return true;
} catch (...) {
std::cout << "Cannot parse: Token" << std::endl;
}
return false;
}
void ApiKeyEntry::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "id", id);
field_to_json(Obj, "userUuid", userUuid);
field_to_json(Obj, "name", name);
field_to_json(Obj, "apiKey", apiKey);
field_to_json(Obj, "salt", salt);
field_to_json(Obj, "description", description);
field_to_json(Obj, "expiresOn", expiresOn);
field_to_json(Obj, "rights", rights);
field_to_json(Obj, "lastUse", lastUse);
}
bool ApiKeyEntry::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "id", id);
field_from_json(Obj, "userUuid", userUuid);
field_from_json(Obj, "name", name);
field_from_json(Obj, "apiKey", apiKey);
field_from_json(Obj, "salt", salt);
field_from_json(Obj, "description", description);
field_from_json(Obj, "expiresOn", expiresOn);
field_from_json(Obj, "rights", rights);
field_from_json(Obj, "lastUse", lastUse);
return true;
} catch (...) {
std::cout << "Cannot parse: Token" << std::endl;
}
return false;
}
void ApiKeyEntryList::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "apiKeys", apiKeys);
}
bool ApiKeyEntryList::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "apiKeys", apiKeys);
return true;
} catch (...) {
std::cout << "Cannot parse: Token" << std::endl;
}
return false;
}
void ExtraSystemConfiguration::to_json(Poco::JSON::Object &Obj) const {
field_to_json(Obj, "parameterName", parameterName);
field_to_json(Obj, "parameterValue", parameterValue);
}
bool ExtraSystemConfiguration::from_json(const Poco::JSON::Object::Ptr &Obj) {
try {
field_from_json(Obj, "parameterName", parameterName);
field_from_json(Obj, "parameterValue", parameterValue);
return true;
} catch (...) {
std::cout << "Cannot parse: Token" << std::endl;
}
return false;
}
} // namespace OpenWifi::SecurityObjects