package org.apereo.cas.adaptors.radius; import com.google.common.base.Throwables; import net.jradius.client.RadiusClient; import org.apache.commons.lang3.builder.ToStringBuilder; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; /** * Factory for creating RADIUS client instances. * * @author Marvin S. Addison * @since 4.0.0 */ public class RadiusClientFactory { private static final int DEFAULT_SOCKET_TIMEOUT = 60; /** The port to do accounting on. */ private int accountingPort = RadiusServer.DEFAULT_PORT_ACCOUNTING; /** The port to do authentication on. */ private int authenticationPort = RadiusServer.DEFAULT_PORT_AUTHENTICATION; /** Socket timeout in seconds. */ private int socketTimeout = DEFAULT_SOCKET_TIMEOUT; /** RADIUS server network address. */ private InetAddress inetAddress; /** The shared secret to send to the RADIUS server. */ private String sharedSecret; /** * * @param accountingPort Sets the RADIUS server accounting port. * @param authenticationPort Sets the RADIUS server authentication port. * @param socketTimeout Sets the RADIUS server UDP socket timeout. * @param inetAddress RADIUS server network address. * @param sharedSecret RADIUS server authentication shared secret. */ public RadiusClientFactory(final int accountingPort, final int authenticationPort, final int socketTimeout, final String inetAddress, final String sharedSecret) { this.accountingPort = accountingPort; this.authenticationPort = authenticationPort; this.socketTimeout = socketTimeout; try { this.inetAddress = InetAddress.getByName(inetAddress); } catch (final UnknownHostException e) { Throwables.propagate(e); } this.sharedSecret = sharedSecret; } /** * Creates a new RADIUS client instance using factory configuration settings. * * @return New radius client instance. * @throws IOException In case the transport method encounters an error. */ public RadiusClient newInstance() throws IOException { return new RadiusClient( this.inetAddress, this.sharedSecret, this.authenticationPort, this.accountingPort, this.socketTimeout); } @Override public String toString() { return new ToStringBuilder(this) .append("accountingPort", this.accountingPort) .append("authenticationPort", this.authenticationPort) .append("socketTimeout", this.socketTimeout) .append("inetAddress", this.inetAddress) .toString(); } }