mirror of https://github.com/MISP/misp-bump
roles will be saved on device
roles get updated on login and profile updatepull/5/head
parent
55713e8a99
commit
cd802fbccf
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue