added authentication failure handling
parent
11c978191f
commit
33aec78f57
|
|
@ -113,7 +113,6 @@ void DevicePluginDoorbird::confirmPairing(DevicePairingInfo *info, const QString
|
||||||
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);
|
doorbird->initConnection(username, password);
|
||||||
doorbird->connectToEventMonitor();
|
|
||||||
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();
|
||||||
|
|
@ -159,7 +158,6 @@ void DevicePluginDoorbird::setupDevice(DeviceSetupInfo *info)
|
||||||
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);
|
doorbird->initConnection(username, password);
|
||||||
doorbird->connectToEventMonitor();
|
|
||||||
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();
|
||||||
|
|
@ -183,6 +181,7 @@ void DevicePluginDoorbird::postSetupDevice(Device *device)
|
||||||
if (device->deviceClassId() == doorBirdDeviceClassId) {
|
if (device->deviceClassId() == doorBirdDeviceClassId) {
|
||||||
device->setStateValue(doorBirdConnectedStateTypeId, true); //since we checked the connection in the deviceSetup
|
device->setStateValue(doorBirdConnectedStateTypeId, true); //since we checked the connection in the deviceSetup
|
||||||
Doorbird *doorbird = m_doorbirdConnections.value(device->id());
|
Doorbird *doorbird = m_doorbirdConnections.value(device->id());
|
||||||
|
doorbird->connectToEventMonitor();
|
||||||
doorbird->infoRequest();
|
doorbird->infoRequest();
|
||||||
doorbird->listFavorites();
|
doorbird->listFavorites();
|
||||||
doorbird->listSchedules();
|
doorbird->listSchedules();
|
||||||
|
|
@ -269,15 +268,21 @@ void DevicePluginDoorbird::onDoorBirdEvent(Doorbird::EventType eventType, bool s
|
||||||
void DevicePluginDoorbird::onDoorBirdRequestSent(QUuid requestId, bool success)
|
void DevicePluginDoorbird::onDoorBirdRequestSent(QUuid requestId, bool success)
|
||||||
{
|
{
|
||||||
Doorbird *doorbird = static_cast<Doorbird *>(sender());
|
Doorbird *doorbird = static_cast<Doorbird *>(sender());
|
||||||
Device *device = myDevices().findById(m_doorbirdConnections.key(doorbird));
|
|
||||||
if (!device)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!m_asyncActions.contains(requestId))
|
|
||||||
return;
|
|
||||||
|
|
||||||
|
if (m_asyncActions.contains(requestId)) {
|
||||||
DeviceActionInfo* actionInfo = m_asyncActions.take(requestId);
|
DeviceActionInfo* actionInfo = m_asyncActions.take(requestId);
|
||||||
actionInfo->finish(success ? Device::DeviceErrorNoError : Device::DeviceErrorInvalidParameter);
|
actionInfo->finish(success ? Device::DeviceErrorNoError : Device::DeviceErrorInvalidParameter);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_pendingPairings.contains(doorbird) && !success) {
|
||||||
|
DevicePairingInfo *info = m_pendingPairings.take(doorbird);
|
||||||
|
info->finish(Device::DeviceErrorAuthenticationFailure, tr("Wrong username or password"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_pendingDeviceSetups.contains(doorbird) && !success) {
|
||||||
|
DeviceSetupInfo *info = m_pendingDeviceSetups.take(doorbird);
|
||||||
|
info->finish(Device::DeviceErrorAuthenticationFailure, tr("Wrong username or password"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DevicePluginDoorbird::onSessionIdReceived(const QString &sessionId)
|
void DevicePluginDoorbird::onSessionIdReceived(const QString &sessionId)
|
||||||
|
|
|
||||||
|
|
@ -61,10 +61,17 @@ void Doorbird::setAddress(const QHostAddress &address)
|
||||||
void Doorbird::initConnection(const QString &username, const QString &password)
|
void Doorbird::initConnection(const QString &username, const QString &password)
|
||||||
{
|
{
|
||||||
m_networkAccessManager = new QNetworkAccessManager(this);
|
m_networkAccessManager = new QNetworkAccessManager(this);
|
||||||
connect(m_networkAccessManager, &QNetworkAccessManager::authenticationRequired, this, [username, password, this](QNetworkReply *reply, QAuthenticator *authenticator) {
|
connect(m_networkAccessManager, &QNetworkAccessManager::authenticationRequired, this, [username, password, this] (QNetworkReply *reply, QAuthenticator *authenticator) {
|
||||||
Q_UNUSED(reply);
|
|
||||||
|
qCWarning(dcDoorBird()) << "Authenticator" << reply->errorString() << reply->error();
|
||||||
|
if (m_pendingAuthentications.contains(reply)) {
|
||||||
|
m_pendingAuthentications.removeOne(reply);
|
||||||
|
reply->abort();
|
||||||
|
} else {
|
||||||
authenticator->setUser(username);
|
authenticator->setUser(username);
|
||||||
authenticator->setPassword(password);
|
authenticator->setPassword(password);
|
||||||
|
m_pendingAuthentications.append(reply);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -79,7 +86,7 @@ QUuid Doorbird::getSession()
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
|
|
||||||
if (reply->error() != QNetworkReply::NoError) {
|
if (reply->error() != QNetworkReply::NoError) {
|
||||||
qCWarning(dcDoorBird) << "Error DoorBird device";
|
qCWarning(dcDoorBird) << "Error DoorBird device:" << reply->errorString();
|
||||||
emit requestSent(requestId, false);
|
emit requestSent(requestId, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -98,6 +105,7 @@ QUuid Doorbird::getSession()
|
||||||
emit sessionIdReceived(sessionId);
|
emit sessionIdReceived(sessionId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return requestId;
|
return requestId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,8 @@ private:
|
||||||
QHostAddress m_address;
|
QHostAddress m_address;
|
||||||
QList<QNetworkReply *> m_networkRequests;
|
QList<QNetworkReply *> m_networkRequests;
|
||||||
|
|
||||||
|
QList<QNetworkReply *> m_pendingAuthentications;
|
||||||
|
|
||||||
//QByteArray sessionId;
|
//QByteArray sessionId;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue