authentication now with url credentials
parent
33aec78f57
commit
1c3b1b736b
|
|
@ -107,15 +107,14 @@ void DevicePluginDoorbird::confirmPairing(DevicePairingInfo *info, const QString
|
||||||
if (info->deviceClassId() == doorBirdDeviceClassId) {
|
if (info->deviceClassId() == doorBirdDeviceClassId) {
|
||||||
QHostAddress address = QHostAddress(info->params().paramValue(doorBirdDeviceAddressParamTypeId).toString());
|
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::deviceConnected, this, &DevicePluginDoorbird::onDoorBirdConnected);
|
||||||
connect(doorbird, &Doorbird::eventReveiced, this, &DevicePluginDoorbird::onDoorBirdEvent);
|
connect(doorbird, &Doorbird::eventReveiced, this, &DevicePluginDoorbird::onDoorBirdEvent);
|
||||||
connect(doorbird, &Doorbird::requestSent, this, &DevicePluginDoorbird::onDoorBirdRequestSent);
|
connect(doorbird, &Doorbird::requestSent, this, &DevicePluginDoorbird::onDoorBirdRequestSent);
|
||||||
connect(doorbird, &Doorbird::sessionIdReceived, this, &DevicePluginDoorbird::onSessionIdReceived);
|
connect(doorbird, &Doorbird::sessionIdReceived, this, &DevicePluginDoorbird::onSessionIdReceived);
|
||||||
doorbird->initConnection(username, password);
|
|
||||||
m_doorbirdConnections.insert(info->deviceId(), doorbird);
|
m_doorbirdConnections.insert(info->deviceId(), doorbird);
|
||||||
m_pendingPairings.insert(doorbird, info);
|
m_pendingPairings.insert(doorbird, info);
|
||||||
doorbird->getSession();
|
doorbird->getSession(username, password);
|
||||||
connect(info, &DevicePairingInfo::aborted, this, [this, info]{
|
connect(info, &DevicePairingInfo::aborted, this, [this, info]{
|
||||||
if (m_pendingPairings.values().contains(info)) {
|
if (m_pendingPairings.values().contains(info)) {
|
||||||
Doorbird *doorbird = m_pendingPairings.key(info);
|
Doorbird *doorbird = m_pendingPairings.key(info);
|
||||||
|
|
@ -152,15 +151,14 @@ void DevicePluginDoorbird::setupDevice(DeviceSetupInfo *info)
|
||||||
pluginStorage()->endGroup();
|
pluginStorage()->endGroup();
|
||||||
|
|
||||||
qCDebug(dcDoorBird()) << "Device setup" << device->name() << username << password;
|
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::deviceConnected, this, &DevicePluginDoorbird::onDoorBirdConnected);
|
||||||
connect(doorbird, &Doorbird::eventReveiced, this, &DevicePluginDoorbird::onDoorBirdEvent);
|
connect(doorbird, &Doorbird::eventReveiced, this, &DevicePluginDoorbird::onDoorBirdEvent);
|
||||||
connect(doorbird, &Doorbird::requestSent, this, &DevicePluginDoorbird::onDoorBirdRequestSent);
|
connect(doorbird, &Doorbird::requestSent, this, &DevicePluginDoorbird::onDoorBirdRequestSent);
|
||||||
connect(doorbird, &Doorbird::sessionIdReceived, this, &DevicePluginDoorbird::onSessionIdReceived);
|
connect(doorbird, &Doorbird::sessionIdReceived, this, &DevicePluginDoorbird::onSessionIdReceived);
|
||||||
doorbird->initConnection(username, password);
|
|
||||||
m_doorbirdConnections.insert(device->id(), doorbird);
|
m_doorbirdConnections.insert(device->id(), doorbird);
|
||||||
m_pendingDeviceSetups.insert(doorbird, info);
|
m_pendingDeviceSetups.insert(doorbird, info);
|
||||||
doorbird->getSession();
|
doorbird->getSession(username, password);
|
||||||
connect(info, &DeviceSetupInfo::aborted, this, [device, doorbird, this] {
|
connect(info, &DeviceSetupInfo::aborted, this, [device, doorbird, this] {
|
||||||
if (!doorbird) {
|
if (!doorbird) {
|
||||||
doorbird->deleteLater();
|
doorbird->deleteLater();
|
||||||
|
|
|
||||||
|
|
@ -41,9 +41,10 @@
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QUrlQuery>
|
#include <QUrlQuery>
|
||||||
|
|
||||||
Doorbird::Doorbird(const QHostAddress &address, QObject *parent) :
|
Doorbird::Doorbird(NetworkAccessManager *networkAccessManager, const QHostAddress &address, QObject *parent) :
|
||||||
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;
|
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);
|
QUrl url;
|
||||||
connect(m_networkAccessManager, &QNetworkAccessManager::authenticationRequired, this, [username, password, this] (QNetworkReply *reply, QAuthenticator *authenticator) {
|
url.setHost(m_address.toString());
|
||||||
|
url.setScheme("http");
|
||||||
qCWarning(dcDoorBird()) << "Authenticator" << reply->errorString() << reply->error();
|
url.setPath("/bha-api/getsession.cgi");
|
||||||
if (m_pendingAuthentications.contains(reply)) {
|
url.setUserName(username);
|
||||||
m_pendingAuthentications.removeOne(reply);
|
url.setPassword(password);
|
||||||
reply->abort();
|
QNetworkRequest request(url);
|
||||||
} 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()));
|
|
||||||
qCDebug(dcDoorBird) << "Sending request:" << request.url();
|
qCDebug(dcDoorBird) << "Sending request:" << request.url();
|
||||||
QNetworkReply *reply = m_networkAccessManager->get(request);
|
QNetworkReply *reply = m_networkAccessManager->get(request);
|
||||||
QUuid requestId = QUuid::createUuid();
|
QUuid requestId = QUuid::createUuid();
|
||||||
|
|
|
||||||
|
|
@ -37,11 +37,13 @@
|
||||||
#include <QUuid>
|
#include <QUuid>
|
||||||
#include <QImage>
|
#include <QImage>
|
||||||
|
|
||||||
|
#include "network/networkaccessmanager.h"
|
||||||
|
|
||||||
class Doorbird : public QObject
|
class Doorbird : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit Doorbird(const QHostAddress &address, QObject *parent = nullptr);
|
explicit Doorbird(NetworkAccessManager *networkAccessManager, const QHostAddress &address, QObject *parent = nullptr);
|
||||||
|
|
||||||
enum EventType {
|
enum EventType {
|
||||||
Doorbell,
|
Doorbell,
|
||||||
|
|
@ -63,8 +65,7 @@ public:
|
||||||
|
|
||||||
QHostAddress address();
|
QHostAddress address();
|
||||||
void setAddress(const QHostAddress &address);
|
void setAddress(const QHostAddress &address);
|
||||||
void initConnection(const QString &username, const QString &password);
|
QUuid getSession(const QString &username, const QString &password);
|
||||||
QUuid getSession();
|
|
||||||
QUuid openDoor(int value);
|
QUuid openDoor(int value);
|
||||||
QUuid lightOn();
|
QUuid lightOn();
|
||||||
QUuid liveVideoRequest();
|
QUuid liveVideoRequest();
|
||||||
|
|
@ -87,15 +88,17 @@ public:
|
||||||
|
|
||||||
void connectToEventMonitor();
|
void connectToEventMonitor();
|
||||||
private:
|
private:
|
||||||
QNetworkAccessManager *m_networkAccessManager;
|
QHostAddress m_address;
|
||||||
|
NetworkAccessManager *m_networkAccessManager;
|
||||||
QByteArray m_readBuffer;
|
QByteArray m_readBuffer;
|
||||||
|
|
||||||
QHostAddress m_address;
|
|
||||||
QList<QNetworkReply *> m_networkRequests;
|
QList<QNetworkReply *> m_networkRequests;
|
||||||
|
|
||||||
QList<QNetworkReply *> m_pendingAuthentications;
|
QList<QNetworkReply *> m_pendingAuthentications;
|
||||||
|
|
||||||
//QByteArray sessionId;
|
QString m_username;
|
||||||
|
QString m_password;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void deviceConnected(bool status);
|
void deviceConnected(bool status);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue