void ImageshackTalker::parseCheckRegistrationCode(const QByteArray& data) { QString errMsg; QXmlStreamReader reader(data); bool foundResponse; emit signalLoginInProgress(3, 4, i18n("Parsing server response")); while (!reader.atEnd()) { reader.readNext(); if (reader.isStartElement()) { foundResponse = true; if (reader.name() == "exists") { reader.readNext(); if (reader.text().toString() == "yes") { m_imageshack->m_loggedIn = true; } else { m_imageshack->m_loggedIn = false; } } if (reader.name() == "username") { reader.readNext(); m_imageshack->setUsername(reader.text().toString()); kDebug() << m_imageshack->username(); } if (reader.name() == "email") { reader.readNext(); m_imageshack->setEmail(reader.text().toString()); kDebug() << m_imageshack->email(); } } } if (!foundResponse) { emit signalLoginDone(2, i18n("Server does not respond. Please check you internet connection!")); return; } if (m_imageshack->loggedIn()) { authenticationDone(0, i18n("Registration code successfuly verified")); } else { authenticationDone(1, i18n("Registration code not valid!")); } }
void FbTalker::parseExchangeSession(const QByteArray& data) { int errCode = -1; QString errMsg; bool ok; QJson::Parser parser; kDebug() << "Parse exchange_session response:" << endl << data; QVariantList result = parser.parse (data, &ok).toList(); if(ok) { QVariantMap session = result[0].toMap(); m_accessToken = session["access_token"].toString(); m_sessionExpires = session["expires"].toUInt(); if( m_sessionExpires != 0 ) { #if QT_VERSION >= 0x40700 m_sessionExpires += QDateTime::currentMSecsSinceEpoch() / 1000; #else m_sessionExpires += QDateTime::currentDateTime().toTime_t(); #endif } if( m_accessToken.isEmpty() ) // Session did not convert. Reauthenticate. doOAuth(); else // Session converted to OAuth. Proceed normally. getLoggedInUser(); } else { authenticationDone(errCode, errorToText(errCode, errMsg)); } }
void FbTalker::parseResponseGetUploadPermission(const QByteArray& data) { int errCode = -1; QString errMsg; QDomDocument doc("getUploadPerm"); if (!doc.setContent(data)) return; if (m_loginInProgress) emit signalLoginProgress(9); kDebug() << "Parse HasAppPermission response:" << endl << data; QDomElement docElem = doc.documentElement(); if (docElem.tagName() == "users_hasAppPermission_response") { m_user.uploadPerm = docElem.text().toInt(); errCode = 0; } else if (docElem.tagName() == "error_response") { errCode = parseErrorResponse(docElem, errMsg); } if (m_loginInProgress) { authenticationDone(errCode, errorToText(errCode, errMsg)); } else { emit signalBusy(false); emit signalChangePermDone(errCode, errorToText(errCode, errMsg)); } }
LoginForm::LoginForm(QWidget *parent) : QWidget(parent), ui(new Ui::LoginForm) { if (! m_Greeter.connectSync()) { close(); } ui->setupUi(this); setStyleSheet(razorTheme.qss("razor-lightdm-greeter/razor-lightdm-greeter")); ui->hostnameLabel->setFocus(); // Setup users m_UsersModel = new QLightDM::UsersModel(); QStringList userIds; for (int i = 0; i < m_UsersModel->rowCount(QModelIndex()); i++) { QModelIndex index = m_UsersModel->index(i); QString userId = m_UsersModel->data(index, Qt::UserRole).toString(); userIds << userId; } QCompleter *completer = new QCompleter(userIds); completer->setCompletionMode(QCompleter::InlineCompletion); ui->userIdInput->setCompleter(completer); // Setup sessions m_SessionsModel = new QLightDM::SessionsModel(); ui->sessionCombo->setModel(m_SessionsModel); for (int row = 0; row < ui->sessionCombo->model()->rowCount(); row++) { QModelIndex index = ui->sessionCombo->model()->index(row, 0); if (QString("Razor Desktop") == ui->sessionCombo->model()->data(index, Qt::DisplayRole).toString()) { ui->sessionCombo->setCurrentIndex(row); break; } } QPixmap icon(QString(SHARE_DIR) + "/graphics/rqt-2.svg"); ui->iconLabel->setPixmap(icon.scaled(ui->iconLabel->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); #ifdef USING_LIGHTDM_QT_1 ui->hostnameLabel->setText(QLightDM::hostname()); connect(&m_Greeter, SIGNAL(showPrompt(QString,QLightDM::PromptType)), this, SLOT(onPrompt(QString,QLightDM::PromptType))); #else ui->hostnameLabel->setText(m_Greeter.hostname()); connect(&m_Greeter, SIGNAL(showPrompt(QString,QLightDM::Greeter::PromptType)), this, SLOT(onPrompt(QString,QLightDM::Greeter::PromptType))); #endif connect(ui->loginButton, SIGNAL(clicked(bool)), this, SLOT(doLogin())); connect(ui->cancelButton, SIGNAL(clicked()), SLOT(doCancel())); connect(&m_Greeter, SIGNAL(authenticationComplete()), this, SLOT(authenticationDone())); connect(ui->leaveButton, SIGNAL(clicked()), SLOT(doLeave())); connect(&m_razorPowerProcess, SIGNAL(finished(int)), this, SLOT(razorPowerDone())); }
void FbTalker::slotResult(KJob* kjob) { m_job = 0; KIO::Job* job = static_cast<KIO::Job*>(kjob); if (job->error()) { if (m_loginInProgress) { authenticationDone(job->error(), job->errorText()); } else if (m_state == FB_ADDPHOTO) { emit signalBusy(false); emit signalAddPhotoDone(job->error(), job->errorText()); } else if (m_state == FB_GETPHOTO) { emit signalBusy(false); emit signalGetPhotoDone(job->error(), job->errorText(), QByteArray()); } else { emit signalBusy(false); job->ui()->setWindow(m_parent); job->ui()->showErrorMessage(); } return; } switch(m_state) { case(FB_EXCHANGESESSION): parseExchangeSession(m_buffer); break; case(FB_GETLOGGEDINUSER): parseResponseGetLoggedInUser(m_buffer); break; case(FB_GETUSERINFO): case(FB_GETUSERINFO_FRIENDS): parseResponseGetUserInfo(m_buffer); break; case(FB_GETUPLOADPERM): parseResponseGetUploadPermission(m_buffer); break; case(FB_LOGOUT): parseResponseLogout(m_buffer); break; case(FB_LISTFRIENDS): parseResponseListFriends(m_buffer); break; case(FB_LISTALBUMS): parseResponseListAlbums(m_buffer); break; case(FB_LISTPHOTOS): parseResponseListPhotos(m_buffer); break; case(FB_CREATEALBUM): parseResponseCreateAlbum(m_buffer); break; case(FB_ADDPHOTO): parseResponseAddPhoto(m_buffer); break; case(FB_GETPHOTO): // all we get is data of the image emit signalBusy(false); emit signalGetPhotoDone(0, QString(), m_buffer); break; } }
/** * Authenticate using OAuth * * TODO (Dirk): There's some GUI code slipped in here, * that really doesn't feel like it's belonging here. */ void FbTalker::doOAuth() { // just in case m_loginInProgress = true; // TODO (Dirk): // Find out whether this signalBusy is used here appropriately. emit signalBusy(true); KUrl url("https://www.facebook.com/dialog/oauth"); url.addQueryItem("client_id", m_appID); url.addQueryItem("redirect_uri", "https://www.facebook.com/connect/login_success.html"); // TODO (Dirk): Check which of these permissions can be optional. url.addQueryItem("scope", "photo_upload,user_photos,friends_photos,user_photo_video_tags,friends_photo_video_tags,offline_access"); url.addQueryItem("response_type", "token"); kDebug() << "OAuth URL: " << url; KToolInvocation::invokeBrowser(url.url()); emit signalBusy(false); KDialog* window = new KDialog(kapp->activeWindow(), 0); window->setModal(true); window->setWindowTitle( i18n("Facebook Application Authorization") ); window->setButtons(KDialog::Ok | KDialog::Cancel); QWidget* main = new QWidget(window, 0); QLineEdit* textbox = new QLineEdit( ); QPlainTextEdit* infobox = new QPlainTextEdit( i18n( "Please follow the instructions in the browser window. " "When done, copy the Internet address from your browser into the textbox below and press \"OK\"." ) ); infobox->setReadOnly(true); QVBoxLayout* layout = new QVBoxLayout; layout->addWidget(infobox); layout->addWidget(textbox); main->setLayout(layout); window->setMainWidget(main); if( window->exec() == QDialog::Accepted ) { // Error code and reason from the Facebook service QString errorReason; QString errorCode; url = KUrl( textbox->text() ); QString fragment = url.fragment(); kDebug() << "Split out the fragment from the URL: " << fragment; QStringList params = fragment.split('&'); QList<QString>::iterator i = params.begin(); while( i != params.end() ) { QStringList keyvalue = (*i).split('='); if( keyvalue.size() == 2 ) { if( ! keyvalue[0].compare( "access_token" ) ) { m_accessToken = keyvalue[1]; } else if( ! keyvalue[0].compare( "expires_in" ) ) { m_sessionExpires = keyvalue[1].toUInt(); if( m_sessionExpires != 0 ) { #if QT_VERSION >= 0x40700 m_sessionExpires += QDateTime::currentMSecsSinceEpoch() / 1000; #else m_sessionExpires += QDateTime::currentDateTime().toTime_t(); #endif } } else if( ! keyvalue[0].compare( "error_reason" ) ) { errorReason = keyvalue[1]; } else if( ! keyvalue[0].compare( "error" ) ) { errorCode = keyvalue[1]; } } ++i; } if( !m_accessToken.isEmpty() && errorCode.isEmpty() && errorReason.isEmpty() ) { return getLoggedInUser(); } } authenticationDone(-1, i18n("Canceled by user.")); // TODO (Dirk): Correct? emit signalBusy(false); }
void FbTalker::parseResponseGetUserInfo(const QByteArray& data) { int errCode = -1; QString errMsg; QDomDocument doc("getUserInfo"); if (!doc.setContent(data)) return; if (m_state == FB_GETUSERINFO) // during login emit signalLoginProgress(7); kDebug() << "Parse GetUserInfo response:" << endl << data; QList<FbUser> friendsList; QDomElement docElem = doc.documentElement(); if (docElem.tagName() == "users_getInfo_response") { for (QDomNode node = docElem.firstChild(); !node.isNull(); node = node.nextSibling()) { if (!node.isElement()) continue; if (node.nodeName() == "user") { FbUser user; for (QDomNode nodeU = node.toElement().firstChild(); !nodeU.isNull(); nodeU = nodeU.nextSibling()) { if (!nodeU.isElement()) continue; if (nodeU.nodeName() == "uid") user.id = nodeU.toElement().text().toLongLong(); else if (nodeU.nodeName() == "name") user.name = nodeU.toElement().text(); else if (nodeU.nodeName() == "profile_url") user.profileURL = nodeU.toElement().text(); } if (m_state == FB_GETUSERINFO) { m_user.name = user.name; m_user.profileURL = user.profileURL; } else if (!user.name.isEmpty()) friendsList.append(user); } } errCode = 0; } else if (docElem.tagName() == "error_response") { errCode = parseErrorResponse(docElem, errMsg); } if (m_state == FB_GETUSERINFO) { if (errCode != 0) { authenticationDone(errCode, errorToText(errCode, errMsg)); return; } getUploadPermission(); } else { qSort(friendsList.begin(), friendsList.end()); emit signalBusy(false); emit signalListFriendsDone(errCode, errorToText(errCode, errMsg), friendsList); } }