Search in sources :

Example 6 with DavResource

use of com.zimbra.cs.dav.resource.DavResource in project zm-mailbox by Zimbra.

the class AclReports method handleAclPrincipalPropSet.

/**
     * http://tools.ietf.org/html/rfc3744#section-9.2 DAV:acl-principal-prop-set REPORT
     * Postconditions:
     *     (DAV:number-of-matches-within-limits): The number of matching principals must fall within
     *     server-specific, predefined limits. For example, this condition might be triggered if a search
     *     specification would cause the return of an extremely large number of responses.
     */
private void handleAclPrincipalPropSet(DavContext ctxt, Element query) throws DavException, ServiceException {
    /* From rfc3744#section-9.2 DAV:acl-principal-prop-set REPORT
         *    This report is only defined when the Depth header has value "0"; other values result in a
         *    400 (Bad Request) error response.  Note that [RFC3253], Section 3.6, states that if the Depth header is
         *    not present, it defaults to a value of "0".
         */
    if (ctxt.getDepth() != Depth.zero) {
        throw new DavException.REPORTwithDisallowedDepthException(query.getQName().getName(), ctxt.getDepth());
    }
    RequestProp reqProp = ctxt.getRequestProp();
    DavResponse resp = ctxt.getDavResponse();
    // The response body for a successful request MUST be a DAV:multistatus XML element.  In the case where there
    // are no response elements, the returned multistatus XML element is empty.
    resp.getTop(DavElements.E_MULTISTATUS);
    for (DavResource rs : getAclPrincipals(ctxt)) resp.addResource(ctxt, rs, reqProp, false);
}
Also used : DavResource(com.zimbra.cs.dav.resource.DavResource) DavResponse(com.zimbra.cs.dav.service.DavResponse) RequestProp(com.zimbra.cs.dav.DavContext.RequestProp)

Example 7 with DavResource

use of com.zimbra.cs.dav.resource.DavResource in project zm-mailbox by Zimbra.

the class AclReports method handlePrincipalPropertySearch.

/**
     * http://tools.ietf.org/html/rfc3744#section-9.4. DAV:principal-property-search REPORT
     * Preconditions:  None
     * Postconditions: DAV:number-of-matches-within-limits
     */
private void handlePrincipalPropertySearch(DavContext ctxt, Element query) throws DavException, ServiceException {
    RequestProp reqProp = ctxt.getRequestProp();
    DavResponse resp = ctxt.getDavResponse();
    // http://tools.ietf.org/html/rfc3744#section-9.4
    // The response body for a successful request MUST be a DAV:multistatus XML element.  In the case where there
    // are no response elements, the returned multistatus XML element is empty.
    resp.getTop(DavElements.E_MULTISTATUS);
    for (DavResource rs : getMatchingResources(ctxt, query)) {
        resp.addResource(ctxt, rs, reqProp, false);
    }
}
Also used : DavResource(com.zimbra.cs.dav.resource.DavResource) DavResponse(com.zimbra.cs.dav.service.DavResponse) RequestProp(com.zimbra.cs.dav.DavContext.RequestProp)

Example 8 with DavResource

use of com.zimbra.cs.dav.resource.DavResource in project zm-mailbox by Zimbra.

the class Post method handle.

@Override
public void handle(DavContext ctxt) throws DavException, IOException, ServiceException {
    String user = ctxt.getUser();
    String name = ctxt.getItem();
    if (user == null || name == null) {
        throw new DavException("invalid uri", HttpServletResponse.SC_NOT_FOUND);
    }
    DavResource rs = ctxt.getRequestedResource();
    rs.handlePost(ctxt);
    sendResponse(ctxt);
    if (ZimbraLog.dav.isDebugEnabled()) {
        StringBuilder sb = new StringBuilder("Response for DAV POST ").append(ctxt.getUri()).append("\n");
        DavServlet.addResponseHeaderLoggingInfo(ctxt.getResponse(), sb);
        ZimbraLog.dav.debug(sb);
    }
}
Also used : DavResource(com.zimbra.cs.dav.resource.DavResource) DavException(com.zimbra.cs.dav.DavException)

Example 9 with DavResource

use of com.zimbra.cs.dav.resource.DavResource in project zm-mailbox by Zimbra.

the class PropFind method handle.

@Override
public void handle(DavContext ctxt) throws DavException, IOException, ServiceException {
    if (ctxt.hasRequestMessage()) {
        Document req = ctxt.getRequestMessage();
        Element top = req.getRootElement();
        if (!top.getName().equals(DavElements.P_PROPFIND)) {
            throw new DavException("msg " + top.getName() + " not allowed in PROPFIND", HttpServletResponse.SC_BAD_REQUEST, null);
        }
    }
    RequestProp reqProp = ctxt.getRequestProp();
    DavResponse resp = ctxt.getDavResponse();
    if (ctxt.getDepth() == Depth.one) {
        resp.addResources(ctxt, ctxt.getAllRequestedResources(), reqProp);
    } else {
        DavResource resource = ctxt.getRequestedResource();
        resp.addResource(ctxt, resource, reqProp, false);
    }
    sendResponse(ctxt);
}
Also used : DavResource(com.zimbra.cs.dav.resource.DavResource) DavException(com.zimbra.cs.dav.DavException) DavResponse(com.zimbra.cs.dav.service.DavResponse) RequestProp(com.zimbra.cs.dav.DavContext.RequestProp) Element(org.dom4j.Element) Document(org.dom4j.Document)

Example 10 with DavResource

use of com.zimbra.cs.dav.resource.DavResource in project zm-mailbox by Zimbra.

the class AclReports method handlePrincipalMatch.

/**
     * http://tools.ietf.org/html/rfc3744#section-9.3. DAV:principal-match REPORT
     *     This report is only defined when the Depth header has value "0";
     *     other values result in a 400 (Bad Request) error response.
     */
private void handlePrincipalMatch(DavContext ctxt, Element query) throws DavException, ServiceException {
    if (ctxt.getDepth() != Depth.zero) {
        throw new DavException.REPORTwithDisallowedDepthException(query.getQName().getName(), ctxt.getDepth());
    }
    ArrayList<DavResource> ret = new ArrayList<DavResource>();
    RequestProp reqProp = ctxt.getRequestProp();
    DavResponse resp = ctxt.getDavResponse();
    // The response body for a successful request MUST be a DAV:multistatus XML element.  In the case where there
    // are no response elements, the returned multistatus XML element is empty.
    resp.getTop(DavElements.E_MULTISTATUS);
    Element principalProp = query.element(DavElements.E_PRINCIPAL_PROPERTY);
    if (principalProp == null) {
        // request must be to the principals path
        String path = ctxt.getUri();
        if (path.startsWith(UrlNamespace.PRINCIPALS_PATH))
            ret.add(UrlNamespace.getPrincipal(ctxt, ctxt.getAuthAccount()));
    } else {
        // we know of only <owner/> element
        Element owner = principalProp.element(DavElements.E_OWNER);
        if (owner != null) {
            // return the all the members of the collection.
            DavResource rs = ctxt.getRequestedResource();
            if (rs.isCollection())
                ret.addAll(rs.getChildren(ctxt));
        }
    }
    for (DavResource rs : ret) resp.addResource(ctxt, rs, reqProp, false);
}
Also used : DavResource(com.zimbra.cs.dav.resource.DavResource) DavResponse(com.zimbra.cs.dav.service.DavResponse) RequestProp(com.zimbra.cs.dav.DavContext.RequestProp) Element(org.dom4j.Element) ArrayList(java.util.ArrayList)

Aggregations

DavResource (com.zimbra.cs.dav.resource.DavResource)25 DavException (com.zimbra.cs.dav.DavException)15 Element (org.dom4j.Element)12 DavResponse (com.zimbra.cs.dav.service.DavResponse)9 RequestProp (com.zimbra.cs.dav.DavContext.RequestProp)8 ArrayList (java.util.ArrayList)7 ServiceException (com.zimbra.common.service.ServiceException)3 CalendarCollection (com.zimbra.cs.dav.resource.CalendarCollection)3 Collection (com.zimbra.cs.dav.resource.Collection)3 MailItemResource (com.zimbra.cs.dav.resource.MailItemResource)3 HttpServletResponse (javax.servlet.http.HttpServletResponse)3 Document (org.dom4j.Document)3 Account (com.zimbra.cs.account.Account)2 Provisioning (com.zimbra.cs.account.Provisioning)2 TimeRange (com.zimbra.cs.dav.caldav.Range.TimeRange)2 Ace (com.zimbra.cs.dav.property.Acl.Ace)2 AddressObject (com.zimbra.cs.dav.resource.AddressObject)2 AddressbookCollection (com.zimbra.cs.dav.resource.AddressbookCollection)2 IOException (java.io.IOException)2 UnsupportedEncodingException (java.io.UnsupportedEncodingException)2