mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-02-02 09:55:55 +00:00
Use QDeadlineTimer for tracking WebUI banned duration
It simplifies our code and the new timer is monotonic.
This commit is contained in:
parent
f88d6b2e55
commit
4f7b799732
@ -28,7 +28,6 @@
|
|||||||
|
|
||||||
#include "authcontroller.h"
|
#include "authcontroller.h"
|
||||||
|
|
||||||
#include <QDateTime>
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
#include "base/logger.h"
|
#include "base/logger.h"
|
||||||
@ -89,12 +88,13 @@ void AuthController::logoutAction() const
|
|||||||
|
|
||||||
bool AuthController::isBanned() const
|
bool AuthController::isBanned() const
|
||||||
{
|
{
|
||||||
const qint64 now = QDateTime::currentMSecsSinceEpoch() / 1000;
|
const auto failedLoginIter = m_clientFailedLogins.find(sessionManager()->clientId());
|
||||||
const FailedLogin failedLogin = m_clientFailedLogins.value(sessionManager()->clientId());
|
if (failedLoginIter == m_clientFailedLogins.end())
|
||||||
|
return false;
|
||||||
|
|
||||||
bool isBanned = (failedLogin.bannedAt > 0);
|
bool isBanned = (failedLoginIter->banTimer.remainingTime() >= 0);
|
||||||
if (isBanned && ((now - failedLogin.bannedAt) > BAN_TIME)) {
|
if (isBanned && failedLoginIter->banTimer.hasExpired()) {
|
||||||
m_clientFailedLogins.remove(sessionManager()->clientId());
|
m_clientFailedLogins.erase(failedLoginIter);
|
||||||
isBanned = false;
|
isBanned = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,6 +116,6 @@ void AuthController::increaseFailedAttempts()
|
|||||||
if (failedLogin.failedAttemptsCount >= Preferences::instance()->getWebUIMaxAuthFailCount()) {
|
if (failedLogin.failedAttemptsCount >= Preferences::instance()->getWebUIMaxAuthFailCount()) {
|
||||||
// Max number of failed attempts reached
|
// Max number of failed attempts reached
|
||||||
// Start ban period
|
// Start ban period
|
||||||
failedLogin.bannedAt = QDateTime::currentMSecsSinceEpoch() / 1000;
|
failedLogin.banTimer.setRemainingTime(BAN_TIME);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <QDeadlineTimer>
|
||||||
#include <QHash>
|
#include <QHash>
|
||||||
|
|
||||||
#include "apicontroller.h"
|
#include "apicontroller.h"
|
||||||
@ -54,7 +55,7 @@ private:
|
|||||||
struct FailedLogin
|
struct FailedLogin
|
||||||
{
|
{
|
||||||
int failedAttemptsCount = 0;
|
int failedAttemptsCount = 0;
|
||||||
qint64 bannedAt = 0;
|
QDeadlineTimer banTimer {-1};
|
||||||
};
|
};
|
||||||
mutable QHash<QString, FailedLogin> m_clientFailedLogins;
|
mutable QHash<QString, FailedLogin> m_clientFailedLogins;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user