From eefe1edc3b8cd924d0892a2d1aa53e3ce21ec558 Mon Sep 17 00:00:00 2001 From: stom79 Date: Sat, 5 Jan 2019 12:17:38 +0100 Subject: Prepares db for storing information for refreshing the token #699 --- .../etalab/mastodon/activities/LoginActivity.java | 10 ++++++-- .../asynctasks/UpdateAccountInfoAsyncTask.java | 10 ++++++-- .../etalab/mastodon/client/Entities/Account.java | 27 ++++++++++++++++++++++ .../fr/gouv/etalab/mastodon/sqlite/AccountDAO.java | 12 ++++++++++ .../fr/gouv/etalab/mastodon/sqlite/Sqlite.java | 10 +++++++- 5 files changed, 64 insertions(+), 5 deletions(-) (limited to 'app/src/main/java/fr/gouv/etalab/mastodon') diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/LoginActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/LoginActivity.java index 71d170f76..38976996b 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/LoginActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/LoginActivity.java @@ -120,12 +120,15 @@ public class LoginActivity extends BaseActivity { try { resobj = new JSONObject(response); String token = resobj.get("access_token").toString(); + String refresh_token = null; + if( resobj.has("refresh_token")) + refresh_token = resobj.get("access_token").toString(); SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, token); editor.apply(); //Update the account with the token; - new UpdateAccountInfoAsyncTask(LoginActivity.this, token, instance, peertube_instance.isChecked()?UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE:UpdateAccountInfoAsyncTask.SOCIAL.MASTODON).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + new UpdateAccountInfoAsyncTask(LoginActivity.this, token, client_id, client_secret, refresh_token, instance, peertube_instance.isChecked()?UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE:UpdateAccountInfoAsyncTask.SOCIAL.MASTODON).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } catch (JSONException ignored) {} } catch (Exception ignored) {} }}).start(); @@ -510,12 +513,15 @@ public class LoginActivity extends BaseActivity { try { resobj = new JSONObject(response); String token = resobj.get("access_token").toString(); + String refresh_token = null; + if( resobj.has("refresh_token")) + refresh_token = resobj.get("access_token").toString(); SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, token); editor.apply(); //Update the account with the token; - new UpdateAccountInfoAsyncTask(LoginActivity.this, token, instance, peertube_instance.isChecked()?UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE:UpdateAccountInfoAsyncTask.SOCIAL.MASTODON).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + new UpdateAccountInfoAsyncTask(LoginActivity.this, token, client_id, client_secret, refresh_token, instance, peertube_instance.isChecked()?UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE:UpdateAccountInfoAsyncTask.SOCIAL.MASTODON).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } catch (JSONException ignored) {ignored.printStackTrace();} } }); 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 0a1bf2bbc..bc229298e 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 @@ -40,7 +40,7 @@ import fr.gouv.etalab.mastodon.sqlite.Sqlite; public class UpdateAccountInfoAsyncTask extends AsyncTask { - private String token; + private String token, client_id, client_secret, refresh_token; private String instance; private WeakReference contextReference; private SOCIAL social; @@ -49,11 +49,14 @@ public class UpdateAccountInfoAsyncTask extends AsyncTask { MASTODON, PEERTUBE } - public UpdateAccountInfoAsyncTask(Context context, String token, String instance, SOCIAL social){ + public UpdateAccountInfoAsyncTask(Context context, String token, String client_id, String client_secret, String refresh_token, String instance, SOCIAL social){ this.contextReference = new WeakReference<>(context); this.token = token; this.instance = instance; this.social = social; + this.client_id = client_id; + this.client_secret = client_secret; + this.refresh_token = refresh_token; } @Override @@ -79,6 +82,9 @@ public class UpdateAccountInfoAsyncTask extends AsyncTask { token = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null); } account.setToken(token); + account.setClient_id(client_id); + account.setClient_secret(client_secret); + account.setRefresh_token(refresh_token); 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/Entities/Account.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java index d34c368ba..21ce9150f 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java @@ -106,6 +106,9 @@ public class Account implements Parcelable { private String host; private boolean isBot; private String social; + private String client_id; + private String client_secret; + private String refresh_token; protected Account(Parcel in) { id = in.readString(); @@ -288,6 +291,30 @@ public class Account implements Parcelable { this.uuid = uuid; } + public String getClient_id() { + return client_id; + } + + public void setClient_id(String client_id) { + this.client_id = client_id; + } + + public String getClient_secret() { + return client_secret; + } + + public void setClient_secret(String client_secret) { + this.client_secret = client_secret; + } + + public String getRefresh_token() { + return refresh_token; + } + + public void setRefresh_token(String refresh_token) { + this.refresh_token = refresh_token; + } + public enum followAction{ FOLLOW, diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/AccountDAO.java b/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/AccountDAO.java index 35e91878e..10e70ede6 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/AccountDAO.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/AccountDAO.java @@ -70,6 +70,9 @@ public class AccountDAO { values.put(Sqlite.COL_INSTANCE, account.getInstance()); values.put(Sqlite.COL_EMOJIS, Helper.emojisToStringStorage(account.getEmojis())); values.put(Sqlite.COL_SOCIAL, account.getSocial()); + values.put(Sqlite.COL_CLIENT_ID, account.getClient_id()); + values.put(Sqlite.COL_CLIENT_SECRET, account.getClient_secret()); + values.put(Sqlite.COL_REFRESH_TOKEN, account.getRefresh_token()); if( account.getToken() != null) values.put(Sqlite.COL_OAUTHTOKEN, account.getToken()); @@ -108,6 +111,9 @@ public class AccountDAO { values.put(Sqlite.COL_CREATED_AT, Helper.dateToString(account.getCreated_at())); values.put(Sqlite.COL_INSTANCE, account.getInstance()); values.put(Sqlite.COL_EMOJIS, Helper.emojisToStringStorage(account.getEmojis())); + values.put(Sqlite.COL_CLIENT_ID, account.getClient_id()); + values.put(Sqlite.COL_CLIENT_SECRET, account.getClient_secret()); + values.put(Sqlite.COL_REFRESH_TOKEN, account.getRefresh_token()); if( account.getToken() != null) values.put(Sqlite.COL_OAUTHTOKEN, account.getToken()); @@ -246,6 +252,9 @@ public class AccountDAO { account.setEmojis(Helper.restoreEmojisFromString(c.getString(c.getColumnIndex(Sqlite.COL_EMOJIS)))); account.setToken(c.getString(c.getColumnIndex(Sqlite.COL_OAUTHTOKEN))); account.setSocial(c.getString(c.getColumnIndex(Sqlite.COL_SOCIAL))!=null?c.getString(c.getColumnIndex(Sqlite.COL_SOCIAL)):"MASTODON"); + account.setClient_id(c.getString(c.getColumnIndex(Sqlite.COL_CLIENT_ID))); + account.setClient_secret(c.getString(c.getColumnIndex(Sqlite.COL_CLIENT_SECRET))); + account.setRefresh_token(c.getString(c.getColumnIndex(Sqlite.COL_REFRESH_TOKEN))); //Close the cursor c.close(); @@ -285,6 +294,9 @@ public class AccountDAO { account.setInstance(c.getString(c.getColumnIndex(Sqlite.COL_INSTANCE))); account.setToken(c.getString(c.getColumnIndex(Sqlite.COL_OAUTHTOKEN))); account.setSocial(c.getString(c.getColumnIndex(Sqlite.COL_SOCIAL))!=null?c.getString(c.getColumnIndex(Sqlite.COL_SOCIAL)):"MASTODON"); + account.setClient_id(c.getString(c.getColumnIndex(Sqlite.COL_CLIENT_ID))); + account.setClient_secret(c.getString(c.getColumnIndex(Sqlite.COL_CLIENT_SECRET))); + account.setRefresh_token(c.getString(c.getColumnIndex(Sqlite.COL_REFRESH_TOKEN))); accounts.add(account); } //Close the cursor diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/Sqlite.java b/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/Sqlite.java index a87bba9c4..e5dcbb8e2 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/Sqlite.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/Sqlite.java @@ -26,7 +26,7 @@ import android.database.sqlite.SQLiteOpenHelper; public class Sqlite extends SQLiteOpenHelper { - public static final int DB_VERSION = 23; + public static final int DB_VERSION = 24; public static final String DB_NAME = "mastodon_etalab_db"; public static SQLiteDatabase db; private static Sqlite sInstance; @@ -166,6 +166,9 @@ public class Sqlite extends SQLiteOpenHelper { static final String COL_PINNED = "PINNED"; static final String COL_DATE_BACKUP = "DATE_BACKUP"; static final String COL_CARD = "CARD"; + static final String COL_CLIENT_ID = "CLIENT_ID"; + static final String COL_CLIENT_SECRET = "CLIENT_SECRET"; + static final String COL_REFRESH_TOKEN = "REFRESH_TOKEN"; private final String CREATE_TABLE_STATUSES_CACHE = "CREATE TABLE " + TABLE_STATUSES_CACHE + " (" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " @@ -177,6 +180,7 @@ public class Sqlite extends SQLiteOpenHelper { + COL_REBLOGGED + " INTEGER, " + COL_FAVOURITED + " INTEGER, " + COL_MUTED + " INTEGER, " + COL_SENSITIVE + " INTEGER, " + COL_SPOILER_TEXT + " TEXT, " + COL_VISIBILITY + " TEXT NOT NULL, " + COL_MEDIA_ATTACHMENTS + " TEXT," + COL_CARD + " TEXT," + COL_MENTIONS + " TEXT, " + COL_TAGS + " TEXT, " + COL_APPLICATION + " TEXT," + + COL_CLIENT_ID + " TEXT, " + COL_CLIENT_SECRET + " TEXT, " + COL_REFRESH_TOKEN + " TEXT," + COL_LANGUAGE + " TEXT," + COL_PINNED + " INTEGER)"; private final String CREATE_UNIQUE_CACHE_INDEX = "CREATE UNIQUE INDEX instance_statusid on " @@ -309,6 +313,10 @@ public class Sqlite extends SQLiteOpenHelper { } case 22: db.execSQL("ALTER TABLE " + TABLE_USER_ACCOUNT + " ADD COLUMN " + COL_SOCIAL + " TEXT"); + case 23: + db.execSQL("ALTER TABLE " + TABLE_USER_ACCOUNT + " ADD COLUMN " + COL_CLIENT_ID + " TEXT"); + db.execSQL("ALTER TABLE " + TABLE_USER_ACCOUNT + " ADD COLUMN " + COL_CLIENT_SECRET + " TEXT"); + db.execSQL("ALTER TABLE " + TABLE_USER_ACCOUNT + " ADD COLUMN " + COL_REFRESH_TOKEN + " TEXT"); default: break; } -- cgit v1.2.3