From 87e2617cf8280018b39c4b9d0a6d5cc9fd5e5283 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Thu, 3 Jan 2019 01:20:39 +0100 Subject: [PATCH] fix authentication --- anel/devicepluginanel.cpp | 29 +++++++++++++++++------------ anel/devicepluginanel.h | 1 - anel/devicepluginanel.json | 12 ++++++++++++ 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/anel/devicepluginanel.cpp b/anel/devicepluginanel.cpp index def1774e..6ebaad16 100644 --- a/anel/devicepluginanel.cpp +++ b/anel/devicepluginanel.cpp @@ -52,14 +52,6 @@ DevicePluginAnel::DevicePluginAnel() { m_connectedStateTypeIdMap.insert(netPwrCtlDeviceClassId, netPwrCtlConnectedStateTypeId); m_connectedStateTypeIdMap.insert(socketDeviceClassId, socketConnectedStateTypeId); - - m_nam = new QNetworkAccessManager(this); - connect(m_nam, &QNetworkAccessManager::authenticationRequired, this, [](QNetworkReply* reply, QAuthenticator *authenticator){ - qCDebug(dcAnelElektronik()) << "Auth required"; - Q_UNUSED(reply) - authenticator->setUser("admin"); - authenticator->setPassword("anel"); - }); } DevicePluginAnel::~DevicePluginAnel() @@ -107,6 +99,8 @@ DeviceManager::DeviceError DevicePluginAnel::discoverDevices(const DeviceClassId ParamList params; params << Param(netPwrCtlDeviceIpAddressParamTypeId, datagram.senderAddress().toString()); params << Param(netPwrCtlDevicePortParamTypeId, parts.at(3).toInt()); + params << Param(netPwrCtlDeviceUsernameParamTypeId, "user7"); + params << Param(netPwrCtlDevicePasswordParamTypeId, "anel"); d.setParams(params); descriptorList << d; } @@ -125,11 +119,15 @@ DeviceManager::DeviceSetupStatus DevicePluginAnel::setupDevice(Device *device) QNetworkRequest request; request.setUrl(QUrl("http://" + device->paramValue(netPwrCtlDeviceIpAddressParamTypeId).toString() + ":" + device->paramValue(netPwrCtlDevicePortParamTypeId).toString() + "/strg.cfg")); - QNetworkReply *reply = m_nam->get(request); + QString username = device->paramValue(netPwrCtlDeviceUsernameParamTypeId).toString(); + QString password = device->paramValue(netPwrCtlDevicePasswordParamTypeId).toString(); + request.setRawHeader("Authorization", "Basic " + QString("%1:%2").arg(username, password).toUtf8().toBase64()); + qCDebug(dcAnelElektronik()) << "SetupDevice fetching:" << request.url() << request.rawHeader("Authorization") << username << password; + QNetworkReply *reply = hardwareManager()->networkManager()->get(request); connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); connect(reply, &QNetworkReply::finished, device, [this, device, reply](){ if (reply->error() != QNetworkReply::NoError) { - qCWarning(dcAnelElektronik()) << "Error fetching state for" << device->name(); + qCWarning(dcAnelElektronik()) << "Error fetching state for" << device->name() << reply->error() << reply->errorString(); device->setStateValue(netPwrCtlConnectedStateTypeId, false); emit deviceSetupFinished(device, DeviceManager::DeviceSetupStatusFailure); return; @@ -236,8 +234,12 @@ DeviceManager::DeviceError DevicePluginAnel::executeAction(Device *device, const if (action.actionTypeId() == socketPowerActionTypeId) { QUrl url("http://" + parentDevice->paramValue(netPwrCtlDeviceIpAddressParamTypeId).toString() + ":" + parentDevice->paramValue(netPwrCtlDevicePortParamTypeId).toString() + "/ctrl.htm"); QNetworkRequest request(url); + QString username = parentDevice->paramValue(netPwrCtlDeviceUsernameParamTypeId).toString(); + QString password = parentDevice->paramValue(netPwrCtlDevicePasswordParamTypeId).toString(); + request.setRawHeader("Authorization", "Basic " + QString("%1:%2").arg(username, password).toUtf8().toBase64()); + request.setHeader(QNetworkRequest::ContentTypeHeader, "text/plain"); QByteArray data = QString("F%1=%2").arg(device->paramValue(socketDeviceNumberParamTypeId).toString(), action.param(socketPowerActionPowerParamTypeId).value().toBool() == true ? "1" : "0").toUtf8(); - QNetworkReply *reply = m_nam->post(request, data); + QNetworkReply *reply = hardwareManager()->networkManager()->post(request, data); connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); connect(reply, &QNetworkReply::finished, device, [this, reply, action](){ if (reply->error() != QNetworkReply::NoError) { @@ -265,7 +267,10 @@ void DevicePluginAnel::refreshStates() QNetworkRequest request; request.setUrl(url); - QNetworkReply *reply = m_nam->get(request); + QString username = device->paramValue(netPwrCtlDeviceUsernameParamTypeId).toString(); + QString password = device->paramValue(netPwrCtlDevicePasswordParamTypeId).toString(); + request.setRawHeader("Authorization", "Basic " + QString("%1:%2").arg(username, password).toUtf8().toBase64()); + QNetworkReply *reply = hardwareManager()->networkManager()->get(request); connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); connect(reply, &QNetworkReply::finished, device, [this, device, reply](){ if (reply->error() != QNetworkReply::NoError) { diff --git a/anel/devicepluginanel.h b/anel/devicepluginanel.h index 28fd1be8..0a8c9b49 100644 --- a/anel/devicepluginanel.h +++ b/anel/devicepluginanel.h @@ -54,7 +54,6 @@ private: void setConnectedState(Device *device, bool connected); private: - QNetworkAccessManager *m_nam = nullptr; PluginTimer *m_pollTimer = nullptr; QHash m_connectedStateTypeIdMap; diff --git a/anel/devicepluginanel.json b/anel/devicepluginanel.json index 02dbe61c..daa1701d 100644 --- a/anel/devicepluginanel.json +++ b/anel/devicepluginanel.json @@ -27,6 +27,18 @@ "displayName": "Web control Port", "type": "int", "defaultValue": 80 + }, + { + "id": "79447e77-8a25-4574-8eba-9326d86a7c7a", + "name": "username", + "displayName": "Username", + "type": "QString" + }, + { + "id": "864b49fa-6b62-46e3-b56c-9a5105a87d5b", + "name": "password", + "displayName": "Password", + "type": "QString" } ], "stateTypes": [