From b6267682387567dc94d6089e98e03071efe5f5eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C3=A9o=20Banno-Cloutier?=
 <leo.banno-cloutier@savoirfairelinux.com>
Date: Tue, 22 Aug 2023 16:53:50 -0400
Subject: [PATCH] org.json: remove org.json from dependencies

Change-Id: If67b4ef11aed93a7ec0b09880badb14e53176859
---
 jams-server/pom.xml                           |  5 ----
 .../directory/DirectoryEntryServlet.java      | 21 ++------------
 .../api/admin/group/GroupServlet.java         | 14 +++-------
 .../api/admin/group/PolicyServlet.java        | 28 +++++++++++++------
 .../api/admin/group/UserGroupServlet.java     | 22 ++++-----------
 .../servlets/api/admin/users/UserServlet.java | 25 +++++------------
 .../directory/SearchDirectoryServlet.java     | 15 ++++++----
 7 files changed, 46 insertions(+), 84 deletions(-)

diff --git a/jams-server/pom.xml b/jams-server/pom.xml
index 546b9697..b097011a 100644
--- a/jams-server/pom.xml
+++ b/jams-server/pom.xml
@@ -84,11 +84,6 @@
             <artifactId>httpclient</artifactId>
             <version>4.5.14</version>
         </dependency>
-        <dependency>
-            <groupId>org.json</groupId>
-            <artifactId>json</artifactId>
-            <version>20230618</version>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java
index 4e2de211..4b93cae2 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java
@@ -27,6 +27,7 @@ import static net.jami.jams.server.Server.dataStore;
 import static net.jami.jams.server.Server.userAuthenticationModule;
 
 import com.google.gson.Gson;
+import com.google.gson.JsonObject;
 
 import jakarta.servlet.ServletException;
 import jakarta.servlet.annotation.WebServlet;
@@ -45,11 +46,8 @@ import net.jami.jams.common.objects.user.User;
 import net.jami.jams.common.objects.user.UserProfile;
 import net.jami.jams.common.serialization.adapters.GsonFactory;
 
-import org.json.JSONObject;
-
 import java.io.IOException;
 import java.util.HashMap;
-import java.util.Scanner;
 
 @Slf4j
 @WebServlet("/api/admin/directory/entry")
@@ -62,22 +60,7 @@ public class DirectoryEntryServlet extends HttpServlet {
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
         // Create a user profile.
         String realm = "LOCAL";
-        Scanner s = new Scanner(req.getInputStream()).useDelimiter("\\A");
-        String result = s.hasNext() ? s.next() : "";
-        final JSONObject obj = new JSONObject(result);
-
-        UserProfile userProfile = new UserProfile();
-        userProfile.setUsername(obj.get("username").toString());
-        userProfile.setFirstName(obj.get("firstName").toString());
-        userProfile.setLastName(obj.get("lastName").toString());
-        userProfile.setEmail(obj.get("email").toString());
-        userProfile.setProfilePicture(obj.get("profilePicture").toString());
-        userProfile.setOrganization(obj.get("organization").toString());
-        userProfile.setPhoneNumber(obj.get("phoneNumber").toString());
-        userProfile.setPhoneNumberExtension(obj.get("phoneNumberExtension").toString());
-        userProfile.setFaxNumber(obj.get("faxNumber").toString());
-        userProfile.setMobileNumber(obj.get("mobileNumber").toString());
-        userProfile.setId(obj.get("jamiId").toString());
+        UserProfile userProfile = gson.fromJson(req.getReader(), UserProfile.class);
 
         userAuthenticationModule
                 .getAuthSources()
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java
index 09f9203f..c2eaea8d 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java
@@ -3,6 +3,7 @@ package net.jami.jams.server.servlets.api.admin.group;
 import static net.jami.jams.server.Server.dataStore;
 
 import com.google.gson.Gson;
+import com.google.gson.JsonObject;
 
 import jakarta.servlet.ServletException;
 import jakarta.servlet.annotation.WebServlet;
@@ -18,11 +19,8 @@ import net.jami.jams.common.objects.user.AccessLevel;
 import net.jami.jams.common.objects.user.Group;
 import net.jami.jams.common.serialization.adapters.GsonFactory;
 
-import org.json.JSONObject;
-
 import java.io.IOException;
 import java.util.Optional;
-import java.util.stream.Collectors;
 
 @WebServlet("/api/admin/group/*")
 @Slf4j
@@ -53,14 +51,10 @@ public class GroupServlet extends HttpServlet {
     protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOException {
         String id = req.getPathInfo().replace("/", "");
 
-        final JSONObject obj =
-                new JSONObject(
-                        req.getReader()
-                                .lines()
-                                .collect(Collectors.joining(System.lineSeparator())));
+        JsonObject obj = gson.fromJson(req.getReader(), JsonObject.class);
 
-        String name = obj.getString("name");
-        String blueprint = obj.getString("blueprint");
+        String name = obj.get("name").getAsString();
+        String blueprint = obj.get("blueprint").getAsString();
 
         if (dataStore.getGroupDao().updateObject(id, name, blueprint)) resp.setStatus(200);
         else resp.sendError(500, "Could not update group!");
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/PolicyServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/PolicyServlet.java
index c4b83690..39346510 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/PolicyServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/PolicyServlet.java
@@ -2,6 +2,9 @@ package net.jami.jams.server.servlets.api.admin.group;
 
 import static net.jami.jams.server.Server.dataStore;
 
+import com.google.gson.JsonParser;
+import com.google.gson.JsonSyntaxException;
+
 import jakarta.servlet.ServletException;
 import jakarta.servlet.annotation.WebServlet;
 import jakarta.servlet.http.HttpServlet;
@@ -15,8 +18,6 @@ import net.jami.jams.common.annotations.ScopedServletMethod;
 import net.jami.jams.common.objects.user.AccessLevel;
 import net.jami.jams.common.objects.user.Policy;
 
-import org.json.JSONObject;
-
 import java.io.IOException;
 import java.util.Scanner;
 
@@ -39,9 +40,14 @@ public class PolicyServlet extends HttpServlet {
         String name = req.getParameter("name");
 
         Scanner s = new Scanner(req.getInputStream()).useDelimiter("\\A");
-        String result = s.hasNext() ? s.next() : "";
-        final JSONObject obj = new JSONObject(result);
-        final String policyData = obj.toString();
+        String policyData = s.hasNext() ? s.next() : "";
+
+        try {
+            JsonParser.parseString(policyData);
+        } catch (JsonSyntaxException e) {
+            resp.sendError(400, "Invalid JSON!");
+            return;
+        }
 
         if (dataStore.getPolicyDao().updateObject(name, policyData)) resp.setStatus(200);
         else resp.sendError(500, "could not update the group's name!");
@@ -53,14 +59,18 @@ public class PolicyServlet extends HttpServlet {
         String name = req.getParameter("name");
 
         Scanner s = new Scanner(req.getInputStream()).useDelimiter("\\A");
-        String result = s.hasNext() ? s.next() : "";
+        String policyData = s.hasNext() ? s.next() : "";
 
-        final JSONObject obj = new JSONObject(result);
-        final String jsonString = obj.toString();
+        try {
+            JsonParser.parseString(policyData);
+        } catch (JsonSyntaxException e) {
+            resp.sendError(400, "Invalid JSON!");
+            return;
+        }
 
         Policy policy = new Policy();
         policy.setName(name);
-        policy.setPolicyData(jsonString);
+        policy.setPolicyData(policyData);
         if (dataStore.getPolicyDao().storeObject(policy)) resp.setStatus(200);
         else resp.sendError(500, "Could not create a group successfully!");
     }
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/UserGroupServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/UserGroupServlet.java
index 27b1b359..ef891e6d 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/UserGroupServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/UserGroupServlet.java
@@ -3,6 +3,7 @@ package net.jami.jams.server.servlets.api.admin.group;
 import static net.jami.jams.server.Server.dataStore;
 
 import com.google.gson.Gson;
+import com.google.gson.JsonObject;
 
 import jakarta.servlet.annotation.WebServlet;
 import jakarta.servlet.http.HttpServlet;
@@ -17,12 +18,9 @@ import net.jami.jams.common.objects.user.AccessLevel;
 import net.jami.jams.common.objects.user.UserGroupMapping;
 import net.jami.jams.common.serialization.adapters.GsonFactory;
 
-import org.json.JSONObject;
-
 import java.io.IOException;
 import java.util.List;
 import java.util.Optional;
-import java.util.stream.Collectors;
 
 @WebServlet("/api/admin/group/members/*")
 @Slf4j
@@ -65,13 +63,8 @@ public class UserGroupServlet extends HttpServlet {
 
         String groupId = req.getPathInfo().replace("/", "");
 
-        final JSONObject obj =
-                new JSONObject(
-                        req.getReader()
-                                .lines()
-                                .collect(Collectors.joining(System.lineSeparator())));
-
-        String username = obj.getString("username");
+        JsonObject obj = gson.fromJson(req.getReader(), JsonObject.class);
+        String username = obj.get("username").getAsString();
 
         Optional<UserGroupMapping> existingMapping =
                 dataStore.getUserGroupMappingsDao().getByGroupIdAndUsername(groupId, username);
@@ -97,13 +90,8 @@ public class UserGroupServlet extends HttpServlet {
 
         String groupId = req.getPathInfo().replace("/", "");
 
-        final JSONObject obj =
-                new JSONObject(
-                        req.getReader()
-                                .lines()
-                                .collect(Collectors.joining(System.lineSeparator())));
-
-        String username = obj.getString("username");
+        JsonObject obj = gson.fromJson(req.getReader(), JsonObject.class);
+        String username = obj.get("username").getAsString();
 
         if (dataStore.getUserGroupMappingsDao().deleteObject(username, groupId)) {
             resp.setStatus(200);
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserServlet.java
index 25e6e71e..ea1c007e 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserServlet.java
@@ -28,6 +28,7 @@ import static net.jami.jams.server.Server.nameServer;
 import static net.jami.jams.server.Server.userAuthenticationModule;
 
 import com.google.gson.Gson;
+import com.google.gson.JsonObject;
 
 import jakarta.servlet.ServletException;
 import jakarta.servlet.annotation.WebServlet;
@@ -50,13 +51,11 @@ import net.jami.jams.server.core.workflows.RevokeUserFlow;
 import org.apache.commons.codec.binary.Base64;
 import org.bouncycastle.cert.X509CRLEntryHolder;
 import org.bouncycastle.cert.X509CRLHolder;
-import org.json.JSONObject;
 
 import java.io.IOException;
 import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicReference;
-import java.util.stream.Collectors;
 
 @WebServlet("/api/admin/user")
 public class UserServlet extends HttpServlet {
@@ -107,13 +106,9 @@ public class UserServlet extends HttpServlet {
     @JsonContent
     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
             throws ServletException, IOException {
-        final JSONObject obj =
-                new JSONObject(
-                        req.getReader()
-                                .lines()
-                                .collect(Collectors.joining(System.lineSeparator())));
-
-        String password = obj.getString("password");
+        JsonObject obj = gson.fromJson(req.getReader(), JsonObject.class);
+        String username = obj.get("username").getAsString();
+        String password = obj.get("password").getAsString();
 
         if (password.isEmpty()) {
             resp.sendError(400, "Password is empty!");
@@ -123,8 +118,6 @@ public class UserServlet extends HttpServlet {
         byte[] salt = PasswordUtil.generateSalt();
         String hashedPassword = PasswordUtil.hashPassword(password, salt);
 
-        String username = obj.getString("username");
-
         User user = new User();
         user.setUsername(username);
         user.setNeedsPasswordReset(true);
@@ -146,13 +139,9 @@ public class UserServlet extends HttpServlet {
     @Override
     @ScopedServletMethod(securityGroups = {AccessLevel.ADMIN})
     protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOException {
-        final JSONObject obj =
-                new JSONObject(
-                        req.getReader()
-                                .lines()
-                                .collect(Collectors.joining(System.lineSeparator())));
-        String pw = obj.getString("password");
-        String username = obj.getString("username");
+        JsonObject obj = gson.fromJson(req.getReader(), JsonObject.class);
+        String username = obj.get("username").getAsString();
+        String pw = obj.get("password").getAsString();
 
         Optional<User> result = dataStore.getUserDao().getByUsername(username);
 
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java
index 6c8885f2..72cf954c 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java
@@ -27,6 +27,8 @@ import static net.jami.jams.server.Server.nameServer;
 import static net.jami.jams.server.Server.userAuthenticationModule;
 
 import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
 
 import jakarta.servlet.annotation.WebServlet;
 import jakarta.servlet.http.HttpServlet;
@@ -47,8 +49,6 @@ import net.jami.jams.common.objects.user.User;
 import net.jami.jams.common.objects.user.UserProfile;
 import net.jami.jams.common.serialization.adapters.GsonFactory;
 
-import org.json.JSONObject;
-
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Comparator;
@@ -156,10 +156,13 @@ public class SearchDirectoryServlet extends HttpServlet {
                                     });
                 });
 
-        JSONObject obj = new JSONObject();
-        obj.put("profiles", userProfiles);
-        obj.put("numPages", DataStore.NUM_PAGES);
-        resp.getOutputStream().write((obj.toString()).getBytes());
+        JsonObject obj = new JsonObject();
+        JsonArray profilesArray = gson.toJsonTree(userProfiles).getAsJsonArray();
+
+        obj.add("profiles", profilesArray);
+        obj.addProperty("numPages", DataStore.NUM_PAGES);
+
+        resp.getOutputStream().write(gson.toJson(obj).getBytes());
         resp.setStatus(200);
     }
 }
-- 
GitLab