package org.arquillian.cube.docker.restassured;
import io.restassured.RestAssured;
import io.restassured.authentication.AuthenticationScheme;
import java.util.Arrays;
public class AuthenticationSchemeFactory {
private AuthenticationSchemeFactory() {
super();
}
public static AuthenticationScheme create(String attribute) {
String[] parameters = attribute.split(":");
if (parameters.length < 2) {
throw new IllegalArgumentException(
String.format("Authentication scheme %s doesn't follow the standard format <protocol>:(<value>[:])+"));
}
switch (parameters[0]) {
case "basic": {
validateEntry(parameters, 3);
return RestAssured.basic(parameters[1], parameters[2]);
}
case "form": {
validateEntry(parameters, 3);
return RestAssured.form(parameters[1], parameters[2]);
}
case "preemptive": {
validateEntry(parameters, 3);
return RestAssured.preemptive().basic(parameters[1], parameters[2]);
}
case "certificate": {
validateEntryBigger(parameters, 3);
final String[] url = Arrays.copyOfRange(parameters, 2, parameters.length - 1);
return RestAssured.certificate(join(url), parameters[parameters.length - 1]);
}
case "digest": {
validateEntry(parameters, 3);
return RestAssured.digest(parameters[1], parameters[2]);
}
case "oauth": {
validateEntry(parameters, 5);
return RestAssured.oauth(parameters[1], parameters[2], parameters[3], parameters[4]);
}
case "oauth2": {
validateEntry(parameters, 2);
return RestAssured.oauth2(parameters[1]);
}
default:
throw new IllegalArgumentException(String.format("Unrecognized protocol %s", parameters[0]));
}
}
private static String join(String[] elements) {
StringBuilder builder = new StringBuilder();
for (String s : elements) {
builder.append(s);
}
return builder.toString();
}
private static void validateEntryBigger(String[] parameters, int numberOfValid) {
if (parameters.length < numberOfValid) {
throw new IllegalArgumentException(
String.format("Invalid number of parameters for %s command.", Arrays.toString(parameters)));
}
}
private static void validateEntry(String[] parameters, int numberOfValid) {
if (parameters.length != numberOfValid) {
throw new IllegalArgumentException(
String.format("Invalid number of parameters for %s command.", Arrays.toString(parameters)));
}
}
}