package org.cacert.gigi.testUtils;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import org.junit.BeforeClass;
public class ManagedTest {
+ /**
+ * Some password that fullfills the password criteria.
+ */
+ protected static final String TEST_PASSWORD = "xvXV12°§";
+
private final String registerService = "/register";
private static TestEmailReciever ter;
public String fetchStartErrorMessage(String d) throws IOException {
String formFail = "<div class='formError'>";
int idx = d.indexOf(formFail);
- assertNotEquals(-1, idx);
+ if (idx == -1) {
+ return null;
+ }
String startError = d.substring(idx + formFail.length(), idx + 100).trim();
return startError;
}
return headerField.substring(0, headerField.indexOf(';'));
}
+ public static final String SECURE_REFERENCE = "/account/certs/email";
+
+ public boolean isLoggedin(String cookie) throws IOException {
+ URL u = new URL("https://" + getServerName() + SECURE_REFERENCE);
+ HttpURLConnection huc = (HttpURLConnection) u.openConnection();
+ huc.addRequestProperty("Cookie", cookie);
+ return huc.getResponseCode() == 200;
+ }
+
public String login(String email, String pw) throws IOException {
URL u = new URL("https://" + getServerName() + "/login");
HttpURLConnection huc = (HttpURLConnection) u.openConnection();
public String login(final PrivateKey pk, final X509Certificate ce) throws NoSuchAlgorithmException,
KeyManagementException, IOException, MalformedURLException {
+
+ HttpURLConnection connection = (HttpURLConnection) new URL("https://"
+ + getServerName().replaceFirst("^www.", "secure.") + "/login").openConnection();
+ authenticateClientCert(pk, ce, connection);
+ if (connection.getResponseCode() == 302) {
+ assertEquals("https://" + getServerName().replaceFirst("^www.", "secure.").replaceFirst(":443$", "") + "/",
+ connection.getHeaderField("Location").replaceFirst(":443$", ""));
+ return stripCookie(connection.getHeaderField("Set-Cookie"));
+ } else {
+ return null;
+ }
+ }
+
+ public void authenticateClientCert(final PrivateKey pk, final X509Certificate ce, HttpURLConnection connection)
+ throws NoSuchAlgorithmException, KeyManagementException {
KeyManager km = new X509KeyManager() {
@Override
};
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(new KeyManager[] { km }, null, null);
-
- HttpURLConnection connection = (HttpURLConnection) new URL("https://"
- + getServerName().replaceFirst("^www.", "secure.") + "/login").openConnection();
if (connection instanceof HttpsURLConnection) {
((HttpsURLConnection) connection).setSSLSocketFactory(sc.getSocketFactory());
}
- if (connection.getResponseCode() == 302) {
- assertEquals("https://" + getServerName().replaceFirst("^www.", "secure.").replaceFirst(":443$", "") + "/",
- connection.getHeaderField("Location").replaceFirst(":443$", ""));
- return stripCookie(connection.getHeaderField("Set-Cookie"));
- } else {
- return null;
- }
}
public String getCSRF(URLConnection u) throws IOException {
return parts;
}
+ public String executeBasicWebInteraction(String cookie, String path, String query) throws IOException,
+ MalformedURLException, UnsupportedEncodingException {
+ URLConnection uc = new URL("https://" + getServerName() + path).openConnection();
+ uc.addRequestProperty("Cookie", cookie);
+ String csrf = getCSRF(uc);
+
+ uc = new URL("https://" + getServerName() + path).openConnection();
+ uc.addRequestProperty("Cookie", cookie);
+ uc.setDoOutput(true);
+ OutputStream os = uc.getOutputStream();
+ os.write(("csrf=" + URLEncoder.encode(csrf, "UTF-8") + "&" //
+ + query//
+ ).getBytes());
+ os.flush();
+ String error = fetchStartErrorMessage(IOUtils.readURL(uc));
+ return error;
+ }
+
}