/* * JBoss, Home of Professional Open Source. * Copyright 2015 Red Hat, Inc., and individual contributors * as indicated by the @author tags. * * 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.wildfly.security.auth.server; import java.security.Principal; import java.util.function.Function; import org.wildfly.common.Assert; /** * A configuration for a single mechanism realm. * * @author <a href="mailto:david.lloyd@redhat.com">David M. Lloyd</a> */ public final class MechanismRealmConfiguration { private final String realmName; private final Function<Principal, Principal> preRealmRewriter; private final Function<Principal, Principal> postRealmRewriter; private final Function<Principal, Principal> finalRewriter; private final RealmMapper realmMapper; /** * Construct a new instance. * * @param realmName the name of this realm (may not be {@code null}) * @param preRealmRewriter the pre-realm rewriter to apply (may not be {@code null}) * @param postRealmRewriter the post-realm rewriter to apply (may not be {@code null}) * @param finalRewriter the final rewriter to apply (may not be {@code null}) * @param realmMapper the realm mapper to use */ MechanismRealmConfiguration(final String realmName, final Function<Principal, Principal> preRealmRewriter, final Function<Principal, Principal> postRealmRewriter, final Function<Principal, Principal> finalRewriter, final RealmMapper realmMapper) { this.realmName = realmName; this.preRealmRewriter = preRealmRewriter; this.postRealmRewriter = postRealmRewriter; this.finalRewriter = finalRewriter; this.realmMapper = realmMapper; } /** * Get the mechanism realm name. * * @return the mechanism realm name (not {@code null}) */ public String getRealmName() { return realmName; } /** * Get the pre-realm rewriter for this mechanism realm. * * @return the pre-realm rewriter for this mechanism realm (not {@code null}) */ public Function<Principal, Principal> getPreRealmRewriter() { return preRealmRewriter; } /** * Get the post-realm rewriter for this mechanism realm. * * @return the post-realm rewriter for this mechanism realm (not {@code null}) */ public Function<Principal, Principal> getPostRealmRewriter() { return postRealmRewriter; } /** * Get the final rewriter for this mechanism realm. * * @return the final rewriter for this mechanism realm (not {@code null}) */ public Function<Principal, Principal> getFinalRewriter() { return finalRewriter; } /** * Get the realm mapper for this mechanism realm. * * @return the realm mapper for this mechanism realm, or {@code null} to use the default */ public RealmMapper getRealmMapper() { return realmMapper; } /** * A realm configuration for no particular realm, which does no additional rewriting. */ public static final MechanismRealmConfiguration NO_REALM = new MechanismRealmConfiguration("none", Function.identity(), Function.identity(), Function.identity(), null); /** * Obtain a new {@link Builder} capable of building a {@link MechanismRealmConfiguration}. * * @return a new {@link Builder} capable of building a {@link MechanismRealmConfiguration}. */ public static Builder builder() { return new Builder(); } public static final class Builder { private String realmName; private Function<Principal, Principal> preRealmRewriter = Function.identity(); private Function<Principal, Principal> postRealmRewriter = Function.identity(); private Function<Principal, Principal> finalRewriter = Function.identity(); private RealmMapper realmMapper; /** * Construct a new instance. */ Builder() { } public Builder setRealmName(final String realmName) { this.realmName = realmName; return this; } public Builder setPreRealmRewriter(final Function<Principal, Principal> preRealmRewriter) { Assert.checkNotNullParam("preRealmRewriter", preRealmRewriter); this.preRealmRewriter = preRealmRewriter; return this; } public Builder setPostRealmRewriter(final Function<Principal, Principal> postRealmRewriter) { Assert.checkNotNullParam("postRealmRewriter", postRealmRewriter); this.postRealmRewriter = postRealmRewriter; return this; } public Builder setFinalRewriter(final Function<Principal, Principal> finalRewriter) { Assert.checkNotNullParam("finalRewriter", finalRewriter); this.finalRewriter = finalRewriter; return this; } public Builder setRealmMapper(final RealmMapper realmMapper) { this.realmMapper = realmMapper; return this; } public MechanismRealmConfiguration build() { Assert.checkNotNullParam("realmName", realmName); return new MechanismRealmConfiguration(realmName, preRealmRewriter, postRealmRewriter, finalRewriter, realmMapper); } } }