More error handling/reporting. Normalizing auth resp
[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.sp.auth.ServiceProxyUser;\r
24 import com.indexdata.mkjsf.utils.Utils;\r
25 \r
26 @Named("pz2x") @SessionScoped\r
27 public class ServiceProxyExtensions implements ServiceProxyInterface, Serializable {\r
28     \r
29   private static final long serialVersionUID = 4221824985678758225L;\r
30   private static Logger logger = Logger.getLogger(ServiceProxyExtensions.class);  \r
31   private String initDocFileName = "";\r
32   private String initDocResponse = "";  \r
33   private InitDocUpload initDocUpload; \r
34     \r
35   @Inject ConfigurationReader configurator;  \r
36   @Inject ServiceProxyUser user;    \r
37   @Inject Pz2Bean pz2;\r
38   @Inject Pazpar2Commands pzreq;\r
39   @Inject Responses pzresp;\r
40 \r
41   \r
42   public ServiceProxyExtensions() {\r
43     this.initDocUpload = new InitDocUpload(this);\r
44     // TODO: \r
45     //stateMgr.addStateListener(this);\r
46   }\r
47    \r
48   /*\r
49   public void login(String un, String pw) {\r
50     if (user.isAuthenticated() && user.getName().equals(un) && pz2.spClient.checkAuthentication(user)) {\r
51       logger.info("Repeat request from UI to authenticate user. Auth verified for given user name so skipping log-in.");\r
52     } else {\r
53       logger.info("doing un/pw login");\r
54       user.setName(un);\r
55       user.setPassword(pw);\r
56       login("dummy");\r
57     }\r
58   }\r
59   */\r
60 \r
61   \r
62   @Override  \r
63   public String login(String navigateTo) {\r
64     logger.info("doing login by " + user + " using " + pz2 + " and client " + pz2.getSpClient());\r
65     pz2.resetSearchAndRecordCommands();\r
66     pzresp.resetAllSessionData();\r
67     AuthCommand auth = pzreq.getSp().getAuth(); \r
68     auth.setParametersInState(new CommandParameter("action","=","login"),\r
69                               new CommandParameter("username","=",user.getName()),\r
70                               new CommandParameter("password","=",user.getPassword()));\r
71     ClientCommandResponse commandResponse = pz2.getSpClient().send(auth);\r
72     String renamedResponse = renameResponseElement(commandResponse.getResponseString(), "auth");\r
73     commandResponse.setResponseToParse(renamedResponse);\r
74     AuthResponse responseObject = (AuthResponse) ResponseParser.getParser().getDataObject(commandResponse);\r
75     if (ResponseParser.docTypes.contains(responseObject.getType())) {\r
76       pzresp.put(auth.getCommandName(), responseObject);\r
77     }\r
78     String responseStr = commandResponse.getResponseString();\r
79     logger.info(responseStr);      \r
80     if (responseStr.contains("FAIL")) {\r
81       user.credentialsAuthenticationSucceeded(false);    \r
82     } else {\r
83       user.credentialsAuthenticationSucceeded(true);    \r
84     }      \r
85     return navigateTo;\r
86   }\r
87   \r
88   \r
89   public void ipAuthenticate (ServiceProxyUser user) {\r
90     if (!user.isIpAuthenticated()) {\r
91       if (user.isAuthenticated()) {\r
92         user.clear();\r
93       }\r
94       pz2.resetSearchAndRecordCommands();\r
95       pzresp.resetAllSessionData();\r
96       AuthCommand auth = pzreq.getSp().getAuth(); \r
97       auth.setParameterInState(new CommandParameter("action","=","ipAuth"));\r
98       ClientCommandResponse commandResponse = pz2.getSpClient().send(auth);      \r
99       String renamedResponse = renameResponseElement(commandResponse.getResponseString(), "auth");\r
100       commandResponse.setResponseToParse(renamedResponse);\r
101       ResponseDataObject responseObject = ResponseParser.getParser().getDataObject(commandResponse);\r
102       if (ResponseParser.docTypes.contains(responseObject.getType())) {\r
103         pzresp.put(auth.getCommandName(), responseObject);\r
104       }\r
105       String responseStr = commandResponse.getResponseString();\r
106       logger.info(responseStr);      \r
107       if (responseStr.contains("FAIL")) {\r
108         user.credentialsAuthenticationSucceeded(false);    \r
109       } else {\r
110         user.credentialsAuthenticationSucceeded(true);    \r
111       }      \r
112     }\r
113   }\r
114   \r
115   private String renameResponseElement(String responseString, String newName) {\r
116     responseString = responseString.replace("<response>", "<" + newName + ">");\r
117     responseString = responseString.replace("</response>", "</" + newName + ">");\r
118     return responseString;\r
119   }\r
120     \r
121   public String getInitDocPath () {\r
122     return pz2.getSpClient().getConfiguration().get("INIT_DOC_PATH");\r
123   }\r
124   \r
125   @Override\r
126   public void setInitFileName(String fileName) {\r
127     this.initDocFileName = fileName;\r
128     \r
129   }\r
130 \r
131   @Override\r
132   public String getInitFileName() {\r
133     return initDocFileName;\r
134   }\r
135 \r
136   @Override\r
137   public ClientCommandResponse postInit() throws UnsupportedEncodingException, IOException {    \r
138     String initDocPath = pz2.getSpClient().getInitDocPaths().get(0);\r
139     logger.info("Paths: " + pz2.getSpClient().getInitDocPaths());\r
140     logger.info("Path: " + initDocPath);\r
141     pz2.resetSearchAndRecordCommands();\r
142     pzresp.resetAllSessionData();\r
143     ClientCommandResponse response = pz2.getSpClient().postInitDoc(initDocPath + getInitFileName());    \r
144     return response;\r
145   }\r
146   \r
147   @Override\r
148   public HttpResponseWrapper postInit(byte[] initDoc, boolean includeDebug) throws UnsupportedEncodingException, IOException {    \r
149     pz2.resetSearchAndRecordCommands();\r
150     pzresp.resetAllSessionData();\r
151     HttpResponseWrapper response = pz2.getSpClient().postInitDoc(initDoc,includeDebug);    \r
152     return response;\r
153   }\r
154 \r
155   @Override\r
156   public String getInitResponse() {\r
157     return initDocResponse;\r
158   }\r
159   \r
160   public void setUploadedInitDoc (UploadedFile uploadedFile) {\r
161     initDocUpload.setUploadedFile(uploadedFile);\r
162   }\r
163   \r
164   public UploadedFile getUploadedInitDoc () {\r
165     return initDocUpload.getUploadedFile();\r
166   }\r
167   \r
168   public void submitInitDoc () throws IOException {\r
169     ClientCommandResponse response =  (ClientCommandResponse) initDocUpload.submit();\r
170     ResponseDataObject responseObject = ResponseParser.getParser().getDataObject(response);\r
171     logger.info("Putting init response to : " + Utils.objectId(pzresp));\r
172     pzresp.put("init", responseObject);\r
173   }\r
174   \r
175   public void setIncludeInitDocDebug(boolean bool) {\r
176     logger.info(Utils.objectId(this) + " setting debug to " + bool);\r
177     initDocUpload.setIncludeDebug(bool);\r
178   }\r
179 \r
180   public boolean getIncludeInitDocDebug() {\r
181     return initDocUpload.getIncludeDebug();\r
182   }\r
183   \r
184   // TODO: Remove when possible\r
185   public InitDocUpload getInitDocUpload () {\r
186     return initDocUpload;\r
187   }\r
188 }\r