roles will be saved on device

roles get updated on login and profile update
pull/5/head
Felix Prahl-Kamps 2019-07-16 15:25:28 +02:00
parent 55713e8a99
commit cd802fbccf
3 changed files with 74 additions and 35 deletions

View File

@ -3,13 +3,6 @@ package lu.circl.mispbump.activities;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; 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.text.TextUtils;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
@ -17,13 +10,22 @@ import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.ProgressBar; 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 java.util.Objects;
import lu.circl.mispbump.R; import lu.circl.mispbump.R;
import lu.circl.mispbump.auxiliary.DialogManager; import lu.circl.mispbump.auxiliary.DialogManager;
import lu.circl.mispbump.auxiliary.PreferenceManager;
import lu.circl.mispbump.auxiliary.MispRestClient; 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.Organisation;
import lu.circl.mispbump.models.restModels.Role;
import lu.circl.mispbump.models.restModels.User; import lu.circl.mispbump.models.restModels.User;
/** /**
@ -126,6 +128,19 @@ public class LoginActivity extends AppCompatActivity {
mispRestClient.isAvailable(new MispRestClient.AvailableCallback() { mispRestClient.isAvailable(new MispRestClient.AvailableCallback() {
@Override @Override
public void available() { 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() { mispRestClient.getMyUser(new MispRestClient.UserCallback() {
@Override @Override
public void success(final User user) { public void success(final User user) {

View File

@ -29,6 +29,7 @@ import lu.circl.mispbump.auxiliary.PreferenceManager;
import lu.circl.mispbump.auxiliary.TileDrawable; import lu.circl.mispbump.auxiliary.TileDrawable;
import lu.circl.mispbump.customViews.MaterialPreferenceText; import lu.circl.mispbump.customViews.MaterialPreferenceText;
import lu.circl.mispbump.models.restModels.Organisation; 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.models.restModels.User;
import lu.circl.mispbump.security.KeyStoreWrapper; import lu.circl.mispbump.security.KeyStoreWrapper;
@ -131,14 +132,22 @@ public class ProfileActivity extends AppCompatActivity {
} }
public void updateProfile() { 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() { mispRestClient.getMyUser(new MispRestClient.UserCallback() {
@Override @Override
public void success(final User user) { public void success(final User user) {
preferenceManager.setUserInfo(user); preferenceManager.setUserInfo(user);
mispRestClient.getOrganisation(user.org_id, new MispRestClient.OrganisationCallback() { mispRestClient.getOrganisation(user.org_id, new MispRestClient.OrganisationCallback() {
@Override @Override
public void success(Organisation organisation) { public void success(Organisation organisation) {
@ -178,8 +187,7 @@ public class ProfileActivity extends AppCompatActivity {
builder.setPositiveButton("Delete & Logout", new DialogInterface.OnClickListener() { builder.setPositiveButton("Delete & Logout", new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
PreferenceManager prefs = PreferenceManager.getInstance(ProfileActivity.this); preferenceManager.clearAllData();
prefs.clearAllData();
KeyStoreWrapper.deleteAllStoredKeys(); KeyStoreWrapper.deleteAllStoredKeys();
Intent login = new Intent(getApplicationContext(), LoginActivity.class); Intent login = new Intent(getApplicationContext(), LoginActivity.class);

View File

@ -2,7 +2,6 @@ package lu.circl.mispbump.auxiliary;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.util.Log;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken; 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.UploadInformation;
import lu.circl.mispbump.models.restModels.Organisation; 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.models.restModels.User;
import lu.circl.mispbump.security.KeyStoreWrapper; import lu.circl.mispbump.security.KeyStoreWrapper;
public class PreferenceManager { public class PreferenceManager {
private static final String TAG = "PreferenceManager";
private static final String PREFERENCES_FILE = "user_settings"; 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 SERVER_URL = "server_url";
private static final String AUTOMATION_KEY = "user_automation"; 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 UPLOAD_INFO = "upload_info";
private static final String MISP_ROLES = "misp_roles";
private SharedPreferences preferences; private SharedPreferences preferences;
private static PreferenceManager instance; 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.
* <p/>
* Roles are downloaded on login and updated with each profile update.
*
* @return {@link Role}[] or null
*/
public Role[] getRoles() {
Type type = new TypeToken<Role[]>() {}.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) * 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() { public void clearAllData() {
SharedPreferences.Editor editor = preferences.edit(); SharedPreferences.Editor editor = preferences.edit();
clearServerUrl();
clearAutomationKey();
clearUploadInformation();
editor.clear(); editor.clear();
editor.apply(); editor.apply();
} }