From: Janis Streib Date: Thu, 24 Jul 2014 23:29:14 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/emailMgmt' X-Git-Url: https://code.wpia.club/?p=gigi.git;a=commitdiff_plain;h=2233a655b4ef4c1122a406e83a0e6334b9fd49b6;hp=6b985b637949909402c2e7be5e682b33d5e6abcd Merge remote-tracking branch 'origin/emailMgmt' --- diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index fffe9f38..818b257a 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,6 +1,14 @@ eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.source=1.7 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 @@ -46,6 +54,7 @@ org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line @@ -91,6 +100,7 @@ org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert @@ -138,6 +148,7 @@ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=inser org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert @@ -215,6 +226,7 @@ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do n org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs index 41e33b18..6af2231a 100644 --- a/.settings/org.eclipse.jdt.ui.prefs +++ b/.settings/org.eclipse.jdt.ui.prefs @@ -1,3 +1,7 @@ eclipse.preferences.version=1 formatter_profile=_cacert-gigi formatter_settings_version=12 +org.eclipse.jdt.ui.ignorelowercasenames=true +org.eclipse.jdt.ui.importorder=java;javax;org;com; +org.eclipse.jdt.ui.ondemandthreshold=99 +org.eclipse.jdt.ui.staticondemandthreshold=1 diff --git a/src/org/cacert/gigi/EmailAddress.java b/src/org/cacert/gigi/EmailAddress.java index 6d91e219..a2a7e580 100644 --- a/src/org/cacert/gigi/EmailAddress.java +++ b/src/org/cacert/gigi/EmailAddress.java @@ -33,6 +33,9 @@ public class EmailAddress { } public EmailAddress(String address, User owner) { + if (!EmailProvider.MAIL.matcher(address).matches()) { + throw new IllegalArgumentException("Invalid email."); + } this.address = address; this.owner = owner; this.hash = RandomToken.generateToken(16); diff --git a/src/org/cacert/gigi/User.java b/src/org/cacert/gigi/User.java index 2c117817..0eed2b8c 100644 --- a/src/org/cacert/gigi/User.java +++ b/src/org/cacert/gigi/User.java @@ -287,4 +287,17 @@ public class User { e.printStackTrace(); } } + + public void deleteEmail(EmailAddress mail) { + if (getEmail().equals(mail.getAddress())) { + throw new IllegalArgumentException("Can't delete user's default e-mail."); + } + try { + PreparedStatement ps = DatabaseConnection.getInstance().prepare("DELETE FROM email WHERE id=?"); + ps.setInt(1, mail.getId()); + ps.execute(); + } catch (SQLException e) { + e.printStackTrace(); + } + } } diff --git a/src/org/cacert/gigi/email/EmailProvider.java b/src/org/cacert/gigi/email/EmailProvider.java index f6a70912..6855f398 100644 --- a/src/org/cacert/gigi/email/EmailProvider.java +++ b/src/org/cacert/gigi/email/EmailProvider.java @@ -23,6 +23,10 @@ public abstract class EmailProvider { return instance; } + protected static void setInstance(EmailProvider instance) { + EmailProvider.instance = instance; + } + public static void init(Properties conf) { try { Class c = Class.forName(conf.getProperty("emailProvider")); diff --git a/src/org/cacert/gigi/pages/account/MailAddForm.java b/src/org/cacert/gigi/pages/account/MailAddForm.java index bea2ef1f..14f5ddba 100644 --- a/src/org/cacert/gigi/pages/account/MailAddForm.java +++ b/src/org/cacert/gigi/pages/account/MailAddForm.java @@ -8,7 +8,6 @@ import javax.servlet.http.HttpServletRequest; import org.cacert.gigi.EmailAddress; import org.cacert.gigi.Language; import org.cacert.gigi.User; -import org.cacert.gigi.email.EmailProvider; import org.cacert.gigi.output.Form; import org.cacert.gigi.output.template.Template; import org.cacert.gigi.pages.Page; @@ -29,14 +28,14 @@ public class MailAddForm extends Form { @Override public boolean submit(PrintWriter out, HttpServletRequest req) { String formMail = req.getParameter("newemail"); - if (!EmailProvider.MAIL.matcher(formMail).matches()) { - // TODO Proper error output (css, maybe abstract) - out.println("Error: Invalid address!"); + mail = formMail; + try { + EmailAddress addr = new EmailAddress(mail, target); + addr.insert(Page.getLanguage(req)); + } catch (IllegalArgumentException e) { + out.println("
Error: Invalid address!
"); return false; } - mail = formMail; - EmailAddress addr = new EmailAddress(mail, target); - addr.insert(Page.getLanguage(req)); return true; } diff --git a/src/org/cacert/gigi/pages/account/MailManagementForm.java b/src/org/cacert/gigi/pages/account/MailManagementForm.java index 842ad051..9dc6c8da 100644 --- a/src/org/cacert/gigi/pages/account/MailManagementForm.java +++ b/src/org/cacert/gigi/pages/account/MailManagementForm.java @@ -27,14 +27,35 @@ public class MailManagementForm extends Form { public boolean submit(PrintWriter out, HttpServletRequest req) { if (req.getParameter("makedefault") != null) { try { - target.updateDefaultEmail(EmailAddress.getById(Integer.parseInt(req.getParameter("emailid").trim()))); + String mailid = req.getParameter("emailid"); + if (mailid == null) { + return false; + } + target.updateDefaultEmail(EmailAddress.getById(Integer.parseInt(mailid.trim()))); } catch (Exception e) { - out.println("Error precessing your request."); + out.println("
Error precessing your request.
"); e.printStackTrace(); return false; } return true; } + if (req.getParameter("delete") != null) { + String[] toDel = req.getParameterValues("delid[]"); + if (toDel == null) { + return false; + } + for (int i = 0; i < toDel.length; i++) { + try { + target.deleteEmail(EmailAddress.getById(Integer.parseInt(toDel[i].trim()))); + } catch (Exception e) { + out.println("
Error precessing your request.
"); + e.printStackTrace(); + return false; + } + } + return true; + + } return false; } diff --git a/src/org/cacert/gigi/pages/account/MailOverview.java b/src/org/cacert/gigi/pages/account/MailOverview.java index a1360531..7fd5a7fa 100644 --- a/src/org/cacert/gigi/pages/account/MailOverview.java +++ b/src/org/cacert/gigi/pages/account/MailOverview.java @@ -46,7 +46,6 @@ public class MailOverview extends Page { resp.sendRedirect(MailOverview.DEFAULT_PATH); } } else if (req.getParameter("makedefault") != null || req.getParameter("delete") != null) { - System.out.println("MakeDefault/Delete"); MailManagementForm f = Form.getForm(req, MailManagementForm.class); f.submit(out, req); } diff --git a/tests/org/cacert/gigi/pages/account/TestChangePassword.java b/tests/org/cacert/gigi/pages/account/TestChangePassword.java index 5f095575..4b9e48d7 100644 --- a/tests/org/cacert/gigi/pages/account/TestChangePassword.java +++ b/tests/org/cacert/gigi/pages/account/TestChangePassword.java @@ -3,22 +3,17 @@ package org.cacert.gigi.pages.account; import static org.junit.Assert.*; import java.io.IOException; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; import java.net.URLEncoder; import org.cacert.gigi.GigiApiException; import org.cacert.gigi.User; -import org.cacert.gigi.testUtils.IOUtils; import org.cacert.gigi.testUtils.ManagedTest; import org.junit.Test; public class TestChangePassword extends ManagedTest { User u = User.getById(createVerifiedUser("fn", "ln", createUniqueName() + "uni@example.org", TEST_PASSWORD)); String cookie; + String path = ChangePasswordPage.PATH; public TestChangePassword() throws IOException { cookie = login(u.getEmail(), TEST_PASSWORD); @@ -41,9 +36,10 @@ public class TestChangePassword extends ManagedTest { @Test public void testChangePasswordWeb() throws IOException { - String error = executeChangePassword("oldpassword=" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") // - + "&pword1=" + URLEncoder.encode(TEST_PASSWORD + "v2", "UTF-8")// - + "&pword2=" + URLEncoder.encode(TEST_PASSWORD + "v2", "UTF-8")); + String error = executeBasicWebInteraction(cookie, path, + "oldpassword=" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") // + + "&pword1=" + URLEncoder.encode(TEST_PASSWORD + "v2", "UTF-8")// + + "&pword2=" + URLEncoder.encode(TEST_PASSWORD + "v2", "UTF-8")); assertNull(error); assertTrue(isLoggedin(login(u.getEmail(), TEST_PASSWORD + "v2"))); assertFalse(isLoggedin(login(u.getEmail(), TEST_PASSWORD))); @@ -52,9 +48,10 @@ public class TestChangePassword extends ManagedTest { @Test public void testChangePasswordWebOldWrong() throws IOException { - String error = executeChangePassword("oldpassword=a" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") // - + "&pword1=" + URLEncoder.encode(TEST_PASSWORD + "v2", "UTF-8")// - + "&pword2=" + URLEncoder.encode(TEST_PASSWORD + "v2", "UTF-8")); + String error = executeBasicWebInteraction(cookie, path, + "oldpassword=a" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") // + + "&pword1=" + URLEncoder.encode(TEST_PASSWORD + "v2", "UTF-8")// + + "&pword2=" + URLEncoder.encode(TEST_PASSWORD + "v2", "UTF-8")); assertNotNull(error); assertFalse(isLoggedin(login(u.getEmail(), TEST_PASSWORD + "v2"))); assertTrue(isLoggedin(login(u.getEmail(), TEST_PASSWORD))); @@ -63,9 +60,10 @@ public class TestChangePassword extends ManagedTest { @Test public void testChangePasswordWebNewWrong() throws IOException { - String error = executeChangePassword("oldpassword=" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") // - + "&pword1=" + URLEncoder.encode(TEST_PASSWORD + "v2", "UTF-8")// - + "&pword2=a" + URLEncoder.encode(TEST_PASSWORD + "v2", "UTF-8")); + String error = executeBasicWebInteraction(cookie, path, + "oldpassword=" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") // + + "&pword1=" + URLEncoder.encode(TEST_PASSWORD + "v2", "UTF-8")// + + "&pword2=a" + URLEncoder.encode(TEST_PASSWORD + "v2", "UTF-8")); assertNotNull(error); assertFalse(isLoggedin(login(u.getEmail(), TEST_PASSWORD + "v2"))); assertTrue(isLoggedin(login(u.getEmail(), TEST_PASSWORD))); @@ -74,8 +72,9 @@ public class TestChangePassword extends ManagedTest { @Test public void testChangePasswordWebNewEasy() throws IOException { - String error = executeChangePassword("oldpassword=" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") // - + "&pword1=a&pword2=a"); + String error = executeBasicWebInteraction(cookie, path, + "oldpassword=" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") // + + "&pword1=a&pword2=a"); assertNotNull(error); assertFalse(isLoggedin(login(u.getEmail(), TEST_PASSWORD + "v2"))); assertTrue(isLoggedin(login(u.getEmail(), TEST_PASSWORD))); @@ -86,41 +85,24 @@ public class TestChangePassword extends ManagedTest { public void testChangePasswordWebMissingFields() throws IOException { String np = URLEncoder.encode(TEST_PASSWORD + "v2", "UTF-8"); assertTrue(isLoggedin(login(u.getEmail(), TEST_PASSWORD))); - String error = executeChangePassword("oldpassword=" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") // - + "&pword1=" + np); + String error = executeBasicWebInteraction(cookie, path, + "oldpassword=" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") // + + "&pword1=" + np); assertNotNull(error); assertFalse(isLoggedin(login(u.getEmail(), TEST_PASSWORD + "v2"))); assertTrue(isLoggedin(login(u.getEmail(), TEST_PASSWORD))); - error = executeChangePassword("oldpassword=" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") // + error = executeBasicWebInteraction(cookie, path, "oldpassword=" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") // + "&pword2=" + np); assertNotNull(error); assertFalse(isLoggedin(login(u.getEmail(), TEST_PASSWORD + "v2"))); assertTrue(isLoggedin(login(u.getEmail(), TEST_PASSWORD))); - error = executeChangePassword("pword1=" + np + "&pword2=" + np); + error = executeBasicWebInteraction(cookie, path, "pword1=" + np + "&pword2=" + np); assertNotNull(error); assertFalse(isLoggedin(login(u.getEmail(), TEST_PASSWORD + "v2"))); assertTrue(isLoggedin(login(u.getEmail(), TEST_PASSWORD))); } - private String executeChangePassword(String query) throws IOException, MalformedURLException, - UnsupportedEncodingException { - URLConnection uc = new URL("https://" + getServerName() + ChangePasswordPage.PATH).openConnection(); - uc.addRequestProperty("Cookie", cookie); - String csrf = getCSRF(uc); - - uc = new URL("https://" + getServerName() + ChangePasswordPage.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; - } - } diff --git a/tests/org/cacert/gigi/pages/account/TestMailManagement.java b/tests/org/cacert/gigi/pages/account/TestMailManagement.java new file mode 100644 index 00000000..e915278d --- /dev/null +++ b/tests/org/cacert/gigi/pages/account/TestMailManagement.java @@ -0,0 +1,60 @@ +package org.cacert.gigi.pages.account; + +import static org.junit.Assert.*; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URLEncoder; + +import org.cacert.gigi.EmailAddress; +import org.cacert.gigi.GigiApiException; +import org.cacert.gigi.Language; +import org.cacert.gigi.User; +import org.cacert.gigi.testUtils.ManagedTest; +import org.cacert.gigi.testUtils.TestEmailReciever.TestMail; +import org.junit.Test; + +public class TestMailManagement extends ManagedTest { + private User u = User + .getById(createVerifiedUser("fn", "ln", createUniqueName() + "uni@example.org", TEST_PASSWORD)); + private String cookie; + private String path = MailOverview.DEFAULT_PATH; + + public TestMailManagement() throws IOException { + cookie = login(u.getEmail(), TEST_PASSWORD); + assertTrue(isLoggedin(cookie)); + } + + @Test + public void testMailAddInternal() throws InterruptedException, GigiApiException { + EmailAddress adrr = new EmailAddress("test@test.tld", u); + adrr.insert(Language.getInstance("en")); + TestMail testMail = getMailReciever().recieve(); + assertTrue(adrr.getAddress().equals(testMail.getTo())); + String hash = testMail.extractLink().substring(testMail.extractLink().lastIndexOf('=') + 1); + adrr.verify(hash); + try { + new EmailAddress("kurti ", u); + } catch (IllegalArgumentException e) { + // Intended. + return; + } + fail(); + } + + @Test + public void testMailAddWeb() throws MalformedURLException, UnsupportedEncodingException, IOException { + String newMail = createUniqueName() + "uni@example.org"; + assertNull(executeBasicWebInteraction(cookie, path, "addmail&newemail=" + URLEncoder.encode(newMail, "UTF-8"), + 1)); + EmailAddress[] addrs = u.getEmails(); + for (int i = 0; i < addrs.length; i++) { + if (addrs[i].getAddress().equals(newMail)) { + return; + } + } + fail(); + } + +} diff --git a/tests/org/cacert/gigi/testUtils/IOUtils.java b/tests/org/cacert/gigi/testUtils/IOUtils.java index b7452d2a..2db46f87 100644 --- a/tests/org/cacert/gigi/testUtils/IOUtils.java +++ b/tests/org/cacert/gigi/testUtils/IOUtils.java @@ -4,6 +4,7 @@ import java.io.CharArrayWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; +import java.net.HttpURLConnection; import java.net.URLConnection; public class IOUtils { @@ -14,6 +15,10 @@ public class IOUtils { public static String readURL(URLConnection in) { try { if (!in.getContentType().equals("text/html; charset=UTF-8")) { + if (in instanceof HttpURLConnection && ((HttpURLConnection) in).getResponseCode() != 200) { + System.err + .println(readURL(new InputStreamReader(((HttpURLConnection) in).getErrorStream(), "UTF-8"))); + } throw new Error("Unrecognized content-type: " + in.getContentType()); } return readURL(new InputStreamReader(in.getInputStream(), "UTF-8")); diff --git a/tests/org/cacert/gigi/testUtils/ManagedTest.java b/tests/org/cacert/gigi/testUtils/ManagedTest.java index 20318a7f..1cca75aa 100644 --- a/tests/org/cacert/gigi/testUtils/ManagedTest.java +++ b/tests/org/cacert/gigi/testUtils/ManagedTest.java @@ -1,7 +1,6 @@ package org.cacert.gigi.testUtils; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; import java.io.BufferedReader; import java.io.DataOutputStream; @@ -40,6 +39,7 @@ import org.cacert.gigi.DevelLauncher; import org.cacert.gigi.database.DatabaseConnection; import org.cacert.gigi.testUtils.TestEmailReciever.TestMail; import org.cacert.gigi.util.DatabaseManager; +import org.cacert.gigi.util.ServerConstants; import org.cacert.gigi.util.SimpleSigner; import org.junit.After; import org.junit.AfterClass; @@ -77,8 +77,9 @@ public class ManagedTest { System.out.println("... purging Database"); DatabaseManager.run(new String[] { testProps.getProperty("sql.driver"), testProps.getProperty("sql.url"), testProps.getProperty("sql.user"), testProps.getProperty("sql.password") }); - String type = testProps.getProperty("type"); + Properties mainProps = generateMainProps(); + ServerConstants.init(mainProps); if (type.equals("local")) { url = testProps.getProperty("name.www") + ":" + testProps.getProperty("serverPort"); String[] parts = testProps.getProperty("mail").split(":", 2); @@ -89,19 +90,6 @@ public class ManagedTest { gigi = Runtime.getRuntime().exec(testProps.getProperty("java")); DataOutputStream toGigi = new DataOutputStream(gigi.getOutputStream()); System.out.println("... starting server"); - Properties mainProps = new Properties(); - mainProps.setProperty("host", "127.0.0.1"); - mainProps.setProperty("name.secure", testProps.getProperty("name.secure")); - mainProps.setProperty("name.www", testProps.getProperty("name.www")); - mainProps.setProperty("name.static", testProps.getProperty("name.static")); - - mainProps.setProperty("port", testProps.getProperty("serverPort")); - mainProps.setProperty("emailProvider", "org.cacert.gigi.email.TestEmailProvider"); - mainProps.setProperty("emailProvider.port", "8473"); - mainProps.setProperty("sql.driver", testProps.getProperty("sql.driver")); - mainProps.setProperty("sql.url", testProps.getProperty("sql.url")); - mainProps.setProperty("sql.user", testProps.getProperty("sql.user")); - mainProps.setProperty("sql.password", testProps.getProperty("sql.password")); byte[] cacerts = Files.readAllBytes(Paths.get("config/cacerts.jks")); byte[] keystore = Files.readAllBytes(Paths.get("config/keystore.pkcs12")); @@ -144,6 +132,23 @@ public class ManagedTest { } + private static Properties generateMainProps() { + Properties mainProps = new Properties(); + mainProps.setProperty("host", "127.0.0.1"); + mainProps.setProperty("name.secure", testProps.getProperty("name.secure")); + mainProps.setProperty("name.www", testProps.getProperty("name.www")); + mainProps.setProperty("name.static", testProps.getProperty("name.static")); + + mainProps.setProperty("port", testProps.getProperty("serverPort")); + mainProps.setProperty("emailProvider", "org.cacert.gigi.email.TestEmailProvider"); + mainProps.setProperty("emailProvider.port", "8473"); + mainProps.setProperty("sql.driver", testProps.getProperty("sql.driver")); + mainProps.setProperty("sql.url", testProps.getProperty("sql.url")); + mainProps.setProperty("sql.user", testProps.getProperty("sql.user")); + mainProps.setProperty("sql.password", testProps.getProperty("sql.password")); + return mainProps; + } + @AfterClass public static void tearDownServer() { String type = testProps.getProperty("type"); @@ -366,11 +371,17 @@ public class ManagedTest { } public String getCSRF(URLConnection u) throws IOException { + return getCSRF(u, 0); + } + + public String getCSRF(URLConnection u, int formIndex) throws IOException { String content = IOUtils.readURL(u); Pattern p = Pattern.compile(""); Matcher m = p.matcher(content); - if (!m.find()) { - throw new Error("No CSRF Token"); + for (int i = 0; i < formIndex + 1; i++) { + if (!m.find()) { + throw new Error("No CSRF Token"); + } } return m.group(1); } @@ -389,4 +400,27 @@ public class ManagedTest { return parts; } + public String executeBasicWebInteraction(String cookie, String path, String query) throws MalformedURLException, + UnsupportedEncodingException, IOException { + return executeBasicWebInteraction(cookie, path, query, 0); + } + + public String executeBasicWebInteraction(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 csrf = getCSRF(uc, formIndex); + + 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; + } + } diff --git a/tests/org/cacert/gigi/testUtils/TestEmailReciever.java b/tests/org/cacert/gigi/testUtils/TestEmailReciever.java index 849bf927..93cd7e45 100644 --- a/tests/org/cacert/gigi/testUtils/TestEmailReciever.java +++ b/tests/org/cacert/gigi/testUtils/TestEmailReciever.java @@ -10,7 +10,9 @@ import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class TestEmailReciever implements Runnable { +import org.cacert.gigi.email.EmailProvider; + +public class TestEmailReciever extends EmailProvider implements Runnable { public class TestMail { String to; String subject; @@ -67,6 +69,7 @@ public class TestEmailReciever implements Runnable { dis = new DataInputStream(s.getInputStream()); dos = new DataOutputStream(s.getOutputStream()); new Thread(this).start(); + setInstance(this); } LinkedBlockingQueue mails = new LinkedBlockingQueue(); @@ -89,11 +92,7 @@ public class TestEmailReciever implements Runnable { mails.add(new TestMail(to, subject, message, from, replyto)); } else if (type.equals("challengeAddrBox")) { String email = dis.readUTF(); - if (approveRegex.matcher(email).matches()) { - dos.writeUTF("OK"); - } else { - dos.writeUTF(error); - } + dos.writeUTF(quickEmailCheck(email)); dos.flush(); } else if (type.equals("ping")) { } else { @@ -108,6 +107,14 @@ public class TestEmailReciever implements Runnable { } + private String quickEmailCheck(String email) throws IOException { + if (approveRegex.matcher(email).matches()) { + return "OK"; + } else { + return error; + } + } + String error = "FAIL"; public void setEmailCheckError(String error) { @@ -141,4 +148,15 @@ public class TestEmailReciever implements Runnable { } } + @Override + public String checkEmailServer(int forUid, String address) throws IOException { + return quickEmailCheck(address); + } + + @Override + public void sendmail(String to, String subject, String message, String from, String replyto, String toname, + String fromname, String errorsto, boolean extra) throws IOException { + mails.add(new TestMail(to, subject, message, from, replyto)); + } + }