Adds IP authentication to SP client
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / Pz2ProxyBean.java
1 package com.indexdata.mkjsf.pazpar2;\r
2 \r
3 import java.io.IOException;\r
4 import java.io.UnsupportedEncodingException;\r
5 \r
6 import javax.annotation.PostConstruct;\r
7 import javax.enterprise.context.SessionScoped;\r
8 import javax.enterprise.inject.Alternative;\r
9 import javax.inject.Inject;\r
10 import javax.inject.Named;\r
11 \r
12 import org.apache.log4j.Logger;\r
13 \r
14 import com.indexdata.mkjsf.config.ConfigurationReader;\r
15 import com.indexdata.mkjsf.pazpar2.sp.ServiceProxyClient;\r
16 import com.indexdata.mkjsf.pazpar2.sp.ServiceProxyInterface;\r
17 import com.indexdata.mkjsf.pazpar2.sp.auth.ServiceProxyUser;\r
18 import com.indexdata.mkjsf.utils.Utils;\r
19 \r
20 @Named("pz2") @SessionScoped @Alternative\r
21 public class Pz2ProxyBean extends Pz2Bean implements ServiceProxyInterface {\r
22     \r
23   private static final long serialVersionUID = 4221824985678758225L;\r
24   private static Logger logger = Logger.getLogger(Pz2ProxyBean.class);  \r
25   private String initDocFileName = "";\r
26   private String initDocResponse = "";\r
27   private String serviceProxyUrl = "";  \r
28     \r
29   @Inject ConfigurationReader configurator;\r
30   @Inject ServiceProxyUser user;    \r
31   \r
32   public Pz2ProxyBean() {\r
33   }\r
34   \r
35   @PostConstruct\r
36   public void postConstruct() {\r
37     if (searchClient == null) {\r
38       logger.debug(Utils.objectId(this) + " will instantiate a ServiceProxyClient next.");    \r
39       searchClient = new ServiceProxyClient();\r
40       logger.info("Using [" + Utils.objectId(searchClient) + "] configured by [" \r
41                             + Utils.objectId(configurator) + "]" );    \r
42       configureClient(searchClient,configurator);\r
43       stateMgr.addStateListener(this);\r
44     } else {\r
45       logger.debug("Pz2ProxyBean:postConstruct: searchClient already instantiated " +\r
46                         "during construction of parent object Pz2Bean.");\r
47     }\r
48   }\r
49   \r
50   public void login(String un, String pw) {\r
51     if (user.isAuthenticated() && user.getName().equals(un) && ((ServiceProxyClient) searchClient).checkAuthentication(user)) {\r
52       logger.info("Repeat request from UI to authenticate user. Auth verified for given user name so skipping log-in.");\r
53     } else {\r
54       logger.info("doing un/pw login");\r
55       user.setName(un);\r
56       user.setPassword(pw);\r
57       login("dummy");\r
58     }\r
59   }\r
60 \r
61   @Override\r
62   public String login(String navigateTo) {\r
63     logger.info("doing login");\r
64     ((ServiceProxyClient)searchClient).authenticate(user);    \r
65     pzreq.getRecord().removeParametersInState();\r
66     pzreq.getSearch().removeParametersInState();\r
67     pzresp.reset();\r
68     return navigateTo;\r
69   }\r
70   \r
71   public void ipAuthenticate (ServiceProxyUser user) {\r
72     if (!user.isAuthenticated()) {\r
73       ((ServiceProxyClient)searchClient).ipAuthenticate(user);\r
74     }\r
75   }\r
76 \r
77   @Override\r
78   public void setServiceProxyUrl(String url) {\r
79     logger.info("Setting Service Proxy url: " + url);\r
80     serviceProxyUrl = url;\r
81     pzreq.getRecord().removeParametersInState();\r
82     pzreq.getSearch().removeParametersInState();\r
83     pzresp.reset();\r
84   }\r
85   \r
86   public String getServiceProxyUrl() {\r
87     return serviceProxyUrl;\r
88   }\r
89     \r
90   public String getInitDocPath () {\r
91     return searchClient.getConfiguration().get("INIT_DOC_PATH");\r
92   }\r
93   \r
94   @Override\r
95   public void setInitFileName(String fileName) {\r
96     this.initDocFileName = fileName;\r
97     \r
98   }\r
99 \r
100   @Override\r
101   public String getInitFileName() {\r
102     return initDocFileName;\r
103   }\r
104 \r
105   @Override\r
106   public String postInit() throws UnsupportedEncodingException, IOException {    \r
107     String initDocPath = ((ServiceProxyClient)searchClient).getInitDocPaths()[0];\r
108     logger.info("Paths: " + ((ServiceProxyClient)searchClient).getInitDocPaths());\r
109     logger.info("Path: " + initDocPath);\r
110     pzresp.reset();\r
111     byte[] response = ((ServiceProxyClient)searchClient).postInitDoc(initDocPath + getInitFileName());\r
112     initDocResponse = new String(response,"UTF-8");\r
113     return initDocResponse;\r
114   }\r
115   \r
116   @Override\r
117   public String postInit(byte[] initDoc) throws UnsupportedEncodingException, IOException {    \r
118     pzresp.reset();\r
119     byte[] response = ((ServiceProxyClient)searchClient).postInitDoc(initDoc);\r
120     initDocResponse = new String(response,"UTF-8");\r
121     return initDocResponse;\r
122   }\r
123 \r
124 \r
125   @Override\r
126   public String getInitResponse() {\r
127     return initDocResponse;\r
128   }\r
129   \r
130   public void setAceFilter(String filterExpression) {\r
131     //setCommandParameter("record",new CommandParameter("acefilter","=",filterExpression));\r
132   }\r
133   \r
134   public String getAceFilter () {\r
135     return null;\r
136     // return getCommandParameterValue("record","acefilter","");\r
137   }\r
138 }\r