X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=tests%2Fclub%2Fwpia%2Fgigi%2FtestUtils%2FManagedTest.java;h=a6d51becff72a9f90dcda4e1175041aaf4a9b72d;hp=aa18a30482111b9a20b6d0fc49d9476ada1091aa;hb=62b9a6519d6304820fdfa739ef9281e1cdaccb7d;hpb=66bfcbf3304d2469d76907da4ef0920e7d4075f1 diff --git a/tests/club/wpia/gigi/testUtils/ManagedTest.java b/tests/club/wpia/gigi/testUtils/ManagedTest.java index aa18a304..a6d51bec 100644 --- a/tests/club/wpia/gigi/testUtils/ManagedTest.java +++ b/tests/club/wpia/gigi/testUtils/ManagedTest.java @@ -17,13 +17,16 @@ import java.net.URLConnection; import java.net.URLEncoder; import java.nio.file.Files; import java.nio.file.Paths; +import java.security.GeneralSecurityException; import java.security.KeyManagementException; +import java.security.KeyPair; import java.security.NoSuchAlgorithmException; import java.security.Principal; import java.security.PrivateKey; import java.security.cert.X509Certificate; import java.sql.SQLException; import java.util.Locale; +import java.util.Map.Entry; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -42,6 +45,9 @@ import club.wpia.gigi.DevelLauncher; import club.wpia.gigi.GigiApiException; import club.wpia.gigi.database.GigiPreparedStatement; import club.wpia.gigi.database.GigiResultSet; +import club.wpia.gigi.dbObjects.Certificate; +import club.wpia.gigi.dbObjects.Certificate.CSRType; +import club.wpia.gigi.dbObjects.Digest; import club.wpia.gigi.dbObjects.EmailAddress; import club.wpia.gigi.dbObjects.Group; import club.wpia.gigi.dbObjects.Job; @@ -70,6 +76,10 @@ public class ManagedTest extends ConfiguredTest { private static String acceptLanguage = null; + protected static Certificate loginCertificate; + + protected static PrivateKey loginPrivateKey; + public static void setAcceptLanguage(String acceptLanguage) { ManagedTest.acceptLanguage = acceptLanguage; } @@ -95,8 +105,17 @@ public class ManagedTest extends ConfiguredTest { private static boolean inited = false; public static Properties initEnvironment() { + return initEnvironment(new Properties()); + } + + public static Properties initEnvironment(Properties additionalConfig) { try { Properties mainProps = ConfiguredTest.initEnvironment(); + for (Entry i : additionalConfig.entrySet()) { + if (i.getKey() instanceof String && i.getValue() instanceof String) { + mainProps.setProperty((String) i.getKey(), (String) i.getValue()); + } + } if (inited) { return mainProps; } @@ -469,12 +488,16 @@ public class ManagedTest extends ConfiguredTest { } public static HttpURLConnection post(String cookie, String path, String query, int formIndex) throws IOException, MalformedURLException, UnsupportedEncodingException { - URLConnection uc = new URL("https://" + getServerName() + path).openConnection(); - uc.addRequestProperty("Cookie", cookie); + String server = getServerName(); + if (loginCertificate != null) { + server = getSecureServerName(); + } + URLConnection uc = new URL("https://" + server + path).openConnection(); + authenticate((HttpURLConnection) uc, cookie); String csrf = getCSRF(uc, formIndex); - uc = new URL("https://" + getServerName() + path).openConnection(); - uc.addRequestProperty("Cookie", cookie); + uc = new URL("https://" + server + path).openConnection(); + authenticate((HttpURLConnection) uc, cookie); uc.setDoOutput(true); OutputStream os = uc.getOutputStream(); os.write(("csrf=" + URLEncoder.encode(csrf, "UTF-8") + "&" // @@ -485,8 +508,12 @@ public class ManagedTest extends ConfiguredTest { } public static HttpURLConnection get(String cookie, String path) throws IOException { - URLConnection uc = new URL("https://" + getServerName() + path).openConnection(); - uc.addRequestProperty("Cookie", cookie); + String server = getServerName(); + if (loginCertificate != null) { + server = getSecureServerName(); + } + URLConnection uc = new URL("https://" + server + path).openConnection(); + authenticate((HttpURLConnection) uc, cookie); return (HttpURLConnection) uc; } @@ -525,4 +552,40 @@ public class ManagedTest extends ConfiguredTest { supporter = User.getById(i); return supporter; } + + protected static void authenticate(HttpURLConnection uc, String cookie) throws IOException { + uc.addRequestProperty("Cookie", cookie); + if (loginCertificate != null) { + try { + authenticateClientCert(loginPrivateKey, loginCertificate.cert(), uc); + } catch (GeneralSecurityException | GigiApiException e) { + throw new IOException(e); + } + } + } + + protected String cookieWithCertificateLogin(User u) throws IOException, GigiApiException { + + try { + KeyPair kp; + kp = generateKeypair(); + + String csr; + csr = generatePEMCSR(kp, "CN=" + u.getPreferredName().toString()); + + Certificate c = new Certificate(u, u, Certificate.buildDN("CN", u.getPreferredName().toString()), Digest.SHA256, csr, CSRType.CSR, getClientProfile()); + final PrivateKey pk = kp.getPrivate(); + await(c.issue(null, "2y", u)); + final X509Certificate ce = c.cert(); + c.setLoginEnabled(true); + loginCertificate = c; + loginPrivateKey = pk; + return login(pk, ce); + } catch (InterruptedException e) { + throw new GigiApiException(e.toString()); + } catch (GeneralSecurityException e) { + throw new GigiApiException(e.toString()); + } + + } }