From e2c34865845ec00d4a1e4ba288517060f675609f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Thu, 4 Jun 2015 22:27:00 +0200 Subject: [PATCH] add: more intelligent ticket waiting --- .../org/cacert/gigi/DevelLauncher.java | 60 +++++++++++++++---- .../org/cacert/gigi/DevelTicketWait.templ | 8 +++ .../org/cacert/gigi/TestLauncher.java | 2 +- 3 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 util-testing/org/cacert/gigi/DevelTicketWait.templ diff --git a/util-testing/org/cacert/gigi/DevelLauncher.java b/util-testing/org/cacert/gigi/DevelLauncher.java index 44f9903a..e161b11d 100644 --- a/util-testing/org/cacert/gigi/DevelLauncher.java +++ b/util-testing/org/cacert/gigi/DevelLauncher.java @@ -13,6 +13,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.lang.reflect.Field; +import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Paths; @@ -28,8 +29,8 @@ import javax.servlet.http.HttpSession; import org.cacert.gigi.dbObjects.ObjectCache; import org.cacert.gigi.dbObjects.User; import org.cacert.gigi.localisation.Language; +import org.cacert.gigi.output.template.Template; import org.cacert.gigi.pages.Page; -import org.cacert.gigi.util.RandomToken; import org.cacert.gigi.util.ServerConstants; import org.kamranzafar.jtar.TarEntry; import org.kamranzafar.jtar.TarHeader; @@ -60,9 +61,27 @@ public class DevelLauncher { InputStream oldin = System.in; System.setIn(new ByteArrayInputStream(chunkConfig.toByteArray())); new Launcher().boot(); - final String token = RandomToken.generateToken(32); - addDevelPage(token); - Desktop.getDesktop().browse(new URL("http://" + ServerConstants.getWwwHostNamePort() + "/ticket?token=" + token).toURI()); + addDevelPage(true); + new Thread("ticket awaiter") { + + @Override + public void run() { + try { + Thread.sleep(8000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + try { + if ( !ticketUsed) { + Desktop.getDesktop().browse(new URL("http://" + ServerConstants.getWwwHostNamePort() + "/ticketWait").toURI()); + } + } catch (IOException e) { + e.printStackTrace(); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + } + }.start(); System.setIn(oldin); BufferedReader br = new BufferedReader(new InputStreamReader(System.in, "UTF-8")); System.out.println("Cacert-gigi system sucessfully started."); @@ -81,7 +100,7 @@ public class DevelLauncher { } } - public static void addDevelPage(String token) { + public static void addDevelPage(boolean withToken) { try { Field instF = Gigi.class.getDeclaredField("instance"); Field pageF = Gigi.class.getDeclaredField("pages"); @@ -132,8 +151,8 @@ public class DevelLauncher { } }); - if (token != null) { - addTicketPage(pages, token); + if (withToken) { + addTicketPage(pages); } pageF.set(gigi, Collections.unmodifiableMap(pages)); @@ -142,24 +161,41 @@ public class DevelLauncher { } } - private static void addTicketPage(HashMap pages, final String token) { - pages.put("/ticket", new Page("ticket") { + static boolean ticketUsed = false; - boolean used = false; + private static void addTicketPage(HashMap pages) { + pages.put("/ticketWait", new Page("ticket") { + + Template t = new Template(DevelLauncher.class.getResource("DevelTicketWait.templ")); @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { - if ( !used && token.equals(req.getParameter("token"))) { + resp.setHeader("content-security-policy", ""); + t.output(resp.getWriter(), getLanguage(req), new HashMap()); + } + + }); + pages.put("/ticket", new Page("ticket") { + + @Override + public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException { + // TODO Auto-generated method stub + if ( !ticketUsed) { HttpSession sess = req.getSession(); User user = User.getById(1); sess.setAttribute(LOGGEDIN, true); sess.setAttribute(Language.SESSION_ATTRIB_NAME, user.getPreferredLocale()); sess.setAttribute(USER, user); req.getSession().setAttribute(LOGIN_METHOD, "Ticket"); - resp.sendRedirect("/"); + resp.getWriter().println("ticket consumed"); + ticketUsed = true; } + return true; } + @Override + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {} + @Override public boolean needsLogin() { return false; diff --git a/util-testing/org/cacert/gigi/DevelTicketWait.templ b/util-testing/org/cacert/gigi/DevelTicketWait.templ new file mode 100644 index 00000000..4b91f359 --- /dev/null +++ b/util-testing/org/cacert/gigi/DevelTicketWait.templ @@ -0,0 +1,8 @@ +Your ticket: + + + diff --git a/util-testing/org/cacert/gigi/TestLauncher.java b/util-testing/org/cacert/gigi/TestLauncher.java index 16d6a152..89fc9e23 100644 --- a/util-testing/org/cacert/gigi/TestLauncher.java +++ b/util-testing/org/cacert/gigi/TestLauncher.java @@ -5,7 +5,7 @@ public class TestLauncher { public static void main(String[] args) throws Exception { // As clean as possible Launcher.main(args); - DevelLauncher.addDevelPage(null); + DevelLauncher.addDevelPage(false); System.err.println("System successfully started."); } -- 2.39.2