mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-02-02 09:55:55 +00:00
Merge pull request #11017 from Chocobo1/apictrl
Improvements to APIController class
This commit is contained in:
commit
7f1bff4eb4
@ -128,7 +128,7 @@ Http::Response Tracker::processRequest(const Http::Request &request, const Http:
|
|||||||
|
|
||||||
void Tracker::respondToAnnounceRequest()
|
void Tracker::respondToAnnounceRequest()
|
||||||
{
|
{
|
||||||
const QMap<QString, QByteArray> &queryParams = m_request.query;
|
const QHash<QString, QByteArray> &queryParams = m_request.query;
|
||||||
TrackerAnnounceRequest announceReq;
|
TrackerAnnounceRequest announceReq;
|
||||||
|
|
||||||
// IP
|
// IP
|
||||||
|
@ -98,8 +98,8 @@ namespace Http
|
|||||||
QString method;
|
QString method;
|
||||||
QString path;
|
QString path;
|
||||||
QStringMap headers;
|
QStringMap headers;
|
||||||
QMap<QString, QByteArray> query;
|
QHash<QString, QByteArray> query;
|
||||||
QStringMap posts;
|
QHash<QString, QString> posts;
|
||||||
QVector<UploadedFile> files;
|
QVector<UploadedFile> files;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
|
|
||||||
#include "apicontroller.h"
|
#include "apicontroller.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QMetaObject>
|
#include <QMetaObject>
|
||||||
|
|
||||||
@ -45,8 +47,8 @@ QVariant APIController::run(const QString &action, const StringMap ¶ms, cons
|
|||||||
m_params = params;
|
m_params = params;
|
||||||
m_data = data;
|
m_data = data;
|
||||||
|
|
||||||
const QString methodName {action + QLatin1String("Action")};
|
const QByteArray methodName = action.toLatin1() + "Action";
|
||||||
if (!QMetaObject::invokeMethod(this, methodName.toLatin1().constData()))
|
if (!QMetaObject::invokeMethod(this, methodName.constData()))
|
||||||
throw APIError(APIErrorType::NotFound);
|
throw APIError(APIErrorType::NotFound);
|
||||||
|
|
||||||
return m_result;
|
return m_result;
|
||||||
@ -69,9 +71,13 @@ const DataMap &APIController::data() const
|
|||||||
|
|
||||||
void APIController::checkParams(const QSet<QString> &requiredParams) const
|
void APIController::checkParams(const QSet<QString> &requiredParams) const
|
||||||
{
|
{
|
||||||
const QSet<QString> params {this->params().keys().toSet()};
|
const bool hasAllRequiredParams = std::all_of(requiredParams.cbegin(), requiredParams.cend()
|
||||||
|
, [this](const QString &requiredParam)
|
||||||
|
{
|
||||||
|
return params().contains(requiredParam);
|
||||||
|
});
|
||||||
|
|
||||||
if (!params.contains(requiredParams))
|
if (!hasAllRequiredParams)
|
||||||
throw APIError(APIErrorType::BadParams);
|
throw APIError(APIErrorType::BadParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QMap>
|
#include <QHash>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QSet>
|
#include <QSet>
|
||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
@ -36,8 +36,9 @@
|
|||||||
class QString;
|
class QString;
|
||||||
|
|
||||||
struct ISessionManager;
|
struct ISessionManager;
|
||||||
using StringMap = QMap<QString, QString>;
|
|
||||||
using DataMap = QMap<QString, QByteArray>;
|
using DataMap = QHash<QString, QByteArray>;
|
||||||
|
using StringMap = QHash<QString, QString>;
|
||||||
|
|
||||||
class APIController : public QObject
|
class APIController : public QObject
|
||||||
{
|
{
|
||||||
|
@ -123,7 +123,7 @@ private:
|
|||||||
WebSession *m_currentSession = nullptr;
|
WebSession *m_currentSession = nullptr;
|
||||||
Http::Request m_request;
|
Http::Request m_request;
|
||||||
Http::Environment m_env;
|
Http::Environment m_env;
|
||||||
QMap<QString, QString> m_params;
|
QHash<QString, QString> m_params;
|
||||||
const QString m_cacheID;
|
const QString m_cacheID;
|
||||||
|
|
||||||
const QRegularExpression m_apiPathPattern {(QLatin1String("^/api/v2/(?<scope>[A-Za-z_][A-Za-z_0-9]*)/(?<action>[A-Za-z_][A-Za-z_0-9]*)$"))};
|
const QRegularExpression m_apiPathPattern {(QLatin1String("^/api/v2/(?<scope>[A-Za-z_][A-Za-z_0-9]*)/(?<action>[A-Za-z_][A-Za-z_0-9]*)$"))};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user