From 125f0b8b9c73827c78ddf99240863d73ed9e7a10 Mon Sep 17 00:00:00 2001 From: Felix Prahl-Kamps Date: Sun, 19 Aug 2018 17:35:20 +0200 Subject: [PATCH] edit upload procedure --- .../wg/its/mispbump/QrSyncActivity.java | 4 - .../wg/its/mispbump/SyncUploadActivity.java | 68 +- .../wg/its/mispbump/network/MispRequest.java | 667 ++++++++++-------- app/src/main/res/layout/activity_upload.xml | 62 +- 4 files changed, 459 insertions(+), 342 deletions(-) diff --git a/app/src/main/java/de/overview/wg/its/mispbump/QrSyncActivity.java b/app/src/main/java/de/overview/wg/its/mispbump/QrSyncActivity.java index 3dbf334..446199c 100644 --- a/app/src/main/java/de/overview/wg/its/mispbump/QrSyncActivity.java +++ b/app/src/main/java/de/overview/wg/its/mispbump/QrSyncActivity.java @@ -213,11 +213,7 @@ public class QrSyncActivity extends AppCompatActivity implements View.OnClickLis syncInformationReceivedDialog(new SyncInformationQr(cryptography.decrypt(qrData))); } catch (JSONException e) { - - Log.e("MISP_LOG", "onReadQrCode: ", e); - notExpectedFormatDialog(); - } break; diff --git a/app/src/main/java/de/overview/wg/its/mispbump/SyncUploadActivity.java b/app/src/main/java/de/overview/wg/its/mispbump/SyncUploadActivity.java index ded9b1e..272c19e 100644 --- a/app/src/main/java/de/overview/wg/its/mispbump/SyncUploadActivity.java +++ b/app/src/main/java/de/overview/wg/its/mispbump/SyncUploadActivity.java @@ -203,15 +203,15 @@ public class SyncUploadActivity extends AppCompatActivity implements View.OnClic boolean errorFound = false; - for (int i = 0; i < uploadStates.length; i++) { + for(UploadState state : uploadStates) { - if (!errorFound && uploadStates[i].getCurrentState() == UploadState.State.ERROR) { + if (!errorFound && state.getCurrentState() == UploadState.State.ERROR) { errorFound = true; continue; } if (errorFound) { - uploadStates[i].setFollowError(); + state.setFollowError(); } } } @@ -233,8 +233,13 @@ public class SyncUploadActivity extends AppCompatActivity implements View.OnClic partnerServer = partnerInformation.getServer(); partnerSyncUser = partnerInformation.getUser(); - state.setDone(); - executeNextTask(); + if (partnerOrganisation == null || partnerServer == null || partnerSyncUser == null) { + state.setError("Partners information format is incorrect"); + setApplicationError(false); + } else { + state.setDone(); + executeNextTask(); + } } else { state.setError("Partners information format is incorrect"); @@ -260,6 +265,7 @@ public class SyncUploadActivity extends AppCompatActivity implements View.OnClic } private void createOrganisation(final UploadState state, boolean undo) { + state.setInProgress(); if (!undo) { @@ -268,11 +274,7 @@ public class SyncUploadActivity extends AppCompatActivity implements View.OnClic public void onResult(JSONObject organisationInformation) { try { - int orgId = new Organisation(organisationInformation).getId(); - - partnerSyncUser.setOrgId(orgId); - partnerSyncUser.setAuthkey(TempAuth.TMP_AUTH_KEY); - partnerSyncUser.setRoleId(User.RoleId.SYNC_USER); + partnerSyncUser.setOrgId(new Organisation(organisationInformation).getId()); state.setDone(); executeNextTask(); @@ -290,12 +292,28 @@ public class SyncUploadActivity extends AppCompatActivity implements View.OnClic setApplicationError(true); } }); + } else { + mispRequest.removeOrganisation(partnerOrganisation.getId(), new MispRequest.DeleteCallback() { + @Override + public void onSuccess() { + state.setDone(); + } + + @Override + public void onError(VolleyError volleyError) { + state.setError(ReadableError.toReadable(volleyError)); + } + }); } } private void createSyncUser(final UploadState state, boolean undo) { + state.setInProgress(); + partnerSyncUser.setAuthkey(TempAuth.TMP_AUTH_KEY); + partnerSyncUser.setRoleId(User.RoleId.SYNC_USER); + if (!undo) { mispRequest.addUser(partnerSyncUser, new MispRequest.UserCallback() { @Override @@ -310,6 +328,18 @@ public class SyncUploadActivity extends AppCompatActivity implements View.OnClic setApplicationError(true); } }); + } else { + mispRequest.removeUser(partnerSyncUser.getId(), new MispRequest.DeleteCallback() { + @Override + public void onSuccess() { + state.setDone(); + } + + @Override + public void onError(VolleyError volleyError) { + state.setError(ReadableError.toReadable(volleyError)); + } + }); } } @@ -350,6 +380,18 @@ public class SyncUploadActivity extends AppCompatActivity implements View.OnClic setApplicationError(true); } }); + } else { + mispRequest.removeOrganisation(partnerOrganisation.getId(), new MispRequest.DeleteCallback() { + @Override + public void onSuccess() { + state.setDone(); + } + + @Override + public void onError(VolleyError volleyError) { + state.setError(ReadableError.toReadable(volleyError)); + } + }); } } @@ -369,6 +411,12 @@ public class SyncUploadActivity extends AppCompatActivity implements View.OnClic state.setError(ReadableError.toReadable(volleyError)); } }); + } else { + } } + + private void addToSyncedList() { + // todo implementation + } } diff --git a/app/src/main/java/de/overview/wg/its/mispbump/network/MispRequest.java b/app/src/main/java/de/overview/wg/its/mispbump/network/MispRequest.java index db999b2..02739f2 100644 --- a/app/src/main/java/de/overview/wg/its/mispbump/network/MispRequest.java +++ b/app/src/main/java/de/overview/wg/its/mispbump/network/MispRequest.java @@ -24,30 +24,30 @@ import java.util.Map; */ public class MispRequest { - private static MispRequest instance; + private static MispRequest instance; - private RequestQueue requestQueue; - private PreferenceManager preferenceManager; - private String serverUrl, automationKey; + private RequestQueue requestQueue; + private PreferenceManager preferenceManager; + private String serverUrl, automationKey; - /** - * @param context for Volley and PreferenceManager - */ - private MispRequest(Context context, boolean loadSavedCredentials) { - requestQueue = Volley.newRequestQueue(context); + /** + * @param context for Volley and PreferenceManager + */ + private MispRequest(Context context, boolean loadSavedCredentials) { + requestQueue = Volley.newRequestQueue(context); - if (loadSavedCredentials) { - preferenceManager = PreferenceManager.Instance(context); - loadSavedCredentials(); - } - } + if (loadSavedCredentials) { + preferenceManager = PreferenceManager.Instance(context); + loadSavedCredentials(); + } + } - private void loadSavedCredentials() { - serverUrl = preferenceManager.getMyServerUrl(); - automationKey = preferenceManager.getMyServerAutomationKey(); - } + private void loadSavedCredentials() { + serverUrl = preferenceManager.getMyServerUrl(); + automationKey = preferenceManager.getMyServerAutomationKey(); + } - public void testConnection(final ConnectionCallback callback) { + public void testConnection(final ConnectionCallback callback) { Response.Listener listener = new Response.Listener() { @Override public void onResponse(JSONObject response) { @@ -71,293 +71,362 @@ public class MispRequest { requestQueue.add(r); } - /** - * @param orgId organisation ID on the MISP-Instance - * @param callback returns a single Organisation-JSON - */ - public void getOrganisation(int orgId, final OrganisationCallback callback) { + public void getOrganisations(final OrganisationsCallback callback) { + Response.Listener listener = new Response.Listener() { + @Override + public void onResponse(JSONArray response) { - Response.Listener listener = new Response.Listener() { - @Override - public void onResponse(JSONObject response) { - try { - callback.onResult(response.getJSONObject(Organisation.ROOT_KEY)); - } catch (JSONException e) { - e.printStackTrace(); - } - } - }; + JSONArray resultArray = new JSONArray(); - Response.ErrorListener errorListener = new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - callback.onError(error); - } - }; + int orgCount = response.length(); + for (int i = 0; i < orgCount; i++) { + try { + resultArray.put(response.getJSONObject(i).getJSONObject("Organisation")); + } catch (JSONException e) { + e.printStackTrace(); + } + } - Request r = objectRequest(Request.Method.GET, - serverUrl + "/organisations/view/" + orgId, - null, - listener, - errorListener); + callback.onResult(resultArray); + } + }; - requestQueue.add(r); - } + Response.ErrorListener errorListener = new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + callback.onError(error); + } + }; - /** - * Typically used to get the organisation linked with this user - * - * @param callback return user associated with this API-Key - */ - public void getMyUser(final UserCallback callback) { + Request r = arrayRequestWithJsonObject( + Request.Method.GET, + serverUrl + "/organisations/index", + null, + listener, + errorListener); - Response.Listener listener = new Response.Listener() { - @Override - public void onResponse(JSONObject response) { - - try { - callback.onResult(response.getJSONObject(User.ROOT_KEY)); - return; - } catch (JSONException e) { - e.printStackTrace(); - } - - callback.onResult(response); - } - }; - - Response.ErrorListener errorListener = new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - callback.onError(error); - } - }; - - if (serverUrl.isEmpty() || automationKey.isEmpty()) { - return; - } - - Request r = objectRequest( - Request.Method.GET, - serverUrl + "/users/view/me", - null, - listener, - errorListener); - - requestQueue.add(r); - } - - /** - * @param organisation The organisation that will be added - * @param callback returns complete organisation JSON - */ - public void addOrganisation(Organisation organisation, final OrganisationCallback callback) { - Response.Listener listener = new Response.Listener() { - @Override - public void onResponse(JSONObject response) { - try { - callback.onResult(response.getJSONObject(Organisation.ROOT_KEY)); - } catch (JSONException e) { - e.printStackTrace(); - } - } - }; - - Response.ErrorListener errorListener = new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - callback.onError(error); - } - }; - - Request r = objectRequest( - Request.Method.POST, - serverUrl + "/admin/organisations/add", - organisation.toJSON(), - listener, - errorListener - ); - - requestQueue.add(r); - } - - public void getOrganisations(final OrganisationsCallback callback) { - Response.Listener listener = new Response.Listener() { - @Override - public void onResponse(JSONArray response) { - - JSONArray resultArray = new JSONArray(); - - int orgCount = response.length(); - - for(int i = 0; i < orgCount; i++) { - try { - resultArray.put(response.getJSONObject(i).getJSONObject("Organisation")); - } catch (JSONException e) { - e.printStackTrace(); - } - } - - callback.onResult(resultArray); - } - }; - - Response.ErrorListener errorListener = new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - callback.onError(error); - } - }; - - Request r = arrayRequestWithJsonObject( - Request.Method.GET, - serverUrl + "/organisations/index", - null, - listener, - errorListener); - - requestQueue.add(r); - } - - public void addUser(User user, final UserCallback callback) { - Response.Listener listener = new Response.Listener() { - @Override - public void onResponse(JSONObject response) { - try { - callback.onResult(response.getJSONObject(User.ROOT_KEY)); - return; - } catch (JSONException e) { - e.printStackTrace(); - } - - callback.onResult(response); - } - }; - - Response.ErrorListener errorListener = new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - callback.onError(error); - } - }; - - Request r = objectRequest( - Request.Method.POST, - serverUrl + "/admin/users/add", - user.toJSON(), - listener, - errorListener - ); - - requestQueue.add(r); - } - - public void addServer(Server server, final ServerCallback callback) { - Response.Listener listener = new Response.Listener() { - @Override - public void onResponse(JSONObject response) { - try { - callback.onResult(response.getJSONObject(Server.ROOT_KEY)); - return; - } catch (JSONException e) { - e.printStackTrace(); - } - - callback.onResult(response); - } - }; - - Response.ErrorListener errorListener = new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - callback.onError(error); - } - }; - - Request r = objectRequest( - Request.Method.POST, - serverUrl + "/servers/add", - server.toJSON(), - listener, - errorListener - ); - - requestQueue.add(r); - } - - - private JsonArrayRequestWithJsonObject arrayRequestWithJsonObject(int method, String url, - @Nullable JSONObject body, - Response.Listener listener, - Response.ErrorListener errorListener) { - - return new JsonArrayRequestWithJsonObject(method, url, body, listener, errorListener) { - @Override - public Map getHeaders() { - Map params = new HashMap<>(); - - params.put("Authorization", automationKey); - params.put("Accept", "application/json"); - params.put("Content-Type", "application/json; utf-8"); - - return params; - } - }; - } - - private JsonObjectRequest objectRequest(int method, String url, - @Nullable JSONObject body, - Response.Listener listener, - Response.ErrorListener errorListener) { - - return new JsonObjectRequest(method, url, body, listener, errorListener) { - @Override - public Map getHeaders() { - Map params = new HashMap<>(); - - params.put("Authorization", automationKey); - params.put("Accept", "application/json"); - params.put("Content-Type", "application/json; utf-8"); - - return params; - } - }; - } - - public void setServerCredentials(String serverUrl, String automationKey) { - this.serverUrl = serverUrl; - this.automationKey = automationKey; - } - - public static MispRequest Instance(Context context, boolean loadSavedCredentials) { - - if (instance == null) { - instance = new MispRequest(context, loadSavedCredentials); - } - - return instance; - } - - - public interface ConnectionCallback { - void onResult(boolean connected); + requestQueue.add(r); } - public interface OrganisationsCallback { - void onResult(JSONArray organisations); - void onError(VolleyError volleyError); - } - public interface OrganisationCallback { - void onResult(JSONObject organisationInformation); - void onError(VolleyError volleyError); - } - public interface UserCallback { - void onResult(JSONObject userInformation); - void onError(VolleyError volleyError); - } - public interface ServerCallback { - void onResult(JSONObject server); - void onError(VolleyError volleyError); - } + /** + * @param orgId organisation ID on the MISP-Instance + * @param callback returns a single Organisation-JSON + */ + public void getOrganisation(int orgId, final OrganisationCallback callback) { + + Response.Listener listener = new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + try { + callback.onResult(response.getJSONObject(Organisation.ROOT_KEY)); + } catch (JSONException e) { + e.printStackTrace(); + } + } + }; + + Response.ErrorListener errorListener = new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + callback.onError(error); + } + }; + + + Request r = objectRequest(Request.Method.GET, + serverUrl + "/organisations/view/" + orgId, + null, + listener, + errorListener); + + requestQueue.add(r); + } + + /** + * Typically used to get the organisation linked with this user + * + * @param callback return user associated with this API-Key + */ + public void getMyUser(final UserCallback callback) { + + Response.Listener listener = new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + + try { + callback.onResult(response.getJSONObject(User.ROOT_KEY)); + return; + } catch (JSONException e) { + e.printStackTrace(); + } + + callback.onResult(response); + } + }; + + Response.ErrorListener errorListener = new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + callback.onError(error); + } + }; + + if (serverUrl.isEmpty() || automationKey.isEmpty()) { + return; + } + + Request r = objectRequest( + Request.Method.GET, + serverUrl + "/users/view/me", + null, + listener, + errorListener); + + requestQueue.add(r); + } + + /** + * @param organisation The organisation that will be added + * @param callback returns complete organisation JSON + */ + public void addOrganisation(Organisation organisation, final OrganisationCallback callback) { + Response.Listener listener = new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + try { + callback.onResult(response.getJSONObject(Organisation.ROOT_KEY)); + } catch (JSONException e) { + e.printStackTrace(); + } + } + }; + + Response.ErrorListener errorListener = new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + callback.onError(error); + } + }; + + Request r = objectRequest( + Request.Method.POST, + serverUrl + "/admin/organisations/add", + organisation.toJSON(), + listener, + errorListener + ); + + requestQueue.add(r); + } + + public void removeOrganisation(int organisationID, final DeleteCallback callback) { + Response.Listener listener = new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + callback.onSuccess(); + } + }; + Response.ErrorListener errorListener = new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError volleyError) { + callback.onError(volleyError); + } + }; + + Request r = objectRequest( + Request.Method.POST, + serverUrl + "/admin/organisations/delete/" + organisationID, + null, + listener, + errorListener + ); + + requestQueue.add(r); + } + + public void addUser(User user, final UserCallback callback) { + Response.Listener listener = new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + try { + callback.onResult(response.getJSONObject(User.ROOT_KEY)); + return; + } catch (JSONException e) { + e.printStackTrace(); + } + + callback.onResult(response); + } + }; + + Response.ErrorListener errorListener = new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + callback.onError(error); + } + }; + + Request r = objectRequest( + Request.Method.POST, + serverUrl + "/admin/users/add", + user.toJSON(), + listener, + errorListener + ); + + requestQueue.add(r); + } + + public void removeUser(int userID, final DeleteCallback callback) { + + Response.Listener listener = new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + callback.onSuccess(); + } + }; + + Response.ErrorListener errorListener = new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + callback.onError(error); + } + }; + + Request r = objectRequest( + Request.Method.POST, + serverUrl + "/admin/users/delete/" + userID, + null, + listener, + errorListener + ); + + requestQueue.add(r); + } + + public void addServer(Server server, final ServerCallback callback) { + Response.Listener listener = new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + try { + callback.onResult(response.getJSONObject(Server.ROOT_KEY)); + return; + } catch (JSONException e) { + e.printStackTrace(); + } + + callback.onResult(response); + } + }; + + Response.ErrorListener errorListener = new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + callback.onError(error); + } + }; + + Request r = objectRequest( + Request.Method.POST, + serverUrl + "/servers/add", + server.toJSON(), + listener, + errorListener + ); + + requestQueue.add(r); + } + + public void removeServer(Server server, final DeleteCallback callback) { + + } + + + private JsonArrayRequestWithJsonObject arrayRequestWithJsonObject(int method, String url, + @Nullable JSONObject body, + Response.Listener listener, + Response.ErrorListener errorListener) { + + return new JsonArrayRequestWithJsonObject(method, url, body, listener, errorListener) { + @Override + public Map getHeaders() { + Map params = new HashMap<>(); + + params.put("Authorization", automationKey); + params.put("Accept", "application/json"); + params.put("Content-Type", "application/json; utf-8"); + + return params; + } + }; + } + + private JsonObjectRequest objectRequest(int method, String url, + @Nullable JSONObject body, + Response.Listener listener, + Response.ErrorListener errorListener) { + + return new JsonObjectRequest(method, url, body, listener, errorListener) { + @Override + public Map getHeaders() { + Map params = new HashMap<>(); + + params.put("Authorization", automationKey); + params.put("Accept", "application/json"); + params.put("Content-Type", "application/json; utf-8"); + + return params; + } + }; + } + + public void setServerCredentials(String serverUrl, String automationKey) { + this.serverUrl = serverUrl; + this.automationKey = automationKey; + } + + public static MispRequest Instance(Context context, boolean loadSavedCredentials) { + + if (instance == null) { + instance = new MispRequest(context, loadSavedCredentials); + } + + return instance; + } + + + public interface DeleteCallback { + void onSuccess(); + + void onError(VolleyError volleyError); + } + + public interface ConnectionCallback { + void onResult(boolean connected); + } + + public interface OrganisationsCallback { + void onResult(JSONArray organisations); + + void onError(VolleyError volleyError); + } + + public interface OrganisationCallback { + void onResult(JSONObject organisationInformation); + + void onError(VolleyError volleyError); + } + + public interface UserCallback { + void onResult(JSONObject userInformation); + + void onError(VolleyError volleyError); + } + + public interface ServerCallback { + void onResult(JSONObject server); + + void onError(VolleyError volleyError); + } } diff --git a/app/src/main/res/layout/activity_upload.xml b/app/src/main/res/layout/activity_upload.xml index 167401f..bba536e 100644 --- a/app/src/main/res/layout/activity_upload.xml +++ b/app/src/main/res/layout/activity_upload.xml @@ -35,36 +35,40 @@ app:layout_constraintBottom_toBottomOf="parent"/> - + - + - + + + + + + + \ No newline at end of file