Search in sources :

Example 6 with AuthorizationAccessException

use of org.apache.nifi.authorization.exception.AuthorizationAccessException in project nifi by apache.

the class FileUserGroupProvider method saveAndRefreshHolder.

/**
 * Saves the Authorizations instance by marshalling to a file, then re-populates the
 * in-memory data structures and sets the new holder.
 *
 * Synchronized to ensure only one thread writes the file at a time.
 *
 * @param tenants the tenants to save and populate from
 * @throws AuthorizationAccessException if an error occurs saving the authorizations
 */
private synchronized void saveAndRefreshHolder(final Tenants tenants) throws AuthorizationAccessException {
    try {
        saveTenants(tenants);
        this.userGroupHolder.set(new UserGroupHolder(tenants));
    } catch (JAXBException e) {
        throw new AuthorizationAccessException("Unable to save Authorizations", e);
    }
}
Also used : AuthorizationAccessException(org.apache.nifi.authorization.exception.AuthorizationAccessException) JAXBException(javax.xml.bind.JAXBException)

Example 7 with AuthorizationAccessException

use of org.apache.nifi.authorization.exception.AuthorizationAccessException in project nifi by apache.

the class FileUserGroupProvider method parseUsersAndGroups.

private UsersAndGroups parseUsersAndGroups(final String fingerprint) {
    final List<User> users = new ArrayList<>();
    final List<Group> groups = new ArrayList<>();
    final byte[] fingerprintBytes = fingerprint.getBytes(StandardCharsets.UTF_8);
    try (final ByteArrayInputStream in = new ByteArrayInputStream(fingerprintBytes)) {
        final DocumentBuilder docBuilder = DOCUMENT_BUILDER_FACTORY.newDocumentBuilder();
        final Document document = docBuilder.parse(in);
        final Element rootElement = document.getDocumentElement();
        // parse all the users and add them to the current user group provider
        NodeList userNodes = rootElement.getElementsByTagName(USER_ELEMENT);
        for (int i = 0; i < userNodes.getLength(); i++) {
            Node userNode = userNodes.item(i);
            users.add(parseUser((Element) userNode));
        }
        // parse all the groups and add them to the current user group provider
        NodeList groupNodes = rootElement.getElementsByTagName(GROUP_ELEMENT);
        for (int i = 0; i < groupNodes.getLength(); i++) {
            Node groupNode = groupNodes.item(i);
            groups.add(parseGroup((Element) groupNode));
        }
    } catch (SAXException | ParserConfigurationException | IOException e) {
        throw new AuthorizationAccessException("Unable to parse fingerprint", e);
    }
    return new UsersAndGroups(users, groups);
}
Also used : JAXBElement(javax.xml.bind.JAXBElement) Element(org.w3c.dom.Element) NodeList(org.w3c.dom.NodeList) Node(org.w3c.dom.Node) ArrayList(java.util.ArrayList) IOException(java.io.IOException) Document(org.w3c.dom.Document) SAXException(org.xml.sax.SAXException) AuthorizationAccessException(org.apache.nifi.authorization.exception.AuthorizationAccessException) ByteArrayInputStream(java.io.ByteArrayInputStream) DocumentBuilder(javax.xml.parsers.DocumentBuilder) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException)

Example 8 with AuthorizationAccessException

use of org.apache.nifi.authorization.exception.AuthorizationAccessException in project nifi by apache.

the class StandardManagedAuthorizer method parseFingerprint.

private final FingerprintHolder parseFingerprint(final String fingerprint) throws AuthorizationAccessException {
    final byte[] fingerprintBytes = fingerprint.getBytes(StandardCharsets.UTF_8);
    try (final ByteArrayInputStream in = new ByteArrayInputStream(fingerprintBytes)) {
        final DocumentBuilder docBuilder = DOCUMENT_BUILDER_FACTORY.newDocumentBuilder();
        final Document document = docBuilder.parse(in);
        final Element rootElement = document.getDocumentElement();
        final NodeList accessPolicyProviderList = rootElement.getElementsByTagName(ACCESS_POLICY_PROVIDER_ELEMENT);
        if (accessPolicyProviderList.getLength() != 1) {
            throw new AuthorizationAccessException(String.format("Only one %s element is allowed: %s", ACCESS_POLICY_PROVIDER_ELEMENT, fingerprint));
        }
        final NodeList userGroupProviderList = rootElement.getElementsByTagName(USER_GROUP_PROVIDER_ELEMENT);
        if (userGroupProviderList.getLength() != 1) {
            throw new AuthorizationAccessException(String.format("Only one %s element is allowed: %s", USER_GROUP_PROVIDER_ELEMENT, fingerprint));
        }
        final Node accessPolicyProvider = accessPolicyProviderList.item(0);
        final Node userGroupProvider = userGroupProviderList.item(0);
        return new FingerprintHolder(accessPolicyProvider.getTextContent(), userGroupProvider.getTextContent());
    } catch (SAXException | ParserConfigurationException | IOException e) {
        throw new AuthorizationAccessException("Unable to parse fingerprint", e);
    }
}
Also used : Element(org.w3c.dom.Element) NodeList(org.w3c.dom.NodeList) Node(org.w3c.dom.Node) IOException(java.io.IOException) Document(org.w3c.dom.Document) SAXException(org.xml.sax.SAXException) AuthorizationAccessException(org.apache.nifi.authorization.exception.AuthorizationAccessException) ByteArrayInputStream(java.io.ByteArrayInputStream) DocumentBuilder(javax.xml.parsers.DocumentBuilder) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException)

Example 9 with AuthorizationAccessException

use of org.apache.nifi.authorization.exception.AuthorizationAccessException in project nifi by apache.

the class FileAccessPolicyProvider method getFingerprint.

@Override
public String getFingerprint() throws AuthorizationAccessException {
    final List<AccessPolicy> policies = new ArrayList<>(getAccessPolicies());
    Collections.sort(policies, Comparator.comparing(AccessPolicy::getIdentifier));
    XMLStreamWriter writer = null;
    final StringWriter out = new StringWriter();
    try {
        writer = XML_OUTPUT_FACTORY.createXMLStreamWriter(out);
        writer.writeStartDocument();
        writer.writeStartElement("accessPolicies");
        for (AccessPolicy policy : policies) {
            writePolicy(writer, policy);
        }
        writer.writeEndElement();
        writer.writeEndDocument();
        writer.flush();
    } catch (XMLStreamException e) {
        throw new AuthorizationAccessException("Unable to generate fingerprint", e);
    } finally {
        if (writer != null) {
            try {
                writer.close();
            } catch (XMLStreamException e) {
            // nothing to do here
            }
        }
    }
    return out.toString();
}
Also used : AuthorizationAccessException(org.apache.nifi.authorization.exception.AuthorizationAccessException) StringWriter(java.io.StringWriter) XMLStreamException(javax.xml.stream.XMLStreamException) XMLStreamWriter(javax.xml.stream.XMLStreamWriter) ArrayList(java.util.ArrayList)

Example 10 with AuthorizationAccessException

use of org.apache.nifi.authorization.exception.AuthorizationAccessException in project nifi by apache.

the class FileUserGroupProvider method getFingerprint.

@Override
public String getFingerprint() throws AuthorizationAccessException {
    final UserGroupHolder usersAndGroups = userGroupHolder.get();
    final List<User> users = new ArrayList<>(usersAndGroups.getAllUsers());
    Collections.sort(users, Comparator.comparing(User::getIdentifier));
    final List<Group> groups = new ArrayList<>(usersAndGroups.getAllGroups());
    Collections.sort(groups, Comparator.comparing(Group::getIdentifier));
    XMLStreamWriter writer = null;
    final StringWriter out = new StringWriter();
    try {
        writer = XML_OUTPUT_FACTORY.createXMLStreamWriter(out);
        writer.writeStartDocument();
        writer.writeStartElement("tenants");
        for (User user : users) {
            writeUser(writer, user);
        }
        for (Group group : groups) {
            writeGroup(writer, group);
        }
        writer.writeEndElement();
        writer.writeEndDocument();
        writer.flush();
    } catch (XMLStreamException e) {
        throw new AuthorizationAccessException("Unable to generate fingerprint", e);
    } finally {
        if (writer != null) {
            try {
                writer.close();
            } catch (XMLStreamException e) {
            // nothing to do here
            }
        }
    }
    return out.toString();
}
Also used : AuthorizationAccessException(org.apache.nifi.authorization.exception.AuthorizationAccessException) StringWriter(java.io.StringWriter) XMLStreamException(javax.xml.stream.XMLStreamException) XMLStreamWriter(javax.xml.stream.XMLStreamWriter) ArrayList(java.util.ArrayList)

Aggregations

AuthorizationAccessException (org.apache.nifi.authorization.exception.AuthorizationAccessException)17 IOException (java.io.IOException)7 ArrayList (java.util.ArrayList)6 DocumentBuilder (javax.xml.parsers.DocumentBuilder)6 ParserConfigurationException (javax.xml.parsers.ParserConfigurationException)6 ByteArrayInputStream (java.io.ByteArrayInputStream)5 StringWriter (java.io.StringWriter)5 Document (org.w3c.dom.Document)5 Element (org.w3c.dom.Element)5 XMLStreamException (javax.xml.stream.XMLStreamException)4 XMLStreamWriter (javax.xml.stream.XMLStreamWriter)4 AuthorizerCreationException (org.apache.nifi.authorization.exception.AuthorizerCreationException)4 Node (org.w3c.dom.Node)4 NodeList (org.w3c.dom.NodeList)4 SAXException (org.xml.sax.SAXException)4 KeyManagementException (java.security.KeyManagementException)2 KeyStoreException (java.security.KeyStoreException)2 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)2 UnrecoverableKeyException (java.security.UnrecoverableKeyException)2 CertificateException (java.security.cert.CertificateException)2