Fixing SerialNumber cache

This commit is contained in:
stephb9959
2022-02-08 08:24:54 -08:00
parent 6649b1ed23
commit c74cbf9017
9 changed files with 65 additions and 20 deletions

2
build
View File

@@ -1 +1 @@
136
138

View File

@@ -553,6 +553,13 @@ components:
format: uuid
state:
type: string
devClass:
type: string
enum:4
- any
- venue
- entity
- subscriber
InventoryTagList:
type: object
@@ -1622,6 +1629,7 @@ paths:
responses:
200:
description: success
content:
application/json:
schema:
@@ -1867,7 +1875,7 @@ paths:
- in: query
description: Return only maps shared with Me
name: sharedWithMe
scmema:
schema:
type: boolean
required: false

View File

@@ -26,8 +26,9 @@ namespace OpenWifi{
auto Results = Response->get("results").extract<Poco::JSON::Object::Ptr>();
auto Status = Results->get("status").extract<Poco::JSON::Object::Ptr>();
auto Rejected = Status->getArray("rejected");
for(const auto &i:*Rejected)
Warnings.push_back(i.toString());
std::transform(Rejected->begin(),Rejected->end(),std::back_inserter(Warnings), [](auto i) -> auto { return i.toString(); });
// for(const auto &i:*Rejected)
// Warnings.push_back(i.toString());
}
} catch (...) {
}
@@ -136,6 +137,11 @@ namespace OpenWifi{
InternalError(RESTAPI::Errors::CouldNotBeDeleted);
}
static bool ValidDevClass(const std::string &D) {
const static std::vector<std::string> Classes{ "any", "entity", "subscriber" , "venue" };
return std::find(cbegin(Classes), cend(Classes), D)!=cend(Classes);
}
void RESTAPI_inventory_handler::DoPost() {
std::string SerialNumber = GetBinding(RESTAPI::Protocol::SERIALNUMBER,"");
if(SerialNumber.empty()) {
@@ -156,6 +162,10 @@ namespace OpenWifi{
return BadRequest(RESTAPI::Errors::InvalidJSONDocument);
}
if(!ValidDevClass(NewObject.devClass)) {
return BadRequest(RESTAPI::Errors::InvalidDeviceClass);
}
if(!ProvObjects::CreateObjectInfo(Obj, UserInfo_.userinfo, NewObject.info)) {
return BadRequest( RESTAPI::Errors::NameMustBeSet);
}
@@ -192,6 +202,25 @@ namespace OpenWifi{
return BadRequest(RESTAPI::Errors::UnknownManagementPolicyUUID);
}
if(!NewObject.venue.empty()) {
nlohmann::json state;
state["method"] = "assignedTo";
state["venue"] = NewObject.venue;
state["date"] = std::time(nullptr);
NewObject.state = to_string(state);
} else if (!NewObject.entity.empty()) {
nlohmann::json state;
state["method"] = "assignedTo";
state["entity"] = NewObject.entity;
state["date"] = std::time(nullptr);
NewObject.state = to_string(state);
} else {
nlohmann::json state;
state["method"] = "created";
state["date"] = std::time(nullptr);
NewObject.state = to_string(state);
}
if(DB_.CreateRecord(NewObject)) {
SerialNumberCache()->AddSerialNumber(SerialNumber,NewObject.deviceType);
if (!NewObject.venue.empty())

View File

@@ -297,19 +297,20 @@ namespace OpenWifi::ProvObjects {
void InventoryTag::to_json(Poco::JSON::Object &Obj) const {
info.to_json(Obj);
field_to_json(Obj, "serialNumber", serialNumber);
field_to_json(Obj, "venue", venue);
field_to_json(Obj, "entity", entity);
field_to_json(Obj, "subscriber", subscriber);
field_to_json(Obj, "deviceType", deviceType);
field_to_json(Obj, "qrCode", qrCode);
field_to_json(Obj, "geoCode", geoCode);
field_to_json(Obj, "location", location);
field_to_json(Obj, "contact", contact);
field_to_json( Obj, "serialNumber", serialNumber);
field_to_json( Obj, "venue", venue);
field_to_json( Obj, "entity", entity);
field_to_json( Obj, "subscriber", subscriber);
field_to_json( Obj, "deviceType", deviceType);
field_to_json( Obj, "qrCode", qrCode);
field_to_json( Obj, "geoCode", geoCode);
field_to_json( Obj, "location", location);
field_to_json( Obj, "contact", contact);
field_to_json( Obj,"deviceConfiguration",deviceConfiguration);
field_to_json( Obj,"rrm",rrm);
field_to_json( Obj,"managementPolicy",managementPolicy);
field_to_json( Obj,"state",state);
field_to_json( Obj,"devClass",devClass);
}
bool InventoryTag::from_json(const Poco::JSON::Object::Ptr &Obj) {
@@ -320,7 +321,7 @@ namespace OpenWifi::ProvObjects {
field_from_json( Obj,"entity",entity);
field_from_json( Obj,"subscriber",subscriber);
field_from_json( Obj,"deviceType",deviceType);
field_from_json(Obj, "qrCode", qrCode);
field_from_json( Obj, "qrCode", qrCode);
field_from_json( Obj,"geoCode",geoCode);
field_from_json( Obj,"location",location);
field_from_json( Obj,"contact",contact);
@@ -328,6 +329,7 @@ namespace OpenWifi::ProvObjects {
field_from_json( Obj,"rrm",rrm);
field_from_json( Obj,"managementPolicy",managementPolicy);
field_from_json( Obj,"state",state);
field_from_json( Obj,"devClass",devClass);
return true;
} catch(...) {

View File

@@ -285,6 +285,7 @@ namespace OpenWifi::ProvObjects {
std::string rrm;
Types::UUID_t managementPolicy;
std::string state;
std::string devClass;
void to_json(Poco::JSON::Object &Obj) const;
bool from_json(const Poco::JSON::Object::Ptr &Obj);

View File

@@ -63,5 +63,6 @@ namespace OpenWifi::RESTAPI::Errors {
static const std::string AuthenticatorVerificationIncomplete{"Authenticator validation is not complete."};
static const std::string SMSCouldNotBeSentRetry{"SMS could not be sent to validate device, try later or change the phone number."};
static const std::string SMSCouldNotValidate{"Code and number could not be validated"};
static const std::string InvalidDeviceClass{"Invalid device class. Must be: any, venue, entity, or subscriber"};
}

View File

@@ -430,7 +430,6 @@ namespace ORM {
Cache_->UpdateCache(R);
return true;
}
return false;
} catch (const Poco::Exception &E) {
Logger_.log(E);
}

View File

@@ -40,7 +40,8 @@ namespace OpenWifi {
ORM::Field{"rrm",ORM::FieldType::FT_TEXT},
ORM::Field{"tags",ORM::FieldType::FT_TEXT},
ORM::Field{"managementPolicy",ORM::FieldType::FT_TEXT},
ORM::Field{"state",ORM::FieldType::FT_TEXT}
ORM::Field{"state",ORM::FieldType::FT_TEXT},
ORM::Field{"devClass",ORM::FieldType::FT_TEXT}
};
static ORM::IndexVec InventoryDB_Indexes{
@@ -59,6 +60,7 @@ namespace OpenWifi {
try {
auto Session = Pool_.get();
Session << "alter table " + TableName_ + " add column state text" , Poco::Data::Keywords::now;
Session << "alter table " + TableName_ + " add column devClass text" , Poco::Data::Keywords::now;
} catch (...) {
}
@@ -71,10 +73,10 @@ namespace OpenWifi {
bool InventoryDB::CreateFromConnection( const std::string &SerialNumber,
const std::string &ConnectionInfo,
const std::string &DeviceType) {
std::string SNum{SerialNumber};
ProvObjects::InventoryTag ExistingDevice;
if(!GetRecord("serialNumber",SNum,ExistingDevice)) {
if(!GetRecord("serialNumber",SerialNumber,ExistingDevice)) {
ProvObjects::InventoryTag NewDevice;
uint64_t Now = std::time(nullptr);
@@ -130,7 +132,7 @@ namespace OpenWifi {
} else {
// Device already exists, do we need to modify anything?
bool modified=false;
if(ExistingDevice.deviceType.empty() || ExistingDevice.state=="unknown") {
if(ExistingDevice.deviceType != DeviceType) {
ExistingDevice.deviceType = DeviceType;
modified = true;
}
@@ -155,7 +157,7 @@ namespace OpenWifi {
}
if(modified) {
ExistingDevice.info.modified = std::time(nullptr);
StorageService()->InventoryDB().UpdateRecord("serialNumber", SNum, ExistingDevice);
StorageService()->InventoryDB().UpdateRecord("serialNumber", SerialNumber, ExistingDevice);
}
}
return false;
@@ -364,6 +366,7 @@ template<> void ORM::DB< OpenWifi::InventoryDBRecordType, OpenWifi::ProvObjec
Out.info.tags = OpenWifi::RESTAPI_utils::to_taglist(In.get<17>());
Out.managementPolicy = In.get<18>();
Out.state = In.get<19>();
Out.devClass = In.get<20>();
}
template<> void ORM::DB< OpenWifi::InventoryDBRecordType, OpenWifi::ProvObjects::InventoryTag>::Convert(const OpenWifi::ProvObjects::InventoryTag &In, OpenWifi::InventoryDBRecordType &Out) {
@@ -387,4 +390,5 @@ template<> void ORM::DB< OpenWifi::InventoryDBRecordType, OpenWifi::ProvObjec
Out.set<17>(OpenWifi::RESTAPI_utils::to_string(In.info.tags));
Out.set<18>(In.managementPolicy);
Out.set<19>(In.state);
Out.set<20>(In.devClass);
}

View File

@@ -32,6 +32,7 @@ namespace OpenWifi {
std::string,
std::string,
std::string,
std::string,
std::string
> InventoryDBRecordType;