Support sending custom status codes via WebAPI

Signed-off-by: Thomas Piccirello <thomas@piccirello.com>
This commit is contained in:
Thomas Piccirello 2024-06-30 16:37:56 -07:00
commit 20482be4a8
No known key found for this signature in database
5 changed files with 57 additions and 0 deletions

View file

@ -2,6 +2,7 @@ add_library(qbt_webui STATIC
# headers
api/apicontroller.h
api/apierror.h
api/apistatus.h
api/appcontroller.h
api/authcontroller.h
api/isessionmanager.h

View file

@ -42,6 +42,7 @@ void APIResult::clear()
data.clear();
mimeType.clear();
filename.clear();
status = APIStatus::Ok;
}
APIController::APIController(IApplication *app, QObject *parent)
@ -105,3 +106,8 @@ void APIController::setResult(const QByteArray &result, const QString &mimeType,
m_result.mimeType = mimeType;
m_result.filename = filename;
}
void APIController::setStatus(const APIStatus status)
{
m_result.status = status;
}

View file

@ -34,6 +34,7 @@
#include <QVariant>
#include "base/applicationcomponent.h"
#include "apistatus.h"
using DataMap = QHash<QString, QByteArray>;
using StringMap = QHash<QString, QString>;
@ -43,6 +44,7 @@ struct APIResult
QVariant data;
QString mimeType;
QString filename;
APIStatus status = APIStatus::Ok;
void clear();
};
@ -67,6 +69,8 @@ protected:
void setResult(const QJsonObject &result);
void setResult(const QByteArray &result, const QString &mimeType = {}, const QString &filename = {});
void setStatus(APIStatus status);
private:
StringMap m_params;
DataMap m_data;

35
src/webui/api/apistatus.h Normal file
View file

@ -0,0 +1,35 @@
/*
* Bittorrent Client using Qt and libtorrent.
* Copyright (C) 2024 Thomas Piccirello <thomas@piccirello.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* In addition, as a special exception, the copyright holders give permission to
* link this program with the OpenSSL project's "OpenSSL" library (or with
* modified versions of it that use the same license as the "OpenSSL" library),
* and distribute the linked executables. You must obey the GNU General Public
* License in all respects for all of the code used other than "OpenSSL". If you
* modify file(s), you may extend this exception to your version of the file(s),
* but you are not obligated to do so. If you do not wish to do so, delete this
* exception statement from your version.
*/
#pragma once
enum class APIStatus
{
Ok,
Async
};

View file

@ -381,6 +381,17 @@ void WebApplication::doProcessRequest()
print(result.data.toString(), Http::CONTENT_TYPE_TXT);
break;
}
switch (result.status)
{
case APIStatus::Async:
status(202);
break;
case APIStatus::Ok:
default:
status(200);
break;
}
}
catch (const APIError &error)
{