#include #include #include #include #include #include #include #include #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(); } };