/* msnsecureloginhandler.cpp - SSL login for MSN protocol Copyright (c) 2005 by Michaƫl Larouche Kopete (c) 2002-2005 by the Kopete developers ************************************************************************* * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ************************************************************************* */ #include "msnsecureloginhandler.h" // TQt includes #include // KDE includes #include #include #include MSNSecureLoginHandler::MSNSecureLoginHandler(const TQString &accountId, const TQString &password, const TQString &authParameters) : m_password(password), m_accountId(accountId), m_authentification(authParameters) { } MSNSecureLoginHandler::~MSNSecureLoginHandler() { // kdDebug(14140) << k_funcinfo << endl; } void MSNSecureLoginHandler::login() { // Retrive the login server. // Do a reload and don't show the progress. KIO::Job *getLoginServer = KIO::get(KURL("https://nexus.passport.com/rdr/pprdr.asp"), true, false); getLoginServer->addMetaData("cookies", "manual"); getLoginServer->addMetaData("cache", "reload"); getLoginServer->addMetaData("PropagateHttpHeader", "true"); connect(getLoginServer, TQT_SIGNAL(result(KIO::Job *)), this, TQT_SLOT(slotLoginServerReceived(KIO::Job* ))); } void MSNSecureLoginHandler::slotLoginServerReceived(KIO::Job *loginJob) { if(!loginJob->error()) { // Retrive the HTTP header TQString httpHeaders = loginJob->queryMetaData("HTTP-Headers"); // Get the login URL using TQRegExp TQRegExp rx("PassportURLs: DARealm=(.*),DALogin=(.*),DAReg="); rx.search(httpHeaders); // Set the loginUrl and loginServer TQString loginUrl = rx.cap(2); TQString loginServer = loginUrl.section('/', 0, 0); kdDebug(14140) << k_funcinfo << loginServer << endl; TQString authURL = "https://" + loginUrl; KIO::Job *authJob = KIO::get(KURL(authURL), true, false); authJob->addMetaData("cookies", "manual"); TQString authRequest = "Authorization: Passport1.4 " "OrgVerb=GET," "OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom," "sign-in=" + KURL::encode_string(m_accountId) + ",pwd=" + KURL::encode_string( m_password ).tqreplace(',',"%2C") + "," + m_authentification + "\r\n"; // warning, this debug contains the password // kdDebug(14140) << k_funcinfo << "Auth request: " << authRequest << endl; authJob->addMetaData("customHTTPHeader", authRequest); authJob->addMetaData("SendLanguageSettings", "false"); authJob->addMetaData("PropagateHttpHeader", "true"); authJob->addMetaData("cookies", "manual"); authJob->addMetaData("cache", "reload"); connect(authJob, TQT_SIGNAL(result(KIO::Job *)), this, TQT_SLOT(slotTweenerReceived(KIO::Job* ))); } else { kdDebug(14140) << k_funcinfo << loginJob->errorString() << endl; emit loginFailed(); } } void MSNSecureLoginHandler::slotTweenerReceived(KIO::Job *authJob) { if(!authJob->error()) { TQString httpHeaders = authJob->queryMetaData("HTTP-Headers"); // kdDebug(14140) << k_funcinfo << "HTTP headers: " << httpHeaders << endl; // Check if we get "401 Unauthorized", thats means it's a bad password. if(httpHeaders.tqcontains(TQString::fromUtf8("401 Unauthorized"))) { // kdDebug(14140) << k_funcinfo << "MSN Login Bad password." << endl; emit loginBadPassword(); } else { TQRegExp rx("from-PP='(.*)'"); rx.search(httpHeaders); TQString ticket = rx.cap(1); // kdDebug(14140) << k_funcinfo << "Received ticket: " << ticket << endl; emit loginSuccesful(ticket); } } else { kdDebug(14140) << k_funcinfo << authJob->errorString() << endl; emit loginFailed(); } } #include "msnsecureloginhandler.moc"