diff --git a/resources/auth.html b/resources/auth.html
new file mode 100644
index 000000000..916acf6ee
--- /dev/null
+++ b/resources/auth.html
@@ -0,0 +1,63 @@
+
+
+ Login - Chatterino
+
+
+
+
+ Loading...
+
+
+
diff --git a/resources/resources_autogenerated.qrc b/resources/resources_autogenerated.qrc
index e84cf6320..05ecacbf3 100644
--- a/resources/resources_autogenerated.qrc
+++ b/resources/resources_autogenerated.qrc
@@ -1,5 +1,6 @@
+ auth.html
avatars/fourtf.png
avatars/kararty.png
avatars/matthewde.jpg
diff --git a/src/widgets/dialogs/LoginDialog.cpp b/src/widgets/dialogs/LoginDialog.cpp
index 6fd68e834..45d1c9e41 100644
--- a/src/widgets/dialogs/LoginDialog.cpp
+++ b/src/widgets/dialogs/LoginDialog.cpp
@@ -15,9 +15,11 @@
#include
#include
#include
+#include
#include
#include
#include
+#include
#include
namespace chatterino {
@@ -90,16 +92,42 @@ BasicLoginWidget::BasicLoginWidget()
qCDebug(chatterinoWidget) << "Initializing HTTP server's routes";
this->httpServer_->route(
- "/code", QHttpServerRequest::Method::GET,
- [this](const QHttpServerRequest &req, QHttpServerResponder &&resp) {
- qDebug() << "got credentials!";
- resp.write("KKona", "text/plain",
- QHttpServerResponder::StatusCode::Ok);
- qDebug() << req.url().fragment();
- qDebug() << req.url();
+ "/redirect", QHttpServerRequest::Method::GET,
+ [](const QHttpServerRequest &req, QHttpServerResponder &&resp) {
+ QFile redirectHTML(":/auth.html");
+ redirectHTML.open(QIODevice::ReadOnly);
- this->ui_.loginButton.setText("Logged in!");
- this->ui_.loginButton.setEnabled(true);
+ resp.write(redirectHTML.readAll(),
+ {{"Access-Control-Allow-Origin", "*"},
+ {"Access-Control-Allow-Methods", "GET, POST"},
+ {"Access-Control-Allow-Headers", "X-Access-Token"}},
+ QHttpServerResponder::StatusCode::Ok);
+ });
+ this->httpServer_->route(
+ ".*", QHttpServerRequest::Method::OPTIONS,
+ [](const QHttpServerRequest &req, QHttpServerResponder &&resp) {
+ qDebug() << "options called!";
+ resp.write({{"Access-Control-Allow-Origin", "*"},
+ {"Access-Control-Allow-Methods", "GET, POST"},
+ {"Access-Control-Allow-Headers", "X-Access-Token"}},
+ QHttpServerResponder::StatusCode::Ok);
+ });
+ this->httpServer_->route(
+ "/token", QHttpServerRequest::Method::POST,
+ [](const QHttpServerRequest &req, QHttpServerResponder &&resp) {
+ if (!req.headers().contains("X-Access-Token"))
+ {
+ resp.write(QHttpServerResponder::StatusCode::BadRequest);
+ return;
+ }
+
+ // Handle token
+ auto token = req.headers()["X-Access-Token"];
+ qDebug() << token;
+ resp.write({{"Access-Control-Allow-Origin", "*"},
+ {"Access-Control-Allow-Methods", "GET, POST"},
+ {"Access-Control-Allow-Headers", "X-Access-Token"}},
+ QHttpServerResponder::StatusCode::Ok);
});
const QString loginLink = "http://localhost:1234";
@@ -126,7 +154,6 @@ BasicLoginWidget::BasicLoginWidget()
connect(&this->ui_.loginButton, &QPushButton::clicked, [this, loginLink]() {
// Start listening for credentials
- qDebug() << this->tcpServer_->isListening();
if (!this->tcpServer_->listen(serverAddress, serverPort))
{
qCWarning(chatterinoWidget) << "Failed to start HTTP server";