/* * Copyright 2014 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jbpm.services.cdi.impl; import java.util.List; import javax.enterprise.context.ContextNotActiveException; import javax.enterprise.inject.Instance; import org.jbpm.services.cdi.RequestScopedBackupIdentityProvider; import org.kie.internal.identity.IdentityProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Wrapper to allow to use backup providers in case of given context is not available * */ public class IdentityProviderCDIWrapper implements IdentityProvider { private static final Logger logger = LoggerFactory.getLogger(IdentityProviderCDIWrapper.class); private IdentityProvider delegate; private Instance<RequestScopedBackupIdentityProvider> backupProviders; public IdentityProviderCDIWrapper(IdentityProvider identityProvider, Instance<RequestScopedBackupIdentityProvider> backupProviders) { this.delegate = identityProvider; this.backupProviders = backupProviders; } @Override public String getName() { String name = "unknown"; try { name = delegate.getName(); logger.debug( "Used original identity provider with user: {}", name); } catch (ContextNotActiveException e) { if (!backupProviders.isUnsatisfied()) { for (RequestScopedBackupIdentityProvider provider : backupProviders) { try { name = provider.getName(); if (name != null && !RequestScopedBackupIdentityProvider.UNKNOWN.equals(name)) { logger.debug( "Used backup identity provider {} with user: {}", provider, name); break; } } catch (ContextNotActiveException ex) { name = RequestScopedBackupIdentityProvider.UNKNOWN; } } } } return name; } @Override public List<String> getRoles() { List<String> roles = null; try { roles = delegate.getRoles(); logger.debug( "Used original identity provider with roles: {}", roles); } catch (ContextNotActiveException e) { throw new IllegalStateException("Unable to get roles due to missing context", e); } return roles; } @Override public boolean hasRole(String role) { try { return delegate.hasRole(role); } catch (ContextNotActiveException e) { throw new IllegalStateException("Unable to check role membership due to missing context", e); } } }