import org.cacert.gigi.database.DatabaseConnection;
import org.cacert.gigi.dbObjects.CACertificate;
-import org.cacert.gigi.dbObjects.CertificateOwner;
import org.cacert.gigi.dbObjects.CertificateProfile;
import org.cacert.gigi.dbObjects.DomainPingConfiguration;
-import org.cacert.gigi.dbObjects.Organisation;
-import org.cacert.gigi.dbObjects.User;
import org.cacert.gigi.localisation.Language;
import org.cacert.gigi.output.Menu;
import org.cacert.gigi.output.PageMenuItem;
import org.cacert.gigi.pages.admin.TTPAdminPage;
import org.cacert.gigi.pages.admin.support.FindDomainPage;
import org.cacert.gigi.pages.admin.support.FindUserPage;
+import org.cacert.gigi.pages.admin.support.SupportEnterTicketPage;
import org.cacert.gigi.pages.admin.support.SupportUserDetailsPage;
+import org.cacert.gigi.pages.admin.support.SupportUserHistory;
import org.cacert.gigi.pages.error.AccessDenied;
import org.cacert.gigi.pages.error.PageNotFound;
import org.cacert.gigi.pages.main.RegisterPage;
putPage(ViewOrgPage.DEFAULT_PATH + "/*", new ViewOrgPage(), "Organisation Admin");
putPage(FindUserPage.PATH, new FindUserPage("Find User"), "System Admin");
putPage(FindDomainPage.PATH, new FindDomainPage("Find Domain"), "System Admin");
+ putPage(SupportEnterTicketPage.PATH, new SupportEnterTicketPage(), "System Admin");
putPage(SupportUserDetailsPage.PATH + "*", new SupportUserDetailsPage("Support: User Details"), null);
+ putPage(SupportUserHistory.PATH, new SupportUserHistory(), null);
if (testing) {
try {
Class<?> manager = Class.forName("org.cacert.gigi.pages.Manager");
return page;
}
int idx = pathInfo.lastIndexOf('/');
+ if (idx == -1 || idx == 0) {
+ return null;
+ }
page = pages.get(pathInfo.substring(0, idx) + "/*");
if (page != null) {
return page;
}
-
- int lIdx = pathInfo.lastIndexOf('/', idx);
+ int lIdx = pathInfo.lastIndexOf('/', idx - 1);
if (lIdx == -1) {
return null;
}
- page = pages.get(pathInfo.substring(0, lIdx) + "/" + pathInfo.substring(idx));
+ String lastResort = pathInfo.substring(0, lIdx) + "/*" + pathInfo.substring(idx);
+ page = pages.get(lastResort);
return page;
}
vars.put("year", Calendar.getInstance().get(Calendar.YEAR));
vars.put("content", content);
if (currentAuthContext != null) {
- CertificateOwner target = currentAuthContext.getTarget();
- User currentPageUser = LoginPage.getUser(req);
- if (target != currentPageUser) {
- vars.put("loggedInAs", ((Organisation) target).getName() + " (" + currentPageUser.getName().toString() + ")");
- } else {
- vars.put("loggedInAs", currentPageUser.getName().toString());
- }
+ // TODO maybe move this information into the AuthContext object
vars.put("loginMethod", lang.getTranslation((String) req.getSession().getAttribute(LOGIN_METHOD)));
+ vars.put("authContext", currentAuthContext);
+
}
resp.setContentType("text/html; charset=utf-8");
baseTemplate.output(resp.getWriter(), lang, vars);
</div>
</div>
<div id="pageNav">
- <? if($loggedInAs) { ?><div><?=_Logged in as?>: <?=$loggedInAs?> <?=_with?> <?=$loginMethod?></div><? } ?>
+ <? if($authContext) { ?><div><?=$authContext?></div><? } ?>
<?=$menu?>
<div>
<h3 class="pointer"><?=_Advertising?></h3>
package org.cacert.gigi.pages.admin.support;
-import org.cacert.gigi.dbObjects.Group;
import org.cacert.gigi.output.template.Form;
import org.cacert.gigi.pages.OneFormPage;
import org.cacert.gigi.util.AuthorizationContext;
@Override
public boolean isPermitted(AuthorizationContext ac) {
- return ac != null && ac.isInGroup(Group.SUPPORTER);
+ return ac != null && ac.canSupport();
}
}
import javax.servlet.http.HttpServletResponse;
import org.cacert.gigi.GigiApiException;
-import org.cacert.gigi.dbObjects.Group;
import org.cacert.gigi.dbObjects.User;
import org.cacert.gigi.localisation.Language;
import org.cacert.gigi.output.template.Form;
@Override
public boolean isPermitted(AuthorizationContext ac) {
- return ac != null && ac.isInGroup(Group.SUPPORTER);
+ return ac != null && ac.canSupport();
}
}
import javax.servlet.http.HttpServletRequest;
import org.cacert.gigi.GigiApiException;
-import org.cacert.gigi.dbObjects.User;
import org.cacert.gigi.localisation.Language;
import org.cacert.gigi.output.template.Form;
import org.cacert.gigi.output.template.Template;
+import org.cacert.gigi.pages.LoginPage;
+import org.cacert.gigi.util.AuthorizationContext;
public class SupportEnterTicketForm extends Form {
private static Template t;
- private User target;
static {
t = new Template(SupportEnterTicketForm.class.getResource("SupportEnterTicketForm.templ"));
}
- public SupportEnterTicketForm(HttpServletRequest hsr, User target) {
+ public SupportEnterTicketForm(HttpServletRequest hsr) {
super(hsr);
- this.target = target;
}
@Override
public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException {
- // [asdmASDM]\d{8}\.\d+
- String ticket = req.getParameter("ticketno");
- if (ticket.matches("[asdmASDM]\\d{8}\\.\\d+")) {
- req.getSession().setAttribute("ticketNo" + target.getId(), ticket);
+ if (req.getParameter("setTicket") != null) {
+ // [asdmASDM]\d{8}\.\d+
+ String ticket = req.getParameter("ticketno");
+ if (ticket.matches("[asdmASDM]\\d{8}\\.\\d+")) {
+ AuthorizationContext ac = LoginPage.getAuthorizationContext(req);
+ ac.setSupporterTicketId(ticket);
+ return true;
+ }
+ return false;
+ } else if (req.getParameter("deleteTicket") != null) {
+ AuthorizationContext ac = LoginPage.getAuthorizationContext(req);
+ ac.setSupporterTicketId(null);
return true;
}
return false;
<tr>
<td colspan="2"><input type="submit" name="setTicket" value="<?=_Set ticket number?>"></td>
</tr>
+<? if($ticketNo) {?>
+ <tr>
+ <td colspan="2"><input type="submit" name="deleteTicket" value="<?=_End working on ticket?>"></td>
+ </tr>
+<? } ?>
</table>
\ No newline at end of file
--- /dev/null
+package org.cacert.gigi.pages.admin.support;
+
+import java.io.IOException;
+import java.util.HashMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.cacert.gigi.GigiApiException;
+import org.cacert.gigi.output.template.Form;
+import org.cacert.gigi.pages.LoginPage;
+import org.cacert.gigi.pages.Page;
+
+public class SupportEnterTicketPage extends Page {
+
+ public static final String PATH = "/support/ticket";
+
+ public SupportEnterTicketPage() {
+ super("Set Ticket");
+ }
+
+ @Override
+ public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ if (req.getParameter("setTicket") == null && req.getParameter("deleteTicket") == null) {
+ return false;
+ }
+ SupportEnterTicketForm f = Form.getForm(req, SupportEnterTicketForm.class);
+ try {
+ if (f.submit(resp.getWriter(), req)) {
+ if (req.getParameter("setTicket") != null) {
+ resp.sendRedirect(FindUserPage.PATH);
+ } else {
+ resp.sendRedirect(PATH);
+ }
+ return true;
+ }
+ } catch (GigiApiException e) {
+ e.format(resp.getWriter(), getLanguage(req));
+ }
+ return false;
+
+ }
+
+ @Override
+ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ HashMap<String, Object> vars = new HashMap<String, Object>();
+ vars.put("ticketNo", LoginPage.getAuthorizationContext(req).getSupporterTicketId());
+ new SupportEnterTicketForm(req).output(resp.getWriter(), getLanguage(req), vars);
+ }
+
+}
import org.cacert.gigi.GigiApiException;
import org.cacert.gigi.dbObjects.EmailAddress;
-import org.cacert.gigi.dbObjects.Group;
import org.cacert.gigi.dbObjects.SupportedUser;
import org.cacert.gigi.dbObjects.User;
import org.cacert.gigi.localisation.Language;
import org.cacert.gigi.output.template.Form;
import org.cacert.gigi.output.template.IterableDataset;
+import org.cacert.gigi.pages.LoginPage;
import org.cacert.gigi.pages.Page;
import org.cacert.gigi.util.AuthorizationContext;
resp.sendError(404);
}
final User user = User.getById(id);
- String ticket = (String) req.getSession().getAttribute("ticketNo" + user.getId());
- SupportUserDetailsForm f = new SupportUserDetailsForm(req, new SupportedUser(user, getUser(req), ticket));
+ SupportedUser targetUser = new SupportedUser(user, getUser(req), LoginPage.getAuthorizationContext(req).getSupporterTicketId());
+ SupportUserDetailsForm f = new SupportUserDetailsForm(req, targetUser);
HashMap<String, Object> vars = new HashMap<String, Object>();
vars.put("details", f);
- vars.put("ticketNo", ticket);
final EmailAddress[] addrs = user.getEmails();
vars.put("emails", new IterableDataset() {
return true;
}
});
- vars.put("certifrevoke", new SupportRevokeCertificatesForm(req, new SupportedUser(user, getUser(req), ticket)));
- vars.put("tickethandling", new SupportEnterTicketForm(req, user));
+ vars.put("certifrevoke", new SupportRevokeCertificatesForm(req, targetUser));
getDefaultTemplate().output(resp.getWriter(), getLanguage(req), vars);
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
try {
- if (req.getParameter("setTicket") != null) {
-
- if ( !Form.getForm(req, SupportEnterTicketForm.class).submit(resp.getWriter(), req)) {
- throw new GigiApiException("Invalid ticket number!");
- }
- } else if (req.getParameter("revokeall") != null) {
+ if (req.getParameter("revokeall") != null) {
if ( !Form.getForm(req, SupportRevokeCertificatesForm.class).submit(resp.getWriter(), req)) {
throw new GigiApiException("No ticket number set.");
}
@Override
public boolean isPermitted(AuthorizationContext ac) {
- return ac != null && ac.isInGroup(Group.SUPPORTER);
+ return ac != null && ac.canSupport();
}
}
-<?=$tickethandling?>
<br/>
<?=$details?>
<table class="wrapper dataTable centertext">
--- /dev/null
+package org.cacert.gigi.pages.admin.support;
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.cacert.gigi.dbObjects.Group;
+import org.cacert.gigi.dbObjects.User;
+import org.cacert.gigi.pages.Page;
+import org.cacert.gigi.util.AuthorizationContext;
+
+public class SupportUserHistory extends Page {
+
+ public static final String PATH = "/support/user/*/history";
+
+ private static final int intStart = PATH.indexOf('*');
+
+ public SupportUserHistory() {
+ super("Support user history");
+ }
+
+ @Override
+ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ String info = req.getPathInfo();
+ int id = Integer.parseInt(info.substring(intStart, info.length() - PATH.length() + intStart + 1));
+ User u = User.getById(id);
+ if (u == null) {
+ resp.sendError(404);
+ return;
+ }
+ // TODO get Admin log
+ }
+
+ @Override
+ public boolean isPermitted(AuthorizationContext ac) {
+ return ac != null && ac.isInGroup(Group.SUPPORTER);
+ }
+}
package org.cacert.gigi.util;
+import java.io.PrintWriter;
+import java.util.Map;
+
+import org.cacert.gigi.GigiApiException;
import org.cacert.gigi.dbObjects.CertificateOwner;
import org.cacert.gigi.dbObjects.Group;
+import org.cacert.gigi.dbObjects.Organisation;
import org.cacert.gigi.dbObjects.User;
+import org.cacert.gigi.localisation.Language;
+import org.cacert.gigi.output.template.Outputable;
-public class AuthorizationContext {
+public class AuthorizationContext implements Outputable {
CertificateOwner target;
User actor;
+ String supporterTicketId;
+
public AuthorizationContext(CertificateOwner target, User actor) {
this.target = target;
this.actor = actor;
}
return ac.getActor();
}
+
+ public void setSupporterTicketId(String supporterTicketId) throws GigiApiException {
+ if ( !isInGroup(Group.SUPPORTER)) {
+ throw new GigiApiException("requires a supporter");
+ }
+ this.supporterTicketId = supporterTicketId;
+ }
+
+ public String getSupporterTicketId() {
+ return supporterTicketId;
+ }
+
+ public boolean canSupport() {
+ return getSupporterTicketId() != null && isInGroup(Group.SUPPORTER);
+ }
+
+ @Override
+ public void output(PrintWriter out, Language l, Map<String, Object> vars) {
+ out.println("<div>");
+ out.println(l.getTranslation("Logged in as"));
+ out.println(": ");
+
+ if (target != actor) {
+ out.println(((Organisation) target).getName() + " (" + actor.getName().toString() + ")");
+ } else {
+ out.println(actor.getName().toString());
+ }
+
+ out.println(l.getTranslation("with"));
+ out.println(vars.get("loginMethod"));
+ out.println("</div>");
+ if (supporterTicketId != null) {
+ out.println("<div>");
+ out.println(l.getTranslation("SupportTicket: "));
+ out.println(supporterTicketId);
+ out.println("</div>");
+ }
+ }
}
package org.cacert.gigi.pages.admin;
+import static org.cacert.gigi.testUtils.ManagedTest.*;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import java.net.URLConnection;
import org.cacert.gigi.dbObjects.Group;
+import org.cacert.gigi.pages.admin.support.SupportEnterTicketPage;
import org.cacert.gigi.pages.admin.support.SupportUserDetailsPage;
import org.cacert.gigi.testUtils.ClientTest;
import org.cacert.gigi.testUtils.IOUtils;
public TestSEAdminPageDetails() throws IOException {
grant(email, Group.SUPPORTER);
+ assertEquals(302, post(cookie, SupportEnterTicketPage.PATH, "ticketno=a20140808.8&setTicket=action", 0).getResponseCode());
}
@Test
import org.cacert.gigi.dbObjects.Group;
import org.cacert.gigi.dbObjects.User;
import org.cacert.gigi.pages.admin.support.FindDomainPage;
+import org.cacert.gigi.pages.admin.support.SupportEnterTicketPage;
import org.cacert.gigi.pages.admin.support.SupportUserDetailsPage;
import org.cacert.gigi.testUtils.ClientTest;
import org.cacert.gigi.testUtils.IOUtils;
public TestSEAdminPageUserDomainSearch() throws IOException {
grant(email, Group.SUPPORTER);
+ assertEquals(302, post(cookie, SupportEnterTicketPage.PATH, "ticketno=a20140808.8&setTicket=action", 0).getResponseCode());
}
@Test
import org.cacert.gigi.dbObjects.Group;
import org.cacert.gigi.pages.admin.support.FindUserPage;
+import org.cacert.gigi.pages.admin.support.SupportEnterTicketPage;
import org.cacert.gigi.pages.admin.support.SupportUserDetailsPage;
import org.cacert.gigi.testUtils.ClientTest;
import org.cacert.gigi.testUtils.IOUtils;
public TestSEAdminPageUserMailSearch() throws IOException {
grant(email, Group.SUPPORTER);
+ assertEquals(302, post(cookie, SupportEnterTicketPage.PATH, "ticketno=a20140808.8&setTicket=action", 0).getResponseCode());
}
@Test
public void testFulltextMailSearch() throws MalformedURLException, UnsupportedEncodingException, IOException {
String mail = createUniqueName() + "@example.com";
int id = createVerifiedUser("Först", "Secönd", mail, TEST_PASSWORD);
- URLConnection uc = new URL("https://" + getServerName() + FindUserPage.PATH).openConnection();
- uc.addRequestProperty("Cookie", cookie);
- String csrf = getCSRF(uc, 0);
- uc = new URL("https://" + getServerName() + FindUserPage.PATH).openConnection();
- uc.addRequestProperty("Cookie", cookie);
- uc.setDoOutput(true);
- OutputStream os = uc.getOutputStream();
- os.write(("csrf=" + URLEncoder.encode(csrf, "UTF-8") + "&" //
- + "process&email=" + URLEncoder.encode(mail, "UTF-8")).getBytes("UTF-8"));
- os.flush();
+ URLConnection uc = post(cookie, FindUserPage.PATH, "process&email=" + URLEncoder.encode(mail, "UTF-8"), 0);
assertEquals("https://" + ServerConstants.getWwwHostNamePortSecure() + SupportUserDetailsPage.PATH + id, uc.getHeaderField("Location"));
}
public void testWildcardMailSearchSingle() throws MalformedURLException, UnsupportedEncodingException, IOException {
String mail = createUniqueName() + "@example.tld";
int id = createVerifiedUser("Först", "Secönd", mail, TEST_PASSWORD);
- URLConnection uc = new URL("https://" + getServerName() + FindUserPage.PATH).openConnection();
- uc.addRequestProperty("Cookie", cookie);
- String csrf = getCSRF(uc, 0);
- uc = new URL("https://" + getServerName() + FindUserPage.PATH).openConnection();
- uc.addRequestProperty("Cookie", cookie);
- uc.setDoOutput(true);
- OutputStream os = uc.getOutputStream();
- os.write(("csrf=" + URLEncoder.encode(csrf, "UTF-8") + "&" //
- + "process&email=" + URLEncoder.encode("%@example.tld", "UTF-8")).getBytes("UTF-8"));
- os.flush();
+ URLConnection uc = post(cookie, FindUserPage.PATH, "process&email=" + URLEncoder.encode("%@example.tld", "UTF-8"), 0);
assertEquals("https://" + ServerConstants.getWwwHostNamePortSecure() + SupportUserDetailsPage.PATH + id, uc.getHeaderField("Location"));
}
int id = createVerifiedUser("Först", "Secönd", mail, TEST_PASSWORD);
String mail2 = createUniqueName() + "@example.org";
int id2 = createVerifiedUser("Först", "Secönd", mail2, TEST_PASSWORD);
- URLConnection uc = new URL("https://" + getServerName() + FindUserPage.PATH).openConnection();
- uc.addRequestProperty("Cookie", cookie);
- String csrf = getCSRF(uc, 0);
+ URLConnection uc = post(cookie, FindUserPage.PATH, "process&email=" + URLEncoder.encode("%@example.org", "UTF-8"), 0);
- uc = new URL("https://" + getServerName() + FindUserPage.PATH).openConnection();
- uc.addRequestProperty("Cookie", cookie);
- uc.setDoOutput(true);
- OutputStream os = uc.getOutputStream();
- os.write(("csrf=" + URLEncoder.encode(csrf, "UTF-8") + "&" //
- + "process&email=" + URLEncoder.encode("%@example.org", "UTF-8")).getBytes("UTF-8"));
- os.flush();
String res = IOUtils.readURL(uc);
assertThat(res, containsString(SupportUserDetailsPage.PATH + id));
assertThat(res, containsString(SupportUserDetailsPage.PATH + id2));
public void testWildcardMailSearchSingleChar() throws MalformedURLException, UnsupportedEncodingException, IOException {
String mail = createUniqueName() + "@example.org";
int id = createVerifiedUser("Först", "Secönd", mail, TEST_PASSWORD);
- String mail2 = createUniqueName() + "@example.org";
+ String mail2 = createUniqueName() + "@fxample.org";
int id2 = createVerifiedUser("Först", "Secönd", mail2, TEST_PASSWORD);
- URLConnection uc = new URL("https://" + getServerName() + FindUserPage.PATH).openConnection();
- uc.addRequestProperty("Cookie", cookie);
- String csrf = getCSRF(uc, 0);
- uc = new URL("https://" + getServerName() + FindUserPage.PATH).openConnection();
- uc.addRequestProperty("Cookie", cookie);
- uc.setDoOutput(true);
- OutputStream os = uc.getOutputStream();
- os.write(("csrf=" + URLEncoder.encode(csrf, "UTF-8") + "&" //
- + "process&email=" + URLEncoder.encode("%@_xample.org", "UTF-8")).getBytes("UTF-8"));
- os.flush();
+ URLConnection uc = post(cookie, FindUserPage.PATH, "process&email=" + URLEncoder.encode("%@_xample.org", "UTF-8"), 0);
+
String res = IOUtils.readURL(uc);
assertThat(res, containsString(SupportUserDetailsPage.PATH + id));
assertThat(res, containsString(SupportUserDetailsPage.PATH + id2));
@Test
public void testFulltextMailSearchNoRes() throws MalformedURLException, UnsupportedEncodingException, IOException {
- URLConnection uc = new URL("https://" + getServerName() + FindUserPage.PATH).openConnection();
- uc.addRequestProperty("Cookie", cookie);
- String csrf = getCSRF(uc, 0);
+ URLConnection uc = post(cookie, FindUserPage.PATH, "process&email=" + URLEncoder.encode(createUniqueName() + "@example.org", "UTF-8"), 0);
- uc = new URL("https://" + getServerName() + FindUserPage.PATH).openConnection();
- uc.addRequestProperty("Cookie", cookie);
- uc.setDoOutput(true);
- OutputStream os = uc.getOutputStream();
- os.write(("csrf=" + URLEncoder.encode(csrf, "UTF-8") + "&" //
- + "process&email=" + URLEncoder.encode(createUniqueName() + "@example.org", "UTF-8")).getBytes("UTF-8"));
- os.flush();
assertNotNull(fetchStartErrorMessage(IOUtils.readURL(uc)));
}
}
--- /dev/null
+package org.cacert.gigi.pages.admin;
+
+import static org.junit.Assert.*;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+
+import org.cacert.gigi.dbObjects.Group;
+import org.cacert.gigi.pages.admin.support.FindDomainPage;
+import org.cacert.gigi.pages.admin.support.FindUserPage;
+import org.cacert.gigi.pages.admin.support.SupportEnterTicketPage;
+import org.cacert.gigi.testUtils.ClientTest;
+import org.junit.Test;
+
+public class TestSEAdminTicketSetting extends ClientTest {
+
+ public TestSEAdminTicketSetting() throws IOException {
+ grant(email, Group.SUPPORTER);
+ }
+
+ @Test
+ public void testFulltextMailSearch() throws MalformedURLException, UnsupportedEncodingException, IOException {
+ assertEquals(403, get(FindUserPage.PATH).getResponseCode());
+ assertEquals(302, post(cookie, SupportEnterTicketPage.PATH, "ticketno=a20140808.8&setTicket=action", 0).getResponseCode());
+ assertEquals(200, get(FindUserPage.PATH).getResponseCode());
+ assertEquals(200, get(FindDomainPage.PATH).getResponseCode());
+ assertEquals(302, post(cookie, SupportEnterTicketPage.PATH, "ticketno=a20140808.8&deleteTicket=action", 0).getResponseCode());
+ assertEquals(403, get(FindUserPage.PATH).getResponseCode());
+ }
+
+}
package org.cacert.gigi.testUtils;
import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
import org.cacert.gigi.dbObjects.User;
throw new Error(e);
}
}
+
+ public HttpURLConnection post(String path, String query) throws IOException {
+ return post(path, query, 0);
+ }
+
+ public HttpURLConnection post(String path, String query, int formIndex) throws IOException {
+ return post(cookie, path, query, formIndex);
+ }
+
+ public HttpURLConnection get(String path) throws IOException {
+ return get(path, 0);
+ }
+
+ public HttpURLConnection get(String path, int formIndex) throws IOException {
+ URLConnection uc = new URL("https://" + getServerName() + path).openConnection();
+ uc.addRequestProperty("Cookie", cookie);
+ return (HttpURLConnection) uc;
+ }
+
}
}
public static String executeBasicWebInteraction(String cookie, String path, String query, int formIndex) throws IOException, MalformedURLException, UnsupportedEncodingException {
+ URLConnection uc = post(cookie, path, query, formIndex);
+ String error = fetchStartErrorMessage(IOUtils.readURL(uc));
+ return error;
+ }
+
+ 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 csrf = getCSRF(uc, formIndex);
+ query//
).getBytes("UTF-8"));
os.flush();
- String error = fetchStartErrorMessage(IOUtils.readURL(uc));
- return error;
+ return (HttpURLConnection) uc;
}
public static EmailAddress createVerifiedEmail(User u) throws InterruptedException, GigiApiException {