use of com.zimbra.cs.service.UserServlet.HttpInputStream in project zm-mailbox by Zimbra.
the class WebDavClient method sendPut.
public HttpInputStream sendPut(String href, byte[] buf, String contentType, String etag, Collection<Pair<String, String>> headers) throws IOException, HttpException {
boolean done = false;
HttpResponse response = null;
while (!done) {
HttpPut put = new HttpPut(mBaseUrl + href);
put.setEntity(new ByteArrayEntity(buf, ContentType.create(contentType)));
if (mDebugEnabled && contentType.startsWith("text"))
ZimbraLog.dav.debug("PUT payload: \n" + new String(buf, "UTF-8"));
if (etag != null)
put.addHeader(DavProtocol.HEADER_IF_MATCH, etag);
if (headers != null)
for (Pair<String, String> h : headers) put.addHeader(h.getFirst(), h.getSecond());
response = executeMethod(put, Depth.zero);
int ret = response.getStatusLine().getStatusCode();
if (ret == HttpStatus.SC_MOVED_PERMANENTLY || ret == HttpStatus.SC_MOVED_TEMPORARILY) {
Header newLocation = response.getFirstHeader("Location");
if (newLocation != null) {
href = newLocation.getValue();
ZimbraLog.dav.debug("redirect to new url = " + href);
put.releaseConnection();
continue;
}
}
done = true;
}
return new HttpInputStream(response);
}
use of com.zimbra.cs.service.UserServlet.HttpInputStream in project zm-mailbox by Zimbra.
the class WebDavClient method sendGet.
public HttpInputStream sendGet(String href) throws IOException, HttpException {
HttpGet get = new HttpGet(mBaseUrl + href);
HttpResponse response = executeMethod(get, Depth.zero);
return new HttpInputStream(response);
}
use of com.zimbra.cs.service.UserServlet.HttpInputStream in project zm-mailbox by Zimbra.
the class CalDavClient method getCalendarData.
public Appointment getCalendarData(Appointment appt) throws IOException, HttpException {
HttpInputStream resp = sendGet(appt.href);
appt.data = null;
if (resp.getStatusCode() == 200) {
byte[] res = ByteUtil.getContent(resp, resp.getContentLength());
appt.data = new String(res, "UTF-8");
}
return appt;
}
use of com.zimbra.cs.service.UserServlet.HttpInputStream in project zm-mailbox by Zimbra.
the class HtmlFormatter method dispatchJspRest.
static void dispatchJspRest(Servlet servlet, UserServletContext context) throws ServiceException, ServletException, IOException {
AuthToken auth = null;
long expiration = System.currentTimeMillis() + AUTH_EXPIRATION;
if (context.basicAuthHappened) {
Account acc = context.getAuthAccount();
if (acc instanceof GuestAccount) {
auth = AuthToken.getAuthToken(acc.getId(), acc.getName(), null, ((GuestAccount) acc).getDigest(), expiration);
} else {
auth = AuthProvider.getAuthToken(context.getAuthAccount(), expiration);
}
} else if (context.cookieAuthHappened) {
auth = UserServlet.getAuthTokenFromCookie(context.req, context.resp, true);
} else {
auth = AuthToken.getAuthToken(GuestAccount.GUID_PUBLIC, null, null, null, expiration);
}
if (auth != null && context.targetAccount != null && context.targetAccount != context.getAuthAccount()) {
auth.setProxyAuthToken(Provisioning.getInstance().getProxyAuthToken(context.targetAccount.getId(), null));
}
String authString = null;
try {
if (auth != null)
authString = auth.getEncoded();
} catch (AuthTokenException e) {
throw new ServletException("error generating the authToken", e);
}
Account targetAccount = context.targetAccount;
MailItem targetItem = context.target;
String uri = (String) context.req.getAttribute("requestedPath");
if (targetItem instanceof Mountpoint && ((Mountpoint) targetItem).getDefaultView() != MailItem.Type.APPOINTMENT) {
Mountpoint mp = (Mountpoint) targetItem;
Provisioning prov = Provisioning.getInstance();
targetAccount = prov.getAccountById(mp.getOwnerId());
Pair<Header[], HttpInputStream> remoteItem = UserServlet.getRemoteResourceAsStream((auth == null) ? null : auth.toZAuthToken(), mp.getTarget(), context.extraPath);
remoteItem.getSecond().close();
String remoteItemId = null;
String remoteItemType = null;
String remoteItemName = null;
String remoteItemPath = null;
for (Header h : remoteItem.getFirst()) if (h.getName().compareToIgnoreCase("X-Zimbra-ItemId") == 0)
remoteItemId = h.getValue();
else if (h.getName().compareToIgnoreCase("X-Zimbra-ItemType") == 0)
remoteItemType = h.getValue();
else if (h.getName().compareToIgnoreCase("X-Zimbra-ItemName") == 0)
remoteItemName = h.getValue();
else if (h.getName().compareToIgnoreCase("X-Zimbra-ItemPath") == 0)
remoteItemPath = h.getValue();
context.req.setAttribute(ATTR_TARGET_ITEM_ID, remoteItemId);
context.req.setAttribute(ATTR_TARGET_ITEM_TYPE, remoteItemType);
context.req.setAttribute(ATTR_TARGET_ITEM_NAME, remoteItemName);
context.req.setAttribute(ATTR_TARGET_ITEM_PATH, remoteItemPath);
context.req.setAttribute(ATTR_TARGET_ITEM_COLOR, mp.getColor());
context.req.setAttribute(ATTR_TARGET_ITEM_VIEW, mp.getDefaultView().toByte());
targetItem = null;
}
context.req.setAttribute(ATTR_INTERNAL_DISPATCH, "yes");
context.req.setAttribute(ATTR_REQUEST_URI, uri != null ? uri : context.req.getRequestURI());
context.req.setAttribute(ATTR_AUTH_TOKEN, authString);
context.req.setAttribute(ATTR_CSRF_ENABLED, auth.isCsrfTokenEnabled());
if (targetAccount != null) {
context.req.setAttribute(ATTR_TARGET_ACCOUNT_NAME, targetAccount.getName());
context.req.setAttribute(ATTR_TARGET_ACCOUNT_ID, targetAccount.getId());
context.req.setAttribute(ATTR_TARGET_ACCOUNT_PREF_TIME_ZONE, targetAccount.getAttr(Provisioning.A_zimbraPrefTimeZoneId));
context.req.setAttribute(ATTR_TARGET_ACCOUNT_PREF_SKIN, targetAccount.getAttr(Provisioning.A_zimbraPrefSkin));
context.req.setAttribute(ATTR_TARGET_ACCOUNT_PREF_LOCALE, targetAccount.getAttr(Provisioning.A_zimbraPrefLocale));
context.req.setAttribute(ATTR_TARGET_ACCOUNT_PREF_CALENDAR_FIRST_DAY_OF_WEEK, targetAccount.getAttr(Provisioning.A_zimbraPrefCalendarFirstDayOfWeek));
context.req.setAttribute(ATTR_TARGET_ACCOUNT_PREF_CALENDAR_DAY_HOUR_START, targetAccount.getAttr(Provisioning.A_zimbraPrefCalendarDayHourStart));
context.req.setAttribute(ATTR_TARGET_ACCOUNT_PREF_CALENDAR_DAY_HOUR_END, targetAccount.getAttr(Provisioning.A_zimbraPrefCalendarDayHourEnd));
} else {
// Useful when faking results - e.g. FREEBUSY html view for non-existent account
if (context.fakeTarget != null) {
context.req.setAttribute(ATTR_TARGET_ACCOUNT_NAME, context.fakeTarget.getAccount());
}
com.zimbra.cs.account.Cos defaultCos = Provisioning.getInstance().get(com.zimbra.common.account.Key.CosBy.name, Provisioning.DEFAULT_COS_NAME);
context.req.setAttribute(ATTR_TARGET_ACCOUNT_PREF_TIME_ZONE, defaultCos.getAttr(Provisioning.A_zimbraPrefTimeZoneId));
context.req.setAttribute(ATTR_TARGET_ACCOUNT_PREF_SKIN, defaultCos.getAttr(Provisioning.A_zimbraPrefSkin));
context.req.setAttribute(ATTR_TARGET_ACCOUNT_PREF_LOCALE, defaultCos.getAttr(Provisioning.A_zimbraPrefLocale));
context.req.setAttribute(ATTR_TARGET_ACCOUNT_PREF_CALENDAR_FIRST_DAY_OF_WEEK, defaultCos.getAttr(Provisioning.A_zimbraPrefCalendarFirstDayOfWeek));
context.req.setAttribute(ATTR_TARGET_ACCOUNT_PREF_CALENDAR_DAY_HOUR_START, defaultCos.getAttr(Provisioning.A_zimbraPrefCalendarDayHourStart));
context.req.setAttribute(ATTR_TARGET_ACCOUNT_PREF_CALENDAR_DAY_HOUR_END, defaultCos.getAttr(Provisioning.A_zimbraPrefCalendarDayHourEnd));
}
if (targetItem != null) {
context.req.setAttribute(ATTR_TARGET_ITEM_ID, targetItem.getId());
context.req.setAttribute(ATTR_TARGET_ITEM_PATH, targetItem.getPath());
context.req.setAttribute(ATTR_TARGET_ITEM_NAME, targetItem.getName());
context.req.setAttribute(ATTR_TARGET_ITEM_TYPE, targetItem.getType().toString());
context.req.setAttribute(ATTR_TARGET_ITEM_COLOR, targetItem.getColor());
if (targetItem instanceof Folder) {
context.req.setAttribute(ATTR_TARGET_ITEM_VIEW, ((Folder) targetItem).getDefaultView().toString());
}
context.req.setAttribute(ATTR_TARGET_ACTION, context.getAction());
context.req.setAttribute(ATTR_TARGET_BODYPART, context.getBodypart());
context.req.setAttribute(ATTR_TARGET_COLOR, context.getColor());
context.req.setAttribute(ATTR_TARGET_DATE, context.getDate());
context.req.setAttribute(ATTR_TARGET_EX_COMP_NUM, context.getExCompNum());
context.req.setAttribute(ATTR_TARGET_EX_INV_ID, context.getExInvId());
context.req.setAttribute(ATTR_TARGET_FMT, context.getFmt());
context.req.setAttribute(ATTR_TARGET_FOLDER_IDS, context.getFolderIds());
context.req.setAttribute(ATTR_TARGET_IM_ID, context.getImId());
context.req.setAttribute(ATTR_TARGET_IM_PART, context.getImPart());
context.req.setAttribute(ATTR_TARGET_IM_XIM, context.getImXim());
context.req.setAttribute(ATTR_TARGET_INST_DURATION, context.getInstDuration());
context.req.setAttribute(ATTR_TARGET_INST_START_TIME, context.getInstStartTime());
context.req.setAttribute(ATTR_TARGET_INV_COMP_NUM, context.getInvCompNum());
context.req.setAttribute(ATTR_TARGET_INV_ID, context.getInvId());
context.req.setAttribute(ATTR_TARGET_NOTOOLBAR, context.getNotoolbar());
context.req.setAttribute(ATTR_TARGET_NUMDAYS, context.getNumdays());
context.req.setAttribute(ATTR_TARGET_PSTAT, context.getPstat());
context.req.setAttribute(ATTR_TARGET_REFRESH, context.getRefresh());
context.req.setAttribute(ATTR_TARGET_SKIN, context.getSkin());
context.req.setAttribute(ATTR_TARGET_SQ, context.getSq());
context.req.setAttribute(ATTR_TARGET_TZ, context.getTz());
context.req.setAttribute(ATTR_TARGET_USE_INSTANCE, context.getUseInstance());
context.req.setAttribute(ATTR_TARGET_XIM, context.getXim());
context.req.setAttribute(ATTR_TARGET_VIEW, context.getView());
} else {
context.req.setAttribute(ATTR_TARGET_ITEM_COLOR, Color.getMappedColor(null));
}
if (context.fakeTarget != null) {
// Override to avoid address harvesting
context.req.setAttribute(ATTR_TARGET_ITEM_PATH, context.fakeTarget.getPath());
context.req.setAttribute(ATTR_TARGET_ITEM_NAME, context.fakeTarget.getName());
}
String mailUrl = PATH_MAIN_CONTEXT;
if (WebSplitUtil.isZimbraServiceSplitEnabled()) {
mailUrl = Provisioning.getInstance().getLocalServer().getWebClientURL() + PATH_JSP_REST_PAGE;
HttpClient httpclient = ZimbraHttpConnectionManager.getInternalHttpConnMgr().getDefaultHttpClient().build();
/*
* Retest the code with POST to check whether it works
HttpPost postMethod = new HttpPost(mailUrl);
Enumeration<String> attributeNames = context.req.getAttributeNames();
List<Part> parts = new ArrayList<Part>();
while(attributeNames.hasMoreElements())
{
String attrName = (String) attributeNames.nextElement();
String attrValue = context.req.getAttribute(attrName).toString();
Part part = new StringPart(attrName, attrValue);
parts.add(part);
}
postMethod.setRequestEntity(new MultipartRequestEntity(parts.toArray(new Part[0]), new HttpMethodParams()));
HttpClientUtil.executeMethod(httpclient, postMethod);
ByteUtil.copy(postMethod.getResponseBodyAsStream(), true, context.resp.getOutputStream(), true);
*/
Enumeration<String> attributeNames = context.req.getAttributeNames();
StringBuilder sb = new StringBuilder(mailUrl);
sb.append("?");
while (attributeNames.hasMoreElements()) {
String attrName = attributeNames.nextElement();
String attrValue = context.req.getAttribute(attrName).toString();
sb.append(attrName).append("=").append(HttpUtil.urlEscape(attrValue)).append("&");
}
HttpGet postMethod = new HttpGet(sb.toString());
postMethod.setHeader("Accept-Language", context.getLocale().getLanguage());
HttpResponse httpResp;
try {
httpResp = HttpClientUtil.executeMethod(httpclient, postMethod);
ByteUtil.copy(httpResp.getEntity().getContent(), true, context.resp.getOutputStream(), false);
} catch (HttpException e) {
throw new ServletException("error executing the request.", e);
}
} else {
try {
mailUrl = Provisioning.getInstance().getLocalServer().getMailURL();
} catch (Exception e) {
}
ServletContext targetContext = servlet.getServletConfig().getServletContext().getContext(mailUrl);
RequestDispatcher dispatcher = targetContext.getRequestDispatcher(PATH_JSP_REST_PAGE);
dispatcher.forward(context.req, context.resp);
}
}
use of com.zimbra.cs.service.UserServlet.HttpInputStream in project zm-mailbox by Zimbra.
the class CalDavClient method sendCalendarData.
public String sendCalendarData(Appointment appt) throws IOException, DavException, HttpException {
HttpInputStream resp = sendPut(appt.href, appt.data.getBytes("UTF-8"), MimeConstants.CT_TEXT_CALENDAR, appt.etag, null);
String etag = resp.getHeader(DavProtocol.HEADER_ETAG);
ZimbraLog.dav.debug("ETags: " + appt.etag + ", " + etag);
int status = resp.getStatusCode();
if (status != HttpStatus.SC_OK && status != HttpStatus.SC_CREATED && status != HttpStatus.SC_NO_CONTENT) {
throw new DavException("Can't send calendar data (status=" + status + ")", status);
}
if (mSchedulingEnabled)
sendSchedulingMessage(appt);
return etag;
}
Aggregations