Search in sources :

Example 11 with DeploymentException

use of javax.enterprise.inject.spi.DeploymentException in project Payara by payara.

the class JwtPrivateKeyStore method createPrivateKeyFromJWKS.

private PrivateKey createPrivateKeyFromJWKS(String jwksValue, String keyId) throws Exception {
    JsonObject jwks = JwtKeyStoreUtils.parseJwks(jwksValue);
    JsonArray keys = jwks.getJsonArray("keys");
    JsonObject jwk = keys != null ? JwtKeyStoreUtils.findJwk(keys, keyId) : jwks;
    // Check if an RSA or ECDSA key needs to be created
    String kty = jwk.getString("kty");
    if (kty == null) {
        throw new DeploymentException("Could not determine key type - kty field not present");
    }
    if (kty.equals("RSA")) {
        // The modulus
        byte[] modulusBytes = Base64.getUrlDecoder().decode(jwk.getString("n"));
        BigInteger modulus = new BigInteger(1, modulusBytes);
        // The private exponent
        byte[] exponentBytes = Base64.getUrlDecoder().decode(jwk.getString("d"));
        BigInteger exponent = new BigInteger(1, exponentBytes);
        RSAPrivateKeySpec privateKeySpec = new RSAPrivateKeySpec(modulus, exponent);
        return KeyFactory.getInstance("RSA").generatePrivate(privateKeySpec);
    } else {
        throw new DeploymentException("Could not determine key type - JWKS kty field does not equal RSA or EC");
    }
}
Also used : JsonArray(javax.json.JsonArray) RSAPrivateKeySpec(java.security.spec.RSAPrivateKeySpec) JsonObject(javax.json.JsonObject) BigInteger(java.math.BigInteger) DeploymentException(javax.enterprise.inject.spi.DeploymentException)

Example 12 with DeploymentException

use of javax.enterprise.inject.spi.DeploymentException in project tomee by apache.

the class ThreadSingletonServiceImpl method initialize.

@Override
public void initialize(final StartupObject startupObject) {
    if (lazyInit == null) {
        // done here cause Cdibuilder trigger this class loading and that's from Warmup so we can't init too early config
        synchronized (this) {
            if (lazyInit == null) {
                lazyInit = new Object();
                cachedApplicationScoped = "true".equalsIgnoreCase(SystemInstance.get().getProperty("openejb.cdi.applicationScope.cached", "true").trim());
                cachedRequestScoped = "true".equalsIgnoreCase(SystemInstance.get().getProperty("openejb.cdi.requestScope.cached", "true").trim());
                cachedSessionScoped = "true".equalsIgnoreCase(SystemInstance.get().getProperty("openejb.cdi.sessionScope.cached", "true").trim());
            }
        }
    }
    final AppContext appContext = startupObject.getAppContext();
    appContext.setCdiEnabled(hasBeans(startupObject.getAppInfo()));
    // initialize owb context, cf geronimo's OpenWebBeansGBean
    final Properties properties = new Properties();
    properties.setProperty(OpenWebBeansConfiguration.APPLICATION_IS_JSP, "true");
    properties.setProperty(OpenWebBeansConfiguration.USE_EJB_DISCOVERY, "true");
    // from CDI builder
    properties.setProperty(OpenWebBeansConfiguration.INTERCEPTOR_FORCE_NO_CHECKED_EXCEPTIONS, "false");
    properties.setProperty(SecurityService.class.getName(), ManagedSecurityService.class.getName());
    properties.setProperty(OpenWebBeansConfiguration.APPLICATION_SUPPORTS_CONVERSATION, "true");
    properties.setProperty(OpenWebBeansConfiguration.IGNORED_INTERFACES, "org.apache.aries.proxy.weaving.WovenProxy");
    final boolean tomee = SystemInstance.get().getProperty("openejb.loader", "foo").startsWith("tomcat");
    final String defaultNormalScopeHandlerClass = NormalScopedBeanInterceptorHandler.class.getName();
    properties.setProperty("org.apache.webbeans.proxy.mapping.javax.enterprise.context.ApplicationScoped", cachedApplicationScoped ? ApplicationScopedBeanInterceptorHandler.class.getName() : defaultNormalScopeHandlerClass);
    properties.setProperty("org.apache.webbeans.proxy.mapping.javax.enterprise.context.RequestScoped", tomee && cachedRequestScoped ? RequestScopedBeanInterceptorHandler.class.getName() : defaultNormalScopeHandlerClass);
    properties.setProperty("org.apache.webbeans.proxy.mapping.javax.enterprise.context.SessionScoped", tomee && cachedSessionScoped ? SessionScopedBeanInterceptorHandler.class.getName() : defaultNormalScopeHandlerClass);
    properties.put(OpenWebBeansConfiguration.PRODUCER_INTERCEPTION_SUPPORT, SystemInstance.get().getProperty("openejb.cdi.producer.interception", "true"));
    properties.putAll(appContext.getProperties());
    // services needing WBC as constructor param
    properties.put(ContextsService.class.getName(), CdiAppContextsService.class.getName());
    properties.put(ResourceInjectionService.class.getName(), CdiResourceInjectionService.class.getName());
    properties.put(TransactionService.class.getName(), OpenEJBTransactionService.class.getName());
    properties.put("org.apache.webbeans.component.PrincipalBean.proxy", "false");
    // like in ClassDefiner. We need to explicitly set the Proxy service
    if (ClassDefiner.isClassLoaderDefineClass()) {
        properties.setProperty(DefiningClassService.class.getName(), ClassDefiner.class.getName());
    }
    // NOTE: ensure user can extend/override all the services = set it only if not present in properties, see WebBeansContext#getService()
    final Map<Class<?>, Object> services = new HashMap<>();
    services.put(AppContext.class, appContext);
    if (!properties.containsKey(Executor.class.getName())) {
        services.put(Executor.class, new Executor() {

            // lazy to create threads only for apps requiring it
            private final AtomicReference<Executor> delegate = new AtomicReference<>();

            @Override
            public void execute(final Runnable command) {
                Executor executor = delegate.get();
                if (executor == null) {
                    synchronized (this) {
                        final Executor alreadyUpdated = delegate.get();
                        if (alreadyUpdated == null) {
                            executor = new ManagedExecutorServiceImpl(new ExecutorBuilder().size(3).threadFactory(new ManagedThreadFactoryImpl(appContext.getId() + "-cdi-fireasync-")).prefix("CDIAsyncPool").build(appContext.getOptions()));
                            delegate.compareAndSet(null, executor);
                        } else {
                            executor = alreadyUpdated;
                        }
                    }
                }
                executor.execute(command);
            }

            @Override
            public String toString() {
                return "CDIAsyncEventExecutor(app=" + appContext.getId() + ")";
            }
        });
    }
    if (!properties.containsKey(ApplicationBoundaryService.class.getName())) {
        services.put(ApplicationBoundaryService.class, new DefaultApplicationBoundaryService());
    }
    if (!properties.containsKey(ScannerService.class.getName())) {
        services.put(ScannerService.class, new CdiScanner());
    }
    if (!properties.containsKey(JNDIService.class.getName())) {
        services.put(JNDIService.class, new OpenEJBJndiService());
    }
    if (!properties.containsKey(BeanArchiveService.class.getName())) {
        services.put(BeanArchiveService.class, new OpenEJBBeanInfoService());
    }
    if (!properties.containsKey(ELAdaptor.class.getName())) {
        try {
            services.put(ELAdaptor.class, new CustomELAdapter(appContext));
        } catch (final NoClassDefFoundError noClassDefFoundError) {
        // no-op: no javax.el
        }
    }
    if (!properties.containsKey(LoaderService.class.getName())) {
        final LoaderService loaderService = SystemInstance.get().getComponent(LoaderService.class);
        if (loaderService == null && !properties.containsKey(LoaderService.class.getName())) {
            services.put(LoaderService.class, new OptimizedLoaderService(appContext.getProperties()));
        } else if (loaderService != null) {
            services.put(LoaderService.class, loaderService);
        }
    }
    final ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
    final ClassLoader cl;
    if (oldClassLoader != ThreadSingletonServiceImpl.class.getClassLoader() && ThreadSingletonServiceImpl.class.getClassLoader() != oldClassLoader.getParent()) {
        cl = new MultipleClassLoader(oldClassLoader, ThreadSingletonServiceImpl.class.getClassLoader());
    } else {
        cl = oldClassLoader;
    }
    Thread.currentThread().setContextClassLoader(cl);
    final WebBeansContext webBeansContext;
    Object old = null;
    try {
        if (startupObject.getWebContext() == null) {
            webBeansContext = new WebBeansContext(services, properties);
            appContext.set(WebBeansContext.class, webBeansContext);
        } else {
            webBeansContext = new WebappWebBeansContext(services, properties, appContext.getWebBeansContext());
            startupObject.getWebContext().setWebbeansContext(webBeansContext);
        }
        // we want the same reference as the ContextsService if that's our impl
        if (webBeansContext.getOpenWebBeansConfiguration().supportsConversation() && "org.apache.webbeans.jsf.DefaultConversationService".equals(webBeansContext.getOpenWebBeansConfiguration().getProperty(ConversationService.class.getName()))) {
            webBeansContext.registerService(ConversationService.class, ConversationService.class.cast(webBeansContext.getService(ContextsService.class)));
        }
        final BeanManagerImpl beanManagerImpl = webBeansContext.getBeanManagerImpl();
        beanManagerImpl.addContext(new TransactionContext());
        webBeansContext.getInterceptorsManager().addInterceptorBindingType(Transactional.class);
        SystemInstance.get().fireEvent(new WebBeansContextCreated(webBeansContext));
        old = contextEntered(webBeansContext);
        setConfiguration(webBeansContext.getOpenWebBeansConfiguration());
        try {
            webBeansContext.getService(ContainerLifecycle.class).startApplication(startupObject);
        } catch (final Exception e) {
            throw new DeploymentException("couldn't start owb context", e);
        }
    } finally {
        contextExited(old);
        Thread.currentThread().setContextClassLoader(oldClassLoader);
    }
}
Also used : ManagedExecutorServiceImpl(org.apache.openejb.threads.impl.ManagedExecutorServiceImpl) LoaderService(org.apache.webbeans.spi.LoaderService) HashMap(java.util.HashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Properties(java.util.Properties) ExecutorBuilder(org.apache.openejb.util.ExecutorBuilder) Executor(java.util.concurrent.Executor) WebBeansContext(org.apache.webbeans.config.WebBeansContext) SecurityService(org.apache.webbeans.spi.SecurityService) MultipleClassLoader(org.apache.openejb.util.classloader.MultipleClassLoader) ClassDefiner(org.apache.openejb.util.proxy.ClassDefiner) ContextsService(org.apache.webbeans.spi.ContextsService) ManagedThreadFactoryImpl(org.apache.openejb.threads.impl.ManagedThreadFactoryImpl) TransactionService(org.apache.webbeans.spi.TransactionService) AppContext(org.apache.openejb.AppContext) AtomicReference(java.util.concurrent.atomic.AtomicReference) ResourceInjectionService(org.apache.webbeans.spi.ResourceInjectionService) ConversationService(org.apache.webbeans.spi.ConversationService) DeploymentException(javax.enterprise.inject.spi.DeploymentException) ContainerLifecycle(org.apache.webbeans.spi.ContainerLifecycle) DefaultApplicationBoundaryService(org.apache.webbeans.corespi.se.DefaultApplicationBoundaryService) DefiningClassService(org.apache.webbeans.spi.DefiningClassService) BeanManagerImpl(org.apache.webbeans.container.BeanManagerImpl) TransactionContext(org.apache.openejb.cdi.transactional.TransactionContext) DeploymentException(javax.enterprise.inject.spi.DeploymentException) MultipleClassLoader(org.apache.openejb.util.classloader.MultipleClassLoader)

Example 13 with DeploymentException

use of javax.enterprise.inject.spi.DeploymentException in project Payara by payara.

the class JwtAuthCdiExtension method checkInjectIntoRightScope.

public <T> void checkInjectIntoRightScope(@Observes ProcessInjectionTarget<T> eventIn, BeanManager beanManager) {
    // JDK8 u60 workaround
    ProcessInjectionTarget<T> event = eventIn;
    for (InjectionPoint injectionPoint : event.getInjectionTarget().getInjectionPoints()) {
        Claim claim = hasClaim(injectionPoint);
        if (claim != null) {
            // MP-JWT 1.0 7.1.3.
            Bean<?> bean = injectionPoint.getBean();
            Class<?> scope = bean != null ? injectionPoint.getBean().getScope() : null;
            if (scope != null && scope.equals(SessionScoped.class)) {
                throw new DeploymentException("Can't inject using qualifier " + Claim.class + " in a target with scope " + scope);
            }
            if (!claim.value().equals("") && claim.standard() != UNKNOWN && !claim.value().equals(claim.standard().name())) {
                throw new DeploymentException("Claim value " + claim.value() + " should be equal to claim standard " + claim.standard().name() + " or one of those should be left at their default value");
            }
        }
    }
}
Also used : SessionScoped(javax.enterprise.context.SessionScoped) InjectionPoint(javax.enterprise.inject.spi.InjectionPoint) DeploymentException(javax.enterprise.inject.spi.DeploymentException) Claim(org.eclipse.microprofile.jwt.Claim)

Example 14 with DeploymentException

use of javax.enterprise.inject.spi.DeploymentException in project wildfly-swarm by wildfly-swarm.

the class JWTAuthContextInfoProvider method getOptionalContextInfo.

@Produces
Optional<JWTAuthContextInfo> getOptionalContextInfo() {
    if (!publicKeyPemEnc.isPresent()) {
        return Optional.empty();
    }
    JWTAuthContextInfo contextInfo = new JWTAuthContextInfo();
    try {
        RSAPublicKey pk = (RSAPublicKey) KeyUtils.decodePublicKey(publicKeyPemEnc.get());
        contextInfo.setSignerKey(pk);
    } catch (Exception e) {
        throw new DeploymentException(e);
    }
    if (issuedBy != null && !issuedBy.equals("NONE")) {
        contextInfo.setIssuedBy(issuedBy);
    }
    if (expGracePeriodSecs.isPresent()) {
        contextInfo.setExpGracePeriodSecs(expGracePeriodSecs.get());
    }
    return Optional.of(contextInfo);
}
Also used : RSAPublicKey(java.security.interfaces.RSAPublicKey) DeploymentException(javax.enterprise.inject.spi.DeploymentException) JWTAuthContextInfo(org.wildfly.swarm.microprofile.jwtauth.deployment.principal.JWTAuthContextInfo) DeploymentException(javax.enterprise.inject.spi.DeploymentException) Produces(javax.enterprise.inject.Produces)

Aggregations

DeploymentException (javax.enterprise.inject.spi.DeploymentException)14 InjectionPoint (javax.enterprise.inject.spi.InjectionPoint)4 JsonObject (javax.json.JsonObject)4 Claim (org.eclipse.microprofile.jwt.Claim)4 IOException (java.io.IOException)3 ParameterizedType (java.lang.reflect.ParameterizedType)3 Type (java.lang.reflect.Type)3 URISyntaxException (java.net.URISyntaxException)3 JsonArray (javax.json.JsonArray)3 File (java.io.File)2 StringReader (java.io.StringReader)2 BigInteger (java.math.BigInteger)2 URL (java.net.URL)2 HashMap (java.util.HashMap)2 Properties (java.util.Properties)2 ProcessInjectionPoint (javax.enterprise.inject.spi.ProcessInjectionPoint)2 JsonParsingException (javax.json.stream.JsonParsingException)2 JsonWebKey (org.jose4j.jwk.JsonWebKey)2 JoseException (org.jose4j.lang.JoseException)2 ConfigValueResolver (fish.payara.nucleus.microprofile.config.spi.ConfigValueResolver)1