Hacks login method to make mk2jsf demo work for now.
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / ServiceProxyExtensions.java
1 package com.indexdata.mkjsf.pazpar2;\r
2 \r
3 import java.io.IOException;\r
4 import java.io.Serializable;\r
5 import java.io.UnsupportedEncodingException;\r
6 \r
7 import javax.enterprise.context.SessionScoped;\r
8 import javax.inject.Inject;\r
9 import javax.inject.Named;\r
10 \r
11 import org.apache.log4j.Logger;\r
12 import org.apache.myfaces.custom.fileupload.UploadedFile;\r
13 \r
14 import com.indexdata.mkjsf.config.ConfigurationReader;\r
15 import com.indexdata.mkjsf.pazpar2.commands.CommandParameter;\r
16 import com.indexdata.mkjsf.pazpar2.commands.Pazpar2Commands;\r
17 import com.indexdata.mkjsf.pazpar2.commands.sp.AuthCommand;\r
18 import com.indexdata.mkjsf.pazpar2.commands.sp.InitDocUpload;\r
19 import com.indexdata.mkjsf.pazpar2.data.AuthResponse;\r
20 import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;\r
21 import com.indexdata.mkjsf.pazpar2.data.ResponseParser;\r
22 import com.indexdata.mkjsf.pazpar2.data.Responses;\r
23 import com.indexdata.mkjsf.pazpar2.data.sp.CategoriesResponse;\r
24 import com.indexdata.mkjsf.pazpar2.sp.auth.ServiceProxyUser;\r
25 import com.indexdata.mkjsf.utils.Utils;\r
26 \r
27 @Named("pz2x") @SessionScoped\r
28 public class ServiceProxyExtensions implements ServiceProxyInterface, Serializable {\r
29     \r
30   private static final long serialVersionUID = 4221824985678758225L;\r
31   private static Logger logger = Logger.getLogger(ServiceProxyExtensions.class);  \r
32   private String initDocFileName = "";\r
33   private String initDocResponse = "";  \r
34   private InitDocUpload initDocUpload; \r
35     \r
36   @Inject ConfigurationReader configurator;  \r
37   @Inject ServiceProxyUser user;    \r
38   @Inject Pz2Bean pz2;\r
39   @Inject Pazpar2Commands pzreq;\r
40   @Inject Responses pzresp;\r
41 \r
42   \r
43   public ServiceProxyExtensions() {\r
44     this.initDocUpload = new InitDocUpload(this);\r
45     // TODO: \r
46     //stateMgr.addStateListener(this);\r
47   }\r
48    \r
49 \r
50   public void login(String un, String pw) {\r
51     if (user.isAuthenticated() && user.getName().equals(un) /* && pz2.spClient.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("");\r
58     }\r
59   }\r
60 \r
61 \r
62   \r
63   @Override  \r
64   public String login(String navigateTo) {\r
65     logger.info("doing login by " + user + " using " + pz2 + " and client " + pz2.getSpClient());\r
66     pz2.resetSearchAndRecordCommands();\r
67     pzresp.resetAllSessionData();\r
68     AuthCommand auth = pzreq.getSp().getAuth(); \r
69     auth.setParametersInState(new CommandParameter("action","=","login"),\r
70                               new CommandParameter("username","=",user.getName()),\r
71                               new CommandParameter("password","=",user.getPassword()));\r
72     ClientCommandResponse commandResponse = pz2.getSpClient().send(auth);\r
73     String renamedResponse = renameResponseElement(commandResponse.getResponseString(), "auth");\r
74     commandResponse.setResponseToParse(renamedResponse);\r
75     AuthResponse responseObject = (AuthResponse) ResponseParser.getParser().getDataObject(commandResponse);\r
76     if (ResponseParser.docTypes.contains(responseObject.getType())) {\r
77       pzresp.put(auth.getCommandName(), responseObject);\r
78     }\r
79     String responseStr = commandResponse.getResponseString();\r
80     logger.info(responseStr);      \r
81     if (responseStr.contains("FAIL")) {\r
82       user.credentialsAuthenticationSucceeded(false);    \r
83     } else {\r
84       user.credentialsAuthenticationSucceeded(true);    \r
85     }      \r
86     return navigateTo;\r
87   }\r
88   \r
89   \r
90   public void ipAuthenticate (ServiceProxyUser user) {\r
91     if (!user.isIpAuthenticated()) {\r
92       if (user.isAuthenticated()) {\r
93         user.clear();\r
94       }\r
95       pz2.resetSearchAndRecordCommands();\r
96       pzresp.resetAllSessionData();\r
97       AuthCommand auth = pzreq.getSp().getAuth(); \r
98       auth.setParameterInState(new CommandParameter("action","=","ipAuth"));\r
99       ClientCommandResponse commandResponse = pz2.getSpClient().send(auth);      \r
100       String renamedResponse = renameResponseElement(commandResponse.getResponseString(), "auth");\r
101       commandResponse.setResponseToParse(renamedResponse);\r
102       ResponseDataObject responseObject = ResponseParser.getParser().getDataObject(commandResponse);\r
103       if (ResponseParser.docTypes.contains(responseObject.getType())) {\r
104         pzresp.put(auth.getCommandName(), responseObject);\r
105       }\r
106       String responseStr = commandResponse.getResponseString();\r
107       logger.info(responseStr);      \r
108       if (responseStr.contains("FAIL")) {\r
109         user.credentialsAuthenticationSucceeded(false);    \r
110       } else {\r
111         user.credentialsAuthenticationSucceeded(true);    \r
112       }      \r
113     }\r
114   }\r
115   \r
116   private String renameResponseElement(String responseString, String newName) {\r
117     responseString = responseString.replace("<response>", "<" + newName + ">");\r
118     responseString = responseString.replace("</response>", "</" + newName + ">");\r
119     return responseString;\r
120   }\r
121     \r
122   public String getInitDocPath () {\r
123     return pz2.getSpClient().getConfiguration().get("INIT_DOC_PATH");\r
124   }\r
125   \r
126   @Override\r
127   public void setInitFileName(String fileName) {\r
128     this.initDocFileName = fileName;\r
129     \r
130   }\r
131 \r
132   @Override\r
133   public String getInitFileName() {\r
134     return initDocFileName;\r
135   }\r
136 \r
137   @Override\r
138   public ClientCommandResponse postInit() throws UnsupportedEncodingException, IOException {    \r
139     String initDocPath = pz2.getSpClient().getInitDocPaths().get(0);\r
140     logger.info("Paths: " + pz2.getSpClient().getInitDocPaths());\r
141     logger.info("Path: " + initDocPath);\r
142     pz2.resetSearchAndRecordCommands();\r
143     pzresp.resetAllSessionData();\r
144     ClientCommandResponse response = pz2.getSpClient().postInitDoc(initDocPath + getInitFileName());    \r
145     return response;\r
146   }\r
147   \r
148   @Override\r
149   public HttpResponseWrapper postInit(byte[] initDoc, boolean includeDebug) throws UnsupportedEncodingException, IOException {    \r
150     pz2.resetSearchAndRecordCommands();\r
151     pzresp.resetAllSessionData();\r
152     HttpResponseWrapper response = pz2.getSpClient().postInitDoc(initDoc,includeDebug);    \r
153     return response;\r
154   }\r
155 \r
156   @Override\r
157   public String getInitResponse() {\r
158     return initDocResponse;\r
159   }\r
160   \r
161   public void setUploadedInitDoc (UploadedFile uploadedFile) {\r
162     initDocUpload.setUploadedFile(uploadedFile);\r
163   }\r
164   \r
165   public UploadedFile getUploadedInitDoc () {\r
166     return initDocUpload.getUploadedFile();\r
167   }\r
168   \r
169   public void submitInitDoc () throws IOException {\r
170     ClientCommandResponse response =  (ClientCommandResponse) initDocUpload.submit();\r
171     ResponseDataObject responseObject = ResponseParser.getParser().getDataObject(response);\r
172     logger.info("Putting init response to : " + Utils.objectId(pzresp));\r
173     pzresp.put("init", responseObject);\r
174   }\r
175   \r
176   public void setIncludeInitDocDebug(boolean bool) {\r
177     logger.info(Utils.objectId(this) + " setting debug to " + bool);\r
178     initDocUpload.setIncludeDebug(bool);\r
179   }\r
180 \r
181   public boolean getIncludeInitDocDebug() {\r
182     return initDocUpload.getIncludeDebug();\r
183   }\r
184   \r
185   // TODO: Remove when possible\r
186   public InitDocUpload getInitDocUpload () {\r
187     return initDocUpload;\r
188   }\r
189   \r
190   public CategoriesResponse getCategories () {\r
191     ResponseDataObject response = pz2.doCommand("categories");\r
192     if (response.hasApplicationError()) {\r
193       logger.debug(response.getXml());\r
194       return new CategoriesResponse();\r
195     } else {\r
196       try {\r
197         return (CategoriesResponse) response;\r
198       } catch (Exception e) {\r
199         e.printStackTrace();\r
200         logger.debug(response.getXml());\r
201         return new CategoriesResponse();\r
202       }\r
203     }\r
204   }\r
205   \r
206   \r
207 }\r