add vendors resource
This commit is contained in:
parent
34e53ef5b3
commit
f8296c8707
@ -32,6 +32,11 @@ DeviceClassesResource::DeviceClassesResource(QObject *parent) :
|
|||||||
connect(GuhCore::instance(), &GuhCore::devicesDiscovered, this, &DeviceClassesResource::devicesDiscovered, Qt::QueuedConnection);
|
connect(GuhCore::instance(), &GuhCore::devicesDiscovered, this, &DeviceClassesResource::devicesDiscovered, Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString DeviceClassesResource::name() const
|
||||||
|
{
|
||||||
|
return "deviceclasses";
|
||||||
|
}
|
||||||
|
|
||||||
HttpReply *DeviceClassesResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
HttpReply *DeviceClassesResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -248,6 +253,7 @@ void DeviceClassesResource::devicesDiscovered(const DeviceClassId &deviceClassId
|
|||||||
return; // Not the discovery we are waiting for.
|
return; // Not the discovery we are waiting for.
|
||||||
|
|
||||||
qCDebug(dcRest) << "Discovery finished. Found" << deviceDescriptors.count() << "devices.";
|
qCDebug(dcRest) << "Discovery finished. Found" << deviceDescriptors.count() << "devices.";
|
||||||
|
|
||||||
HttpReply *reply = m_discoverRequests.take(deviceClassId);
|
HttpReply *reply = m_discoverRequests.take(deviceClassId);
|
||||||
reply->setPayload(QJsonDocument::fromVariant(JsonTypes::packDeviceDescriptors(deviceDescriptors)).toJson());
|
reply->setPayload(QJsonDocument::fromVariant(JsonTypes::packDeviceDescriptors(deviceDescriptors)).toJson());
|
||||||
reply->finished();
|
reply->finished();
|
||||||
|
|||||||
@ -38,6 +38,8 @@ class DeviceClassesResource : public RestResource
|
|||||||
public:
|
public:
|
||||||
explicit DeviceClassesResource(QObject *parent = 0);
|
explicit DeviceClassesResource(QObject *parent = 0);
|
||||||
|
|
||||||
|
QString name() const override;
|
||||||
|
|
||||||
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@ -36,6 +36,11 @@ DevicesResource::DevicesResource(QObject *parent) :
|
|||||||
connect(GuhCore::instance(), &GuhCore::deviceEditFinished, this, &DevicesResource::deviceEditFinished);
|
connect(GuhCore::instance(), &GuhCore::deviceEditFinished, this, &DevicesResource::deviceEditFinished);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString DevicesResource::name() const
|
||||||
|
{
|
||||||
|
return "devices";
|
||||||
|
}
|
||||||
|
|
||||||
HttpReply *DevicesResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
HttpReply *DevicesResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
||||||
{
|
{
|
||||||
m_device = 0;
|
m_device = 0;
|
||||||
@ -258,10 +263,10 @@ HttpReply *DevicesResource::addConfiguredDevice(const QByteArray &payload) const
|
|||||||
|
|
||||||
DeviceManager::DeviceError status;
|
DeviceManager::DeviceError status;
|
||||||
if (deviceDescriptorId.isNull()) {
|
if (deviceDescriptorId.isNull()) {
|
||||||
qCDebug(dcRest) << "...adding device with params" << deviceParams;
|
qCDebug(dcRest) << "Adding device with params" << deviceParams;
|
||||||
status = GuhCore::instance()->addConfiguredDevice(deviceClass, deviceParams, newDeviceId);
|
status = GuhCore::instance()->addConfiguredDevice(deviceClass, deviceParams, newDeviceId);
|
||||||
} else {
|
} else {
|
||||||
qCDebug(dcRest) << "...adding discovered device with descriptor id" << deviceDescriptorId;
|
qCDebug(dcRest) << "Adding discovered device";
|
||||||
status = GuhCore::instance()->addConfiguredDevice(deviceClass, deviceDescriptorId, newDeviceId);
|
status = GuhCore::instance()->addConfiguredDevice(deviceClass, deviceDescriptorId, newDeviceId);
|
||||||
}
|
}
|
||||||
if (status == DeviceManager::DeviceErrorAsync) {
|
if (status == DeviceManager::DeviceErrorAsync) {
|
||||||
@ -274,7 +279,6 @@ HttpReply *DevicesResource::addConfiguredDevice(const QByteArray &payload) const
|
|||||||
return createErrorReply(HttpReply::InternalServerError);
|
return createErrorReply(HttpReply::InternalServerError);
|
||||||
|
|
||||||
return createSuccessReply();
|
return createSuccessReply();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpReply *DevicesResource::editDevice(Device *device, const QByteArray &payload) const
|
HttpReply *DevicesResource::editDevice(Device *device, const QByteArray &payload) const
|
||||||
|
|||||||
@ -38,6 +38,8 @@ class DevicesResource: public RestResource
|
|||||||
public:
|
public:
|
||||||
explicit DevicesResource(QObject *parent = 0);
|
explicit DevicesResource(QObject *parent = 0);
|
||||||
|
|
||||||
|
QString name() const override;
|
||||||
|
|
||||||
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@ -28,6 +28,11 @@ LogsResource::LogsResource(QObject *parent) :
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString LogsResource::name() const
|
||||||
|
{
|
||||||
|
return "logs";
|
||||||
|
}
|
||||||
|
|
||||||
HttpReply *LogsResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
HttpReply *LogsResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
||||||
{
|
{
|
||||||
Q_UNUSED(request)
|
Q_UNUSED(request)
|
||||||
|
|||||||
@ -38,6 +38,8 @@ class LogsResource : public RestResource
|
|||||||
public:
|
public:
|
||||||
explicit LogsResource(QObject *parent = 0);
|
explicit LogsResource(QObject *parent = 0);
|
||||||
|
|
||||||
|
QString name() const override;
|
||||||
|
|
||||||
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@ -28,6 +28,11 @@ PluginsResource::PluginsResource(QObject *parent) :
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString PluginsResource::name() const
|
||||||
|
{
|
||||||
|
return "plugins";
|
||||||
|
}
|
||||||
|
|
||||||
HttpReply *PluginsResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
HttpReply *PluginsResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
||||||
{
|
{
|
||||||
Q_UNUSED(request)
|
Q_UNUSED(request)
|
||||||
|
|||||||
@ -38,6 +38,8 @@ class PluginsResource : public RestResource
|
|||||||
public:
|
public:
|
||||||
explicit PluginsResource(QObject *parent = 0);
|
explicit PluginsResource(QObject *parent = 0);
|
||||||
|
|
||||||
|
QString name() const override;
|
||||||
|
|
||||||
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@ -39,6 +39,8 @@ public:
|
|||||||
explicit RestResource(QObject *parent = 0);
|
explicit RestResource(QObject *parent = 0);
|
||||||
virtual ~RestResource() = 0;
|
virtual ~RestResource() = 0;
|
||||||
|
|
||||||
|
virtual QString name() const = 0;
|
||||||
|
|
||||||
virtual HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) = 0;
|
virtual HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) = 0;
|
||||||
|
|
||||||
static HttpReply *createSuccessReply();
|
static HttpReply *createSuccessReply();
|
||||||
|
|||||||
@ -46,6 +46,7 @@ void RestServer::setup()
|
|||||||
// Create resources
|
// Create resources
|
||||||
m_deviceResource = new DevicesResource(this);
|
m_deviceResource = new DevicesResource(this);
|
||||||
m_deviceClassesResource = new DeviceClassesResource(this);
|
m_deviceClassesResource = new DeviceClassesResource(this);
|
||||||
|
m_vendorsResource = new VendorsResource(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RestServer::clientConnected(const QUuid &clientId)
|
void RestServer::clientConnected(const QUuid &clientId)
|
||||||
@ -103,6 +104,20 @@ void RestServer::processHttpRequest(const QUuid &clientId, const HttpRequest &re
|
|||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (urlTokens.at(2) == "vendors") {
|
||||||
|
HttpReply *reply = m_vendorsResource->proccessRequest(request, urlTokens);
|
||||||
|
reply->setClientId(clientId);
|
||||||
|
if (reply->type() == HttpReply::TypeAsync) {
|
||||||
|
connect(reply, &HttpReply::finished, this, &RestServer::asyncReplyFinished);
|
||||||
|
reply->startWait();
|
||||||
|
m_asyncReplies.insert(clientId, reply);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_webserver->sendHttpReply(reply);
|
||||||
|
reply->deleteLater();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RestServer::asyncReplyFinished()
|
void RestServer::asyncReplyFinished()
|
||||||
|
|||||||
@ -27,6 +27,7 @@
|
|||||||
#include "jsonhandler.h"
|
#include "jsonhandler.h"
|
||||||
#include "devicesresource.h"
|
#include "devicesresource.h"
|
||||||
#include "deviceclassesresource.h"
|
#include "deviceclassesresource.h"
|
||||||
|
#include "vendorsresource.h"
|
||||||
|
|
||||||
class HttpRequest;
|
class HttpRequest;
|
||||||
class HttpReply;
|
class HttpReply;
|
||||||
@ -47,6 +48,7 @@ private:
|
|||||||
|
|
||||||
DevicesResource *m_deviceResource;
|
DevicesResource *m_deviceResource;
|
||||||
DeviceClassesResource *m_deviceClassesResource;
|
DeviceClassesResource *m_deviceClassesResource;
|
||||||
|
VendorsResource *m_vendorsResource;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void setup();
|
void setup();
|
||||||
|
|||||||
@ -27,6 +27,11 @@ RulesResource::RulesResource(QObject *parent) :
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString RulesResource::name() const
|
||||||
|
{
|
||||||
|
return "rules";
|
||||||
|
}
|
||||||
|
|
||||||
HttpReply *RulesResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
HttpReply *RulesResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
||||||
{
|
{
|
||||||
Q_UNUSED(request)
|
Q_UNUSED(request)
|
||||||
|
|||||||
@ -38,6 +38,8 @@ class RulesResource : public RestResource
|
|||||||
public:
|
public:
|
||||||
explicit RulesResource(QObject *parent = 0);
|
explicit RulesResource(QObject *parent = 0);
|
||||||
|
|
||||||
|
QString name() const override;
|
||||||
|
|
||||||
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@ -20,6 +20,10 @@
|
|||||||
|
|
||||||
#include "vendorsresource.h"
|
#include "vendorsresource.h"
|
||||||
#include "network/httprequest.h"
|
#include "network/httprequest.h"
|
||||||
|
#include "loggingcategories.h"
|
||||||
|
#include "guhcore.h"
|
||||||
|
|
||||||
|
#include <QJsonDocument>
|
||||||
|
|
||||||
namespace guhserver {
|
namespace guhserver {
|
||||||
|
|
||||||
@ -28,10 +32,33 @@ VendorsResource::VendorsResource(QObject *parent) :
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString VendorsResource::name() const
|
||||||
|
{
|
||||||
|
return "vendors";
|
||||||
|
}
|
||||||
|
|
||||||
HttpReply *VendorsResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
HttpReply *VendorsResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
||||||
{
|
{
|
||||||
Q_UNUSED(request)
|
// /api/v1/vendors/{vendorId}/
|
||||||
Q_UNUSED(urlTokens)
|
if (urlTokens.count() >= 4) {
|
||||||
|
m_vendorId = VendorId(urlTokens.at(3));
|
||||||
|
if (m_vendorId.isNull()) {
|
||||||
|
qCWarning(dcRest) << "Could not parse VendorId:" << urlTokens.at(3);
|
||||||
|
return createErrorReply(HttpReply::BadRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check method
|
||||||
|
HttpReply *reply;
|
||||||
|
switch (request.method()) {
|
||||||
|
case HttpRequest::Get:
|
||||||
|
reply = proccessGetRequest(request, urlTokens);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
reply = createErrorReply(HttpReply::BadRequest);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return reply;
|
||||||
|
|
||||||
return createErrorReply(HttpReply::NotImplemented);
|
return createErrorReply(HttpReply::NotImplemented);
|
||||||
}
|
}
|
||||||
@ -39,33 +66,42 @@ HttpReply *VendorsResource::proccessRequest(const HttpRequest &request, const QS
|
|||||||
HttpReply *VendorsResource::proccessGetRequest(const HttpRequest &request, const QStringList &urlTokens)
|
HttpReply *VendorsResource::proccessGetRequest(const HttpRequest &request, const QStringList &urlTokens)
|
||||||
{
|
{
|
||||||
Q_UNUSED(request)
|
Q_UNUSED(request)
|
||||||
Q_UNUSED(urlTokens)
|
|
||||||
|
// GET /api/v1/vendors
|
||||||
|
if (urlTokens.count() == 3)
|
||||||
|
return getVendors();
|
||||||
|
|
||||||
|
// GET /api/v1/vendors/{vendorId}
|
||||||
|
if (urlTokens.count() == 4)
|
||||||
|
return getVendor(m_vendorId);
|
||||||
|
|
||||||
return createErrorReply(HttpReply::NotImplemented);
|
return createErrorReply(HttpReply::NotImplemented);
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpReply *VendorsResource::proccessDeleteRequest(const HttpRequest &request, const QStringList &urlTokens)
|
HttpReply *VendorsResource::getVendors() const
|
||||||
{
|
{
|
||||||
Q_UNUSED(request)
|
qCDebug(dcRest) << "Get vendors";
|
||||||
Q_UNUSED(urlTokens)
|
HttpReply *reply = createSuccessReply();
|
||||||
|
|
||||||
return createErrorReply(HttpReply::NotImplemented);
|
QVariantList vendorsList;
|
||||||
|
foreach (const Vendor &vendor, GuhCore::instance()->supportedVendors()) {
|
||||||
|
vendorsList.append(JsonTypes::packVendor(vendor));
|
||||||
|
}
|
||||||
|
reply->setPayload(QJsonDocument::fromVariant(vendorsList).toJson());
|
||||||
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpReply *VendorsResource::proccessPutRequest(const HttpRequest &request, const QStringList &urlTokens)
|
HttpReply *VendorsResource::getVendor(const VendorId &vendorId) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(request)
|
qCDebug(dcRest) << "Get vendor with id" << vendorId;
|
||||||
Q_UNUSED(urlTokens)
|
foreach (const Vendor &vendor, GuhCore::instance()->supportedVendors()) {
|
||||||
|
if (vendor.id() == vendorId) {
|
||||||
return createErrorReply(HttpReply::NotImplemented);
|
HttpReply *reply = createSuccessReply();
|
||||||
}
|
reply->setPayload(QJsonDocument::fromVariant(JsonTypes::packVendor(vendor)).toJson());
|
||||||
|
return reply;
|
||||||
HttpReply *VendorsResource::proccessPostRequest(const HttpRequest &request, const QStringList &urlTokens)
|
}
|
||||||
{
|
}
|
||||||
Q_UNUSED(request)
|
return createErrorReply(HttpReply::NotFound);
|
||||||
Q_UNUSED(urlTokens)
|
|
||||||
|
|
||||||
return createErrorReply(HttpReply::NotImplemented);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,22 +38,19 @@ class VendorsResource : public RestResource
|
|||||||
public:
|
public:
|
||||||
explicit VendorsResource(QObject *parent = 0);
|
explicit VendorsResource(QObject *parent = 0);
|
||||||
|
|
||||||
|
QString name() const override;
|
||||||
|
|
||||||
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
VendorId m_vendorId;
|
||||||
|
|
||||||
// Process method
|
// Process method
|
||||||
HttpReply *proccessGetRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
HttpReply *proccessGetRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
||||||
HttpReply *proccessDeleteRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
|
||||||
HttpReply *proccessPutRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
|
||||||
HttpReply *proccessPostRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
|
||||||
|
|
||||||
// Get methods
|
// Get methods
|
||||||
|
HttpReply *getVendors() const;
|
||||||
// Delete methods
|
HttpReply *getVendor(const VendorId &vendorId) const;
|
||||||
|
|
||||||
// Post methods
|
|
||||||
|
|
||||||
// Put methods
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user