Adding support for contacts and locations.

This commit is contained in:
stephb9959
2021-09-26 18:44:14 -07:00
parent 7421592afa
commit 580daec680
10 changed files with 102 additions and 23 deletions

Binary file not shown.

2
build
View File

@@ -1 +1 @@
209
211

View File

@@ -358,7 +358,7 @@ components:
type: string
format: uuid
example: each uuid is preceded by ent, or ven to say that the elemenet is entity or venue
owner:
entity:
type: string
format: uuid
managementPolicy:
@@ -421,7 +421,7 @@ components:
items:
type: string
format: uuid
owner:
entity:
type: string
format: uuid
managementPolicy:

View File

@@ -209,7 +209,7 @@ namespace OpenWifi::ProvObjects {
RESTAPI_utils::field_to_json( Obj,"mobiles",mobiles);
RESTAPI_utils::field_to_json( Obj,"geoCode",geoCode);
RESTAPI_utils::field_to_json( Obj,"inUse",inUse);
RESTAPI_utils::field_to_json( Obj,"owner",owner);
RESTAPI_utils::field_to_json( Obj,"entity",entity);
RESTAPI_utils::field_to_json( Obj,"managementPolicy",managementPolicy);
}
@@ -229,7 +229,7 @@ namespace OpenWifi::ProvObjects {
RESTAPI_utils::field_from_json( Obj,"mobiles",mobiles);
RESTAPI_utils::field_from_json( Obj,"geoCode",geoCode);
RESTAPI_utils::field_from_json( Obj,"inUse",inUse);
RESTAPI_utils::field_from_json( Obj,"owner",owner);
RESTAPI_utils::field_from_json( Obj,"entity",entity);
RESTAPI_utils::field_from_json( Obj,"managementPolicy",managementPolicy);
return true;
} catch (...) {
@@ -253,7 +253,7 @@ namespace OpenWifi::ProvObjects {
RESTAPI_utils::field_to_json( Obj,"secondaryEmail",secondaryEmail);
RESTAPI_utils::field_to_json( Obj,"accessPIN",accessPIN);
RESTAPI_utils::field_to_json( Obj,"inUse",inUse);
RESTAPI_utils::field_to_json( Obj,"owner",owner);
RESTAPI_utils::field_to_json( Obj,"entity",entity);
RESTAPI_utils::field_to_json( Obj,"managementPolicy",managementPolicy);
}
@@ -275,7 +275,7 @@ namespace OpenWifi::ProvObjects {
RESTAPI_utils::field_from_json( Obj,"secondaryEmail",secondaryEmail);
RESTAPI_utils::field_from_json( Obj,"accessPIN",accessPIN);
RESTAPI_utils::field_from_json( Obj,"inUse",inUse);
RESTAPI_utils::field_from_json( Obj,"owner",owner);
RESTAPI_utils::field_from_json( Obj,"entity",entity);
RESTAPI_utils::field_from_json( Obj,"managementPolicy",managementPolicy);
return true;
} catch (...) {

View File

@@ -163,7 +163,7 @@ namespace OpenWifi::ProvObjects {
Types::StringVec mobiles;
std::string geoCode;
Types::StringVec inUse;
Types::UUID_t owner;
Types::UUID_t entity;
Types::UUID_t managementPolicy;
void to_json(Poco::JSON::Object &Obj) const;
@@ -226,7 +226,7 @@ namespace OpenWifi::ProvObjects {
std::string secondaryEmail;
std::string accessPIN;
Types::StringVec inUse;
Types::UUID_t owner;
Types::UUID_t entity;
Types::UUID_t managementPolicy;
void to_json(Poco::JSON::Object &Obj) const;

View File

@@ -91,6 +91,16 @@ namespace OpenWifi{
return;
}
if(NewObject.entity.empty() || !Storage()->EntityDB().Exists("id",NewObject.entity)) {
BadRequest(RESTAPI::Errors::EntityMustExist);
return;
}
if(!NewObject.managementPolicy.empty() && !Storage()->PolicyDB().Exists("id",NewObject.managementPolicy)) {
BadRequest(RESTAPI::Errors::UnknownManagementPolicyUUID);
return;
}
NewObject.info.id = Daemon()->CreateUUID();
NewObject.info.created = NewObject.info.modified = std::time(nullptr);
NewObject.inUse.clear();
@@ -112,9 +122,9 @@ namespace OpenWifi{
return;
}
auto Obj = ParseStream();
auto RawObject = ParseStream();
ProvObjects::Contact NewObject;
if (!NewObject.from_json(Obj)) {
if (!NewObject.from_json(RawObject)) {
BadRequest(RESTAPI::Errors::InvalidJSONDocument);
return;
}
@@ -124,11 +134,40 @@ namespace OpenWifi{
Existing.info.notes.insert(Existing.info.notes.begin(),i);
}
AssignIfPresent(Obj,"name",Existing.info.name);
AssignIfPresent(Obj,"description",Existing.info.description);
std::string MoveEntity, MovePolicy;
bool MovingEntity=false, MovingPolicy=false;
if(AssignIfPresent(RawObject,"managementPolicy",MovePolicy)) {
if(!MovePolicy.empty() && !Storage()->PolicyDB().Exists("id",MovePolicy)) {
BadRequest(RESTAPI::Errors::UnknownManagementPolicyUUID);
return;
}
MovingPolicy = MovePolicy != Existing.managementPolicy;
}
if(AssignIfPresent(RawObject,"entity",MoveEntity)) {
if(MoveEntity.empty() || !Storage()->PolicyDB().Exists("id",MoveEntity)) {
BadRequest(RESTAPI::Errors::EntityMustExist);
return;
}
MovingEntity = MoveEntity != Existing.entity;
}
AssignIfPresent(RawObject,"name",Existing.info.name);
AssignIfPresent(RawObject,"description",Existing.info.description);
Existing.info.modified = std::time(nullptr);
if(DB_.UpdateRecord("id", UUID, Existing)) {
if(MovingPolicy) {
if(!Existing.managementPolicy.empty())
Storage()->PolicyDB().DeleteInUse("id",Existing.managementPolicy,DB_.Prefix(),Existing.info.id);
if(!MovePolicy.empty())
Storage()->PolicyDB().AddInUse("id", MovePolicy, DB_.Prefix(), Existing.info.id);
Existing.managementPolicy = MovePolicy;
}
if(MovingEntity) {
Existing.entity = MoveEntity;
}
DB_.UpdateRecord("id",UUID,Existing);
ProvObjects::Contact NewObjectAdded;
DB_.GetRecord("id", UUID, NewObjectAdded);
Poco::JSON::Object Answer;

View File

@@ -37,6 +37,7 @@ namespace OpenWifi::RESTAPI::Errors {
static const std::string LocationMustExist{"Location must exist."};
static const std::string OnlyWSSupported{"This endpoint only supports WebSocket."};
static const std::string DeviceConfigurationUUID{"Unknown DeviceConfiguration UUID."};
static const std::string OwnerMissing{"Missing owning entity UUID."};
}

View File

@@ -91,6 +91,16 @@ namespace OpenWifi{
return;
}
if(NewObject.entity.empty() || !Storage()->EntityDB().Exists("id",NewObject.entity)) {
BadRequest(RESTAPI::Errors::EntityMustExist);
return;
}
if(!NewObject.managementPolicy.empty() && !Storage()->PolicyDB().Exists("id",NewObject.managementPolicy)) {
BadRequest(RESTAPI::Errors::UnknownManagementPolicyUUID);
return;
}
NewObject.info.id = Daemon()->CreateUUID();
NewObject.info.created = NewObject.info.modified = std::time(nullptr);
NewObject.inUse.clear();
@@ -112,23 +122,52 @@ namespace OpenWifi{
return;
}
auto Obj = ParseStream();
auto RawObject = ParseStream();
ProvObjects::Location NewObject;
if (!NewObject.from_json(Obj)) {
if (!NewObject.from_json(RawObject)) {
BadRequest(RESTAPI::Errors::InvalidJSONDocument);
return;
}
std::string MoveEntity, MovePolicy;
bool MovingEntity=false, MovingPolicy=false;
if(AssignIfPresent(RawObject,"managementPolicy",MovePolicy)) {
if(!MovePolicy.empty() && !Storage()->PolicyDB().Exists("id",MovePolicy)) {
BadRequest(RESTAPI::Errors::UnknownManagementPolicyUUID);
return;
}
MovingPolicy = MovePolicy != Existing.managementPolicy;
}
if(AssignIfPresent(RawObject,"entity",MoveEntity)) {
if(MoveEntity.empty() || !Storage()->PolicyDB().Exists("id",MoveEntity)) {
BadRequest(RESTAPI::Errors::EntityMustExist);
return;
}
MovingEntity = MoveEntity != Existing.entity;
}
for(auto &i:NewObject.info.notes) {
i.createdBy = UserInfo_.userinfo.email;
Existing.info.notes.insert(Existing.info.notes.begin(),i);
}
AssignIfPresent(Obj,"name",Existing.info.name);
AssignIfPresent(Obj,"description",Existing.info.description);
AssignIfPresent(RawObject,"name",Existing.info.name);
AssignIfPresent(RawObject,"description",Existing.info.description);
Existing.info.modified = std::time(nullptr);
if(DB_.UpdateRecord("id", UUID, Existing)) {
if(MovingPolicy) {
if(!Existing.managementPolicy.empty())
Storage()->PolicyDB().DeleteInUse("id",Existing.managementPolicy,DB_.Prefix(),Existing.info.id);
if(!MovePolicy.empty())
Storage()->PolicyDB().AddInUse("id", MovePolicy, DB_.Prefix(), Existing.info.id);
Existing.managementPolicy = MovePolicy;
}
if(MovingEntity) {
Existing.entity = MoveEntity;
}
DB_.UpdateRecord("id",UUID,Existing);
ProvObjects::Location NewObjectAdded;
DB_.GetRecord("id", UUID, NewObjectAdded);
Poco::JSON::Object Answer;

View File

@@ -38,7 +38,7 @@ namespace OpenWifi {
ORM::Field{"inUse",ORM::FieldType::FT_TEXT},
ORM::Field{"tags",ORM::FieldType::FT_TEXT},
ORM::Field{"managementPolicy",ORM::FieldType::FT_TEXT},
ORM::Field{"owner",ORM::FieldType::FT_TEXT}
ORM::Field{"entity",ORM::FieldType::FT_TEXT}
};
static ORM::IndexVec ContactDB_Indexes{
@@ -75,7 +75,7 @@ template<> void ORM::DB<OpenWifi::ContactDBRecordType, OpenWifi::ProvObjects::Co
OpenWifi::Types::from_string(In.get<18>(), Out.inUse);
Out.info.tags = OpenWifi::RESTAPI_utils::to_taglist(In.get<19>());
Out.managementPolicy = In.get<20>();
Out.owner = In.get<21>();
Out.entity = In.get<21>();
}
template<> void ORM::DB<OpenWifi::ContactDBRecordType, OpenWifi::ProvObjects::Contact>::Convert(OpenWifi::ProvObjects::Contact &In, OpenWifi::ContactDBRecordType &Out) {
@@ -100,5 +100,5 @@ template<> void ORM::DB<OpenWifi::ContactDBRecordType, OpenWifi::ProvObjects::Co
Out.set<18>(OpenWifi::Types::to_string(In.inUse));
Out.set<19>(OpenWifi::RESTAPI_utils::to_string(In.info.tags));
Out.set<20>(In.managementPolicy);
Out.set<21>(In.owner);
Out.set<21>(In.entity);
}

View File

@@ -36,7 +36,7 @@ namespace OpenWifi {
ORM::Field{"inUse",ORM::FieldType::FT_TEXT},
ORM::Field{"tags",ORM::FieldType::FT_TEXT},
ORM::Field{"managementPolicy",ORM::FieldType::FT_TEXT},
ORM::Field{"owner",ORM::FieldType::FT_TEXT}
ORM::Field{"entity",ORM::FieldType::FT_TEXT}
};
static ORM::IndexVec LocationDB_Indexes{
@@ -71,7 +71,7 @@ template<> void ORM::DB<OpenWifi::LocationDBRecordType , OpenWifi::ProvObjects::
OpenWifi::Types::from_string(In.get<16>(), Out.inUse);
Out.info.tags = OpenWifi::RESTAPI_utils::to_taglist(In.get<17>());
Out.managementPolicy = In.get<18>();
Out.owner = In.get<19>();
Out.entity = In.get<19>();
}
template<> void ORM::DB<OpenWifi::LocationDBRecordType, OpenWifi::ProvObjects::Location>::Convert(OpenWifi::ProvObjects::Location &In, OpenWifi::LocationDBRecordType &Out) {
@@ -94,5 +94,5 @@ template<> void ORM::DB<OpenWifi::LocationDBRecordType, OpenWifi::ProvObjects::L
Out.set<16>(OpenWifi::Types::to_string(In.inUse));
Out.set<17>(OpenWifi::RESTAPI_utils::to_string(In.info.tags));
Out.set<18>(In.managementPolicy);
Out.set<19>(In.owner);
Out.set<19>(In.entity);
}