All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.infinispan.server.configuration.security.DistributedRealmConfiguration Maven / Gradle / Ivy

The newest version!
package org.infinispan.server.configuration.security;

import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Properties;

import org.infinispan.commons.configuration.attributes.AttributeDefinition;
import org.infinispan.commons.configuration.attributes.AttributeSet;
import org.infinispan.commons.configuration.attributes.ConfigurationElement;
import org.infinispan.server.Server;
import org.infinispan.server.configuration.Element;
import org.infinispan.server.security.ServerSecurityRealm;
import org.wildfly.security.auth.realm.DistributedSecurityRealm;
import org.wildfly.security.auth.server.SecurityDomain;
import org.wildfly.security.auth.server.SecurityRealm;

/**
 * @author Tristan Tarrant <[email protected]>
 * @since 13.0
 **/
public class DistributedRealmConfiguration extends ConfigurationElement implements RealmProvider {
   static final AttributeDefinition NAME = AttributeDefinition.builder("name", "distributed", String.class).build();
   static final AttributeDefinition> REALMS = AttributeDefinition.builder("realms", null, (Class>) (Class) List.class)
         .initializer(ArrayList::new).immutable().build();

   static AttributeSet attributeDefinitionSet() {
      return new AttributeSet(DistributedRealmConfiguration.class, NAME, REALMS);
   }

   DistributedRealmConfiguration(AttributeSet attributes) {
      super(Element.DISTRIBUTED_REALM, attributes);
   }

   @Override
   public SecurityRealm build(SecurityConfiguration securityConfiguration, RealmConfiguration realm, SecurityDomain.Builder domainBuilder, Properties properties) {
      domainBuilder.setDefaultRealmName(name()); // We make this the default realm
      List names = realms();
      SecurityRealm[] securityRealms;
      if (names.isEmpty()) { // we add all realms
         securityRealms = realm.realms().values().toArray(new SecurityRealm[0]);
      } else { // only the specified realms
         securityRealms = new SecurityRealm[names.size()];
         for (int i = 0; i < names.size(); i++) {
            SecurityRealm securityRealm = realm.realms().get(names.get(i));
            if (securityRealm == null) {
               throw Server.log.unknownRealm(names.get(i));
            } else {
               securityRealms[i] = securityRealm;
            }
         }
      }
      return new DistributedSecurityRealm(securityRealms);
   }

   public String name() {
      return attributes.attribute(NAME).get();
   }

   public List realms() {
      return attributes.attribute(REALMS).get();
   }

   @Override
   public void applyFeatures(EnumSet features) {
      // Nothing to do
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy