mirror of
https://gitlab.com/niansa/qcommsy.git
synced 2025-03-06 20:53:33 +01:00
56 lines
1.8 KiB
C++
56 lines
1.8 KiB
C++
#include <exception>
|
|
#include <QString>
|
|
#include <QUrl>
|
|
#include <QUrlQuery>
|
|
#include <QNetworkAccessManager>
|
|
#include <QNetworkReply>
|
|
#include <QNetworkRequest>
|
|
#include <QNetworkCookie>
|
|
|
|
#define libCommsyAuth_NAME "libcommsyauth"
|
|
#define libCommsyAuth_VERSION "0.1-alpha"
|
|
|
|
class authFailureError : public std::exception {};
|
|
|
|
|
|
class libCommsyAuth : QObject {
|
|
public:
|
|
QNetworkReply *connect(const QUrl& serverBaseUrl) {
|
|
// Initialise variables
|
|
QNetworkAccessManager mNetMan(this);
|
|
QNetworkRequest mNetReq;
|
|
// Initialise request
|
|
//mNetReq->setTransferTimeout(15000);
|
|
mNetReq.setUrl(serverBaseUrl);
|
|
mNetReq.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
|
return mNetMan.get(mNetReq);
|
|
}
|
|
|
|
QString getAuthUrl(const QNetworkReply *reply) {
|
|
return reply->url().toString();
|
|
}
|
|
|
|
QNetworkReply *sendAuth(const QString& authUrl, const QString& username, const QString& password) {
|
|
QNetworkAccessManager mNetMan(this);
|
|
QNetworkRequest mNetReq;
|
|
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");
|
|
// Perform the request
|
|
return mNetMan.post(mNetReq, mNetQuery.toString(QUrl::FullyEncoded).toUtf8());
|
|
}
|
|
|
|
QString getSID(QNetworkReply *reply) {
|
|
auto cookies = QNetworkCookie::parseCookies(reply->rawHeader("Set-Cookie"));
|
|
for (const auto& cookie : cookies) {
|
|
if (cookie.name() == "SID") {
|
|
return cookie.value();
|
|
}
|
|
}
|
|
throw authFailureError();
|
|
}
|
|
};
|