]> WPIA git - gigi.git/commitdiff
add: more intelligent ticket waiting
authorFelix Dörre <felix@dogcraft.de>
Thu, 4 Jun 2015 20:27:00 +0000 (22:27 +0200)
committerFelix Dörre <felix@dogcraft.de>
Thu, 4 Jun 2015 20:27:00 +0000 (22:27 +0200)
util-testing/org/cacert/gigi/DevelLauncher.java
util-testing/org/cacert/gigi/DevelTicketWait.templ [new file with mode: 0644]
util-testing/org/cacert/gigi/TestLauncher.java

index 44f9903a2bdade3b734619835e0add8fe86f3441..e161b11d60c6a32c2778e13e16e7c79e8117d09d 100644 (file)
@@ -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<String, Page> pages, final String token) {
-        pages.put("/ticket", new Page("ticket") {
+    static boolean ticketUsed = false;
 
-            boolean used = false;
+    private static void addTicketPage(HashMap<String, Page> 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<String, Object>());
+            }
+
+        });
+        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 (file)
index 0000000..4b91f35
--- /dev/null
@@ -0,0 +1,8 @@
+Your ticket:
+<iframe width="100" height="100" id='devel-reload-ifr'></iframe>
+
+<script type='text/javascript'>
+setInterval(function(){
+       document.getElementById("devel-reload-ifr").src="/ticket?"+new Date().getTime();
+}, 5000);
+</script>
index 16d6a152bf1749ce73be0ef1b05215b347bfff39..89fc9e23dd06a829ff1242f118ba88e5487a575a 100644 (file)
@@ -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.");
 
     }