/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other 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.keycloak.testsuite.util;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.representations.idm.GroupRepresentation;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.representations.idm.RolesRepresentation;
import org.keycloak.representations.idm.UserRepresentation;
import org.keycloak.testsuite.events.EventsListenerProviderFactory;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class RealmBuilder {
private final RealmRepresentation rep;
public static RealmBuilder create() {
RealmRepresentation rep = new RealmRepresentation();
rep.setEnabled(Boolean.TRUE);
return new RealmBuilder(rep);
}
public static RealmBuilder edit(RealmRepresentation rep) {
return new RealmBuilder(rep);
}
private RealmBuilder(RealmRepresentation rep) {
this.rep = rep;
}
public RealmBuilder name(String name) {
rep.setRealm(name);
return this;
}
public RealmBuilder publicKey(String publicKey) {
rep.setPublicKey(publicKey);
return this;
}
public RealmBuilder privateKey(String privateKey) {
rep.setPrivateKey(privateKey);
return this;
}
public RealmBuilder roles(RolesBuilder roles) {
return roles(roles.build());
}
public RealmBuilder roles(RolesRepresentation roles) {
rep.setRoles(roles);
return this;
}
public RealmBuilder events() {
rep.setEventsEnabled(true);
rep.setEnabledEventTypes(Collections.<String>emptyList()); // enables all types
return this;
}
public RealmBuilder testMail() {
Map<String, String> config = new HashMap<>();
config.put("from", MailServerConfiguration.FROM);
config.put("host", MailServerConfiguration.HOST);
config.put("port", MailServerConfiguration.PORT);
rep.setSmtpServer(config);
return this;
}
public RealmBuilder testEventListener() {
if (rep.getEventsListeners() == null) {
rep.setEventsListeners(new LinkedList<String>());
}
if (!rep.getEventsListeners().contains(EventsListenerProviderFactory.PROVIDER_ID)) {
rep.getEventsListeners().add(EventsListenerProviderFactory.PROVIDER_ID);
}
return this;
}
public RealmBuilder removeTestEventListener() {
if (rep.getEventsListeners() != null && rep.getEventsListeners().contains(EventsListenerProviderFactory.PROVIDER_ID)) {
rep.getEventsListeners().remove(EventsListenerProviderFactory.PROVIDER_ID);
}
return this;
}
public RealmBuilder client(ClientBuilder client) {
return client(client.build());
}
public RealmBuilder client(ClientRepresentation client) {
if (rep.getClients() == null) {
rep.setClients(new LinkedList<ClientRepresentation>());
}
rep.getClients().add(client);
return this;
}
public RealmBuilder user(UserBuilder user) {
return user(user.build());
}
public RealmBuilder user(UserRepresentation user) {
if (rep.getUsers() == null) {
rep.setUsers(new LinkedList<UserRepresentation>());
}
rep.getUsers().add(user);
return this;
}
public RealmBuilder notBefore(int i) {
rep.setNotBefore(i);
return this;
}
public RealmBuilder otpLookAheadWindow(int i) {
rep.setOtpPolicyLookAheadWindow(i);
return this;
}
public RealmBuilder bruteForceProtected(boolean bruteForceProtected) {
rep.setBruteForceProtected(bruteForceProtected);
return this;
}
public RealmBuilder failureFactor(int failureFactor) {
rep.setFailureFactor(failureFactor);
return this;
}
public RealmBuilder otpDigits(int i) {
rep.setOtpPolicyDigits(i);
return this;
}
public RealmBuilder otpPeriod(int i) {
rep.setOtpPolicyPeriod(i);
return this;
}
public RealmBuilder otpType(String type) {
rep.setOtpPolicyType(type);
return this;
}
public RealmBuilder otpAlgorithm(String algorithm) {
rep.setOtpPolicyAlgorithm(algorithm);
return this;
}
public RealmBuilder otpInitialCounter(int i) {
rep.setOtpPolicyInitialCounter(i);
return this;
}
public RealmBuilder passwordPolicy(String passwordPolicy) {
rep.setPasswordPolicy(passwordPolicy);
return this;
}
public RealmRepresentation build() {
return rep;
}
public RealmBuilder accessTokenLifespan(int accessTokenLifespan) {
rep.setAccessTokenLifespan(accessTokenLifespan);
return this;
}
public RealmBuilder ssoSessionMaxLifespan(int ssoSessionMaxLifespan) {
rep.setSsoSessionMaxLifespan(ssoSessionMaxLifespan);
return this;
}
public RealmBuilder accessCodeLifespanUserAction(int accessCodeLifespanUserAction) {
rep.setAccessCodeLifespanUserAction(accessCodeLifespanUserAction);
return this;
}
public RealmBuilder accessCodeLifespan(int accessCodeLifespan) {
rep.setAccessCodeLifespan(accessCodeLifespan);
return this;
}
public RealmBuilder sslRequired(String sslRequired) {
rep.setSslRequired(sslRequired);
return this;
}
public RealmBuilder ssoSessionIdleTimeout(int sessionIdleTimeout) {
rep.setSsoSessionIdleTimeout(sessionIdleTimeout);
return this;
}
public RealmBuilder group(GroupRepresentation group) {
if (rep.getGroups() == null) {
rep.setGroups(new ArrayList<>());
}
rep.getGroups().add(group);
return this;
}
}