authentication now with url credentials
parent
33aec78f57
commit
1c3b1b736b
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue