1
0
Fork 0
mirror of https://gitlab.com/niansa/qcommsy.git synced 2025-03-06 20:53:33 +01:00
qcommsy/libcommsyauth.hpp
2020-08-18 18:49:59 +02:00

89 lines
2.9 KiB
C++

#include <exception>
#include <iostream>
#include <QString>
#include <QUrl>
#include <QUrlQuery>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QNetworkCookie>
#define libCommsyAuth_NAME "libcommsyauth"
#define libCommsyAuth_VERSION "0.2-alpha"
class authFailureError {};
class libCommsyAuth : public QObject {
Q_OBJECT
public:
Q_SIGNALS:
void connectionDone(QNetworkReply *r);
void connectionNotfound(QNetworkReply *r);
void authDone(QNetworkReply *r);
public:
QNetworkAccessManager *mNetManTestconn = nullptr;
QNetworkAccessManager *mNetManAuth = nullptr;
QNetworkRequest *mNetReq = nullptr;
explicit libCommsyAuth(QObject *p = nullptr) : QObject (p){
mNetManTestconn = new QNetworkAccessManager(this);
mNetManAuth = new QNetworkAccessManager(this);
mNetReq = new QNetworkRequest();
connect(mNetManTestconn, &QNetworkAccessManager::finished, this, &libCommsyAuth::connectionDone);
//connect(mNetManTestconn, &QNetworkReply::HostNotFoundError, this, &libCommsyAuth::connectionNotfound);
connect(mNetManAuth, &QNetworkAccessManager::finished, this, &libCommsyAuth::authDone);
}
~libCommsyAuth() {
delete mNetManTestconn;
delete mNetManAuth;
delete mNetReq;
}
void connectionInit(const QUrl& serverBaseUrl) {
// Initialise request
//mNetReq->setTransferTimeout(15000);
mNetReq->setUrl(serverBaseUrl);
mNetReq->setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
std::cout << mNetReq->url().toString().toStdString() << std::endl;
mNetManTestconn->get(*mNetReq);
}
QString getAuthUrl(const QNetworkReply *reply) {
return reply->url().toString();
}
void sendAuth(const QString& authUrl, const QString& username, const QString& password) {
QUrlQuery mNetQuery;
// Set auth credentials
mNetQuery.addQueryItem("user_id", username);
mNetQuery.addQueryItem("password", password);
// Create request
mNetReq->setUrl(authUrl + "&mod=context&fct=login");
mNetReq->setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
mNetReq->setAttribute(QNetworkRequest::FollowRedirectsAttribute, false);
// Perform the request
std::cout << mNetReq->url().toString().toStdString() << std::endl;
mNetManAuth->post(*mNetReq, mNetQuery.toString(QUrl::FullyEncoded).toUtf8());
}
QString getSID(QNetworkReply *reply) {
auto cookies = QNetworkCookie::parseCookies(reply->rawHeader("Set-Cookie"));
for (const auto& cookie : cookies) {
std::cout << '"' << cookie.name().toStdString() << "\" = \"" << cookie.value().toStdString() << '"' << std::endl;
if (cookie.name() == "SID") {
return cookie.value();
}
}
throw authFailureError();
}
};