Search in sources :

Example 16 with LoginException

use of org.apache.sling.api.resource.LoginException in project sling by apache.

the class ValidationModelRetrieverImpl method getValidationModel.

/*
     * (non-Javadoc)
     * 
     * @see org.apache.sling.validation.impl.ValidationModelRetriever#getModels(java.lang.String, java.lang.String)
     */
@CheckForNull
public ValidationModel getValidationModel(@Nonnull String resourceType, String resourcePath, boolean considerResourceSuperTypeModels) {
    // first get model for exactly the requested resource type
    ValidationModel baseModel = getModel(resourceType, resourcePath);
    String currentResourceType = resourceType;
    if (considerResourceSuperTypeModels) {
        Collection<ValidationModel> modelsToMerge = new ArrayList<ValidationModel>();
        ResourceResolver resourceResolver = null;
        try {
            resourceResolver = resourceResolverFactory.getServiceResourceResolver(null);
            while ((currentResourceType = resourceResolver.getParentResourceType(currentResourceType)) != null) {
                LOG.debug("Retrieving validation models for resource super type {}...", currentResourceType);
                ValidationModel modelToMerge = getModel(currentResourceType, resourcePath);
                if (modelToMerge != null) {
                    if (baseModel == null) {
                        baseModel = modelToMerge;
                    } else {
                        modelsToMerge.add(modelToMerge);
                    }
                }
            }
            if (!modelsToMerge.isEmpty()) {
                return new MergedValidationModel(baseModel, modelsToMerge.toArray(new ValidationModel[modelsToMerge.size()]));
            }
        } catch (LoginException e) {
            throw new IllegalStateException("Could not get service resource resolver", e);
        } finally {
            if (resourceResolver != null) {
                resourceResolver.close();
            }
        }
    }
    return baseModel;
}
Also used : MergedValidationModel(org.apache.sling.validation.impl.model.MergedValidationModel) ValidationModel(org.apache.sling.validation.model.ValidationModel) MergedValidationModel(org.apache.sling.validation.impl.model.MergedValidationModel) ArrayList(java.util.ArrayList) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) LoginException(org.apache.sling.api.resource.LoginException) CheckForNull(javax.annotation.CheckForNull)

Example 17 with LoginException

use of org.apache.sling.api.resource.LoginException in project sling by apache.

the class XSSFilterImpl method updateDefaultHandler.

private synchronized void updateDefaultHandler() {
    this.defaultHandler = null;
    try (final ResourceResolver xssResourceResolver = resourceResolverFactory.getServiceResourceResolver(null)) {
        Resource policyResource = xssResourceResolver.getResource(DEFAULT_POLICY_PATH);
        if (policyResource != null) {
            try (InputStream policyStream = policyResource.adaptTo(InputStream.class)) {
                setDefaultHandler(new PolicyHandler(policyStream));
                logger.info("Installed default policy from {}.", policyResource.getPath());
            } catch (Exception e) {
                Throwable[] suppressed = e.getSuppressed();
                if (suppressed.length > 0) {
                    for (Throwable t : suppressed) {
                        logger.error("Unable to load policy from " + policyResource.getPath(), t);
                    }
                }
                logger.error("Unable to load policy from " + policyResource.getPath(), e);
            }
        }
    } catch (final LoginException e) {
        logger.error("Unable to load the default policy file.", e);
    }
    if (defaultHandler == null) {
        // the content was not installed but the service is active; let's use the embedded file for the default handler
        logger.info("Could not find a policy file at the default location {}. Attempting to use the default resource embedded in" + " the bundle.", DEFAULT_POLICY_PATH);
        try (InputStream policyStream = this.getClass().getClassLoader().getResourceAsStream(EMBEDDED_POLICY_PATH)) {
            setDefaultHandler(new PolicyHandler(policyStream));
            logger.info("Installed default policy from the embedded {} file from the bundle.", EMBEDDED_POLICY_PATH);
        } catch (Exception e) {
            Throwable[] suppressed = e.getSuppressed();
            if (suppressed.length > 0) {
                for (Throwable t : suppressed) {
                    logger.error("Unable to load policy from embedded policy file.", t);
                }
            }
            logger.error("Unable to load policy from embedded policy file.", e);
        }
    }
    if (defaultHandler == null) {
        throw new IllegalStateException("Cannot load a default policy handler.");
    }
}
Also used : InputStream(java.io.InputStream) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) Resource(org.apache.sling.api.resource.Resource) LoginException(org.apache.sling.api.resource.LoginException) LoginException(org.apache.sling.api.resource.LoginException)

Example 18 with LoginException

use of org.apache.sling.api.resource.LoginException in project sling by apache.

the class UpdateGroupServlet method updateGroup.

/* (non-Javadoc)
     * @see org.apache.sling.jackrabbit.usermanager.UpdateGroup#updateGroup(javax.jcr.Session, java.lang.String, java.util.Map, java.util.List)
     */
public Group updateGroup(Session jcrSession, String name, Map<String, ?> properties, List<Modification> changes) throws RepositoryException {
    Group group = null;
    UserManager userManager = AccessControlUtil.getUserManager(jcrSession);
    Authorizable authorizable = userManager.getAuthorizable(name);
    if (authorizable instanceof Group) {
        group = (Group) authorizable;
    } else {
        throw new ResourceNotFoundException("Group to update could not be determined");
    }
    String groupPath = AuthorizableResourceProvider.SYSTEM_USER_MANAGER_GROUP_PREFIX + group.getID();
    Collection<RequestProperty> reqProperties = collectContent(properties);
    try {
        // cleanup any old content (@Delete parameters)
        processDeletes(group, reqProperties, changes);
        // write content from form
        writeContent(jcrSession, group, reqProperties, changes);
        // update the group memberships
        ResourceResolver resourceResolver = null;
        try {
            //create a resource resolver to resolve the relative paths used for group membership values
            final Map<String, Object> authInfo = new HashMap<String, Object>();
            authInfo.put(org.apache.sling.jcr.resource.api.JcrResourceConstants.AUTHENTICATION_INFO_SESSION, jcrSession);
            resourceResolver = resourceResolverFactory.getResourceResolver(authInfo);
            Resource baseResource = resourceResolver.getResource(groupPath);
            updateGroupMembership(baseResource, properties, group, changes);
        } catch (LoginException e) {
            throw new RepositoryException(e);
        } finally {
            if (resourceResolver != null) {
                resourceResolver.close();
            }
        }
    } catch (RepositoryException re) {
        throw new RepositoryException("Failed to update group.", re);
    }
    return group;
}
Also used : Group(org.apache.jackrabbit.api.security.user.Group) UpdateGroup(org.apache.sling.jackrabbit.usermanager.UpdateGroup) HashMap(java.util.HashMap) Resource(org.apache.sling.api.resource.Resource) RepositoryException(javax.jcr.RepositoryException) RequestProperty(org.apache.sling.servlets.post.impl.helper.RequestProperty) UserManager(org.apache.jackrabbit.api.security.user.UserManager) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) Authorizable(org.apache.jackrabbit.api.security.user.Authorizable) LoginException(org.apache.sling.api.resource.LoginException) ResourceNotFoundException(org.apache.sling.api.resource.ResourceNotFoundException)

Example 19 with LoginException

use of org.apache.sling.api.resource.LoginException in project sling by apache.

the class CreateGroupServlet method createGroup.

/* (non-Javadoc)
     * @see org.apache.sling.jackrabbit.usermanager.CreateGroup#createGroup(javax.jcr.Session, java.lang.String, java.util.Map, java.util.List)
     */
public Group createGroup(Session jcrSession, final String name, Map<String, ?> properties, List<Modification> changes) throws RepositoryException {
    // check that the parameter values have valid values.
    if (jcrSession == null) {
        throw new IllegalArgumentException("JCR Session not found");
    }
    if (name == null || name.length() == 0) {
        throw new IllegalArgumentException("Group name was not supplied");
    }
    UserManager userManager = AccessControlUtil.getUserManager(jcrSession);
    Authorizable authorizable = userManager.getAuthorizable(name);
    Group group = null;
    if (authorizable != null) {
        // principal already exists!
        throw new RepositoryException("A group already exists with the requested name: " + name);
    } else {
        group = userManager.createGroup(new Principal() {

            public String getName() {
                return name;
            }
        });
        String groupPath = AuthorizableResourceProvider.SYSTEM_USER_MANAGER_GROUP_PREFIX + group.getID();
        Collection<RequestProperty> reqProperties = collectContent(properties);
        changes.add(Modification.onCreated(groupPath));
        // write content from form
        writeContent(jcrSession, group, reqProperties, changes);
        // update the group memberships
        ResourceResolver resourceResolver = null;
        try {
            //create a resource resolver to resolve the relative paths used for group membership values
            final Map<String, Object> authInfo = new HashMap<String, Object>();
            authInfo.put(org.apache.sling.jcr.resource.api.JcrResourceConstants.AUTHENTICATION_INFO_SESSION, jcrSession);
            resourceResolver = resourceResolverFactory.getResourceResolver(authInfo);
            Resource baseResource = resourceResolver.getResource(AuthorizableResourceProvider.SYSTEM_USER_MANAGER_GROUP_PATH);
            updateGroupMembership(baseResource, properties, group, changes);
        } catch (LoginException e) {
            throw new RepositoryException(e);
        } finally {
            if (resourceResolver != null) {
                resourceResolver.close();
            }
        }
    }
    return group;
}
Also used : Group(org.apache.jackrabbit.api.security.user.Group) CreateGroup(org.apache.sling.jackrabbit.usermanager.CreateGroup) HashMap(java.util.HashMap) Resource(org.apache.sling.api.resource.Resource) RepositoryException(javax.jcr.RepositoryException) RequestProperty(org.apache.sling.servlets.post.impl.helper.RequestProperty) UserManager(org.apache.jackrabbit.api.security.user.UserManager) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) Authorizable(org.apache.jackrabbit.api.security.user.Authorizable) LoginException(org.apache.sling.api.resource.LoginException) Principal(java.security.Principal)

Example 20 with LoginException

use of org.apache.sling.api.resource.LoginException in project sling by apache.

the class JcrProviderStateFactory method createProviderState.

@SuppressWarnings("deprecation")
JcrProviderState createProviderState(@Nonnull final Map<String, Object> authenticationInfo) throws LoginException {
    boolean isLoginAdministrative = Boolean.TRUE.equals(authenticationInfo.get(ResourceProvider.AUTH_ADMIN));
    // check whether a session is provided in the authenticationInfo
    Session session = getSession(authenticationInfo);
    if (session != null && !isLoginAdministrative) {
        // was provided in the authenticationInfo
        return createJcrProviderState(session, false, authenticationInfo, null);
    }
    BundleContext bc = null;
    try {
        final Bundle bundle = extractCallingBundle(authenticationInfo);
        if (bundle != null) {
            bc = bundle.getBundleContext();
            final SlingRepository repo = bc.getService(repositoryReference);
            if (repo == null) {
                logger.warn("Cannot login {} because cannot get SlingRepository on behalf of bundle {} ({})", isLoginAdministrative ? "admin" : "service", bundle.getSymbolicName(), bundle.getBundleId());
                // TODO: correct ??
                throw new LoginException("Repository unavailable");
            }
            try {
                if (isLoginAdministrative) {
                    session = repo.loginAdministrative(null);
                } else {
                    final Object subService = authenticationInfo.get(ResourceResolverFactory.SUBSERVICE);
                    final String subServiceName = subService instanceof String ? (String) subService : null;
                    session = repo.loginService(subServiceName, null);
                }
            } catch (Throwable t) {
                // closed and the session logged out
                if (session == null) {
                    bc.ungetService(repositoryReference);
                }
                throw t;
            }
        } else if (isLoginAdministrative) {
            throw new LoginException("Calling bundle missing in authentication info");
        } else {
            // requested non-admin session
            final Credentials credentials = getCredentials(authenticationInfo);
            session = repository.login(credentials, null);
        }
    } catch (final RepositoryException re) {
        throw getLoginException(re);
    }
    return createJcrProviderState(session, true, authenticationInfo, bc);
}
Also used : SlingRepository(org.apache.sling.jcr.api.SlingRepository) Bundle(org.osgi.framework.Bundle) LoginException(org.apache.sling.api.resource.LoginException) RepositoryException(javax.jcr.RepositoryException) SimpleCredentials(javax.jcr.SimpleCredentials) Credentials(javax.jcr.Credentials) Session(javax.jcr.Session) BundleContext(org.osgi.framework.BundleContext)

Aggregations

LoginException (org.apache.sling.api.resource.LoginException)61 ResourceResolver (org.apache.sling.api.resource.ResourceResolver)49 Resource (org.apache.sling.api.resource.Resource)34 PersistenceException (org.apache.sling.api.resource.PersistenceException)23 HashMap (java.util.HashMap)11 ModifiableValueMap (org.apache.sling.api.resource.ModifiableValueMap)8 RepositoryException (javax.jcr.RepositoryException)7 ArrayList (java.util.ArrayList)5 HashSet (java.util.HashSet)5 JsonException (javax.json.JsonException)4 ResourceResolverFactory (org.apache.sling.api.resource.ResourceResolverFactory)4 ValueMap (org.apache.sling.api.resource.ValueMap)4 IOException (java.io.IOException)3 Calendar (java.util.Calendar)3 Map (java.util.Map)3 SimpleCredentials (javax.jcr.SimpleCredentials)3 ServletException (javax.servlet.ServletException)3 InstanceDescription (org.apache.sling.discovery.InstanceDescription)3 Bundle (org.osgi.framework.Bundle)3 LinkedList (java.util.LinkedList)2