void registerAuthenticationMechanism()

in tomee/tomee-security/src/main/java/org/apache/tomee/security/cdi/TomEESecurityExtension.java [134:348]


    void registerAuthenticationMechanism(
        @Observes final AfterBeanDiscovery afterBeanDiscovery,
        final BeanManager beanManager) {

        if (tomcatUserStore.get() != null) {
            afterBeanDiscovery
                .addBean()
                .id(TomEEDefaultIdentityStore.class.getName() + "#" + TomcatUserIdentityStoreDefinition.class.getName())
                .beanClass(Supplier.class)
                .addType(Object.class)
                .addType(new TypeLiteral<Supplier<TomcatUserIdentityStoreDefinition>>() {})
                .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
                .scope(ApplicationScoped.class)
                .createWith(creationalContext -> createTomcatUserIdentityStoreDefinitionSupplier(beanManager));

            afterBeanDiscovery
                .addBean()
                .id(TomEEDefaultIdentityStore.class.getName())
                .beanClass(TomEEDefaultIdentityStore.class)
                .types(Object.class, IdentityStore.class, TomEEDefaultIdentityStore.class)
                .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
                .scope(ApplicationScoped.class)
                .createWith((CreationalContext<TomEEDefaultIdentityStore> creationalContext) -> {
                    final AnnotatedType<TomEEDefaultIdentityStore> annotatedType =
                        beanManager.createAnnotatedType(TomEEDefaultIdentityStore.class);
                    final BeanAttributes<TomEEDefaultIdentityStore> beanAttributes =
                        beanManager.createBeanAttributes(annotatedType);
                    return beanManager.createBean(beanAttributes, TomEEDefaultIdentityStore.class,
                                                  beanManager.getInjectionTargetFactory(annotatedType))
                                      .create(creationalContext);
                });

        }

        if (databaseStore.get() != null) {
            afterBeanDiscovery
                .addBean()
                .id(TomEEDatabaseIdentityStore.class.getName() + "#" + DatabaseIdentityStoreDefinition.class.getName())
                .beanClass(Supplier.class)
                .addType(Object.class)
                .addType(new TypeLiteral<Supplier<DatabaseIdentityStoreDefinition>>() {})
                .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
                .scope(ApplicationScoped.class)
                .createWith(creationalContext -> createDatabaseIdentityStoreDefinitionSupplier(beanManager));

            afterBeanDiscovery
                .addBean()
                .id(TomEEDatabaseIdentityStore.class.getName())
                .beanClass(TomEEDatabaseIdentityStore.class)
                .types(Object.class, IdentityStore.class, TomEEDatabaseIdentityStore.class)
                .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
                .scope(ApplicationScoped.class)
                .createWith((CreationalContext<TomEEDatabaseIdentityStore> creationalContext) -> {
                    final AnnotatedType<TomEEDatabaseIdentityStore> annotatedType =
                        beanManager.createAnnotatedType(TomEEDatabaseIdentityStore.class);
                    final BeanAttributes<TomEEDatabaseIdentityStore> beanAttributes =
                        beanManager.createBeanAttributes(annotatedType);
                    return beanManager.createBean(beanAttributes, TomEEDatabaseIdentityStore.class,
                                                  beanManager.getInjectionTargetFactory(annotatedType))
                                      .create(creationalContext);
                });
        }

        if (ldapStore.get() != null) {
            afterBeanDiscovery
                .addBean()
                .id(TomEELDAPIdentityStore.class.getName() + "#" + LdapIdentityStoreDefinition.class.getName())
                .beanClass(Supplier.class)
                .addType(Object.class)
                .addType(new TypeLiteral<Supplier<LdapIdentityStoreDefinition>>() {})
                .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
                .scope(ApplicationScoped.class)
                .createWith(creationalContext -> createLdapIdentityStoreDefinitionSupplier(beanManager));

            afterBeanDiscovery
                .addBean()
                .id(TomEELDAPIdentityStore.class.getName())
                .beanClass(TomEELDAPIdentityStore.class)
                .types(Object.class, IdentityStore.class, TomEELDAPIdentityStore.class)
                .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
                .scope(ApplicationScoped.class)
                .createWith((CreationalContext<TomEELDAPIdentityStore> creationalContext) -> {
                    final AnnotatedType<TomEELDAPIdentityStore> annotatedType =
                        beanManager.createAnnotatedType(TomEELDAPIdentityStore.class);
                    final BeanAttributes<TomEELDAPIdentityStore> beanAttributes =
                        beanManager.createBeanAttributes(annotatedType);
                    return beanManager.createBean(beanAttributes, TomEELDAPIdentityStore.class,
                                                  beanManager.getInjectionTargetFactory(annotatedType))
                                      .create(creationalContext);
                });
        }

        if (basicMechanism.get() != null) {
            afterBeanDiscovery
                .addBean()
                .id(BasicAuthenticationMechanism.class.getName() + "#" + BasicAuthenticationMechanismDefinition.class.getName())
                .beanClass(Supplier.class)
                .addType(Object.class)
                .addType(new TypeLiteral<Supplier<BasicAuthenticationMechanismDefinition>>() {})
                .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
                .scope(ApplicationScoped.class)
                .createWith(creationalContext -> createBasicAuthenticationMechanismDefinitionSupplier(beanManager));

            afterBeanDiscovery
                .addBean()
                .id(BasicAuthenticationMechanism.class.getName())
                .beanClass(BasicAuthenticationMechanism.class)
                .types(Object.class, HttpAuthenticationMechanism.class, BasicAuthenticationMechanism.class)
                .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
                .scope(ApplicationScoped.class)
                .createWith((CreationalContext<BasicAuthenticationMechanism> creationalContext) -> {
                    final AnnotatedType<BasicAuthenticationMechanism> annotatedType =
                        beanManager.createAnnotatedType(BasicAuthenticationMechanism.class);
                    final BeanAttributes<BasicAuthenticationMechanism> beanAttributes =
                        beanManager.createBeanAttributes(annotatedType);
                    return beanManager.createBean(beanAttributes, BasicAuthenticationMechanism.class,
                                                  beanManager.getInjectionTargetFactory(annotatedType))
                                      .create(creationalContext);
                });

        }

        if (formMechanism.get() != null) {
            afterBeanDiscovery
                .addBean()
                .id(FormAuthenticationMechanism.class.getName() + "#" + LoginToContinue.class.getName())
                .beanClass(Supplier.class)
                .addType(Object.class)
                .addType(new TypeLiteral<Supplier<LoginToContinue>>() {})
                .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
                .scope(ApplicationScoped.class)
                .createWith(creationalContext -> createFormLoginToContinueSupplier(beanManager));

            afterBeanDiscovery
                .addBean()
                .id(FormAuthenticationMechanism.class.getName())
                .beanClass(FormAuthenticationMechanism.class)
                .types(Object.class, HttpAuthenticationMechanism.class, FormAuthenticationMechanism.class)
                .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
                .scope(ApplicationScoped.class)
                .createWith((CreationalContext<FormAuthenticationMechanism> creationalContext) -> {
                    final AnnotatedType<FormAuthenticationMechanism> annotatedType =
                        beanManager.createAnnotatedType(FormAuthenticationMechanism.class);
                    final BeanAttributes<FormAuthenticationMechanism> beanAttributes =
                        beanManager.createBeanAttributes(annotatedType);
                    return beanManager.createBean(beanAttributes, FormAuthenticationMechanism.class,
                                                  beanManager.getInjectionTargetFactory(annotatedType))
                                      .create(creationalContext);
                });


        }

        if (customMechanism.get() != null) {
            afterBeanDiscovery
                .addBean()
                .id(CustomFormAuthenticationMechanism.class.getName() + "#" + LoginToContinue.class.getName())
                .beanClass(Supplier.class)
                .addType(Object.class)
                .addType(new TypeLiteral<Supplier<LoginToContinue>>() {})
                .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
                .scope(ApplicationScoped.class)
                .createWith(creationalContext -> createCustomFormLoginToContinueSupplier(beanManager));

            afterBeanDiscovery
                .addBean()
                .id(CustomFormAuthenticationMechanism.class.getName())
                .beanClass(CustomFormAuthenticationMechanism.class)
                .types(Object.class, HttpAuthenticationMechanism.class, CustomFormAuthenticationMechanism.class)
                .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
                .scope(ApplicationScoped.class)
                .createWith((CreationalContext<CustomFormAuthenticationMechanism> creationalContext) -> {
                    final AnnotatedType<CustomFormAuthenticationMechanism> annotatedType =
                        beanManager.createAnnotatedType(CustomFormAuthenticationMechanism.class);
                    final BeanAttributes<CustomFormAuthenticationMechanism> beanAttributes =
                        beanManager.createBeanAttributes(annotatedType);
                    return beanManager.createBean(beanAttributes, CustomFormAuthenticationMechanism.class,
                                                  beanManager.getInjectionTargetFactory(annotatedType))
                                      .create(creationalContext);
                });
        }

        if (oidcMechanism.get() != null) {
            afterBeanDiscovery
                    .addBean()
                    .id(OpenIdAuthenticationMechanism.class.getName() + "#" + OpenIdAuthenticationMechanismDefinition.class.getName())
                    .beanClass(OpenIdAuthenticationMechanismDefinition.class)
                    .types(Object.class, OpenIdAuthenticationMechanismDefinition.class)
                    .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
                    .scope(ApplicationScoped.class)
                    .createWith(creationalContext -> createOpenIdAuthenticationMechanismDefinition(beanManager));

            afterBeanDiscovery.addBean()
                    .id(OpenIdStorageHandler.class.getName())
                    .beanClass(OpenIdStorageHandler.class)
                    .types(Object.class, OpenIdStorageHandler.class)
                    .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
                    .scope(ApplicationScoped.class)
                    .createWith(creationalContext -> {
                        Bean<OpenIdAuthenticationMechanismDefinition> definitionBean = (Bean<OpenIdAuthenticationMechanismDefinition>)
                                beanManager.resolve(beanManager.getBeans(OpenIdAuthenticationMechanismDefinition.class));

                        OpenIdAuthenticationMechanismDefinition definition = (OpenIdAuthenticationMechanismDefinition)
                                beanManager.getReference(definitionBean, OpenIdAuthenticationMechanismDefinition.class, creationalContext);

                        return definition.useSession()
                                ? new SessionBasedOpenIdStorageHandler()
                                : new CookieBasedOpenIdStorageHandler();
                    });

            afterBeanDiscovery.addBean(createBean(TomEEOpenIdContext.class, beanManager));
            afterBeanDiscovery.addBean(createBean(OpenIdIdentityStore.class, beanManager));
            afterBeanDiscovery.addBean(createBean(OpenIdAuthenticationMechanism.class, beanManager));
        }
    }