From 6d4127e2ce3a3078e9d3b27e0bcfcef8802d78ac Mon Sep 17 00:00:00 2001 From: stom79 Date: Sat, 18 Nov 2017 14:10:53 +0100 Subject: [PATCH] Connection issue --- .../activities/BaseLoginActivity.java | 1 - .../mastodon/activities/BaseMainActivity.java | 10 +- .../UpdateAccountInfoAsyncTask.java | 1 - .../mastodon/client/HttpsConnection.java | 137 ++++++++++-------- 4 files changed, 86 insertions(+), 63 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseLoginActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseLoginActivity.java index 282cbe3ca..56919f0eb 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseLoginActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseLoginActivity.java @@ -219,7 +219,6 @@ public abstract class BaseLoginActivity extends AppCompatActivity { resobj = new JSONObject(response); client_id = resobj.get(Helper.CLIENT_ID).toString(); client_secret = resobj.get(Helper.CLIENT_SECRET).toString(); - String id = resobj.get(Helper.ID).toString(); SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedpreferences.edit(); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java index 00166c03a..3eaa42596 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java @@ -40,6 +40,7 @@ import android.support.v7.app.AlertDialog; import android.support.v7.widget.PopupMenu; import android.support.v7.widget.SearchView; import android.support.v7.widget.SwitchCompat; +import android.util.Log; import android.util.Patterns; import android.view.Gravity; import android.view.LayoutInflater; @@ -110,6 +111,7 @@ import static fr.gouv.etalab.mastodon.helper.Helper.NOTIFICATION_INTENT; import static fr.gouv.etalab.mastodon.helper.Helper.PREF_KEY_ID; import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor; import static fr.gouv.etalab.mastodon.helper.Helper.changeUser; +import static fr.gouv.etalab.mastodon.helper.Helper.logout; import static fr.gouv.etalab.mastodon.helper.Helper.menuAccounts; import static fr.gouv.etalab.mastodon.helper.Helper.unCheckAllMenuItems; import static fr.gouv.etalab.mastodon.helper.Helper.updateHeaderAccountInfo; @@ -616,7 +618,13 @@ public abstract class BaseMainActivity extends AppCompatActivity String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); Account account = new AccountDAO(getApplicationContext(), db).getAccountByID(userId); - + if( account == null){ + Helper.logout(getApplicationContext()); + Intent myIntent = new Intent(BaseMainActivity.this, LoginActivity.class); + startActivity(myIntent); + finish(); + return; + } //Image loader configuration imageLoader = ImageLoader.getInstance(); File cacheDir = new File(getCacheDir(), getString(R.string.app_name)); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoAsyncTask.java b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoAsyncTask.java index 913057724..fec78a45b 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoAsyncTask.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoAsyncTask.java @@ -55,7 +55,6 @@ public class UpdateAccountInfoAsyncTask extends AsyncTask { token = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null); } account.setToken(token); - //TODO: remove this static value to allow other instances account.setInstance(instance); SQLiteDatabase db = Sqlite.getInstance(this.contextReference.get(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); boolean userExists = new AccountDAO(this.contextReference.get(), db).userExist(account); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/HttpsConnection.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/HttpsConnection.java index 276c61c96..cc35f1e6d 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/HttpsConnection.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/HttpsConnection.java @@ -16,6 +16,7 @@ package fr.gouv.etalab.mastodon.client; import android.content.Context; import android.content.SharedPreferences; import android.os.Build; + import org.json.JSONObject; import java.io.BufferedInputStream; import java.io.BufferedReader; @@ -60,7 +61,6 @@ public class HttpsConnection { private HttpsURLConnection httpsURLConnection; private String since_id, max_id; - private int actionCode; private Context context; @@ -73,12 +73,15 @@ public class HttpsConnection { @SuppressWarnings("ConstantConditions") public String get(String urlConnection, int timeout, HashMap paramaters, String token) throws IOException, NoSuchAlgorithmException, KeyManagementException, HttpsConnectionException { + Map params = new LinkedHashMap<>(); - Iterator it = paramaters.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry)it.next(); - params.put(pair.getKey().toString(), pair.getValue()); - it.remove(); + if( paramaters != null) { + Iterator it = paramaters.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry) it.next(); + params.put(pair.getKey().toString(), pair.getValue()); + it.remove(); + } } StringBuilder postData = new StringBuilder(); for (Map.Entry param : params.entrySet()) { @@ -90,18 +93,18 @@ public class HttpsConnection { URL url = new URL(urlConnection + "?" + postData); httpsURLConnection = (HttpsURLConnection)url.openConnection(); httpsURLConnection.setConnectTimeout(timeout * 1000); + httpsURLConnection.setRequestProperty("http.keepAlive", "false"); if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory()); if( token != null) httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token); httpsURLConnection.setRequestMethod("GET"); - getSinceMaxId(); - actionCode = httpsURLConnection.getResponseCode(); - if (actionCode >= 200 && actionCode < 400) { + if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) { Reader in = new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream(), "UTF-8")); StringBuilder sb = new StringBuilder(); for (int c; (c = in.read()) >= 0; ) sb.append((char) c); + getSinceMaxId(); httpsURLConnection.disconnect(); in.close(); return sb.toString(); @@ -110,7 +113,8 @@ public class HttpsConnection { StringBuilder sb = new StringBuilder(); for (int c; (c = in.read()) >= 0; ) sb.append((char) c); - throw new HttpsConnectionException(actionCode, sb.toString()); + httpsURLConnection.disconnect(); + throw new HttpsConnectionException(httpsURLConnection.getResponseCode(), sb.toString()); } } @@ -119,11 +123,13 @@ public class HttpsConnection { public String post(String urlConnection, int timeout, HashMap paramaters, String token) throws IOException, NoSuchAlgorithmException, KeyManagementException, HttpsConnectionException { URL url = new URL(urlConnection); Map params = new LinkedHashMap<>(); - Iterator it = paramaters.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry)it.next(); - params.put(pair.getKey().toString(), pair.getValue()); - it.remove(); + if( paramaters != null) { + Iterator it = paramaters.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry) it.next(); + params.put(pair.getKey().toString(), pair.getValue()); + it.remove(); + } } StringBuilder postData = new StringBuilder(); for (Map.Entry param : params.entrySet()) { @@ -136,6 +142,7 @@ public class HttpsConnection { httpsURLConnection = (HttpsURLConnection)url.openConnection(); httpsURLConnection.setConnectTimeout(timeout * 1000); + httpsURLConnection.setDoOutput(true); if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory()); httpsURLConnection.setRequestMethod("POST"); @@ -143,25 +150,17 @@ public class HttpsConnection { httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token); httpsURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); httpsURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); - actionCode = httpsURLConnection.getResponseCode(); + + + httpsURLConnection.getOutputStream().write(postDataBytes); + Reader in = new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream(), "UTF-8")); + StringBuilder sb = new StringBuilder(); + for (int c; (c = in.read()) >= 0;) + sb.append((char)c); getSinceMaxId(); - httpsURLConnection.setDoOutput(true); - if (actionCode >= 200 && actionCode < 400) { - httpsURLConnection.getOutputStream().write(postDataBytes); - Reader in = new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream(), "UTF-8")); - StringBuilder sb = new StringBuilder(); - for (int c; (c = in.read()) >= 0;) - sb.append((char)c); - httpsURLConnection.disconnect(); - in.close(); - return sb.toString(); - }else { - Reader in = new BufferedReader(new InputStreamReader(httpsURLConnection.getErrorStream(), "UTF-8")); - StringBuilder sb = new StringBuilder(); - for (int c; (c = in.read()) >= 0; ) - sb.append((char) c); - throw new HttpsConnectionException(actionCode, sb.toString()); - } + httpsURLConnection.disconnect(); + in.close(); + return sb.toString(); } @@ -218,6 +217,7 @@ public class HttpsConnection { } catch (IOException e) { Error error = new Error(); error.setError(context.getString(R.string.toast_error)); + httpsURLConnection.disconnect(); e.printStackTrace(); } @@ -319,11 +319,13 @@ public class HttpsConnection { String response = stringBuilder.toString(); Attachment attachment = API.parseAttachmentResponse(new JSONObject(response)); + httpsURLConnection.disconnect(); listener.onRetrieveAttachment(attachment, null); }catch (Exception e) { listener.onUpdateProgress(101); Error error = new Error(); error.setError(e.getMessage()); + httpsURLConnection.disconnect(); listener.onRetrieveAttachment(null, error); } } @@ -335,11 +337,13 @@ public class HttpsConnection { public String put(String urlConnection, int timeout, HashMap paramaters, String token) throws IOException, NoSuchAlgorithmException, KeyManagementException, HttpsConnectionException { URL url = new URL(urlConnection); Map params = new LinkedHashMap<>(); - Iterator it = paramaters.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry)it.next(); - params.put(pair.getKey().toString(), pair.getValue()); - it.remove(); + if( paramaters != null) { + Iterator it = paramaters.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry) it.next(); + params.put(pair.getKey().toString(), pair.getValue()); + it.remove(); + } } StringBuilder postData = new StringBuilder(); for (Map.Entry param : params.entrySet()) { @@ -357,18 +361,19 @@ public class HttpsConnection { if( token != null) httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token); httpsURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); - getSinceMaxId(); + httpsURLConnection.setRequestMethod("PUT"); httpsURLConnection.setDoInput(true); httpsURLConnection.setDoOutput(true); - actionCode = httpsURLConnection.getResponseCode(); - if (actionCode >= 200 && actionCode < 400) { + + if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) { DataOutputStream dataOutputStream = new DataOutputStream(httpsURLConnection.getOutputStream()); dataOutputStream.write(postDataBytes); Reader in = new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream(), "UTF-8")); StringBuilder sb = new StringBuilder(); for (int c; (c = in.read()) >= 0;) sb.append((char)c); + getSinceMaxId(); httpsURLConnection.disconnect(); in.close(); return sb.toString(); @@ -377,7 +382,8 @@ public class HttpsConnection { StringBuilder sb = new StringBuilder(); for (int c; (c = in.read()) >= 0; ) sb.append((char) c); - throw new HttpsConnectionException(actionCode, sb.toString()); + httpsURLConnection.disconnect(); + throw new HttpsConnectionException(httpsURLConnection.getResponseCode(), sb.toString()); } } @@ -387,11 +393,13 @@ public class HttpsConnection { public String patch(String urlConnection, int timeout, HashMap paramaters, String token) throws IOException, NoSuchAlgorithmException, KeyManagementException, HttpsConnectionException { URL url = new URL(urlConnection); Map params = new LinkedHashMap<>(); - Iterator it = paramaters.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry)it.next(); - params.put(pair.getKey().toString(), pair.getValue()); - it.remove(); + if( paramaters != null) { + Iterator it = paramaters.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry) it.next(); + params.put(pair.getKey().toString(), pair.getValue()); + it.remove(); + } } StringBuilder postData = new StringBuilder(); for (Map.Entry param : params.entrySet()) { @@ -413,8 +421,8 @@ public class HttpsConnection { httpsURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); httpsURLConnection.setDoOutput(true); getSinceMaxId(); - actionCode = httpsURLConnection.getResponseCode(); - if (actionCode >= 200 && actionCode < 400) { + + if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) { httpsURLConnection.getOutputStream().write(postDataBytes); Reader in = new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream(), "UTF-8")); StringBuilder sb = new StringBuilder(); @@ -428,7 +436,8 @@ public class HttpsConnection { StringBuilder sb = new StringBuilder(); for (int c; (c = in.read()) >= 0; ) sb.append((char) c); - throw new HttpsConnectionException(actionCode, sb.toString()); + httpsURLConnection.disconnect(); + throw new HttpsConnectionException(httpsURLConnection.getResponseCode(), sb.toString()); } } @@ -437,11 +446,13 @@ public class HttpsConnection { public int delete(String urlConnection, int timeout, HashMap paramaters, String token) throws IOException, NoSuchAlgorithmException, KeyManagementException, HttpsConnectionException { URL url = new URL(urlConnection); Map params = new LinkedHashMap<>(); - Iterator it = paramaters.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry)it.next(); - params.put(pair.getKey().toString(), pair.getValue()); - it.remove(); + if( paramaters != null) { + Iterator it = paramaters.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry) it.next(); + params.put(pair.getKey().toString(), pair.getValue()); + it.remove(); + } } StringBuilder postData = new StringBuilder(); for (Map.Entry param : params.entrySet()) { @@ -462,16 +473,17 @@ public class HttpsConnection { httpsURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); httpsURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); httpsURLConnection.setRequestMethod("DELETE"); - actionCode = httpsURLConnection.getResponseCode(); - if (actionCode >= 200 && actionCode < 400) { + + if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) { httpsURLConnection.disconnect(); - return actionCode; + return httpsURLConnection.getResponseCode(); }else { Reader in = new BufferedReader(new InputStreamReader(httpsURLConnection.getErrorStream(), "UTF-8")); StringBuilder sb = new StringBuilder(); for (int c; (c = in.read()) >= 0; ) sb.append((char) c); - throw new HttpsConnectionException(actionCode, sb.toString()); + httpsURLConnection.disconnect(); + throw new HttpsConnectionException(httpsURLConnection.getResponseCode(), sb.toString()); } } @@ -506,7 +518,12 @@ public class HttpsConnection { } public int getActionCode() { - return actionCode; + try { + return httpsURLConnection.getResponseCode(); + } catch (IOException e) { + e.printStackTrace(); + return -1; + } } public class HttpsConnectionException extends Exception {