forked from mirror/nheko
parent
813790e603
commit
7b1fa60cc6
@ -0,0 +1,54 @@ |
||||
#include "SSOHandler.h" |
||||
|
||||
#include <QTimer> |
||||
|
||||
#include <thread> |
||||
|
||||
#include "Logging.h" |
||||
|
||||
SSOHandler::SSOHandler(QObject *) |
||||
{ |
||||
QTimer::singleShot(120000, this, &SSOHandler::ssoFailed); |
||||
|
||||
using namespace httplib; |
||||
|
||||
svr.set_logger([](const Request &req, const Response &res) { |
||||
nhlog::net()->info("req: {}, res: {}", req.path, res.status); |
||||
}); |
||||
|
||||
svr.Get("/sso", [this](const Request &req, Response &res) { |
||||
if (req.has_param("loginToken")) { |
||||
auto val = req.get_param_value("loginToken"); |
||||
res.set_content("SSO success", "text/plain"); |
||||
emit ssoSuccess(val); |
||||
} else { |
||||
res.set_content("Missing loginToken for SSO login!", "text/plain"); |
||||
emit ssoFailed(); |
||||
} |
||||
}); |
||||
|
||||
std::thread t([this]() { |
||||
this->port = svr.bind_to_any_port("localhost"); |
||||
svr.listen_after_bind(); |
||||
|
||||
}); |
||||
t.detach(); |
||||
|
||||
while (!svr.is_running()) { |
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1)); |
||||
} |
||||
} |
||||
|
||||
SSOHandler::~SSOHandler() |
||||
{ |
||||
svr.stop(); |
||||
while (svr.is_running()) { |
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1)); |
||||
} |
||||
} |
||||
|
||||
std::string |
||||
SSOHandler::url() const |
||||
{ |
||||
return "http://localhost:" + std::to_string(port) + "/sso"; |
||||
} |
@ -0,0 +1,24 @@ |
||||
#include "httplib.h" |
||||
|
||||
#include <QObject> |
||||
#include <string> |
||||
|
||||
class SSOHandler : public QObject |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
SSOHandler(QObject *parent = nullptr); |
||||
|
||||
~SSOHandler(); |
||||
|
||||
std::string url() const; |
||||
|
||||
signals: |
||||
void ssoSuccess(std::string token); |
||||
void ssoFailed(); |
||||
|
||||
private: |
||||
httplib::Server svr; |
||||
int port = 0; |
||||
}; |
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue