1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-06 03:50:19 +02:00

litres: POST instead of GET

This commit is contained in:
Nikolay Pultsin 2011-04-27 10:20:21 +01:00
parent 58ca56fafc
commit 910c7cac15
7 changed files with 81 additions and 40 deletions

View file

@ -142,7 +142,9 @@ abstract class Util implements UserRegistrationConstants {
if (mgr.needsInitialization()) {
mgr.initialize();
}
onSuccess.run();
if (onSuccess != null) {
onSuccess.run();
}
} catch (ZLNetworkException e) {
mgr.logOut();
runAuthenticationDialog(activity, link, e.getMessage(), onSuccess);

View file

@ -35,7 +35,7 @@ public abstract class NetworkAuthenticationManager {
NetworkAuthenticationManager mgr = ourManagers.get(link.getSiteName());
if (mgr == null) {
if (managerClass == LitResAuthenticationManager.class) {
mgr = new LitResAuthenticationManager(link, sslCertificate);
mgr = new LitResAuthenticationManager(link);
}
if (mgr != null) {
ourManagers.put(link.getSiteName(), mgr);

View file

@ -40,10 +40,11 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
private String myInitializedDataSid;
private String myAccount;
private final HashMap<String, NetworkBookItem> myPurchasedBooks = new HashMap<String, NetworkBookItem>();
private final Map<String,NetworkBookItem> myPurchasedBooks =
new LinkedHashMap<String,NetworkBookItem>();
public LitResAuthenticationManager(INetworkLink link, String sslCertificate) {
super(link, sslCertificate);
public LitResAuthenticationManager(INetworkLink link) {
super(link, null);
mySidUserNameOption = new ZLStringOption(link.getSiteName(), "sidUserName", "");
mySidOption = new ZLStringOption(link.getSiteName(), "sid", "");
myUserIdOption = new ZLStringOption(link.getSiteName(), "userId", "");
@ -94,13 +95,14 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
if (url == null) {
throw new ZLNetworkException(NetworkException.ERROR_UNSUPPORTED_OPERATION);
}
url = ZLNetworkUtil.appendParameter(url, "sid", sid);
final LitResLoginXMLReader xmlReader = new LitResLoginXMLReader(Link.getSiteName());
ZLNetworkException exception = null;
try {
ZLNetworkManager.Instance().perform(new LitResNetworkRequest(url, SSLCertificate, xmlReader));
final LitResNetworkRequest request = new LitResNetworkRequest(url, xmlReader);
request.addPostParameter("sid", sid);
ZLNetworkManager.Instance().perform(request);
} catch (ZLNetworkException e) {
exception = e;
}
@ -128,14 +130,15 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
synchronized (this) {
login = UserNameOption.getValue();
}
url = ZLNetworkUtil.appendParameter(url, "login", login);
url = ZLNetworkUtil.appendParameter(url, "pwd", password);
final LitResLoginXMLReader xmlReader = new LitResLoginXMLReader(Link.getSiteName());
ZLNetworkException exception = null;
try {
ZLNetworkManager.Instance().perform(new LitResNetworkRequest(url, SSLCertificate, xmlReader));
final LitResNetworkRequest request = new LitResNetworkRequest(url, xmlReader);
request.addPostParameter("login", login);
request.addPostParameter("pwd", password);
ZLNetworkManager.Instance().perform(request);
} catch (ZLNetworkException e) {
exception = e;
}
@ -196,17 +199,18 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
throw new ZLNetworkException(NetworkException.ERROR_AUTHENTICATION_FAILED);
}
BookUrlInfo reference = book.reference(UrlInfo.Type.BookBuy);
final BookUrlInfo reference = book.reference(UrlInfo.Type.BookBuy);
if (reference == null) {
throw new ZLNetworkException(NetworkException.ERROR_BOOK_NOT_PURCHASED); // TODO: more correct error message???
}
final String query = ZLNetworkUtil.appendParameter(reference.Url, "sid", sid);
final LitResPurchaseXMLReader xmlReader = new LitResPurchaseXMLReader(Link.getSiteName());
ZLNetworkException exception = null;
try {
ZLNetworkManager.Instance().perform(new LitResNetworkRequest(query, SSLCertificate, xmlReader));
final LitResNetworkRequest request = new LitResNetworkRequest(reference.Url, xmlReader);
request.addPostParameter("sid", sid);
ZLNetworkManager.Instance().perform(request);
} catch (ZLNetworkException e) {
exception = e;
}
@ -343,16 +347,15 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
private LitResNetworkRequest loadPurchasedBooks() {
final String sid = mySidOption.getValue();
final String query = "pages/catalit_browser/";
String query = "pages/catalit_browser/";
query = ZLNetworkUtil.appendParameter(query, "my", "1");
query = ZLNetworkUtil.appendParameter(query, "sid", sid);
return new LitResNetworkRequest(
final LitResNetworkRequest request = new LitResNetworkRequest(
LitResUtil.url(Link, query),
SSLCertificate,
new LitResXMLReader(Link, new LinkedList<NetworkItem>())
);
request.addPostParameter("my", "1");
request.addPostParameter("sid", sid);
return request;
}
private void loadPurchasedBooksOnError() {
@ -362,7 +365,7 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
private void loadPurchasedBooksOnSuccess(LitResNetworkRequest purchasedBooksRequest) {
LitResXMLReader reader = (LitResXMLReader)purchasedBooksRequest.Reader;
myPurchasedBooks.clear();
for (NetworkItem item: reader.Books) {
for (NetworkItem item : reader.Books) {
if (item instanceof NetworkBookItem) {
NetworkBookItem book = (NetworkBookItem)item;
myPurchasedBooks.put(book.Id, book);
@ -372,16 +375,15 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
private LitResNetworkRequest loadAccount() {
final String sid = mySidOption.getValue();
final String query = "pages/purchase_book/";
String query = "pages/purchase_book/";
query = ZLNetworkUtil.appendParameter(query, "sid", sid);
query = ZLNetworkUtil.appendParameter(query, "art", "0");
return new LitResNetworkRequest(
final LitResNetworkRequest request = new LitResNetworkRequest(
LitResUtil.url(Link, query),
SSLCertificate,
new LitResPurchaseXMLReader(Link.getSiteName())
);
request.addPostParameter("sid", sid);
request.addPostParameter("art", "0");
return request;
}
private void loadAccountOnError() {
@ -400,13 +402,14 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
@Override
public void recoverPassword(String email) throws ZLNetworkException {
String url = Link.getUrl(UrlInfo.Type.RecoverPassword);
final String url = Link.getUrl(UrlInfo.Type.RecoverPassword);
if (url == null) {
throw new ZLNetworkException(NetworkException.ERROR_UNSUPPORTED_OPERATION);
}
url = ZLNetworkUtil.appendParameter(url, "mail", email);
final LitResPasswordRecoveryXMLReader xmlReader = new LitResPasswordRecoveryXMLReader(Link.getSiteName());
ZLNetworkManager.Instance().perform(new LitResNetworkRequest(url, SSLCertificate, xmlReader));
final LitResNetworkRequest request = new LitResNetworkRequest(url, xmlReader);
request.addPostParameter("mail", email);
ZLNetworkManager.Instance().perform(request);
}
@Override

View file

@ -195,7 +195,7 @@ public class LitResBookshelfItem extends NetworkURLCatalogItem {
listener.onNewItem(Link, item);
}
} else {
//listener.onNewItem(Link, new ByDateCatalogItem(this, children));
listener.onNewItem(Link, new ByDateCatalogItem(this, children));
listener.onNewItem(Link, new ByAuthorCatalogItem(this, children));
listener.onNewItem(Link, new ByTitleCatalogItem(this, children));
final BySeriesCatalogItem bySeries = new BySeriesCatalogItem(this, children);

View file

@ -19,6 +19,8 @@
package org.geometerplus.fbreader.network.authentication.litres;
import java.util.*;
import java.io.InputStream;
import java.io.IOException;
@ -28,8 +30,22 @@ import org.geometerplus.zlibrary.core.network.ZLNetworkRequest;
public class LitResNetworkRequest extends ZLNetworkRequest {
public final LitResAuthenticationXMLReader Reader;
public LitResNetworkRequest(String url, String sslCertificate, LitResAuthenticationXMLReader reader) {
super(url, sslCertificate, null);
static String clean(String url) {
final int index = url.indexOf('?');
return index != -1 ? url.substring(0, index) : url;
}
public LitResNetworkRequest(String url, LitResAuthenticationXMLReader reader) {
super(clean(url), null, null);
final int index = url.indexOf('?');
if (index != -1) {
for (String param : url.substring(index + 1).split("&")) {
String[] pp = param.split("=");
if (pp.length == 2) {
addPostParameter(pp[0], pp[1]);
}
}
}
Reader = reader;
}

View file

@ -30,10 +30,12 @@ import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.client.CookieStore;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.*;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.*;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.BasicHttpContext;
@ -140,9 +142,20 @@ public class ZLNetworkManager {
try {
request.doBefore();
httpClient = new DefaultHttpClient();
final HttpGet getRequest = new HttpGet(request.URL);
setCommonHTTPOptions(getRequest);
httpClient.setCredentialsProvider(new MyCredentialsProvider(getRequest));
final HttpRequestBase httpRequest;
if (request.PostData != null) {
httpRequest = new HttpPost(request.URL);
// TODO: implement
} else if (!request.PostParameters.isEmpty()) {
httpRequest = new HttpPost(request.URL);
final List<BasicNameValuePair> list =
new ArrayList<BasicNameValuePair>(request.PostParameters.size());
((HttpPost)httpRequest).setEntity(new UrlEncodedFormEntity(list, "utf-8"));
} else {
httpRequest = new HttpGet(request.URL);
}
setCommonHTTPOptions(httpRequest);
httpClient.setCredentialsProvider(new MyCredentialsProvider(httpRequest));
/*
if (request.PostData != null) {
httpConnection.setRequestMethod("POST");
@ -169,7 +182,7 @@ public class ZLNetworkManager {
*/
HttpResponse response = null;
for (int retryCounter = 0; retryCounter < 3 && entity == null; ++retryCounter) {
response = httpClient.execute(getRequest, myHttpContext);
response = httpClient.execute(httpRequest, myHttpContext);
entity = response.getEntity();
}
final int responseCode = response.getStatusLine().getStatusCode();

View file

@ -19,6 +19,8 @@
package org.geometerplus.zlibrary.core.network;
import java.util.Map;
import java.util.HashMap;
import java.io.InputStream;
import java.io.IOException;
import java.net.URLConnection;
@ -27,21 +29,26 @@ public abstract class ZLNetworkRequest {
String URL;
public final String SSLCertificate;
public final String PostData;
public final Map<String,String> PostParameters = new HashMap<String,String>();
protected ZLNetworkRequest(String url) {
this(url, null, null);
}
public String getURL() {
return URL;
}
protected ZLNetworkRequest(String url, String sslCertificate, String postData) {
URL = url;
SSLCertificate = sslCertificate;
PostData = postData;
}
public void addPostParameter(String name, String value) {
PostParameters.put(name, value);
}
public String getURL() {
return URL;
}
public void doBefore() throws ZLNetworkException {
}