فهرست منبع

Merge pull request #471 from adamqure/master

Add SMS rest test serverlet
Jason Rivard 6 سال پیش
والد
کامیت
f51ff40560

+ 55 - 8
rest-test-service/src/main/java/password/pwm/resttest/ExternalMacroServlet.java

@@ -23,6 +23,7 @@
 
 package password.pwm.resttest;
 
+import com.google.gson.Gson;
 import org.apache.commons.io.IOUtils;
 
 import javax.servlet.ServletException;
@@ -33,28 +34,74 @@ 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 = { "/external/macro1" }
+        urlPatterns = { "/sms", "/macro" }
 )
 
 public class ExternalMacroServlet extends HttpServlet
 {
+    private static final String USERNAME_PARAMETER = "username";
+    private static final String SUCCESSFUL = "true";
+    private static final String UNSUCCESSFUL = "false";
+
     @Override
     protected void doPost( final HttpServletRequest req, final HttpServletResponse resp ) throws ServletException, IOException
     {
+        if ( req.getServletPath().equals( "/sms" ) )
+        {
+            final SmsResponse instance = SmsResponse.getInstance();
+            final InputStream inputStream = req.getInputStream();
+            final String body = IOUtils.toString( inputStream );
+
+            final String[] messageContent = body.split( "=" );
+            final String message = messageContent[messageContent.length - 1];
+            final String username = message.split( "\\+" )[0];
+            final Date currentDate = new Date();
+            final SmsPostResponseBody messageBody = new SmsPostResponseBody( message, currentDate );
+
+            instance.addToMap( username, messageBody );
+
+            System.out.println( "input POST body:  " + body );
 
-        final InputStream inputStream = req.getInputStream();
-        final String body = IOUtils.toString( inputStream );
+            resp.setHeader( "Content-Type", "application/json" );
 
-        System.out.println( "input POST body:  " + body );
+            final PrintWriter writer = resp.getWriter();
+            writer.write(  "{\"output\":\"Message Received\"}" );
+            writer.close();
+        }
+    }
+
+    @Override
+    protected void doGet( final HttpServletRequest req, final HttpServletResponse resp ) throws IOException
+    {
+        if ( req.getServletPath().equals( "/sms" ) )
+        {
+            //Check request
+            final SmsResponse instance = SmsResponse.getInstance();
+            final String requestUsername = req.getParameter( USERNAME_PARAMETER );
+            final SmsGetResponseBody responseBody;
 
+            //Get body
+            if ( instance.getRecentSmsMessages().containsKey( requestUsername ) )
+            {
+                final SmsPostResponseBody body = instance.getRecentFromMap( requestUsername );
+                responseBody = new SmsGetResponseBody( SUCCESSFUL, body.getMessageContent() );
+            }
+            else
+            {
+                responseBody = new SmsGetResponseBody( UNSUCCESSFUL, "" );
+            }
 
-        resp.setHeader( "Content-Type", "application/json" );
+            //Send response
+            final Gson gson = new Gson();
+            resp.setHeader( "Content-Type", "application/json"  );
+            final PrintWriter writer = resp.getWriter();
+            writer.write( gson.toJson( responseBody ) );
+            writer.close();
 
-        final PrintWriter writer = resp.getWriter();
-        writer.write(  "{\"output\":\"macro api output SPLAT!\"}" );
-        writer.close();
+        }
     }
 }

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

@@ -0,0 +1,46 @@
+/*
+ * 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;
+
+public class SmsGetResponseBody
+{
+    private final String successful;
+    private final String message;
+
+    public SmsGetResponseBody( final String successful, final String message )
+    {
+        this.successful = successful;
+        this.message = message;
+    }
+
+    /** Getters and Setters. */
+    public String getSuccessful()
+    {
+        return successful;
+    }
+
+    public String getMessage()
+    {
+        return message;
+    }
+}

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

@@ -0,0 +1,75 @@
+/*
+ * 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 java.util.Date;
+
+public class SmsPostResponseBody
+{
+    private static String messageContent;
+    private static Date date;
+
+    public SmsPostResponseBody( final String message, final Date date )
+    {
+        final String[] strings = message.split( "&" );
+        this.messageContent = strings[strings.length - 1];
+        this.date = date;
+    }
+
+    public SmsPostResponseBody( final String message )
+    {
+        final String[] strings = message.split( "&" );
+        this.messageContent = strings[strings.length - 1];
+    }
+
+    public SmsPostResponseBody( final Date date )
+    {
+        this.date = date;
+        this.messageContent = "";
+    }
+
+    public SmsPostResponseBody()
+    {
+
+    }
+
+    public String getMessageContent()
+    {
+        return messageContent;
+    }
+
+    public void setMessageContent( final String messageContent )
+    {
+        this.messageContent = messageContent;
+    }
+
+    public Date getDate()
+    {
+        return date;
+    }
+
+    public void setDate( final Date date )
+    {
+        this.date = date;
+    }
+}

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

@@ -0,0 +1,89 @@
+/*
+ * 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 java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+public class SmsResponse
+{
+    public static final SmsResponse INSTANCE = new SmsResponse();
+
+    Map<String, ArrayList<SmsPostResponseBody>> recentSmsMessages;
+
+    public SmsResponse()
+    {
+        this.recentSmsMessages = new HashMap<String, ArrayList<SmsPostResponseBody>>();
+    }
+
+    /** Getters and Setters. */
+    public static synchronized SmsResponse getInstance()
+    {
+        return INSTANCE;
+    }
+
+    Map<String, ArrayList<SmsPostResponseBody>> getRecentSmsMessages()
+    {
+        return recentSmsMessages;
+    }
+
+    public void setRecentSmsMessages( final Map<String, ArrayList<SmsPostResponseBody>> recentSmsMessages )
+    {
+        this.recentSmsMessages = recentSmsMessages;
+    }
+
+    /** Helper Functions. */
+    public void addToMap( final String username, final SmsPostResponseBody responseBody )
+    {
+        if ( recentSmsMessages.containsKey( username ) )
+        {
+            recentSmsMessages.get( username ).add( responseBody );
+        }
+        else
+        {
+            final ArrayList<SmsPostResponseBody> arrayList = new ArrayList<>();
+            arrayList.add( responseBody );
+            recentSmsMessages.put( username, arrayList );
+        }
+    }
+
+    public SmsPostResponseBody getRecentFromMap( final String username )
+    {
+        SmsPostResponseBody responseBody = new SmsPostResponseBody();
+        if ( recentSmsMessages.containsKey( username ) )
+        {
+            final 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;
+    }
+}