Adds IP authentication to SP client
authorNiels Erik G. Nielsen <nielserik@indexdata.com>
Sun, 21 Apr 2013 13:18:30 +0000 (09:18 -0400)
committerNiels Erik G. Nielsen <nielserik@indexdata.com>
Sun, 21 Apr 2013 13:18:30 +0000 (09:18 -0400)
src/main/java/com/indexdata/mkjsf/pazpar2/Pz2ProxyBean.java
src/main/java/com/indexdata/mkjsf/pazpar2/sp/ServiceProxyClient.java

index fce82ca..4209aa2 100644 (file)
@@ -48,7 +48,7 @@ public class Pz2ProxyBean extends Pz2Bean implements ServiceProxyInterface {
   }\r
   \r
   public void login(String un, String pw) {\r
-    if (user.isAuthenticated() && user.getName().equals(un) && ((ServiceProxyClient) searchClient).checkAuthentication()) {\r
+    if (user.isAuthenticated() && user.getName().equals(un) && ((ServiceProxyClient) searchClient).checkAuthentication(user)) {\r
       logger.info("Repeat request from UI to authenticate user. Auth verified for given user name so skipping log-in.");\r
     } else {\r
       logger.info("doing un/pw login");\r
@@ -67,6 +67,12 @@ public class Pz2ProxyBean extends Pz2Bean implements ServiceProxyInterface {
     pzresp.reset();\r
     return navigateTo;\r
   }\r
+  \r
+  public void ipAuthenticate (ServiceProxyUser user) {\r
+    if (!user.isAuthenticated()) {\r
+      ((ServiceProxyClient)searchClient).ipAuthenticate(user);\r
+    }\r
+  }\r
 \r
   @Override\r
   public void setServiceProxyUrl(String url) {\r
@@ -129,6 +135,4 @@ public class Pz2ProxyBean extends Pz2Bean implements ServiceProxyInterface {
     return null;\r
     // return getCommandParameterValue("record","acefilter","");\r
   }\r
-\r
-\r
 }\r
index 244496a..520ca3e 100644 (file)
@@ -12,6 +12,9 @@ import java.util.HashMap;
 import java.util.List;\r
 import java.util.Map;\r
 \r
+import javax.enterprise.context.SessionScoped;\r
+import javax.inject.Inject;\r
+\r
 import org.apache.http.HttpEntity;\r
 import org.apache.http.HttpResponse;\r
 import org.apache.http.StatusLine;\r
@@ -40,11 +43,9 @@ import com.indexdata.mkjsf.pazpar2.CommandResponse;
 import com.indexdata.mkjsf.pazpar2.SearchClient;\r
 import com.indexdata.mkjsf.pazpar2.commands.CommandParameter;\r
 import com.indexdata.mkjsf.pazpar2.commands.Pazpar2Command;\r
-import com.indexdata.mkjsf.pazpar2.sp.auth.AuthenticationEntity;\r
 import com.indexdata.mkjsf.pazpar2.sp.auth.ServiceProxyUser;\r
 import com.indexdata.mkjsf.utils.Utils;\r
 \r
-\r
 public class ServiceProxyClient implements SearchClient {\r
     \r
   private static final long serialVersionUID = -4031644009579840277L;\r
@@ -57,16 +58,15 @@ public class ServiceProxyClient implements SearchClient {
   private Configuration config = null;\r
   \r
   ProxyPz2ResponseHandler handler = new ProxyPz2ResponseHandler();\r
-  private HttpClient client;\r
-  private ServiceProxyUser user;\r
+  private transient HttpClient client;  \r
   private Pazpar2Command checkAuth = null;\r
-\r
+  private Pazpar2Command ipAuth = null;\r
 \r
   public ServiceProxyClient () {\r
     SchemeRegistry schemeRegistry = new SchemeRegistry();\r
     schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));\r
     ClientConnectionManager cm = new PoolingClientConnectionManager(schemeRegistry);\r
-    client = new DefaultHttpClient(cm);   \r
+    client = new DefaultHttpClient(cm);\r
   }\r
     \r
   @Override\r
@@ -78,6 +78,8 @@ public class ServiceProxyClient implements SearchClient {
       this.initDocPaths = getMultiProperty(config.get(SP_INIT_DOC_PATHS));\r
       checkAuth = new Pazpar2Command("auth",null);\r
       checkAuth.setParameterInState(new CommandParameter("action","=","check"));\r
+      ipAuth = new Pazpar2Command("auth",null);\r
+      ipAuth.setParameterInState(new CommandParameter("action","=","ipauth"));\r
     } catch (ConfigurationException c) {\r
       c.printStackTrace();\r
     } catch (MissingMandatoryParameterException mmp) {\r
@@ -93,10 +95,9 @@ public class ServiceProxyClient implements SearchClient {
     }\r
   }\r
   \r
-  public boolean authenticate (AuthenticationEntity user) {\r
+  public boolean authenticate (ServiceProxyUser user) {\r
     try {      \r
-      logger.info("Authenticating [" + user.getProperty("name") + "]");\r
-      this.user = (ServiceProxyUser) user;      \r
+      logger.info("Authenticating [" + user.getProperty("name") + "]");            \r
       Pazpar2Command auth = new Pazpar2Command("auth",null);\r
       auth.setParametersInState(new CommandParameter("action","=","login"), \r
                                 new CommandParameter("username","=",user.getProperty("name")), \r
@@ -105,10 +106,10 @@ public class ServiceProxyClient implements SearchClient {
       String responseStr = new String(response,"UTF-8");\r
       logger.info(responseStr);      \r
       if (responseStr.contains("FAIL")) {\r
-        this.user.isAuthenticated(false);\r
+        user.isAuthenticated(false);\r
         return false;\r
       } else {\r
-        this.user.isAuthenticated(true);\r
+        user.isAuthenticated(true);\r
         return true;\r
       }      \r
     } catch (ClientProtocolException e) {\r
@@ -122,16 +123,39 @@ public class ServiceProxyClient implements SearchClient {
     }        \r
   }\r
   \r
-  public boolean checkAuthentication () {    \r
+  public boolean checkAuthentication (ServiceProxyUser user) {    \r
     try {\r
       byte[] response = send(checkAuth);\r
       logger.info(new String(response,"UTF-8"));\r
       String responseStr = new String(response,"UTF-8");    \r
+      if (responseStr.contains("FAIL")) {  \r
+        user.isAuthenticated(false);\r
+        return false;\r
+      } else {        \r
+        user.isAuthenticated(true);\r
+        return true;\r
+      }      \r
+    } catch (ClientProtocolException e) {\r
+      // TODO Auto-generated catch block\r
+      e.printStackTrace();\r
+      return false;\r
+    } catch (IOException e) {\r
+      // TODO Auto-generated catch block\r
+      e.printStackTrace();\r
+      return false;\r
+    }        \r
+  }\r
+  \r
+  public boolean ipAuthenticate (ServiceProxyUser user) {\r
+    try {\r
+      byte[] response = send(ipAuth);\r
+      logger.info(new String(response,"UTF-8"));\r
+      String responseStr = new String(response,"UTF-8");    \r
       if (responseStr.contains("FAIL")) {\r
-        this.user.isAuthenticated(false);\r
+        user.isAuthenticated(false);\r
         return false;\r
       } else {\r
-        this.user.isAuthenticated(true);\r
+        user.isAuthenticated(true);\r
         return true;\r
       }      \r
     } catch (ClientProtocolException e) {\r
@@ -143,15 +167,16 @@ public class ServiceProxyClient implements SearchClient {
       e.printStackTrace();\r
       return false;\r
     }        \r
+    \r
   }\r
   \r
   public boolean isAuthenticatingClient () {\r
     return true;\r
   }\r
   \r
-  public boolean isAuthenticated () {\r
+  public boolean isAuthenticated (ServiceProxyUser user) {\r
     if (user.getProperty("name") != null && user.getProperty("password") != null) {\r
-      return checkAuthentication();\r
+      return checkAuthentication(user);\r
     } else {\r
       return false;\r
     }\r
@@ -172,15 +197,6 @@ public class ServiceProxyClient implements SearchClient {
     return response;\r
   }\r
   \r
-  private byte[] send (String queryString) throws ClientProtocolException, IOException {\r
-    String url = serviceUrl + "?" + queryString; \r
-    logger.info("Sending request "+url);    \r
-    HttpGet httpget = new HttpGet(url);     \r
-    byte[] response = client.execute(httpget, handler);    \r
-    return response;\r
-    \r
-  }\r
-  \r
   public class ProxyPz2ResponseHandler implements ResponseHandler<byte[]> {\r
     private StatusLine statusLine = null;\r
     public byte[] handleResponse(HttpResponse response) throws ClientProtocolException, IOException {\r