mirror of
https://github.com/Telecominfraproject/wlan-cloud-owprov.git
synced 2025-10-30 18:18:03 +00:00
99 lines
3.9 KiB
C++
99 lines
3.9 KiB
C++
//
|
|
// Created by stephane bourque on 2022-04-07.
|
|
//
|
|
|
|
#include "RESTAPI_op_location_handler.h"
|
|
#include "sdks/SDK_sec.h"
|
|
#include "RESTAPI/RESTAPI_db_helpers.h"
|
|
|
|
namespace OpenWifi {
|
|
|
|
void RESTAPI_op_location_handler::DoGet() {
|
|
auto uuid = GetBinding("uuid","");
|
|
if(uuid.empty()) {
|
|
return BadRequest(RESTAPI::Errors::MissingUUID);
|
|
}
|
|
OpLocationDB::RecordName Existing;
|
|
if(!DB_.GetRecord("id",uuid,Existing)) {
|
|
return NotFound();
|
|
}
|
|
Poco::JSON::Object Answer;
|
|
Existing.to_json(Answer);
|
|
return ReturnObject(Answer);
|
|
}
|
|
|
|
void RESTAPI_op_location_handler::DoDelete() {
|
|
auto uuid = GetBinding("uuid","");
|
|
if(uuid.empty()) {
|
|
return BadRequest(RESTAPI::Errors::MissingUUID);
|
|
}
|
|
|
|
OpLocationDB::RecordName Existing;
|
|
if(!DB_.GetRecord("id",uuid,Existing)) {
|
|
return NotFound();
|
|
}
|
|
|
|
// see if anyone is still using this thing
|
|
if(!Existing.subscriberDeviceId.empty()){
|
|
return BadRequest(RESTAPI::Errors::StillInUse);
|
|
}
|
|
DB_.DeleteRecord("id", uuid);
|
|
return OK();
|
|
}
|
|
|
|
void RESTAPI_op_location_handler::DoPost() {
|
|
|
|
const auto & RawObject = ParsedBody_;
|
|
OpLocationDB::RecordName NewObject;
|
|
if(!NewObject.from_json(RawObject)) {
|
|
return BadRequest(RESTAPI::Errors::InvalidJSONDocument);
|
|
}
|
|
|
|
if( !ValidDbId(NewObject.operatorId,StorageService()->OperatorDB(), false, RESTAPI::Errors::InvalidOperatorId, *this ) ||
|
|
!ValidDbId(NewObject.managementPolicy,StorageService()->PolicyDB(), true, RESTAPI::Errors::UnknownManagementPolicyUUID, *this ) ||
|
|
!ValidDbId(NewObject.subscriberDeviceId,StorageService()->SubscriberDeviceDB(), true, RESTAPI::Errors::InvalidSubscriberDeviceId, *this ) ||
|
|
!ValidLocationType(NewObject.type,*this)) {
|
|
return;
|
|
}
|
|
|
|
ProvObjects::CreateObjectInfo(RawObject, UserInfo_.userinfo, NewObject.info);
|
|
return ReturnCreatedObject(DB_, NewObject, *this);
|
|
}
|
|
|
|
void RESTAPI_op_location_handler::DoPut() {
|
|
auto uuid = GetBinding("uuid");
|
|
OpLocationDB::RecordName Existing;
|
|
if(uuid.empty() || !DB_.GetRecord("id",uuid,Existing)) {
|
|
return BadRequest(RESTAPI::Errors::MissingUUID);
|
|
}
|
|
|
|
const auto RawObject = ParsedBody_;
|
|
OpLocationDB::RecordName UpdateObj;
|
|
if(!UpdateObj.from_json(RawObject)) {
|
|
return BadRequest(RESTAPI::Errors::InvalidJSONDocument);
|
|
}
|
|
|
|
if( !ValidLocationType(UpdateObj.type,*this) ||
|
|
!ValidDbId(UpdateObj.managementPolicy,StorageService()->PolicyDB(), true, RESTAPI::Errors::UnknownManagementPolicyUUID, *this ) ||
|
|
!ValidDbId(UpdateObj.subscriberDeviceId,StorageService()->SubscriberDeviceDB(), true, RESTAPI::Errors::InvalidSubscriberDeviceId, *this )
|
|
) {
|
|
return;
|
|
}
|
|
|
|
ProvObjects::UpdateObjectInfo(RawObject, UserInfo_.userinfo, Existing.info);
|
|
AssignIfPresent(RawObject,"type",Existing.type);
|
|
AssignIfPresent(RawObject,"subscriberDeviceId", Existing.subscriberDeviceId);
|
|
AssignIfPresent(RawObject,"managementPolicy", Existing.managementPolicy);
|
|
AssignIfPresent(RawObject,"buildingName",Existing.buildingName);
|
|
AssignIfPresent(RawObject,"addressLines",Existing.addressLines);
|
|
AssignIfPresent(RawObject,"city",Existing.city);
|
|
AssignIfPresent(RawObject,"state",Existing.state);
|
|
AssignIfPresent(RawObject,"postal",Existing.postal);
|
|
AssignIfPresent(RawObject,"country",Existing.country);
|
|
AssignIfPresent(RawObject,"mobiles",Existing.mobiles);
|
|
AssignIfPresent(RawObject,"phones",Existing.phones);
|
|
AssignIfPresent(RawObject,"geoCode",Existing.geoCode);
|
|
|
|
return ReturnUpdatedObject(DB_,Existing,*this);
|
|
}
|
|
} |