package org.pac4j.config.builder;
import org.pac4j.config.client.PropertiesConstants;
import org.pac4j.core.client.Client;
import org.pac4j.core.credentials.authenticator.Authenticator;
import org.pac4j.http.client.indirect.FormClient;
import org.pac4j.http.client.indirect.IndirectBasicAuthClient;
import org.pac4j.http.credentials.authenticator.test.SimpleTestTokenAuthenticator;
import org.pac4j.http.credentials.authenticator.test.SimpleTestUsernamePasswordAuthenticator;
import java.util.List;
import java.util.Map;
import static org.pac4j.core.util.CommonHelper.isNotBlank;
/**
* Builder for indirect HTTP clients.
*
* @author Jerome Leleu
* @since 2.0.0
*/
public class IndirectHttpClientBuilder extends AbstractBuilder implements PropertiesConstants {
private final Map<String, Authenticator> authenticators;
public IndirectHttpClientBuilder(final Map<String, String> properties, final Map<String, Authenticator> authenticators) {
super(properties);
this.authenticators = authenticators;
}
public void tryCreateLoginFormClient(final List<Client> clients) {
for (int i = 0; i <= MAX_NUM_CLIENTS; i++) {
final String loginUrl = getProperty(FORMCLIENT_LOGIN_URL, i);
final String authenticator = getProperty(FORMCLIENT_AUTHENTICATOR, i);
if (isNotBlank(loginUrl) && isNotBlank(authenticator)) {
final FormClient formClient = new FormClient();
formClient.setLoginUrl(loginUrl);
formClient.setAuthenticator(getAuthenticator(authenticator));
if (containsProperty(FORMCLIENT_USERNAME_PARAMETER, i)) {
formClient.setUsernameParameter(getProperty(FORMCLIENT_USERNAME_PARAMETER, i));
}
if (containsProperty(FORMCLIENT_PASSWORD_PARAMETER, i)) {
formClient.setPasswordParameter(getProperty(FORMCLIENT_PASSWORD_PARAMETER, i));
}
if (i != 0) {
formClient.setName(concat(formClient.getName(), i));
}
clients.add(formClient);
}
}
}
public void tryCreateIndirectBasciAuthClient(final List<Client> clients) {
for (int i = 0; i <= MAX_NUM_CLIENTS; i++) {
final String authenticator = getProperty(INDIRECTBASICAUTH_AUTHENTICATOR, i);
if (isNotBlank(authenticator)) {
final IndirectBasicAuthClient indirectBasicAuthClient = new IndirectBasicAuthClient();
indirectBasicAuthClient.setAuthenticator(getAuthenticator(authenticator));
if (containsProperty(INDIRECTBASICAUTH_REALM_NAME, i)) {
indirectBasicAuthClient.setRealmName(getProperty(INDIRECTBASICAUTH_REALM_NAME, i));
}
if (i != 0) {
indirectBasicAuthClient.setName(concat(indirectBasicAuthClient.getName(), i));
}
clients.add(indirectBasicAuthClient);
}
}
}
protected Authenticator getAuthenticator(final String name) {
if (AUTHENTICATOR_TEST_TOKEN.equals(name)) {
return new SimpleTestTokenAuthenticator();
} else if (AUTHENTICATOR_TEST_USERNAME_PASSWORD.equals(name)) {
return new SimpleTestUsernamePasswordAuthenticator();
} else {
return authenticators.get(name);
}
}
}