Search in sources :

Example 1 with HttpInputStream

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);
}
Also used : ByteArrayEntity(org.apache.http.entity.ByteArrayEntity) Header(org.apache.http.Header) HttpResponse(org.apache.http.HttpResponse) HttpInputStream(com.zimbra.cs.service.UserServlet.HttpInputStream) HttpPut(org.apache.http.client.methods.HttpPut) Pair(com.zimbra.common.util.Pair)

Example 2 with HttpInputStream

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);
}
Also used : HttpGet(org.apache.http.client.methods.HttpGet) HttpResponse(org.apache.http.HttpResponse) HttpInputStream(com.zimbra.cs.service.UserServlet.HttpInputStream)

Example 3 with HttpInputStream

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;
}
Also used : HttpInputStream(com.zimbra.cs.service.UserServlet.HttpInputStream)

Example 4 with HttpInputStream

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);
    }
}
Also used : GuestAccount(com.zimbra.cs.account.GuestAccount) Account(com.zimbra.cs.account.Account) GuestAccount(com.zimbra.cs.account.GuestAccount) HttpGet(org.apache.http.client.methods.HttpGet) Folder(com.zimbra.cs.mailbox.Folder) Provisioning(com.zimbra.cs.account.Provisioning) ServletException(javax.servlet.ServletException) UserServletException(com.zimbra.cs.service.UserServletException) UserServletContext(com.zimbra.cs.service.UserServletContext) ServletContext(javax.servlet.ServletContext) HttpException(org.apache.http.HttpException) HttpInputStream(com.zimbra.cs.service.UserServlet.HttpInputStream) Mountpoint(com.zimbra.cs.mailbox.Mountpoint) HttpResponse(org.apache.http.HttpResponse) ServletException(javax.servlet.ServletException) ServiceException(com.zimbra.common.service.ServiceException) IOException(java.io.IOException) AuthTokenException(com.zimbra.cs.account.AuthTokenException) HttpException(org.apache.http.HttpException) UserServletException(com.zimbra.cs.service.UserServletException) RequestDispatcher(javax.servlet.RequestDispatcher) MailItem(com.zimbra.cs.mailbox.MailItem) Header(org.apache.http.Header) AuthTokenException(com.zimbra.cs.account.AuthTokenException) HttpClient(org.apache.http.client.HttpClient) AuthToken(com.zimbra.cs.account.AuthToken)

Example 5 with HttpInputStream

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;
}
Also used : DavException(com.zimbra.cs.dav.DavException) HttpInputStream(com.zimbra.cs.service.UserServlet.HttpInputStream)

Aggregations

HttpInputStream (com.zimbra.cs.service.UserServlet.HttpInputStream)5 HttpResponse (org.apache.http.HttpResponse)3 Header (org.apache.http.Header)2 HttpGet (org.apache.http.client.methods.HttpGet)2 ServiceException (com.zimbra.common.service.ServiceException)1 Pair (com.zimbra.common.util.Pair)1 Account (com.zimbra.cs.account.Account)1 AuthToken (com.zimbra.cs.account.AuthToken)1 AuthTokenException (com.zimbra.cs.account.AuthTokenException)1 GuestAccount (com.zimbra.cs.account.GuestAccount)1 Provisioning (com.zimbra.cs.account.Provisioning)1 DavException (com.zimbra.cs.dav.DavException)1 Folder (com.zimbra.cs.mailbox.Folder)1 MailItem (com.zimbra.cs.mailbox.MailItem)1 Mountpoint (com.zimbra.cs.mailbox.Mountpoint)1 UserServletContext (com.zimbra.cs.service.UserServletContext)1 UserServletException (com.zimbra.cs.service.UserServletException)1 IOException (java.io.IOException)1 RequestDispatcher (javax.servlet.RequestDispatcher)1 ServletContext (javax.servlet.ServletContext)1