summaryrefslogtreecommitdiffstats
path: root/fbreader/src/network/authentication
diff options
context:
space:
mode:
Diffstat (limited to 'fbreader/src/network/authentication')
-rw-r--r--fbreader/src/network/authentication/NetworkAuthenticationManager.cpp80
-rw-r--r--fbreader/src/network/authentication/NetworkAuthenticationManager.h88
-rw-r--r--fbreader/src/network/authentication/litres/LitResAuthenticationDataParser.cpp158
-rw-r--r--fbreader/src/network/authentication/litres/LitResAuthenticationDataParser.h107
-rw-r--r--fbreader/src/network/authentication/litres/LitResAuthenticationManager.cpp472
-rw-r--r--fbreader/src/network/authentication/litres/LitResAuthenticationManager.h93
6 files changed, 0 insertions, 998 deletions
diff --git a/fbreader/src/network/authentication/NetworkAuthenticationManager.cpp b/fbreader/src/network/authentication/NetworkAuthenticationManager.cpp
deleted file mode 100644
index 137388f..0000000
--- a/fbreader/src/network/authentication/NetworkAuthenticationManager.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2009-2012 Geometer Plus <contact@geometerplus.com>
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#include "NetworkAuthenticationManager.h"
-
-#include "../NetworkLink.h"
-#include "../NetworkErrors.h"
-
-NetworkAuthenticationManager::NetworkAuthenticationManager(const NetworkLink &link) :
- Link(link),
- UserNameOption(ZLCategoryKey::NETWORK, link.getSiteName(), "userName", ""),
- SkipIPOption(ZLCategoryKey::NETWORK, link.getSiteName(), "skipIP", true) {
-}
-
-NetworkAuthenticationManager::~NetworkAuthenticationManager() {
-}
-
-bool NetworkAuthenticationManager::needsInitialization() {
- return false;
-}
-
-std::string NetworkAuthenticationManager::initialize(shared_ptr<ZLNetworkRequest::Listener> listener) {
- listener->finished();
- return NetworkErrors::errorMessage(NetworkErrors::ERROR_UNSUPPORTED_OPERATION);
-}
-
-bool NetworkAuthenticationManager::needPurchase(const NetworkBookItem &) {
- return true;
-}
-
-std::string NetworkAuthenticationManager::purchaseBook(const NetworkBookItem &, shared_ptr<ZLNetworkRequest::Listener> listener) {
- std::string error = NetworkErrors::errorMessage(NetworkErrors::ERROR_UNSUPPORTED_OPERATION);
- listener->finished(error);
- return error;
-}
-
-
-std::string NetworkAuthenticationManager::topupAccountLink() {
- return "";
-}
-
-std::string NetworkAuthenticationManager::currentAccount() {
- return "";
-}
-
-bool NetworkAuthenticationManager::skipIPSupported() {
- return false;
-}
-
-bool NetworkAuthenticationManager::registrationSupported() {
- return false;
-}
-
-std::string NetworkAuthenticationManager::registerUser(const std::string &, const std::string &, const std::string &) {
- return NetworkErrors::errorMessage(NetworkErrors::ERROR_UNSUPPORTED_OPERATION);
-}
-
-bool NetworkAuthenticationManager::passwordRecoverySupported() {
- return false;
-}
-
-std::string NetworkAuthenticationManager::recoverPassword(const std::string &) {
- return NetworkErrors::errorMessage(NetworkErrors::ERROR_UNSUPPORTED_OPERATION);
-}
diff --git a/fbreader/src/network/authentication/NetworkAuthenticationManager.h b/fbreader/src/network/authentication/NetworkAuthenticationManager.h
deleted file mode 100644
index 75ae9dd..0000000
--- a/fbreader/src/network/authentication/NetworkAuthenticationManager.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2009-2012 Geometer Plus <contact@geometerplus.com>
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#ifndef __NETWORKAUTHENTICATIONMANAGER_H__
-#define __NETWORKAUTHENTICATIONMANAGER_H__
-
-#include <shared_ptr.h>
-#include <ZLOptions.h>
-#include <ZLBoolean3.h>
-
-#include "../NetworkItems.h"
-#include "../BookReference.h"
-
-class NetworkLink;
-
-class NetworkAuthenticationManager {
-
-public:
- NetworkAuthenticationManager(const NetworkLink &link);
- virtual ~NetworkAuthenticationManager();
-
-public:
- const NetworkLink &Link;
- ZLStringOption UserNameOption;
- ZLBooleanOption SkipIPOption;
-
-public:
- struct AuthenticationStatus {
- const ZLBoolean3 Status;
- const std::string Message;
-
- AuthenticationStatus(bool status);
- AuthenticationStatus(const std::string &msg);
- };
-
- virtual AuthenticationStatus isAuthorised(shared_ptr<ZLNetworkRequest::Listener> listener = 0) = 0;
- virtual std::string authorise(const std::string &pwd, shared_ptr<ZLNetworkRequest::Listener> listener) = 0; // returns error message
- virtual void logOut() = 0;
-
- virtual bool skipIPSupported();
-
- virtual shared_ptr<BookReference> downloadReference(const NetworkBookItem &book) = 0;
-
-public: // Account specific methods (can be called only if authorised!!!)
- virtual const std::string &currentUserName() = 0;
- virtual bool needsInitialization();
- virtual std::string initialize(shared_ptr<ZLNetworkRequest::Listener> listener); // returns error message
- virtual bool needPurchase(const NetworkBookItem &book); // returns true if link must be purchased before downloading
- virtual std::string purchaseBook(const NetworkBookItem &, shared_ptr<ZLNetworkRequest::Listener> listener); // returns error message
-
- virtual std::string topupAccountLink();
- virtual std::string currentAccount();
-
- virtual const NetworkItem::List &purchasedBooks() const = 0;
-
-public: // new User Registration
- virtual bool registrationSupported();
- virtual std::string registerUser(const std::string &login, const std::string &password, const std::string &email);
-
-public: // Password Recovery
- virtual bool passwordRecoverySupported();
- virtual std::string recoverPassword(const std::string &email);
-
-private: // disable copying
- NetworkAuthenticationManager(const NetworkAuthenticationManager &);
- const NetworkAuthenticationManager &operator = (const NetworkAuthenticationManager &);
-};
-
-inline NetworkAuthenticationManager::AuthenticationStatus::AuthenticationStatus(bool status) : Status(status ? B3_TRUE : B3_FALSE) {}
-inline NetworkAuthenticationManager::AuthenticationStatus::AuthenticationStatus(const std::string &msg) : Status(B3_UNDEFINED), Message(msg) {}
-
-#endif /* __NETWORKAUTHENTICATIONMANAGER_H__ */
diff --git a/fbreader/src/network/authentication/litres/LitResAuthenticationDataParser.cpp b/fbreader/src/network/authentication/litres/LitResAuthenticationDataParser.cpp
deleted file mode 100644
index b1b6c69..0000000
--- a/fbreader/src/network/authentication/litres/LitResAuthenticationDataParser.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (C) 2009-2012 Geometer Plus <contact@geometerplus.com>
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#include "LitResAuthenticationDataParser.h"
-
-
-static const std::string TAG_AUTHORIZATION_OK = "catalit-authorization-ok";
-static const std::string TAG_AUTHORIZATION_FAILED = "catalit-authorization-failed";
-
-static const std::string TAG_PURCHASE_OK = "catalit-purchase-ok";
-static const std::string TAG_PURCHASE_FAILED = "catalit-purchase-failed";
-
-static const std::string TAG_DOWNLOAD_FAILED = "catalit-download-failed";
-
-static const std::string TAG_REGISTRATION_FAILED = "catalit-registration-failed";
-
-static const std::string TAG_PASSWORD_RECOVERY_OK = "catalit-pass-recover-ok";
-static const std::string TAG_PASSWORD_RECOVERY_FAILED = "catalit-pass-recover-failed";
-
-LitResAuthenticationDataParser::LitResAuthenticationDataParser() {
-}
-
-void LitResAuthenticationDataParser::startElementHandler(const char *tag, const char **attributes) {
- myAttributes.clear();
- while (*attributes != 0) {
- std::string name(*attributes++);
- if (*attributes == 0) {
- break;
- }
- std::string value(*attributes++);
- myAttributes.insert(std::make_pair(name, value));
- }
- processTag(tag);
-}
-
-
-
-
-
-LitResLoginDataParser::LitResLoginDataParser(std::string &firstName, std::string &lastName, std::string &sid) :
- myFirstName(firstName), myLastName(lastName), mySid(sid) {
-}
-
-void LitResLoginDataParser::processTag(const std::string &tag) {
- if (TAG_AUTHORIZATION_FAILED == tag) {
- setErrorCode(NetworkErrors::ERROR_AUTHENTICATION_FAILED);
- } else if (TAG_AUTHORIZATION_OK == tag) {
- myFirstName = attributes()["first-name"];
- myLastName = attributes()["first-name"];
- mySid = attributes()["sid"];
- }
-}
-
-
-LitResPurchaseDataParser::LitResPurchaseDataParser(std::string &account, std::string &bookId) :
- myAccount(account), myBookId(bookId) {
-}
-
-void LitResPurchaseDataParser::processTag(const std::string &tag) {
- if (TAG_AUTHORIZATION_FAILED == tag) {
- setErrorCode(NetworkErrors::ERROR_AUTHENTICATION_FAILED);
- } else {
- myAccount = attributes()["account"];
- myBookId = attributes()["art"];
- if (TAG_PURCHASE_OK == tag) {
- // nop
- } else if (TAG_PURCHASE_FAILED == tag) {
- const std::string &error = attributes()["error"];
- if ("1" == error) {
- setErrorCode(NetworkErrors::ERROR_PURCHASE_NOT_ENOUGH_MONEY);
- } else if ("2" == error) {
- setErrorCode(NetworkErrors::ERROR_PURCHASE_MISSING_BOOK);
- } else if ("3" == error) {
- setErrorCode(NetworkErrors::ERROR_PURCHASE_ALREADY_PURCHASED);
- } else {
- setErrorCode(NetworkErrors::ERROR_INTERNAL);
- }
- }
- }
-}
-
-
-/*LitResDownloadErrorDataParser::LitResDownloadErrorDataParser() {
-}
-
-void LitResDownloadErrorDataParser::processTag(const std::string &tag) {
- if (TAG_AUTHORIZATION_FAILED == tag) {
- setErrorCode(NetworkErrors::ERROR_AUTHENTICATION_FAILED);
- } else {
- if (TAG_DOWNLOAD_FAILED == tag) {
- const std::string &error = attributes()["error"];
- if ("1" == error) {
- setErrorCode(NetworkErrors::ERROR_BOOK_NOT_PURCHASED);
- } else if ("2" == error) {
- setErrorCode(NetworkErrors::ERROR_DOWNLOAD_LIMIT_EXCEEDED);
- } else {
- setErrorCode(NetworkErrors::ERROR_INTERNAL);
- }
- }
- }
-}*/
-
-
-LitResRegisterUserDataParser::LitResRegisterUserDataParser(std::string &sid) : mySid(sid) {
-}
-
-void LitResRegisterUserDataParser::processTag(const std::string &tag) {
- if (TAG_REGISTRATION_FAILED == tag) {
- const std::string &error = attributes()["error"];
- if ("1" == error) {
- setErrorCode(NetworkErrors::ERROR_LOGIN_ALREADY_TAKEN);
- } else if ("2" == error) {
- setErrorCode(NetworkErrors::ERROR_LOGIN_WAS_NOT_SPECIFIED);
- } else if ("3" == error) {
- setErrorCode(NetworkErrors::ERROR_PASSWORD_WAS_NOT_SPECIFIED);
- } else if ("4" == error) {
- setErrorCode(NetworkErrors::ERROR_INVALID_EMAIL);
- } else if ("5" == error) {
- setErrorCode(NetworkErrors::ERROR_TOO_MANY_REGISTRATIONS);
- } else {
- setErrorCode(NetworkErrors::ERROR_INTERNAL);
- }
- } else if (TAG_AUTHORIZATION_OK == tag) {
- mySid = attributes()["sid"];
- }
-}
-
-
-void LitResPasswordRecoveryDataParser::processTag(const std::string &tag) {
- if (TAG_PASSWORD_RECOVERY_FAILED == tag) {
- const std::string &error = attributes()["error"];
- if ("1" == error) {
- setErrorCode(NetworkErrors::ERROR_NO_USER_EMAIL);
- } else if ("2" == error) {
- setErrorCode(NetworkErrors::ERROR_EMAIL_WAS_NOT_SPECIFIED);
- } else {
- setErrorCode(NetworkErrors::ERROR_INTERNAL);
- }
- } else if (TAG_PASSWORD_RECOVERY_OK == tag) {
- // NOP
- }
-}
diff --git a/fbreader/src/network/authentication/litres/LitResAuthenticationDataParser.h b/fbreader/src/network/authentication/litres/LitResAuthenticationDataParser.h
deleted file mode 100644
index 60baa02..0000000
--- a/fbreader/src/network/authentication/litres/LitResAuthenticationDataParser.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2009-2012 Geometer Plus <contact@geometerplus.com>
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#ifndef __LITRESAUTHENTICATIONDATAPARSER_H__
-#define __LITRESAUTHENTICATIONDATAPARSER_H__
-
-#include <ZLXMLReader.h>
-
-#include "../../NetworkErrors.h"
-
-
-class LitResAuthenticationDataParser : public ZLXMLReader {
-
-public:
- LitResAuthenticationDataParser();
-
-private:
- void startElementHandler(const char *tag, const char **attributes);
-
-protected:
- void setErrorCode(const std::string &msg);
- std::map<std::string, std::string> &attributes();
-
- virtual void processTag(const std::string &tag) = 0;
-
-private:
- std::map<std::string, std::string> myAttributes;
-};
-
-inline void LitResAuthenticationDataParser::setErrorCode(const std::string &msg) { setErrorMessage(NetworkErrors::errorMessage(msg)); }
-inline std::map<std::string, std::string> &LitResAuthenticationDataParser::attributes() { return myAttributes; }
-
-
-class LitResLoginDataParser : public LitResAuthenticationDataParser {
-
-public:
- LitResLoginDataParser(std::string &firstName, std::string &lastName, std::string &sid);
-
-private:
- void processTag(const std::string &tag);
-
-private:
- std::string &myFirstName;
- std::string &myLastName;
- std::string &mySid;
-};
-
-
-class LitResPurchaseDataParser : public LitResAuthenticationDataParser {
-
-public:
- LitResPurchaseDataParser(std::string &account, std::string &bookId);
-
-private:
- void processTag(const std::string &tag);
-
-private:
- std::string &myAccount;
- std::string &myBookId;
-};
-
-
-/*class LitResDownloadErrorDataParser : public LitResAuthenticationDataParser {
-
-public:
- LitResDownloadErrorDataParser();
-
-private:
- void processTag(const std::string &tag);
-
-};*/
-
-class LitResRegisterUserDataParser : public LitResAuthenticationDataParser {
-
-public:
- LitResRegisterUserDataParser(std::string &sid);
-
-private:
- void processTag(const std::string &tag);
-
-private:
- std::string &mySid;
-};
-
-class LitResPasswordRecoveryDataParser : public LitResAuthenticationDataParser {
-
-private:
- void processTag(const std::string &tag);
-};
-
-#endif /* __LITRESAUTHENTICATIONDATAPARSER_H__ */
diff --git a/fbreader/src/network/authentication/litres/LitResAuthenticationManager.cpp b/fbreader/src/network/authentication/litres/LitResAuthenticationManager.cpp
deleted file mode 100644
index e552b5c..0000000
--- a/fbreader/src/network/authentication/litres/LitResAuthenticationManager.cpp
+++ /dev/null
@@ -1,472 +0,0 @@
-/*
- * Copyright (C) 2009-2012 Geometer Plus <contact@geometerplus.com>
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#include <ZLNetworkUtil.h>
-#include <ZLNetworkManager.h>
-#include <ZLUserData.h>
-#include <ZLExecutionUtil.h>
-
-#include "../../tree/NetworkLibrary.h"
-
-#include "../../litres/LitResBooksFeedParser.h"
-#include "../../litres/LitResUtil.h"
-#include "LitResAuthenticationManager.h"
-#include "LitResAuthenticationDataParser.h"
-
-#include "../../NetworkErrors.h"
-#include "../../NetworkLink.h"
-#include "../../NetworkLinkCollection.h"
-
-LitResAuthenticationManager::LitResAuthenticationManager(const NetworkLink &link) :
- NetworkAuthenticationManager(link),
- mySidChecked(false),
- mySidUserNameOption(ZLCategoryKey::NETWORK, link.getSiteName(), "sidUserName", ""),
- mySidOption(ZLCategoryKey::NETWORK, link.getSiteName(), "sid", "")
-{
-}
-
-class LitResAuthorisationScope : public ZLUserData {
-public:
- std::string firstName;
- std::string lastName;
- std::string newSid;
- shared_ptr<ZLNetworkRequest::Listener> listener;
-};
-
-NetworkAuthenticationManager::AuthenticationStatus LitResAuthenticationManager::isAuthorised(shared_ptr<ZLNetworkRequest::Listener> listener) {
- const bool useNetwork = !listener.isNull();
- bool authState = !mySidUserNameOption.value().empty() && !mySidOption.value().empty();
- if (mySidChecked || !useNetwork) {
- if (!listener.isNull())
- listener->finished(authState ? std::string() : "Not authorised");
- return AuthenticationStatus(authState);
- }
-
- if (!authState) {
- mySidChecked = true;
- mySidUserNameOption.setValue("");
- mySidOption.setValue("");
- listener->finished("Not authorised");
- return AuthenticationStatus(false);
- }
-
- LitResAuthorisationScope *scope = new LitResAuthorisationScope;
- scope->listener = listener;
- shared_ptr<ZLXMLReader> xmlReader = new LitResLoginDataParser(scope->firstName, scope->lastName, scope->newSid);
-
- std::string url = Link.url(NetworkLink::URL_SIGN_IN);
- ZLNetworkUtil::appendParameter(url, "sid", mySidOption.value());
-
- shared_ptr<ZLNetworkRequest> networkData = ZLNetworkManager::Instance().createXMLParserRequest(url, xmlReader);
- networkData->setListener(ZLExecutionUtil::createListener(scope, this, &LitResAuthenticationManager::onAuthorised));
- ZLNetworkManager::Instance().performAsync(networkData);
- return AuthenticationStatus(std::string());
-}
-
-std::string LitResAuthenticationManager::authorise(const std::string &pwd, shared_ptr<ZLNetworkRequest::Listener> listener) {
- LitResAuthorisationScope *scope = new LitResAuthorisationScope;
- scope->listener = listener;
- shared_ptr<ZLXMLReader> xmlReader = new LitResLoginDataParser(scope->firstName, scope->lastName, scope->newSid);
-
- std::string url = Link.url(NetworkLink::URL_SIGN_IN);
- ZLNetworkUtil::appendParameter(url, "login", UserNameOption.value());
- ZLNetworkUtil::appendParameter(url, "pwd", pwd);
- ZLNetworkUtil::appendParameter(url, "skip_ip", "1");
-
- shared_ptr<ZLNetworkRequest> networkData =
- ZLNetworkManager::Instance().createXMLParserRequest(
- url,
- xmlReader
- );
-
- networkData->setListener(ZLExecutionUtil::createListener(scope, this, &LitResAuthenticationManager::onAuthorised));
- return ZLNetworkManager::Instance().performAsync(networkData);
-}
-
-void LitResAuthenticationManager::onAuthorised(ZLUserDataHolder &data, const std::string &error) {
- LitResAuthorisationScope &scope = static_cast<LitResAuthorisationScope&>(*data.getUserData("scope"));
-
- if (error == NetworkErrors::errorMessage(NetworkErrors::ERROR_TIMEOUT_EXPIRED)) {
- scope.listener->finished(error);
- return;
- }
-
- mySidChecked = true;
- if (!error.empty()) {
- mySidUserNameOption.setValue("");
- mySidOption.setValue("");
- } else {
- mySidOption.setValue(scope.newSid);
- mySidUserNameOption.setValue(UserNameOption.value());
- }
-
- scope.listener->finished(error);
-}
-
-
-void LitResAuthenticationManager::logOut() {
- mySidChecked = true;
- mySidUserNameOption.setValue("");
- mySidOption.setValue("");
-
- myInitializedDataSid.clear();
- myPurchasedBooksIds.clear();
- myPurchasedBooksList.clear();
- myAccount.clear();
-}
-
-const std::string &LitResAuthenticationManager::currentUserName() {
- return mySidUserNameOption.value();
-}
-
-bool LitResAuthenticationManager::needPurchase(const NetworkBookItem &book) {
- return myPurchasedBooksIds.count(book.Id) == 0;
-}
-
-class LitResPurchaseBookScope : public ZLUserData {
-public:
- std::string account;
- std::string bookId;
- const NetworkBookItem *book;
- shared_ptr<ZLNetworkRequest::Listener> listener;
-};
-
-std::string LitResAuthenticationManager::purchaseBook(const NetworkBookItem &book, shared_ptr<ZLNetworkRequest::Listener> listener) {
- const std::string &sid = mySidOption.value();
- std::string error;
- if (sid.empty()) {
- error = NetworkErrors::errorMessage(NetworkErrors::ERROR_AUTHENTICATION_FAILED);
- listener->finished(error);
- return error;
- }
-
- shared_ptr<BookReference> reference = book.reference(BookReference::BUY);
- if (reference.isNull()) {
- // TODO: add correct error message
- error = "Oh, that's impossible";
- listener->finished(error);
- return error;
- }
- std::string query = reference->URL;
- ZLNetworkUtil::appendParameter(query, "sid", sid);
-
- LitResPurchaseBookScope *scope = new LitResPurchaseBookScope;
- scope->book = &book;
- scope->listener = listener;
-
- shared_ptr<ZLXMLReader> xmlReader = new LitResPurchaseDataParser(scope->account, scope->bookId);
- shared_ptr<ZLNetworkRequest> networkData = ZLNetworkManager::Instance().createXMLParserRequest(query, xmlReader);
- networkData->setListener(ZLExecutionUtil::createListener(scope, this, &LitResAuthenticationManager::onBookPurchased));
- return ZLNetworkManager::Instance().performAsync(networkData);
-}
-
-void LitResAuthenticationManager::onBookPurchased(ZLUserDataHolder &data, const std::string &error) {
- LitResPurchaseBookScope &scope = static_cast<LitResPurchaseBookScope&>(*data.getUserData("scope"));
- shared_ptr<ZLNetworkRequest::Listener> listener = scope.listener;
- if (!scope.account.empty()) {
- myAccount = BuyBookReference::price(scope.account, "RUB");
- }
- if (error == NetworkErrors::errorMessage(NetworkErrors::ERROR_AUTHENTICATION_FAILED)) {
- mySidChecked = true;
- mySidUserNameOption.setValue("");
- mySidOption.setValue("");
- }
- const std::string alreadyPurchasedError = NetworkErrors::errorMessage(NetworkErrors::ERROR_PURCHASE_ALREADY_PURCHASED);
- if (error != alreadyPurchasedError) {
- if (!error.empty()) {
- listener->finished(error);
- return;
- }
- if (scope.bookId != scope.book->Id) {
- listener->finished(NetworkErrors::errorMessage(NetworkErrors::ERROR_SOMETHING_WRONG, Link.getSiteName()));
- return;
- }
- }
- myPurchasedBooksIds.insert(scope.book->Id);
- myPurchasedBooksList.push_back(new NetworkBookItem(*scope.book, 0));
- listener->finished(error);
-}
-
-shared_ptr<BookReference> LitResAuthenticationManager::downloadReference(const NetworkBookItem &book) {
- const std::string &sid = mySidOption.value();
- if (sid.empty()) {
- return 0;
- }
- shared_ptr<BookReference> reference =
- book.reference(BookReference::DOWNLOAD_FULL_CONDITIONAL);
- if (reference.isNull()) {
- return 0;
- }
- std::string url = reference->URL;
- ZLNetworkUtil::appendParameter(url, "sid", sid);
- return new DecoratedBookReference(*reference, url);
-}
-
-void LitResAuthenticationManager::collectPurchasedBooks(NetworkItem::List &list) {
- list.assign(myPurchasedBooksList.begin(), myPurchasedBooksList.end());
-}
-
-const std::set<std::string> &LitResAuthenticationManager::getPurchasedIds() const {
- return myPurchasedBooksIds;
-}
-
-const NetworkItem::List &LitResAuthenticationManager::purchasedBooks() const {
- return myPurchasedBooksList;
-}
-
-std::string LitResAuthenticationManager::topupAccountLink() {
- const std::string &sid = mySidOption.value();
- if (sid.empty()) {
- return std::string();
- }
- std::string url = Link.url(NetworkLink::URL_TOPUP);
- ZLNetworkUtil::appendParameter(url, "sid", sid);
- return url;
-}
-
-std::string LitResAuthenticationManager::currentAccount() {
- return myAccount;
-}
-
-bool LitResAuthenticationManager::needsInitialization() {
- const std::string &sid = mySidOption.value();
- if (sid.empty()) {
- return false;
- }
- return sid != myInitializedDataSid;
-}
-
-class LitResInitializationScope : public ZLUserData {
-public:
- std::string dummy;
- std::string error;
- shared_ptr<ZLNetworkRequest::Listener> listener;
-};
-
-std::string LitResAuthenticationManager::initialize(shared_ptr<ZLNetworkRequest::Listener> listener) {
- const std::string &sid = mySidOption.value();
- if (sid.empty()) {
- listener->finished(NetworkErrors::errorMessage(NetworkErrors::ERROR_AUTHENTICATION_FAILED));
- return NetworkErrors::errorMessage(NetworkErrors::ERROR_AUTHENTICATION_FAILED);
- }
- if (sid == myInitializedDataSid) {
- listener->finished(std::string());
- return std::string();
- }
-
- LitResInitializationScope *scope = new LitResInitializationScope;
- scope->listener = listener;
-
- shared_ptr<ZLNetworkRequest> request = loadPurchasedBooks(myPurchasedBooksIds, myPurchasedBooksList);
- request->setListener(ZLExecutionUtil::createListener(scope, this, &LitResAuthenticationManager::onBooksLoaded));
- return ZLNetworkManager::Instance().performAsync(request);
-}
-
-void LitResAuthenticationManager::onBooksLoaded(ZLUserDataHolder &data, const std::string &error) {
- LitResInitializationScope &scope = static_cast<LitResInitializationScope&>(*data.getUserData("scope"));
-
- if (error == NetworkErrors::errorMessage(NetworkErrors::ERROR_TIMEOUT_EXPIRED)) {
- scope.listener->finished(error);
- return;
- }
-
- scope.error = error;
- shared_ptr<ZLNetworkRequest> request = loadAccount(scope.dummy);
- request->setListener(ZLExecutionUtil::createListener(new ZLUserDataHolder(data), this, &LitResAuthenticationManager::onAccountReceived));
- ZLNetworkManager::Instance().performAsync(request);
-}
-
-void LitResAuthenticationManager::onAccountReceived(ZLUserDataHolder &data, const std::string &error) {
- LitResInitializationScope &scope = static_cast<LitResInitializationScope&>(*data.getUserData("scope"));
-
- if (error == NetworkErrors::errorMessage(NetworkErrors::ERROR_TIMEOUT_EXPIRED)) {
- scope.listener->finished(error);
- return;
- }
-
- if (!error.empty() && !scope.error.empty()) {
- scope.error.append("\n").append(error);
- } else if (!error.empty()) {
- scope.error = error;
- }
- if (!scope.error.empty()) {
- myInitializedDataSid.clear();
- loadPurchasedBooksOnError(myPurchasedBooksIds, myPurchasedBooksList);
- loadAccountOnError();
- scope.listener->finished(scope.error);
- return;
- }
- myInitializedDataSid = mySidOption.value();
- loadPurchasedBooksOnSuccess(myPurchasedBooksIds, myPurchasedBooksList);
- loadAccountOnSuccess();
- scope.listener->finished();
-}
-
-shared_ptr<ZLNetworkRequest> LitResAuthenticationManager::loadPurchasedBooks(std::set<std::string> &purchasedBooksIds, NetworkItem::List &purchasedBooksList) {
- const std::string &sid = mySidOption.value();
- purchasedBooksIds.clear();
- purchasedBooksList.clear();
-
- std::string query;
- ZLNetworkUtil::appendParameter(query, "my", "1");
- ZLNetworkUtil::appendParameter(query, "sid", sid);
-
- return ZLNetworkManager::Instance().createXMLParserRequest(
- LitResUtil::url(Link, "pages/catalit_browser/" + query),
- new LitResBooksFeedParser(Link, purchasedBooksList)
- );
-}
-
-void LitResAuthenticationManager::loadPurchasedBooksOnError(std::set<std::string> &purchasedBooksIds, NetworkItem::List &purchasedBooksList) {
- purchasedBooksIds.clear();
- purchasedBooksList.clear();
-}
-
-void LitResAuthenticationManager::loadPurchasedBooksOnSuccess(std::set<std::string> &purchasedBooksIds, NetworkItem::List &purchasedBooksList) {
- for (NetworkItem::List::iterator it = purchasedBooksList.begin(); it != purchasedBooksList.end(); ++it) {
- NetworkBookItem &book = (NetworkBookItem&)**it;
- book.Index = 0;
- purchasedBooksIds.insert(book.Id);
- }
-
- NetworkLibrary::Instance().invalidateVisibility();
- NetworkLibrary::Instance().synchronize();
- NetworkLibrary::Instance().refresh();
-}
-
-shared_ptr<ZLNetworkRequest> LitResAuthenticationManager::loadAccount(std::string &dummy1) {
- const std::string &sid = mySidOption.value();
-
- myAccount.clear();
-
- std::string query;
- ZLNetworkUtil::appendParameter(query, "sid", sid);
- ZLNetworkUtil::appendParameter(query, "art", "0");
-
- return ZLNetworkManager::Instance().createXMLParserRequest(
- LitResUtil::url(Link, "pages/purchase_book/" + query),
- new LitResPurchaseDataParser(myAccount, dummy1)
- );
-}
-
-void LitResAuthenticationManager::loadAccountOnError() {
- myAccount.clear();
-}
-
-void LitResAuthenticationManager::loadAccountOnSuccess() {
- myAccount = BuyBookReference::price(myAccount, "RUB");
-}
-
-bool LitResAuthenticationManager::skipIPSupported() {
- return true;
-}
-
-bool LitResAuthenticationManager::registrationSupported() {
- return true;
-}
-
-std::string LitResAuthenticationManager::registerUser(const std::string &login, const std::string &password, const std::string &email) {
- std::string newSid;
- shared_ptr<ZLXMLReader> xmlReader = new LitResRegisterUserDataParser(newSid);
-
- std::string url = Link.url(NetworkLink::URL_SIGN_UP);
- ZLNetworkUtil::appendParameter(url, "new_login", login);
- ZLNetworkUtil::appendParameter(url, "new_pwd1", password);
- ZLNetworkUtil::appendParameter(url, "mail", email);
-
- shared_ptr<ZLNetworkRequest> networkData =
- ZLNetworkManager::Instance().createXMLParserRequest(
- url, xmlReader
- );
- std::string error = ZLNetworkManager::Instance().perform(networkData);
-
- mySidChecked = true;
- if (!error.empty()) {
- mySidUserNameOption.setValue("");
- mySidOption.setValue("");
- return error;
- }
- mySidOption.setValue(newSid);
- mySidUserNameOption.setValue(login);
- return "";
-}
-
-bool LitResAuthenticationManager::passwordRecoverySupported() {
- return true;
-}
-
-std::string LitResAuthenticationManager::recoverPassword(const std::string &email) {
- std::string url = Link.url(NetworkLink::URL_RECOVER_PASSWORD);
- ZLNetworkUtil::appendParameter(url, "mail", email);
-
- shared_ptr<ZLNetworkRequest> networkData =
- ZLNetworkManager::Instance().createXMLParserRequest(
- url, new LitResPasswordRecoveryDataParser()
- );
- return ZLNetworkManager::Instance().perform(networkData);
-}
-
-class LitResReloadPurchasedBooksScope : public ZLUserData {
-public:
- std::set<std::string> purchasedBooksIds;
- NetworkItem::List purchasedBooksList;
- shared_ptr<ZLNetworkRequest::Listener> Listener;
-};
-
-std::string LitResAuthenticationManager::reloadPurchasedBooks(shared_ptr<ZLNetworkRequest::Listener> listener) {
- const std::string &sid = mySidOption.value();
- std::string error;
- if (sid.empty()) {
- error = NetworkErrors::errorMessage(NetworkErrors::ERROR_AUTHENTICATION_FAILED);
- listener->finished(error);
- return error;
- }
- if (sid != myInitializedDataSid) {
- mySidChecked = true;
- mySidUserNameOption.setValue("");
- mySidOption.setValue("");
- error = NetworkErrors::errorMessage(NetworkErrors::ERROR_AUTHENTICATION_FAILED);
- listener->finished(error);
- return error;
- }
-
- LitResReloadPurchasedBooksScope *scope = new LitResReloadPurchasedBooksScope;
- shared_ptr<ZLNetworkRequest> networkData = loadPurchasedBooks(scope->purchasedBooksIds, scope->purchasedBooksList);
- scope->Listener = listener;
-
- networkData->setListener(ZLExecutionUtil::createListener(scope, this, &LitResAuthenticationManager::onBooksReloaded));
- return ZLNetworkManager::Instance().performAsync(networkData);
-}
-
-void LitResAuthenticationManager::onBooksReloaded(ZLUserDataHolder &data, const std::string &error) {
- LitResReloadPurchasedBooksScope &scope = static_cast<LitResReloadPurchasedBooksScope&>(*data.getUserData("scope"));
- shared_ptr<ZLNetworkRequest::Listener> listener = scope.Listener;
- if (!error.empty()) {
- if (error == NetworkErrors::errorMessage(NetworkErrors::ERROR_AUTHENTICATION_FAILED)) {
- logOut(); //should it logOut in this case?
- }
- listener->finished(error);
- return;
- }
- loadPurchasedBooksOnSuccess(scope.purchasedBooksIds, scope.purchasedBooksList);
- myPurchasedBooksIds = scope.purchasedBooksIds;
- myPurchasedBooksList = scope.purchasedBooksList;
- listener->finished(std::string());
-}
-
diff --git a/fbreader/src/network/authentication/litres/LitResAuthenticationManager.h b/fbreader/src/network/authentication/litres/LitResAuthenticationManager.h
deleted file mode 100644
index 6aefa6d..0000000
--- a/fbreader/src/network/authentication/litres/LitResAuthenticationManager.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2009-2012 Geometer Plus <contact@geometerplus.com>
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#ifndef __LITRESAUTHENTICATIONMANAGER_H__
-#define __LITRESAUTHENTICATIONMANAGER_H__
-
-#include <set>
-
-#include <ZLNetworkRequest.h>
-#include <ZLUserData.h>
-
-#include "../NetworkAuthenticationManager.h"
-#include "../../NetworkItems.h"
-
-class LitResAuthenticationManager : public NetworkAuthenticationManager {
-
-public:
- LitResAuthenticationManager(const NetworkLink &link);
-
-public:
- AuthenticationStatus isAuthorised(shared_ptr<ZLNetworkRequest::Listener> listener = 0);
- std::string authorise(const std::string &pwd, shared_ptr<ZLNetworkRequest::Listener> listener);
- void logOut();
- bool skipIPSupported();
-
- const std::string &currentUserName();
- bool needsInitialization();
- std::string initialize(shared_ptr<ZLNetworkRequest::Listener> listener);
- bool needPurchase(const NetworkBookItem &book);
- std::string purchaseBook(const NetworkBookItem &, shared_ptr<ZLNetworkRequest::Listener> listener);
- shared_ptr<BookReference> downloadReference(const NetworkBookItem &book);
-
- std::string topupAccountLink();
- std::string currentAccount();
-
- std::string reloadPurchasedBooks(shared_ptr<ZLNetworkRequest::Listener> listener);
- void collectPurchasedBooks(NetworkItem::List &list);
- const std::set<std::string> &getPurchasedIds() const;
- const NetworkItem::List &purchasedBooks() const;
-
-private:
- void onAuthorised(ZLUserDataHolder &data, const std::string &error);
- void onBookPurchased(ZLUserDataHolder &data, const std::string &error);
- void onBooksLoaded(ZLUserDataHolder &data, const std::string &error);
- void onAccountReceived(ZLUserDataHolder &data, const std::string &error);
- void onBooksReloaded(ZLUserDataHolder &data, const std::string &error);
-
-private:
- shared_ptr<ZLNetworkRequest> loadPurchasedBooks(std::set<std::string> &purchasedBooksIds, NetworkItem::List &purchasedBooksList);
- void loadPurchasedBooksOnError(std::set<std::string> &purchasedBooksIds, NetworkItem::List &purchasedBooksList);
- void loadPurchasedBooksOnSuccess(std::set<std::string> &purchasedBooksIds, NetworkItem::List &purchasedBooksList);
-
- shared_ptr<ZLNetworkRequest> loadAccount(std::string &dummy1);
- void loadAccountOnError();
- void loadAccountOnSuccess();
-
-public: // new User Registration
- bool registrationSupported();
- std::string registerUser(const std::string &login, const std::string &password, const std::string &email);
-
-public: // Password Recovery
- bool passwordRecoverySupported();
- std::string recoverPassword(const std::string &email);
-
-private:
- bool mySidChecked;
-
- ZLStringOption mySidUserNameOption;
- ZLStringOption mySidOption;
-
- std::string myInitializedDataSid;
- std::set<std::string> myPurchasedBooksIds;
- NetworkItem::List myPurchasedBooksList;
- std::string myAccount;
-};
-
-#endif /* __LITRESAUTHENTICATIONMANAGER_H__ */