Esempio n. 1
0
    def _make_xacml_context_request(cls,
                                    httpMethod,
                                    resourceURI,
                                    resourceContents,
                                    subjectID,
                                    subjectIdFormat,
                                    actions=None):
        """Create a XACML Request. Include post data as resource content if the
        HTTP method is POST.
        :type httpMethod: str
        :param httpMethod: HTTP method
        :type resourceURI: str
        :param resourceURI: resource URI
        :type resourceContents: basestr
        :param resourceContents: resource contents XML as string
        :type subjectID: str
        :param subjectID: subject ID
        :type subjectIdFormat: str
        :param subjectIdFormat: subject ID format
        :type actions: list of str
        :param actions: actions
        """
        if actions is None:
            actions = []

        if httpMethod == 'GET':
            ### TODO Should action be related to HTTP method?
            return cls._createXacmlProfileRequestCtx(subjectIdFormat,
                                                     subjectID, resourceURI,
                                                     None, actions)

        elif httpMethod == 'POST':
            resourceContentsElem = ElementTree.XML(resourceContents)
            tag = str(
                QName(XacmlContextBase.XACML_2_0_CONTEXT_NS,
                      XacmlResource.RESOURCE_CONTENT_ELEMENT_LOCAL_NAME))
            resourceContent = etree.makeEtreeElement(
                tag, XacmlContextBase.XACML_2_0_CONTEXT_NS_PREFIX,
                XacmlContextBase.XACML_2_0_CONTEXT_NS)
            resourceContent.append(resourceContentsElem)

            request = cls._createXacmlProfileRequestCtx(
                subjectIdFormat, subjectID, resourceURI, resourceContent,
                actions)

            return request