aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-07-27 15:57:24 +0530
committerAkshay Nair <phenax5@gmail.com>2025-07-27 15:57:24 +0530
commite3f1325b9da8c7d67c6d4aaefba625479fbce3d8 (patch)
treed71ca81541a6c3044e84b5f3f94332b8c5a851cb
parentf34ca241eeab56679f49dde006abe10cbc15e314 (diff)
downloadnull-browser-e3f1325b9da8c7d67c6d4aaefba625479fbce3d8.tar.gz
null-browser-e3f1325b9da8c7d67c6d4aaefba625479fbce3d8.zip
Minor refactor for null rpc scheme handler
-rw-r--r--src/schemes/NullRpcSchemeHandler.cpp44
-rw-r--r--src/schemes/NullRpcSchemeHandler.hpp34
2 files changed, 49 insertions, 29 deletions
diff --git a/src/schemes/NullRpcSchemeHandler.cpp b/src/schemes/NullRpcSchemeHandler.cpp
new file mode 100644
index 0000000..0b4d993
--- /dev/null
+++ b/src/schemes/NullRpcSchemeHandler.cpp
@@ -0,0 +1,44 @@
+#include "NullRpcSchemeHandler.hpp"
+
+const QStringList NullRPCSchemeHandler::allowed_origin_schemes = {
+ "nullrpc",
+};
+
+void NullRPCSchemeHandler::requestStarted(QWebEngineUrlRequestJob *job) {
+ auto url = job->requestUrl();
+ auto origin = job->initiator();
+ qDebug() << "RPC Msg:" << url << " | From: " << job->initiator();
+
+ auto is_origin_allowed = allowed_origin_schemes.contains(origin.scheme());
+ if (!is_origin_allowed || url.host().isEmpty()) {
+ send_empty_response(job);
+ return;
+ }
+
+ if (url.host() == "noop") {
+ send_empty_response(job, "text/html");
+ return;
+ }
+
+ if (url.host() == "log") {
+ qInfo() << url.query();
+ send_empty_response(job);
+ return;
+ }
+
+ NullRPCMessage message{
+ .name = url.host(),
+ .params = QUrlQuery(url.query()),
+ };
+ emit message_received(message);
+
+ // TODO: responses managed with request ids
+ send_empty_response(job);
+}
+
+void NullRPCSchemeHandler::send_empty_response(QWebEngineUrlRequestJob *job,
+ const QByteArray &content_type) {
+ QBuffer *buffer = new QBuffer(job);
+ buffer->open(QIODevice::ReadOnly);
+ job->reply(content_type, new QBuffer(job));
+}
diff --git a/src/schemes/NullRpcSchemeHandler.hpp b/src/schemes/NullRpcSchemeHandler.hpp
index b2b22cb..38716f7 100644
--- a/src/schemes/NullRpcSchemeHandler.hpp
+++ b/src/schemes/NullRpcSchemeHandler.hpp
@@ -19,39 +19,15 @@ public:
return handler;
}
- void requestStarted(QWebEngineUrlRequestJob *job) override {
- auto url = job->requestUrl();
- auto origin = job->initiator();
- qDebug() << "REQ" << url << " | From: " << job->initiator();
-
- if (origin.scheme() != "nullrpc" || url.host().isEmpty() || url.host() == "noop") {
- job->reply("text/html", new QBuffer(job));
- return;
- }
-
- if (url.host() == "log") {
- qDebug() << url.query();
- job->reply("text/plain", new QBuffer(job));
- return;
- }
-
- NullRPCMessage message{
- .name = url.host(),
- .params = QUrlQuery(url.query()),
- };
- emit message_received(message);
-
- // TODO: responses managed with request ids
- QByteArray data = "{}";
- QBuffer *buffer = new QBuffer(job);
- buffer->setData(data);
- buffer->open(QIODevice::ReadOnly);
- job->reply("text/plain", buffer);
- }
+ void requestStarted(QWebEngineUrlRequestJob *job) override;
signals:
void message_received(NullRPCMessage message);
private:
NullRPCSchemeHandler() = default;
+ static const QStringList allowed_origin_schemes;
+
+ void send_empty_response(QWebEngineUrlRequestJob *job,
+ const QByteArray &content_type = "text/plain");
};