mirror of https://github.com/nymea/nymea.git
add vendors resource
parent
34e53ef5b3
commit
f8296c8707
|
|
@ -32,6 +32,11 @@ DeviceClassesResource::DeviceClassesResource(QObject *parent) :
|
|||
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)
|
||||
{
|
||||
|
||||
|
|
@ -248,6 +253,7 @@ void DeviceClassesResource::devicesDiscovered(const DeviceClassId &deviceClassId
|
|||
return; // Not the discovery we are waiting for.
|
||||
|
||||
qCDebug(dcRest) << "Discovery finished. Found" << deviceDescriptors.count() << "devices.";
|
||||
|
||||
HttpReply *reply = m_discoverRequests.take(deviceClassId);
|
||||
reply->setPayload(QJsonDocument::fromVariant(JsonTypes::packDeviceDescriptors(deviceDescriptors)).toJson());
|
||||
reply->finished();
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ class DeviceClassesResource : public RestResource
|
|||
public:
|
||||
explicit DeviceClassesResource(QObject *parent = 0);
|
||||
|
||||
QString name() const override;
|
||||
|
||||
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -36,6 +36,11 @@ DevicesResource::DevicesResource(QObject *parent) :
|
|||
connect(GuhCore::instance(), &GuhCore::deviceEditFinished, this, &DevicesResource::deviceEditFinished);
|
||||
}
|
||||
|
||||
QString DevicesResource::name() const
|
||||
{
|
||||
return "devices";
|
||||
}
|
||||
|
||||
HttpReply *DevicesResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
||||
{
|
||||
m_device = 0;
|
||||
|
|
@ -258,10 +263,10 @@ HttpReply *DevicesResource::addConfiguredDevice(const QByteArray &payload) const
|
|||
|
||||
DeviceManager::DeviceError status;
|
||||
if (deviceDescriptorId.isNull()) {
|
||||
qCDebug(dcRest) << "...adding device with params" << deviceParams;
|
||||
qCDebug(dcRest) << "Adding device with params" << deviceParams;
|
||||
status = GuhCore::instance()->addConfiguredDevice(deviceClass, deviceParams, newDeviceId);
|
||||
} else {
|
||||
qCDebug(dcRest) << "...adding discovered device with descriptor id" << deviceDescriptorId;
|
||||
qCDebug(dcRest) << "Adding discovered device";
|
||||
status = GuhCore::instance()->addConfiguredDevice(deviceClass, deviceDescriptorId, newDeviceId);
|
||||
}
|
||||
if (status == DeviceManager::DeviceErrorAsync) {
|
||||
|
|
@ -274,7 +279,6 @@ HttpReply *DevicesResource::addConfiguredDevice(const QByteArray &payload) const
|
|||
return createErrorReply(HttpReply::InternalServerError);
|
||||
|
||||
return createSuccessReply();
|
||||
|
||||
}
|
||||
|
||||
HttpReply *DevicesResource::editDevice(Device *device, const QByteArray &payload) const
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ class DevicesResource: public RestResource
|
|||
public:
|
||||
explicit DevicesResource(QObject *parent = 0);
|
||||
|
||||
QString name() const override;
|
||||
|
||||
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -28,6 +28,11 @@ LogsResource::LogsResource(QObject *parent) :
|
|||
{
|
||||
}
|
||||
|
||||
QString LogsResource::name() const
|
||||
{
|
||||
return "logs";
|
||||
}
|
||||
|
||||
HttpReply *LogsResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
||||
{
|
||||
Q_UNUSED(request)
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ class LogsResource : public RestResource
|
|||
public:
|
||||
explicit LogsResource(QObject *parent = 0);
|
||||
|
||||
QString name() const override;
|
||||
|
||||
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -28,6 +28,11 @@ PluginsResource::PluginsResource(QObject *parent) :
|
|||
{
|
||||
}
|
||||
|
||||
QString PluginsResource::name() const
|
||||
{
|
||||
return "plugins";
|
||||
}
|
||||
|
||||
HttpReply *PluginsResource::proccessRequest(const HttpRequest &request, const QStringList &urlTokens)
|
||||
{
|
||||
Q_UNUSED(request)
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ class PluginsResource : public RestResource
|
|||
public:
|
||||
explicit PluginsResource(QObject *parent = 0);
|
||||
|
||||
QString name() const override;
|
||||
|
||||
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -39,6 +39,8 @@ public:
|
|||
explicit RestResource(QObject *parent = 0);
|
||||
virtual ~RestResource() = 0;
|
||||
|
||||
virtual QString name() const = 0;
|
||||
|
||||
virtual HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) = 0;
|
||||
|
||||
static HttpReply *createSuccessReply();
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ void RestServer::setup()
|
|||
// Create resources
|
||||
m_deviceResource = new DevicesResource(this);
|
||||
m_deviceClassesResource = new DeviceClassesResource(this);
|
||||
m_vendorsResource = new VendorsResource(this);
|
||||
}
|
||||
|
||||
void RestServer::clientConnected(const QUuid &clientId)
|
||||
|
|
@ -103,6 +104,20 @@ void RestServer::processHttpRequest(const QUuid &clientId, const HttpRequest &re
|
|||
reply->deleteLater();
|
||||
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()
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#include "jsonhandler.h"
|
||||
#include "devicesresource.h"
|
||||
#include "deviceclassesresource.h"
|
||||
#include "vendorsresource.h"
|
||||
|
||||
class HttpRequest;
|
||||
class HttpReply;
|
||||
|
|
@ -47,6 +48,7 @@ private:
|
|||
|
||||
DevicesResource *m_deviceResource;
|
||||
DeviceClassesResource *m_deviceClassesResource;
|
||||
VendorsResource *m_vendorsResource;
|
||||
|
||||
private slots:
|
||||
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)
|
||||
{
|
||||
Q_UNUSED(request)
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ class RulesResource : public RestResource
|
|||
public:
|
||||
explicit RulesResource(QObject *parent = 0);
|
||||
|
||||
QString name() const override;
|
||||
|
||||
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -20,6 +20,10 @@
|
|||
|
||||
#include "vendorsresource.h"
|
||||
#include "network/httprequest.h"
|
||||
#include "loggingcategories.h"
|
||||
#include "guhcore.h"
|
||||
|
||||
#include <QJsonDocument>
|
||||
|
||||
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)
|
||||
{
|
||||
Q_UNUSED(request)
|
||||
Q_UNUSED(urlTokens)
|
||||
// /api/v1/vendors/{vendorId}/
|
||||
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);
|
||||
}
|
||||
|
|
@ -39,33 +66,42 @@ HttpReply *VendorsResource::proccessRequest(const HttpRequest &request, const QS
|
|||
HttpReply *VendorsResource::proccessGetRequest(const HttpRequest &request, const QStringList &urlTokens)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
HttpReply *VendorsResource::proccessDeleteRequest(const HttpRequest &request, const QStringList &urlTokens)
|
||||
HttpReply *VendorsResource::getVendors() const
|
||||
{
|
||||
Q_UNUSED(request)
|
||||
Q_UNUSED(urlTokens)
|
||||
qCDebug(dcRest) << "Get vendors";
|
||||
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)
|
||||
Q_UNUSED(urlTokens)
|
||||
|
||||
return createErrorReply(HttpReply::NotImplemented);
|
||||
}
|
||||
|
||||
HttpReply *VendorsResource::proccessPostRequest(const HttpRequest &request, const QStringList &urlTokens)
|
||||
{
|
||||
Q_UNUSED(request)
|
||||
Q_UNUSED(urlTokens)
|
||||
|
||||
return createErrorReply(HttpReply::NotImplemented);
|
||||
qCDebug(dcRest) << "Get vendor with id" << vendorId;
|
||||
foreach (const Vendor &vendor, GuhCore::instance()->supportedVendors()) {
|
||||
if (vendor.id() == vendorId) {
|
||||
HttpReply *reply = createSuccessReply();
|
||||
reply->setPayload(QJsonDocument::fromVariant(JsonTypes::packVendor(vendor)).toJson());
|
||||
return reply;
|
||||
}
|
||||
}
|
||||
return createErrorReply(HttpReply::NotFound);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,22 +38,19 @@ class VendorsResource : public RestResource
|
|||
public:
|
||||
explicit VendorsResource(QObject *parent = 0);
|
||||
|
||||
QString name() const override;
|
||||
|
||||
HttpReply *proccessRequest(const HttpRequest &request, const QStringList &urlTokens) override;
|
||||
|
||||
private:
|
||||
VendorId m_vendorId;
|
||||
|
||||
// Process method
|
||||
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
|
||||
|
||||
// Delete methods
|
||||
|
||||
// Post methods
|
||||
|
||||
// Put methods
|
||||
HttpReply *getVendors() const;
|
||||
HttpReply *getVendor(const VendorId &vendorId) const;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue