diff --git a/src/org/geometerplus/android/fbreader/synchroniser/SynchroniserService.java b/src/org/geometerplus/android/fbreader/synchroniser/SynchroniserService.java index 0e1ebd25f..54fe20840 100644 --- a/src/org/geometerplus/android/fbreader/synchroniser/SynchroniserService.java +++ b/src/org/geometerplus/android/fbreader/synchroniser/SynchroniserService.java @@ -125,13 +125,7 @@ public class SynchroniserService extends Service implements IBookCollection.List @Override public void handleStream(InputStream stream, int length) throws IOException, ZLNetworkException { - final BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); - final StringBuilder buffer = new StringBuilder(); - String line; - while ((line = reader.readLine()) != null) { - buffer.append(line); - } - processResponse(JSONValue.parse(buffer.toString())); + processResponse(JSONValue.parse(new InputStreamReader(stream))); } protected abstract void processResponse(Object response); @@ -144,13 +138,7 @@ public class SynchroniserService extends Service implements IBookCollection.List @Override public void handleStream(InputStream stream, int length) throws IOException, ZLNetworkException { - final BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); - final StringBuilder buffer = new StringBuilder(); - String line; - while ((line = reader.readLine()) != null) { - buffer.append(line); - } - final Object response = JSONValue.parse(buffer.toString()); + final Object response = JSONValue.parse(new InputStreamReader(stream)); String id = null; List hashes = null; String error = null; diff --git a/src/org/geometerplus/zlibrary/core/network/BearerAuthenticationException.java b/src/org/geometerplus/zlibrary/core/network/BearerAuthenticationException.java index 311baeabf..53765af33 100644 --- a/src/org/geometerplus/zlibrary/core/network/BearerAuthenticationException.java +++ b/src/org/geometerplus/zlibrary/core/network/BearerAuthenticationException.java @@ -19,27 +19,21 @@ package org.geometerplus.zlibrary.core.network; +import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; +import org.apache.http.HttpEntity; +import org.json.simple.JSONValue; + class BearerAuthenticationException extends RuntimeException { public final Map Params = new HashMap(); - BearerAuthenticationException(String challenge) { + BearerAuthenticationException(HttpEntity entity) { super("Authentication failed"); - if (challenge != null && "bearer".equalsIgnoreCase(challenge.substring(0, 6))) { - for (String param : challenge.substring(6).split(",")) { - final int index = param.indexOf("="); - if (index != -1) { - final String key = param.substring(0, index).trim(); - String value = param.substring(index + 1).trim(); - final int len = value.length(); - if (len > 1 && value.charAt(0) == '"' && value.charAt(len - 1) == '"') { - value = value.substring(1, len - 1); - } - Params.put(key, value); - } - } + try { + Params.putAll((Map)JSONValue.parse(new InputStreamReader(entity.getContent()))); + } catch (Exception e) { } } } diff --git a/src/org/geometerplus/zlibrary/core/network/ZLNetworkManager.java b/src/org/geometerplus/zlibrary/core/network/ZLNetworkManager.java index 05d527903..85c1a8bba 100644 --- a/src/org/geometerplus/zlibrary/core/network/ZLNetworkManager.java +++ b/src/org/geometerplus/zlibrary/core/network/ZLNetworkManager.java @@ -315,7 +315,7 @@ public class ZLNetworkManager { } catch (AuthenticationException e) { final Header bearerHeader = challenges.get("bearer"); if (bearerHeader != null) { - throw new BearerAuthenticationException(bearerHeader.getValue()); + throw new BearerAuthenticationException(response.getEntity()); } throw e; }