فهرست منبع

Add SMS rest test serverlet

Adam Ure 6 سال پیش
والد
کامیت
14e6e1acf5

+ 101 - 60
rest-test-service/src/main/java/password/pwm/resttest/ExternalMacroServlet.java

@@ -1,60 +1,101 @@
-/*
- * Password Management Servlets (PWM)
- * http://www.pwm-project.org
- *
- * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2018 The PWM Project
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-
-package password.pwm.resttest;
-
-import org.apache.commons.io.IOUtils;
-
-import javax.servlet.ServletException;
-import javax.servlet.annotation.WebServlet;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-
-@WebServlet(
-        name = "NewUserServlet",
-        urlPatterns = { "/external/macro1" }
-)
-
-public class ExternalMacroServlet extends HttpServlet
-{
-    @Override
-    protected void doPost( final HttpServletRequest req, final HttpServletResponse resp ) throws ServletException, IOException
-    {
-
-        final InputStream inputStream = req.getInputStream();
-        final String body = IOUtils.toString( inputStream );
-
-        System.out.println( "input POST body:  " + body );
-
-
-        resp.setHeader( "Content-Type", "application/json" );
-
-        final PrintWriter writer = resp.getWriter();
-        writer.write(  "{\"output\":\"macro api output SPLAT!\"}" );
-        writer.close();
-    }
-}
+/*
+ * Password Management Servlets (PWM)
+ * http://www.pwm-project.org
+ *
+ * Copyright (c) 2006-2009 Novell, Inc.
+ * Copyright (c) 2009-2018 The PWM Project
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+package password.pwm.resttest;
+
+import com.google.gson.Gson;
+import org.apache.commons.io.IOUtils;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.util.Date;
+
+@WebServlet(
+        name = "NewUserServlet",
+        urlPatterns = { "/sms", "/macro" }
+)
+
+public class ExternalMacroServlet extends HttpServlet
+{
+    final String USERNAME_PARAMETER = "username";
+    final String SUCCESSFUL = "true";
+    final String UNSUCCESSFUL = "false";
+
+    @Override
+    protected void doPost( final HttpServletRequest req, final HttpServletResponse resp ) throws ServletException, IOException
+    {
+        if (req.getServletPath().equals("/sms")) {
+            SmsResponse instance = SmsResponse.getInstance();
+            final InputStream inputStream = req.getInputStream();
+            final String body = IOUtils.toString( inputStream );
+
+            String[] messageContent = body.split("=");
+            String message = messageContent[messageContent.length - 1];
+            String username = message.split("\\+")[0];
+            Date currentDate = new Date();
+            SmsPostResponseBody messageBody = new SmsPostResponseBody(message, currentDate);
+
+            instance.addToMap(username, messageBody);
+
+            System.out.println( "input POST body:  " + body );
+
+            resp.setHeader( "Content-Type", "application/json" );
+
+            final PrintWriter writer = resp.getWriter();
+            writer.write(  "{\"output\":\"Message Received\"}" );
+            writer.close();
+        }
+    }
+
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+        if (req.getServletPath().equals("/sms")) {
+            //Check request
+            SmsResponse instance = SmsResponse.getInstance();
+            String requestUsername = req.getParameter(USERNAME_PARAMETER);
+            SmsGetResponseBody responseBody;
+
+            //Get body
+            if (instance.getRecentSmsMessages().containsKey(requestUsername)) {
+                SmsPostResponseBody body = instance.getRecentFromMap(requestUsername);
+                responseBody = new SmsGetResponseBody(SUCCESSFUL, body.getMessageContent());
+            } else {
+                responseBody = new SmsGetResponseBody(UNSUCCESSFUL, "");
+            }
+
+            //Send response
+            Gson gson = new Gson();
+            resp.setHeader("Content-Type", "application/json" );
+            final PrintWriter writer = resp.getWriter();
+            writer.write(gson.toJson(responseBody));
+            writer.close();
+
+        }
+    }
+}

+ 28 - 0
rest-test-service/src/main/java/password/pwm/resttest/SmsGetResponseBody.java

@@ -0,0 +1,28 @@
+package password.pwm.resttest;
+
+public class SmsGetResponseBody {
+    private String successful;
+    private String message;
+
+    public SmsGetResponseBody(String successful, String message) {
+        this.successful = successful;
+        this.message = message;
+    }
+
+    /** Getters and Setters */
+    public String getSuccessful() {
+        return successful;
+    }
+
+    public void setSuccessful(String successful) {
+        this.successful = successful;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}

+ 42 - 0
rest-test-service/src/main/java/password/pwm/resttest/SmsPostResponseBody.java

@@ -0,0 +1,42 @@
+package password.pwm.resttest;
+
+import java.util.Date;
+
+public class SmsPostResponseBody {
+    private String messageContent;
+    private Date date;
+
+    public SmsPostResponseBody(String message, Date date) {
+        String[] strings = message.split("&");
+        this.messageContent = strings[strings.length - 1];
+        this.date = date;
+    }
+
+    public SmsPostResponseBody(String message) {
+        String[] strings = message.split("&");
+        this.messageContent = strings[strings.length - 1];
+    }
+
+    public SmsPostResponseBody(Date date) {
+        this.date = date;
+        this.messageContent = "";
+    }
+
+    public SmsPostResponseBody(){}
+
+    public String getMessageContent() {
+        return messageContent;
+    }
+
+    public void setMessageContent(String messageContent) {
+        this.messageContent = messageContent;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+}

+ 57 - 0
rest-test-service/src/main/java/password/pwm/resttest/SmsResponse.java

@@ -0,0 +1,57 @@
+package password.pwm.resttest;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+public class SmsResponse {
+    public static SmsResponse instance;
+
+    Map<String, ArrayList<SmsPostResponseBody>> recentSmsMessages;
+
+    public SmsResponse() {
+        this.recentSmsMessages = new HashMap<String, ArrayList<SmsPostResponseBody>>();
+    }
+
+    /** Getters and Setters */
+    public static synchronized SmsResponse getInstance() {
+        if (instance == null){
+            instance = new SmsResponse();
+        }
+        return instance;
+    }
+
+    Map<String, ArrayList<SmsPostResponseBody>> getRecentSmsMessages() {
+        return recentSmsMessages;
+    }
+
+    public void setRecentSmsMessages(Map<String, ArrayList<SmsPostResponseBody>> recentSmsMessages) {
+        this.recentSmsMessages = recentSmsMessages;
+    }
+
+    /** Helper Functions */
+    public void addToMap(String username, SmsPostResponseBody responseBody){
+        if (recentSmsMessages.containsKey(username)){
+            recentSmsMessages.get(username).add(responseBody);
+        } else {
+            ArrayList<SmsPostResponseBody> arrayList = new ArrayList<>();
+            arrayList.add(responseBody);
+            recentSmsMessages.put(username, arrayList);
+        }
+    }
+
+    public SmsPostResponseBody getRecentFromMap(String username) {
+        SmsPostResponseBody responseBody = new SmsPostResponseBody();
+        if (recentSmsMessages.containsKey(username)) {
+            ArrayList<SmsPostResponseBody> userMessages = recentSmsMessages.get(username);
+            int mostRecentIndex = 0;
+            for (int i = 0; i < userMessages.size(); i++) {
+                if (userMessages.get(i).getDate().getTime() > userMessages.get(mostRecentIndex).getDate().getTime()) {
+                    mostRecentIndex = i;
+                }
+            }
+            responseBody = userMessages.get(mostRecentIndex);
+        }
+        return responseBody;
+    }
+}