mirror of
https://github.com/Telecominfraproject/wlan-cloud-ucentralgw.git
synced 2025-11-03 20:27:45 +00:00
117 lines
3.4 KiB
C++
117 lines
3.4 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 2023-07-11.
|
|
// Arilia Wireless Inc.
|
|
//
|
|
|
|
#include "RESTAPI/RESTAPI_default_firmware.h"
|
|
|
|
#include "RESTObjects/RESTAPI_GWobjects.h"
|
|
#include "StorageService.h"
|
|
#include "framework/orm.h"
|
|
#include "framework/ow_constants.h"
|
|
#include "framework/utils.h"
|
|
|
|
namespace OpenWifi {
|
|
void RESTAPI_default_firmware::DoGet() {
|
|
std::string deviceType = ORM::Escape(GetBinding(RESTAPI::Protocol::DEVICETYPE, ""));
|
|
GWObjects::DefaultFirmware Firmware;
|
|
if (StorageService()->GetDefaultFirmware(deviceType, Firmware)) {
|
|
return Object(Firmware);
|
|
}
|
|
NotFound();
|
|
}
|
|
|
|
void RESTAPI_default_firmware::DoDelete() {
|
|
std::string deviceType = ORM::Escape(GetBinding(RESTAPI::Protocol::DEVICETYPE, ""));
|
|
if (deviceType.empty()) {
|
|
return BadRequest(RESTAPI::Errors::MissingOrInvalidParameters);
|
|
}
|
|
|
|
if (StorageService()->DeleteDefaultFirmware(deviceType)) {
|
|
return OK();
|
|
}
|
|
BadRequest(RESTAPI::Errors::CouldNotBeDeleted);
|
|
}
|
|
|
|
void RESTAPI_default_firmware::DoPost() {
|
|
std::string deviceType = GetBinding(RESTAPI::Protocol::DEVICETYPE, "");
|
|
|
|
if (deviceType.empty()) {
|
|
return BadRequest(RESTAPI::Errors::MissingOrInvalidParameters);
|
|
}
|
|
|
|
if (StorageService()->DefaultFirmwareAlreadyExists(deviceType)) {
|
|
return BadRequest(RESTAPI::Errors::DefFirmwareNameExists);
|
|
}
|
|
|
|
const auto &Obj = ParsedBody_;
|
|
GWObjects::DefaultFirmware Firmware;
|
|
if (!Firmware.from_json(Obj)) {
|
|
return BadRequest(RESTAPI::Errors::InvalidJSONDocument);
|
|
}
|
|
|
|
if(Firmware.uri.empty() || Firmware.revision.empty()) {
|
|
return BadRequest(RESTAPI::Errors::MissingOrInvalidParameters);
|
|
}
|
|
|
|
try {
|
|
Poco::URI FirmwareURI(Firmware.uri);
|
|
} catch (...) {
|
|
return BadRequest(RESTAPI::Errors::InvalidURI);
|
|
}
|
|
|
|
Firmware.Created = Firmware.LastModified = Utils::Now();
|
|
if (StorageService()->CreateDefaultFirmware(Firmware)) {
|
|
GWObjects::DefaultFirmware ModifiedFirmware;
|
|
StorageService()->GetDefaultFirmware(deviceType, ModifiedFirmware);
|
|
return Object(ModifiedFirmware);
|
|
}
|
|
BadRequest(RESTAPI::Errors::RecordNotCreated);
|
|
}
|
|
|
|
void RESTAPI_default_firmware::DoPut() {
|
|
std::string deviceType = GetBinding(RESTAPI::Protocol::DEVICETYPE, "");
|
|
|
|
const auto &Obj = ParsedBody_;
|
|
GWObjects::DefaultFirmware NewFirmware;
|
|
if (!NewFirmware.from_json(Obj)) {
|
|
return BadRequest(RESTAPI::Errors::InvalidJSONDocument);
|
|
}
|
|
|
|
GWObjects::DefaultFirmware Existing;
|
|
if (!StorageService()->GetDefaultFirmware(deviceType, Existing)) {
|
|
return NotFound();
|
|
}
|
|
|
|
Existing.LastModified = Utils::Now();
|
|
AssignIfPresent(Obj, "description", Existing.Description);
|
|
AssignIfPresent(Obj, "imageCreationDate", Existing.imageCreationDate);
|
|
AssignIfPresent(Obj, "revision", Existing.revision);
|
|
|
|
|
|
if (Obj->has("uri")) {
|
|
if(NewFirmware.uri.empty()) {
|
|
return BadRequest(RESTAPI::Errors::MissingOrInvalidParameters);
|
|
}
|
|
try {
|
|
Poco::URI FirmwareURI(NewFirmware.uri);
|
|
} catch (...) {
|
|
return BadRequest(RESTAPI::Errors::InvalidURI);
|
|
}
|
|
Existing.uri = NewFirmware.uri;
|
|
}
|
|
|
|
|
|
if (StorageService()->UpdateDefaultFirmware(Existing)) {
|
|
GWObjects::DefaultFirmware ModifiedFirmware;
|
|
|
|
StorageService()->GetDefaultFirmware(deviceType, ModifiedFirmware);
|
|
return Object(ModifiedFirmware);
|
|
}
|
|
|
|
BadRequest(RESTAPI::Errors::RecordNotUpdated);
|
|
}
|
|
} // namespace OpenWifi
|