fix authentication

This commit is contained in:
Michael Zanetti 2019-01-03 01:20:39 +01:00
parent 6640316cf3
commit 87e2617cf8
3 changed files with 29 additions and 13 deletions

View File

@ -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) {

View File

@ -54,7 +54,6 @@ private:
void setConnectedState(Device *device, bool connected);
private:
QNetworkAccessManager *m_nam = nullptr;
PluginTimer *m_pollTimer = nullptr;
QHash<DeviceClassId, StateTypeId> m_connectedStateTypeIdMap;

View File

@ -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": [