use of org.collectionspace.csp.api.ui.UIException in project application by collectionspace.
the class TenantServlet method serviceWTenant.
/**
* If you know the tenant id then
* Check for global issues and if not run set up and then test if this is a init request, a composite request or a single request and
* do the right thing
* @param tenantid
* @param pathparts
* @param initcheck
* @param servlet_request
* @param servlet_response
* @throws ServletException
* @throws IOException
* @throws BadRequestException
* @throws UnauthorizedException
*/
protected void serviceWTenant(String tenantid, List<String> pathparts, String initcheck, HttpServletRequest servlet_request, HttpServletResponse servlet_response) throws ServletException, IOException, BadRequestException, UnauthorizedException {
if (locked_down != null) {
// this ended up with a status 200 hmmmm not great so changed it to return a 400... hopefully that wont break anythign else
servlet_response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Servlet is locked down in a hard fail because of fatal error: " + locked_down);
// servlet_response.getWriter().append("Servlet is locked down in a hard fail because of fatal error: "+locked_down);
return;
}
if (initcheck.equals("init")) {
tenantCSPM.put(tenantid, new CSPManagerImpl());
tenantInit.put(tenantid, false);
setup(tenantid);
ConfigFinder cfg = new ConfigFinder(getServletContext());
try {
InputSource cfg_stream = cfg.resolveEntity("-//CSPACE//ROOT", "cspace-config-" + tenantid + ".xml");
String test = IOUtils.toString(cfg_stream.getByteStream());
// servlet_response.sendError(HttpServletResponse.SC_BAD_REQUEST, "cspace-config re-loaded"+test);
servlet_response.getWriter().append("cspace-config re-loaded" + test);
} catch (SAXException e) {
// TODO Auto-generated catch block
servlet_response.sendError(HttpServletResponse.SC_BAD_REQUEST, "cspace-config re-loadedfailed");
}
return;
}
if (!tenantInit.containsKey(tenantid) || !tenantInit.get(tenantid)) {
setup(tenantid);
}
if (locked_down != null) {
// this ended up with a status 200 hmmmm not great so changed it to return a 400... hopefully that wont break anythign else
servlet_response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Servlet is locked down in a hard fail because of fatal error: " + locked_down);
// servlet_response.getWriter().append("Servlet is locked down in a hard fail because of fatal error: "+locked_down);
return;
}
if (perhapsServeFixedContent(servlet_request, servlet_response)) {
return;
}
// Setup our request object
UI web = tenantCSPM.get(tenantid).getUI("web");
if (!tenantUmbrella.containsKey(tenantid)) {
synchronized (getClass()) {
if (!tenantUmbrella.containsKey(tenantid)) {
tenantUmbrella.put(tenantid, new WebUIUmbrella((WebUI) web));
}
}
}
try {
ConfigRoot root = tenantCSPM.get(tenantid).getConfigRoot();
Spec spec = (Spec) root.getRoot(Spec.SPEC_ROOT);
WebUIRequest req = new WebUIRequest(tenantUmbrella.get(tenantid), servlet_request, servlet_response, spec.getAdminData().getCookieLife(), pathparts);
if (is_composite(req)) {
serve_composite(web, req);
} else {
web.serviceRequest(req);
req.solidify(true);
}
} catch (UIException e) {
throw new BadRequestException("UIException", e);
}
}
use of org.collectionspace.csp.api.ui.UIException in project application by collectionspace.
the class NullResolver method serviceUIWTenant.
/**
* UI specific logic to work out the file needed from the server based on the url
* fromthe cspace-ui servlet context
* @param tenant
* @param servlet_request
* @param servlet_response
* @throws BadRequestException
* @throws ConnectionException
* @throws DocumentException
* @throws IOException
*/
protected void serviceUIWTenant(String tenant, HttpServletRequest servlet_request, HttpServletResponse servlet_response) throws BadRequestException, ConnectionException, DocumentException, IOException {
String pathinfo = servlet_request.getPathInfo();
String[] pathbits = pathinfo.substring(1).split("/");
String urlredirect = "/collectionspace/ui/" + tenant + "/html/index.html";
// clean up bad links - hopefully these links are never found any more...
if (pathinfo.equals("/html") || pathinfo.equals("/html/")) {
servlet_response.sendRedirect(urlredirect);
} else if (pathinfo.equals("/" + tenant) || pathinfo.equals("/" + tenant + "/html") || pathinfo.equals("/" + tenant + "/")) {
servlet_response.sendRedirect(urlredirect);
} else if (pathinfo.equals("/" + tenant + "/index.html") || pathinfo.equals("/" + tenant + "/html/")) {
servlet_response.sendRedirect(urlredirect);
} else if (pathinfo.equals("/" + tenant + "/html") || pathinfo.equals("/" + tenant + "/html/")) {
servlet_response.sendRedirect(urlredirect);
}
ServletContext sc = null;
sc = getServletContext().getContext("/cspace-ui");
if (sc == null) {
servlet_response.sendError(HttpServletResponse.SC_BAD_REQUEST, "missing servlet context cspace-ui");
}
// work out what to do with the item based on it's type
if (pathbits[0].equals("css") || pathbits[0].equals("js") || pathbits[0].equals("lib") || pathbits[0].equals("images")) {
String tenantposs = getTenantByCookie(servlet_request);
if (serverFixedExternalContent(servlet_request, servlet_response, sc, pathinfo, tenantposs)) {
return;
}
}
if (pathbits[0].equals("bundle")) {
String tenantposs = getTenantByCookie(servlet_request);
if (serverCreateMergedExternalContent(servlet_request, servlet_response, sc, pathinfo, tenantposs)) {
return;
}
}
if (pathbits[0].equals("config") || pathbits[1].equals("config")) {
// tenant = getTenantByCookie(servlet_request);
}
if (!tenantInit.containsKey(tenant) || !tenantInit.get(tenant)) {
setup(tenant);
}
/**
* Support composite requests in ui calls as well as app direct calls
*/
if (is_composite(pathinfo)) {
List<String> p = new ArrayList<String>();
for (String part : servlet_request.getPathInfo().split("/")) {
if ("".equals(part))
continue;
p.add(part);
}
p.remove(0);
ConfigRoot root = tenantCSPM.get(tenant).getConfigRoot();
Spec spec = (Spec) root.getRoot(Spec.SPEC_ROOT);
WebUIRequest req;
UI web = tenantCSPM.get(tenant).getUI("web");
if (!tenantUmbrella.containsKey(tenant)) {
synchronized (getClass()) {
if (!tenantUmbrella.containsKey(tenant)) {
tenantUmbrella.put(tenant, new WebUIUmbrella((WebUI) web));
}
}
}
try {
req = new WebUIRequest(tenantUmbrella.get(tenant), servlet_request, servlet_response, spec.getAdminData().getCookieLife(), p);
serveComposite(tenant, req, sc);
} catch (UIException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
serveSingle(tenant, servlet_request, servlet_response, pathinfo, pathbits, sc);
}
}
use of org.collectionspace.csp.api.ui.UIException in project application by collectionspace.
the class WebUIRequest method initRequest.
private void initRequest(UIUmbrella umbrella, HttpServletRequest request, HttpServletResponse response, List<String> p) throws IOException, UIException {
this.request = request;
this.response = response;
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload();
// Parse the request
FileItemIterator iter;
try {
iter = upload.getItemIterator(request);
while (iter.hasNext()) {
FileItemStream item = iter.next();
String name = item.getFieldName();
// InputStream stream = item.openStream();
if (item.isFormField()) {
// System.out.println("Form field " + name + " with value "
// + Streams.asString(stream) + " detected.");
} else {
// System.out.println("File field " + name + " with file name "
// + item.getName() + " detected.");
// Process the input stream
contentHeaders = item.getHeaders();
uploadName = item.getName();
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
if (item != null) {
InputStream stream = item.openStream();
IOUtils.copy(stream, byteOut);
new TeeInputStream(stream, byteOut);
}
bytebody = byteOut.toByteArray();
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
body = IOUtils.toString(request.getInputStream(), "UTF-8");
}
this.ppath = p.toArray(new String[0]);
if (!(umbrella instanceof WebUIUmbrella))
throw new UIException("Bad umbrella");
this.umbrella = (WebUIUmbrella) umbrella;
session = calculateSessionId();
}
use of org.collectionspace.csp.api.ui.UIException in project application by collectionspace.
the class UserDetailsDelete method store_delete.
private void store_delete(Storage storage, UIRequest request, String path) throws UIException {
try {
// Deleting a user needs to clear the userperms cache for safety.
ResponseCache.clearCache(ResponseCache.USER_PERMS_CACHE);
storage.deleteJSON(base + "/" + path);
} catch (ExistException e) {
throw new UIException("JSON Not found " + e, e);
} catch (UnimplementedException e) {
throw new UIException("Unimplemented", e);
} catch (UnderlyingStorageException x) {
UIException uiexception = new UIException(x.getMessage(), x.getStatus(), x.getUrl(), x);
request.sendJSONResponse(uiexception.getJSON());
}
}
use of org.collectionspace.csp.api.ui.UIException in project application by collectionspace.
the class UserDetailsReset method doEmail.
private Boolean doEmail(String csid, String emailparam, Request in, JSONObject userdetails) throws UIException, JSONException {
String token = createToken(csid);
EmailData ed = spec.getEmailData();
String[] recipients = new String[1];
/* ABSTRACT EMAIL STUFF : WHERE do we get the content of emails from? cspace-config.xml */
String messagebase = ed.getPasswordResetMessage();
String link = ed.getBaseURL() + ed.getLoginUrl() + "?token=" + token + "&email=" + emailparam;
String message = messagebase.replaceAll("\\{\\{link\\}\\}", link);
String greeting = userdetails.getJSONObject("fields").getString("screenName");
message = message.replaceAll("\\{\\{greeting\\}\\}", greeting);
message = message.replaceAll("\\\\n", "\\\n");
message = message.replaceAll("\\\\r", "\\\r");
String SMTP_HOST_NAME = ed.getSMTPHost();
String SMTP_PORT = ed.getSMTPPort();
String subject = ed.getPasswordResetSubject();
String from = ed.getFromAddress();
if (ed.getToAddress().isEmpty()) {
recipients[0] = emailparam;
} else {
recipients[0] = ed.getToAddress();
}
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
boolean debug = false;
Properties props = new Properties();
props.put("mail.smtp.host", SMTP_HOST_NAME);
props.put("mail.smtp.auth", ed.doSMTPAuth());
props.put("mail.debug", ed.doSMTPDebug());
props.put("mail.smtp.port", SMTP_PORT);
Session session = Session.getDefaultInstance(props);
// XXX fix to allow authpassword /username
session.setDebug(debug);
Message msg = new MimeMessage(session);
InternetAddress addressFrom;
try {
addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
InternetAddress[] addressTo = new InternetAddress[recipients.length];
for (int i = 0; i < recipients.length; i++) {
addressTo[i] = new InternetAddress(recipients[i]);
}
msg.setRecipients(Message.RecipientType.TO, addressTo);
// Setting the Subject and Content Type
msg.setSubject(subject);
msg.setText(message);
Transport.send(msg);
} catch (AddressException e) {
throw new UIException("AddressException: " + e.getMessage());
} catch (MessagingException e) {
throw new UIException("MessagingException: " + e.getMessage());
}
return true;
}
Aggregations