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:
parent
58ca56fafc
commit
910c7cac15
7 changed files with 81 additions and 40 deletions
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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 {
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue