void Session::Request::onOAuthResultPath() { QNetworkReply *reply = qobject_cast<QNetworkReply*>(QObject::sender()); if (reply->error()) { emit loginResult(0x01, "A network error occured: " + reply->errorString()); } else { QJsonDocument doc = QJsonDocument::fromJson(reply->readAll()); _accessToken = doc.object().value("access_token").toString(); qDebug() << _accessToken; emit loginResult(0x00, "Logged in!"); } reply->deleteLater(); }
void Session::Request::onLoginPage() { QNetworkReply *reply = qobject_cast<QNetworkReply*>(QObject::sender()); if (reply->error()) { emit loginResult(0x01, "A network error occured: " + reply->errorString()); } else { QNetworkRequest request = reply->request(); // Extract CSF const QString hash = getCSRFToken(reply->readAll()); const QString username = getAttribute(&request, LoginUsername).toString(); const QString password = getAttribute(&request, LoginPassword).toString(); QUrlQuery query; query.addQueryItem("login_email", username); query.addQueryItem("login_password", password); query.addQueryItem("hash", hash); query.addQueryItem("login", "Login"); QByteArray data(query.query().toUtf8()); request = createRequest(LoginUrl()); setAttribute(&request, LoginUsername, username); setAttribute(&request, LoginPassword, password); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); QNetworkReply *r = _manager->post(request, data); connect(r, &QNetworkReply::finished, this, &Session::Request::Request::onLoginPageResult); } reply->deleteLater(); }
void LoginWorker::doWork(HcaThread *t) { QElapsedTimer totalTime; totalTime.start(); m_id = t->id(); DbManager* dbm = t->dbManager(); emit(t->setThreadStatus(m_id, false)); //this must always be the first QScopedPointer<Client> c(new Client(this)); if(!dbm->findUserByUuid(uuid, c.data())){ qWarning() << "User not found, creating..."; dbm->createUser(c.data()); } c->setStatus(ONLINE); dbm->updateClient(c.data()); QJsonObject response = c->toFullJsonObject(); response[REQUEST] = LOGIN; QJsonDocument doc; doc.setObject(response); qWarning() << "Emitting login from " << QThread::currentThreadId(); emit loginResult(doc.toJson(QJsonDocument::Compact), socket, c->id()); emit(t->setThreadStatus(m_id, true)); //this must always be the last qWarning() << "loginRequest evaded in " << totalTime.elapsed() << "ms"; }
void Session::Request::onLoginPageResult() { QNetworkReply *reply = qobject_cast<QNetworkReply*>(QObject::sender()); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); if (status != 302) { emit loginResult(0x01, "Failed to log in (invalid password or expired session ID)."); } else { QList<QNetworkCookie> cookies = reply->manager()->cookieJar()->cookiesForUrl(MainUrl()); for (auto &cookie : cookies) { if (QString(cookie.name()) == SessionIdCookie()) { _sessionId = cookie.value(); emit loginResult(0x00, "Logged in!"); break; } } QNetworkRequest request = createRequest(AccountUrl()); QNetworkReply *r = _manager->get(request); connect(r, &QNetworkReply::finished, this, &Session::Request::Request::onAccountPageResult); } reply->deleteLater(); }
int SocketManager::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QObject::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: showMessage((*reinterpret_cast< const QString(*)>(_a[1]))); break; case 1: displayMbkImage((*reinterpret_cast< const MbkImage(*)>(_a[1]))); break; case 2: displayYzmImage((*reinterpret_cast< const YzmImage(*)>(_a[1]))); break; case 3: connected((*reinterpret_cast< SocketManager*(*)>(_a[1]))); break; case 4: loginResult((*reinterpret_cast< eLoginResult(*)>(_a[1]))); break; case 5: readyRead(); break; case 6: tcpError((*reinterpret_cast< QAbstractSocket::SocketError(*)>(_a[1]))); break; case 7: doConnected(); break; case 8: doDisconnected(); break; default: ; } _id -= 9; } return _id; }