authentication now with url credentials

master
Boernsman 2020-02-14 22:36:00 +05:00 committed by bernhard.trinnes
parent 33aec78f57
commit 1c3b1b736b
3 changed files with 24 additions and 33 deletions

View File

@ -107,15 +107,14 @@ void DevicePluginDoorbird::confirmPairing(DevicePairingInfo *info, const QString
if (info->deviceClassId() == doorBirdDeviceClassId) {
QHostAddress address = QHostAddress(info->params().paramValue(doorBirdDeviceAddressParamTypeId).toString());
Doorbird *doorbird = new Doorbird(address, this);
Doorbird *doorbird = new Doorbird(hardwareManager()->networkManager(), address, this);
connect(doorbird, &Doorbird::deviceConnected, this, &DevicePluginDoorbird::onDoorBirdConnected);
connect(doorbird, &Doorbird::eventReveiced, this, &DevicePluginDoorbird::onDoorBirdEvent);
connect(doorbird, &Doorbird::requestSent, this, &DevicePluginDoorbird::onDoorBirdRequestSent);
connect(doorbird, &Doorbird::sessionIdReceived, this, &DevicePluginDoorbird::onSessionIdReceived);
doorbird->initConnection(username, password);
m_doorbirdConnections.insert(info->deviceId(), doorbird);
m_pendingPairings.insert(doorbird, info);
doorbird->getSession();
doorbird->getSession(username, password);
connect(info, &DevicePairingInfo::aborted, this, [this, info]{
if (m_pendingPairings.values().contains(info)) {
Doorbird *doorbird = m_pendingPairings.key(info);
@ -152,15 +151,14 @@ void DevicePluginDoorbird::setupDevice(DeviceSetupInfo *info)
pluginStorage()->endGroup();
qCDebug(dcDoorBird()) << "Device setup" << device->name() << username << password;
Doorbird *doorbird = new Doorbird(address, this);
Doorbird *doorbird = new Doorbird(hardwareManager()->networkManager(), address, this);
connect(doorbird, &Doorbird::deviceConnected, this, &DevicePluginDoorbird::onDoorBirdConnected);
connect(doorbird, &Doorbird::eventReveiced, this, &DevicePluginDoorbird::onDoorBirdEvent);
connect(doorbird, &Doorbird::requestSent, this, &DevicePluginDoorbird::onDoorBirdRequestSent);
connect(doorbird, &Doorbird::sessionIdReceived, this, &DevicePluginDoorbird::onSessionIdReceived);
doorbird->initConnection(username, password);
m_doorbirdConnections.insert(device->id(), doorbird);
m_pendingDeviceSetups.insert(doorbird, info);
doorbird->getSession();
doorbird->getSession(username, password);
connect(info, &DeviceSetupInfo::aborted, this, [device, doorbird, this] {
if (!doorbird) {
doorbird->deleteLater();

View File

@ -41,9 +41,10 @@
#include <QUrl>
#include <QUrlQuery>
Doorbird::Doorbird(const QHostAddress &address, QObject *parent) :
Doorbird::Doorbird(NetworkAccessManager *networkAccessManager, const QHostAddress &address, QObject *parent) :
QObject(parent),
m_address(address)
m_address(address),
m_networkAccessManager(networkAccessManager)
{
}
@ -58,26 +59,15 @@ void Doorbird::setAddress(const QHostAddress &address)
m_address = address;
}
void Doorbird::initConnection(const QString &username, const QString &password)
QUuid Doorbird::getSession(const QString &username, const QString &password)
{
m_networkAccessManager = new QNetworkAccessManager(this);
connect(m_networkAccessManager, &QNetworkAccessManager::authenticationRequired, this, [username, password, this] (QNetworkReply *reply, QAuthenticator *authenticator) {
qCWarning(dcDoorBird()) << "Authenticator" << reply->errorString() << reply->error();
if (m_pendingAuthentications.contains(reply)) {
m_pendingAuthentications.removeOne(reply);
reply->abort();
} else {
authenticator->setUser(username);
authenticator->setPassword(password);
m_pendingAuthentications.append(reply);
}
});
}
QUuid Doorbird::getSession()
{
QNetworkRequest request(QString("http://%1/bha-api/getsession.cgi").arg(m_address.toString()));
QUrl url;
url.setHost(m_address.toString());
url.setScheme("http");
url.setPath("/bha-api/getsession.cgi");
url.setUserName(username);
url.setPassword(password);
QNetworkRequest request(url);
qCDebug(dcDoorBird) << "Sending request:" << request.url();
QNetworkReply *reply = m_networkAccessManager->get(request);
QUuid requestId = QUuid::createUuid();

View File

@ -37,11 +37,13 @@
#include <QUuid>
#include <QImage>
#include "network/networkaccessmanager.h"
class Doorbird : public QObject
{
Q_OBJECT
public:
explicit Doorbird(const QHostAddress &address, QObject *parent = nullptr);
explicit Doorbird(NetworkAccessManager *networkAccessManager, const QHostAddress &address, QObject *parent = nullptr);
enum EventType {
Doorbell,
@ -63,8 +65,7 @@ public:
QHostAddress address();
void setAddress(const QHostAddress &address);
void initConnection(const QString &username, const QString &password);
QUuid getSession();
QUuid getSession(const QString &username, const QString &password);
QUuid openDoor(int value);
QUuid lightOn();
QUuid liveVideoRequest();
@ -87,15 +88,17 @@ public:
void connectToEventMonitor();
private:
QNetworkAccessManager *m_networkAccessManager;
QHostAddress m_address;
NetworkAccessManager *m_networkAccessManager;
QByteArray m_readBuffer;
QHostAddress m_address;
QList<QNetworkReply *> m_networkRequests;
QList<QNetworkReply *> m_pendingAuthentications;
//QByteArray sessionId;
QString m_username;
QString m_password;
signals:
void deviceConnected(bool status);