From 33a06a574f0b9f31e8718ae10fe748e05e2513cc Mon Sep 17 00:00:00 2001 From: tom79 Date: Tue, 18 Jun 2019 16:22:53 +0200 Subject: [PATCH] Manage entities + API endpoints --- .../java/app/fedilab/android/client/API.java | 211 ++++++++++++++++-- .../fedilab/android/client/APIResponse.java | 21 +- .../android/client/Entities/AccountAdmin.java | 4 +- 3 files changed, 214 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/client/API.java b/app/src/main/java/app/fedilab/android/client/API.java index bf41bb57f..a5c7d2cd0 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -51,6 +51,7 @@ import app.fedilab.android.activities.MainActivity; import app.fedilab.android.asynctasks.RetrieveOpenCollectiveAsyncTask; import app.fedilab.android.asynctasks.UpdateAccountInfoAsyncTask; import app.fedilab.android.client.Entities.Account; +import app.fedilab.android.client.Entities.AccountAdmin; import app.fedilab.android.client.Entities.AccountCreation; import app.fedilab.android.client.Entities.Application; import app.fedilab.android.client.Entities.Attachment; @@ -114,6 +115,24 @@ public class API { ACCOUNTS } + + public enum adminAction{ + ENABLE, + APPROVE, + REJECT, + UNSILENCE, + UNSUSPEND, + ASSIGN_TO_SELF, + UNASSIGN, + REOPEN, + RESOLVE, + MODERATION_ACTION, + GET_ACCOUNTS, + GET_ONE_ACCOUNT, + GET_REPORTS, + GET_ONE_REPORT + } + public enum StatusAction{ FAVOURITE, UNFAVOURITE, @@ -184,6 +203,106 @@ public class API { APIError = null; } + + + + /** + * Execute admin get actions + * @param action type of the action + * @param id String can for an account or a status + * @return APIResponse + */ + public APIResponse adminGet(adminAction action, String id, HashMap params){ + apiResponse = new APIResponse(); + String endpoint = null; + switch (action){ + case GET_ACCOUNTS: + endpoint = "/admin/accounts"; + break; + case GET_ONE_ACCOUNT: + endpoint = String.format("/admin/accounts/%s", id); + break; + case GET_REPORTS: + endpoint = "/admin/reports"; + break; + case GET_ONE_REPORT: + endpoint = String.format("/admin/reports/%s", id); + break; + } + try { + String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl(endpoint), 60, params, prefKeyOauthTokenT); + } catch (IOException e) { + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (KeyManagementException e) { + e.printStackTrace(); + } catch (HttpsConnection.HttpsConnectionException e) { + setError(e.getStatusCode(), e); + } + + return apiResponse; + } + + + + + /** + * Execute admin post actions + * @param action type of the action + * @param id String can for an account or a status + * @return APIResponse + */ + public APIResponse adminDo(adminAction action, String id, HashMap params){ + apiResponse = new APIResponse(); + String endpoint = null; + switch (action){ + case ENABLE: + endpoint = String.format("/admin/accounts/%s/enable", id); + break; + case APPROVE: + endpoint = String.format("/admin/accounts/%s/approve", id); + break; + case REJECT: + endpoint = String.format("/admin/accounts/%s/reject", id); + break; + case UNSILENCE: + endpoint = String.format("/admin/accounts/%s/unsilence", id); + break; + case UNSUSPEND: + endpoint = String.format("/admin/accounts/%s/unsuspend", id); + break; + case ASSIGN_TO_SELF: + endpoint = String.format("/admin/accounts/%s/assign_to_self", id); + break; + case UNASSIGN: + endpoint = String.format("/admin/accounts/%s/unassign", id); + break; + case REOPEN: + endpoint = String.format("/admin/accounts/%s/reopen", id); + break; + case RESOLVE: + endpoint = String.format("/admin/accounts/%s/resolve", id); + break; + case MODERATION_ACTION: + endpoint = String.format("/admin/accounts/%s/action", id); + break; + } + try { + String response = new HttpsConnection(context, this.instance).post(getAbsoluteUrl(endpoint), 60, params, prefKeyOauthTokenT); + } catch (IOException e) { + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (KeyManagementException e) { + e.printStackTrace(); + } catch (HttpsConnection.HttpsConnectionException e) { + setError(e.getStatusCode(), e); + } + + return apiResponse; + } + public InstanceNodeInfo getNodeInfo(String domain){ //Try to guess URL scheme for the onion instance @@ -327,6 +446,9 @@ public class API { } + + + /*** * Get info on the current Instance *synchronously* * @return APIResponse @@ -4814,6 +4936,75 @@ public class API { return account; } + + /** + * Parse json response for list of accounts for admins + * @param jsonArray JSONArray + * @return List + */ + private List parseAccountAdminResponse(JSONArray jsonArray){ + + List accountAdmins = new ArrayList<>(); + try { + int i = 0; + while (i < jsonArray.length() ) { + JSONObject resobj = jsonArray.getJSONObject(i); + AccountAdmin accountAdmin = parseAccountAdminResponse(context, resobj); + accountAdmins.add(accountAdmin); + i++; + } + } catch (JSONException e) { + setDefaultError(e); + } + return accountAdmins; + } + + /** + * Parse json response an unique account for admins + * @param resobj JSONObject + * @return Account + */ + private static AccountAdmin parseAccountAdminResponse(Context context, JSONObject resobj){ + + AccountAdmin accountAdmin = new AccountAdmin(); + try { + accountAdmin.setId(resobj.get("id").toString()); + accountAdmin.setUsername(resobj.getString("username")); + accountAdmin.setCreated_at(Helper.mstStringToDate(context, resobj.getString("created_at"))); + accountAdmin.setEmail(resobj.getString("email")); + accountAdmin.setRole(resobj.getString("role")); + accountAdmin.setIp(resobj.getString("ip")); + accountAdmin.setConfirmed(resobj.getBoolean("confirmed")); + accountAdmin.setSuspended(resobj.getBoolean("suspended")); + accountAdmin.setSilenced(resobj.getBoolean("silenced")); + accountAdmin.setDisabled(resobj.getBoolean("disabled")); + accountAdmin.setAccount(parseAccountResponse(context, resobj.getJSONObject("account"))); + }catch (Exception ignored){} + return accountAdmin; + } + + /** + * Parse json response for list of accounts + * @param jsonArray JSONArray + * @return List + */ + private List parseAccountResponse(JSONArray jsonArray){ + + List accounts = new ArrayList<>(); + try { + int i = 0; + while (i < jsonArray.length() ) { + JSONObject resobj = jsonArray.getJSONObject(i); + Account account = parseAccountResponse(context, resobj); + accounts.add(account); + i++; + } + } catch (JSONException e) { + setDefaultError(e); + } + return accounts; + } + /** * Parse json response an unique account * @param resobj JSONObject @@ -5029,27 +5220,7 @@ public class API { } catch (JSONException ignored) {} return account; } - /** - * Parse json response for list of accounts - * @param jsonArray JSONArray - * @return List - */ - private List parseAccountResponse(JSONArray jsonArray){ - List accounts = new ArrayList<>(); - try { - int i = 0; - while (i < jsonArray.length() ) { - JSONObject resobj = jsonArray.getJSONObject(i); - Account account = parseAccountResponse(context, resobj); - accounts.add(account); - i++; - } - } catch (JSONException e) { - setDefaultError(e); - } - return accounts; - } /** diff --git a/app/src/main/java/app/fedilab/android/client/APIResponse.java b/app/src/main/java/app/fedilab/android/client/APIResponse.java index f869dc467..f588973fd 100644 --- a/app/src/main/java/app/fedilab/android/client/APIResponse.java +++ b/app/src/main/java/app/fedilab/android/client/APIResponse.java @@ -19,6 +19,7 @@ import android.content.Context; import java.util.List; import app.fedilab.android.client.Entities.Account; +import app.fedilab.android.client.Entities.AccountAdmin; import app.fedilab.android.client.Entities.Conversation; import app.fedilab.android.client.Entities.Emojis; import app.fedilab.android.client.Entities.Error; @@ -31,6 +32,7 @@ import app.fedilab.android.client.Entities.Peertube; import app.fedilab.android.client.Entities.PeertubeNotification; import app.fedilab.android.client.Entities.Playlist; import app.fedilab.android.client.Entities.Relationship; +import app.fedilab.android.client.Entities.Report; import app.fedilab.android.client.Entities.Results; import app.fedilab.android.client.Entities.Status; import app.fedilab.android.client.Entities.StoredStatus; @@ -64,7 +66,8 @@ public class APIResponse { private boolean fetchmore = false; private List playlistForVideos; private List instanceRegs = null; - + private List accountAdmins = null; + private List reports = null; public List getAccounts() { return accounts; @@ -249,4 +252,20 @@ public class APIResponse { public void setInstanceRegs(List instanceRegs) { this.instanceRegs = instanceRegs; } + + public List getAccountAdmins() { + return accountAdmins; + } + + public void setAccountAdmins(List accountAdmins) { + this.accountAdmins = accountAdmins; + } + + public List getReports() { + return reports; + } + + public void setReports(List reports) { + this.reports = reports; + } } diff --git a/app/src/main/java/app/fedilab/android/client/Entities/AccountAdmin.java b/app/src/main/java/app/fedilab/android/client/Entities/AccountAdmin.java index 084aef4c7..88260189e 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/AccountAdmin.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/AccountAdmin.java @@ -30,6 +30,8 @@ public class AccountAdmin implements Parcelable { private boolean suspended; private boolean silenced; private boolean disabled; + private Account account; + public String getId() { return id; @@ -119,7 +121,7 @@ public class AccountAdmin implements Parcelable { this.account = account; } - private Account account; + @Override