From cd802fbccfc98fa88c6f215409fcaaaa78652c02 Mon Sep 17 00:00:00 2001 From: Felix Prahl-Kamps Date: Tue, 16 Jul 2019 15:25:28 +0200 Subject: [PATCH] roles will be saved on device roles get updated on login and profile update --- .../mispbump/activities/LoginActivity.java | 31 +++++++--- .../mispbump/activities/ProfileActivity.java | 18 ++++-- .../mispbump/auxiliary/PreferenceManager.java | 60 ++++++++++++------- 3 files changed, 74 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/lu/circl/mispbump/activities/LoginActivity.java b/app/src/main/java/lu/circl/mispbump/activities/LoginActivity.java index 0ad59a1..27333a2 100644 --- a/app/src/main/java/lu/circl/mispbump/activities/LoginActivity.java +++ b/app/src/main/java/lu/circl/mispbump/activities/LoginActivity.java @@ -3,13 +3,6 @@ package lu.circl.mispbump.activities; import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import androidx.constraintlayout.widget.ConstraintLayout; -import com.google.android.material.snackbar.Snackbar; -import com.google.android.material.textfield.TextInputLayout; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; - import android.text.TextUtils; import android.view.Menu; import android.view.MenuItem; @@ -17,13 +10,22 @@ import android.view.View; import android.widget.Button; import android.widget.ProgressBar; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputLayout; + import java.util.Objects; import lu.circl.mispbump.R; import lu.circl.mispbump.auxiliary.DialogManager; -import lu.circl.mispbump.auxiliary.PreferenceManager; import lu.circl.mispbump.auxiliary.MispRestClient; +import lu.circl.mispbump.auxiliary.PreferenceManager; import lu.circl.mispbump.models.restModels.Organisation; +import lu.circl.mispbump.models.restModels.Role; import lu.circl.mispbump.models.restModels.User; /** @@ -126,6 +128,19 @@ public class LoginActivity extends AppCompatActivity { mispRestClient.isAvailable(new MispRestClient.AvailableCallback() { @Override public void available() { + mispRestClient.getRoles(new MispRestClient.AllRolesCallback() { + @Override + public void success(Role[] roles) { + preferenceManager.setRoles(roles); + } + + @Override + public void failure(String error) { + // TODO what to do if an error occures? + Snackbar.make(constraintLayout, error, Snackbar.LENGTH_LONG).show(); + } + }); + mispRestClient.getMyUser(new MispRestClient.UserCallback() { @Override public void success(final User user) { diff --git a/app/src/main/java/lu/circl/mispbump/activities/ProfileActivity.java b/app/src/main/java/lu/circl/mispbump/activities/ProfileActivity.java index 2543a37..ab4eeeb 100644 --- a/app/src/main/java/lu/circl/mispbump/activities/ProfileActivity.java +++ b/app/src/main/java/lu/circl/mispbump/activities/ProfileActivity.java @@ -29,6 +29,7 @@ import lu.circl.mispbump.auxiliary.PreferenceManager; import lu.circl.mispbump.auxiliary.TileDrawable; import lu.circl.mispbump.customViews.MaterialPreferenceText; import lu.circl.mispbump.models.restModels.Organisation; +import lu.circl.mispbump.models.restModels.Role; import lu.circl.mispbump.models.restModels.User; import lu.circl.mispbump.security.KeyStoreWrapper; @@ -131,14 +132,22 @@ public class ProfileActivity extends AppCompatActivity { } public void updateProfile() { -// progressBar.setVisibility(View.VISIBLE); + mispRestClient.getRoles(new MispRestClient.AllRolesCallback() { + @Override + public void success(Role[] roles) { + preferenceManager.setRoles(roles); + } + + @Override + public void failure(String error) { + Snackbar.make(rootLayout, error, Snackbar.LENGTH_LONG).show(); + } + }); mispRestClient.getMyUser(new MispRestClient.UserCallback() { @Override public void success(final User user) { - preferenceManager.setUserInfo(user); - mispRestClient.getOrganisation(user.org_id, new MispRestClient.OrganisationCallback() { @Override public void success(Organisation organisation) { @@ -178,8 +187,7 @@ public class ProfileActivity extends AppCompatActivity { builder.setPositiveButton("Delete & Logout", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - PreferenceManager prefs = PreferenceManager.getInstance(ProfileActivity.this); - prefs.clearAllData(); + preferenceManager.clearAllData(); KeyStoreWrapper.deleteAllStoredKeys(); Intent login = new Intent(getApplicationContext(), LoginActivity.class); diff --git a/app/src/main/java/lu/circl/mispbump/auxiliary/PreferenceManager.java b/app/src/main/java/lu/circl/mispbump/auxiliary/PreferenceManager.java index 65f4541..6bae605 100644 --- a/app/src/main/java/lu/circl/mispbump/auxiliary/PreferenceManager.java +++ b/app/src/main/java/lu/circl/mispbump/auxiliary/PreferenceManager.java @@ -2,7 +2,6 @@ package lu.circl.mispbump.auxiliary; import android.content.Context; import android.content.SharedPreferences; -import android.util.Log; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; @@ -21,16 +20,14 @@ import javax.crypto.NoSuchPaddingException; import lu.circl.mispbump.models.UploadInformation; import lu.circl.mispbump.models.restModels.Organisation; +import lu.circl.mispbump.models.restModels.Role; import lu.circl.mispbump.models.restModels.User; import lu.circl.mispbump.security.KeyStoreWrapper; public class PreferenceManager { - private static final String TAG = "PreferenceManager"; - private static final String PREFERENCES_FILE = "user_settings"; - private static final String SAVE_CREDENTIALS = "save_credentials"; private static final String SERVER_URL = "server_url"; private static final String AUTOMATION_KEY = "user_automation"; @@ -39,6 +36,8 @@ public class PreferenceManager { private static final String UPLOAD_INFO = "upload_info"; + private static final String MISP_ROLES = "misp_roles"; + private SharedPreferences preferences; private static PreferenceManager instance; @@ -61,6 +60,36 @@ public class PreferenceManager { } + /** + * Save downloaded MISP roles on device. + * @param roles {@link Role} + */ + public void setRoles(Role[] roles) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putString(MISP_ROLES, new Gson().toJson(roles)); + editor.apply(); + } + + /** + * Gets downloaded and saved MISP roles if available. + *

+ * Roles are downloaded on login and updated with each profile update. + * + * @return {@link Role}[] or null + */ + public Role[] getRoles() { + Type type = new TypeToken() {}.getType(); + String rolesString = preferences.getString(MISP_ROLES, ""); + + assert rolesString != null; + if (rolesString.isEmpty()) { + return null; + } else { + return new Gson().fromJson(rolesString, type); + } + } + + /** * Saves user infos from "users/view/me" (encrypted) * @@ -430,26 +459,13 @@ public class PreferenceManager { } - /** - * Set if credentials (authkey & server url) should be saved locally. - * - * @param save enable or disable - * @deprecated currently not used because automation key is needed to do requests to your misp instance. - * If this should be an option in future: misp automation key would be needed on each sync process. - */ - public void setSaveCredentials(boolean save) { - SharedPreferences.Editor editor = preferences.edit(); - editor.putBoolean(SAVE_CREDENTIALS, save); - editor.apply(); - } - - public boolean getSaveCredentials() { - return preferences.getBoolean(SAVE_CREDENTIALS, false); - } - - public void clearAllData() { SharedPreferences.Editor editor = preferences.edit(); + + clearServerUrl(); + clearAutomationKey(); + clearUploadInformation(); + editor.clear(); editor.apply(); }