/* * 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.credential.store; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import org.wildfly.security.auth.server.IdentityCredentials; import org.wildfly.security.credential.Credential; import org.wildfly.security.credential.PasswordCredential; import org.wildfly.security.credential.store.impl.KeyStoreCredentialStore; import org.wildfly.security.password.Password; import org.wildfly.security.password.interfaces.ClearPassword; /** * Utility class to help create {@code KeyStore} for credential store tests dynamically. * * @author <a href="mailto:pskopek@redhat.com">Peter Skopek</a>. */ public class CredentialStoreBuilder { private String type = "JCEKS"; private String file; private char[] storagePassword; private ArrayList<Data> data = new ArrayList<>(); public CredentialStoreBuilder() { } static final class Data { private String alias; private Credential credential; private CredentialStore.ProtectionParameter protectionParameter; Data(final String alias, final Credential credential, final CredentialStore.ProtectionParameter protectionParameter) { this.alias = alias; this.credential = credential; this.protectionParameter = protectionParameter; } String getAlias() { return alias; } Credential getCredential() { return credential; } CredentialStore.ProtectionParameter getProtectionParameter() { return protectionParameter; } } public static CredentialStoreBuilder get() { return new CredentialStoreBuilder(); } public CredentialStoreBuilder setKeyStoreType(String type) { this.type = type; return this; } public CredentialStoreBuilder setKeyStoreFile(String file) { this.file = file; return this; } public CredentialStoreBuilder setKeyStorePassword(String storagePassword) { this.storagePassword = storagePassword.toCharArray(); return this; } public CredentialStoreBuilder setKeyStorePassword(char[] storagePassword) { this.storagePassword = Arrays.copyOf(storagePassword, storagePassword.length); return this; } public CredentialStoreBuilder addCredential(String alias, Credential credential) { data.add(new Data(alias, credential, null)); return this; } public CredentialStoreBuilder addPassword(String alias, Password password) { return addCredential(alias, new PasswordCredential(password)); } public CredentialStoreBuilder addPassword(String alias, char[] password) { return addPassword(alias, ClearPassword.createRaw(ClearPassword.ALGORITHM_CLEAR, password)); } public CredentialStoreBuilder addPassword(String alias, String password) { return addPassword(alias, password.toCharArray()); } public void build() throws Exception { if (file == null) { throw new IllegalStateException("file has to be specified"); } KeyStoreCredentialStore storeImpl = new KeyStoreCredentialStore(); final Map<String, String> map = new HashMap<>(); map.put("location", file); map.put("create", Boolean.TRUE.toString()); if (type != null) map.put("keyStoreType", type); storeImpl.initialize( map, new CredentialStore.CredentialSourceProtectionParameter( IdentityCredentials.NONE.withCredential(new PasswordCredential(ClearPassword.createRaw(ClearPassword.ALGORITHM_CLEAR, storagePassword)))), null ); for (Data item : data) { storeImpl.store(item.getAlias(), item.getCredential(), item.getProtectionParameter()); } storeImpl.flush(); } }