From: Felix Dörre Date: Sun, 22 Jun 2014 16:48:35 +0000 (+0200) Subject: Add capable templating for register page X-Git-Url: https://code.wpia.club/?p=gigi.git;a=commitdiff_plain;h=06c5d96d7dc2df71a1658e1c7c9e34ad065d10d7 Add capable templating for register page --- diff --git a/src/org/cacert/gigi/Language.java b/src/org/cacert/gigi/Language.java index 9faaaad6..5841c3c3 100644 --- a/src/org/cacert/gigi/Language.java +++ b/src/org/cacert/gigi/Language.java @@ -4,7 +4,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.HashMap; - +import java.util.Locale; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -17,8 +17,16 @@ import org.xml.sax.SAXException; public class Language { private static HashMap langs = new HashMap(); HashMap translations = new HashMap(); + Locale l; private Language(String language) throws ParserConfigurationException, IOException, SAXException { + if (language.contains("_")) { + String[] parts = language.split("_"); + l = new Locale(parts[0], parts[1]); + } else { + l = new Locale(language); + } + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document d = db.parse(new FileInputStream(new File("locale", language @@ -36,7 +44,11 @@ public class Language { System.out.println(translations.size() + " strings loaded."); } public String getTranslation(String text) { - return translations.get(text); + String string = translations.get(text); + if (string == null || string.equals("")) { + return text; + } + return string; } public static Language getInstance(String language) { Language l = langs.get(language); @@ -54,5 +66,8 @@ public class Language { } return l; } + public Locale getLocale() { + return l; + } } diff --git a/src/org/cacert/gigi/User.java b/src/org/cacert/gigi/User.java index 8c4b1f9d..50e13ac0 100644 --- a/src/org/cacert/gigi/User.java +++ b/src/org/cacert/gigi/User.java @@ -3,6 +3,7 @@ package org.cacert.gigi; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Date; import org.cacert.gigi.database.DatabaseConnection; @@ -10,7 +11,11 @@ public class User { private int id; String fname; + String mname; String lname; + String suffix; + Date dob; + String email; public User(int id) { this.id = id; @@ -28,6 +33,8 @@ public class User { e.printStackTrace(); } } + public User() { + } public int getId() { return id; } @@ -37,5 +44,38 @@ public class User { public String getLname() { return lname; } + public String getMname() { + return mname; + } + public void setMname(String mname) { + this.mname = mname; + } + public String getSuffix() { + return suffix; + } + public void setSuffix(String suffix) { + this.suffix = suffix; + } + public Date getDob() { + return dob; + } + public void setDob(Date dob) { + this.dob = dob; + } + public String getEmail() { + return email; + } + public void setEmail(String email) { + this.email = email; + } + public void setId(int id) { + this.id = id; + } + public void setFname(String fname) { + this.fname = fname; + } + public void setLname(String lname) { + this.lname = lname; + } } diff --git a/src/org/cacert/gigi/output/DateSelector.java b/src/org/cacert/gigi/output/DateSelector.java new file mode 100644 index 00000000..782e6127 --- /dev/null +++ b/src/org/cacert/gigi/output/DateSelector.java @@ -0,0 +1,53 @@ +package org.cacert.gigi.output; + +import java.io.PrintWriter; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Map; + +import org.cacert.gigi.Language; + +public class DateSelector implements Outputable { + String[] names; + public DateSelector(String day, String month, String year) { + this.names = new String[]{day, month, year}; + } + int day; + int month; + int year; + @Override + public void output(PrintWriter out, Language l, Map vars) { + out.print(""); + SimpleDateFormat sdf = new SimpleDateFormat("MMMM", l.getLocale()); + out.print(""); + out.print(""); + } +} diff --git a/src/org/cacert/gigi/output/Outputable.java b/src/org/cacert/gigi/output/Outputable.java new file mode 100644 index 00000000..4d5978e5 --- /dev/null +++ b/src/org/cacert/gigi/output/Outputable.java @@ -0,0 +1,10 @@ +package org.cacert.gigi.output; + +import java.io.PrintWriter; +import java.util.Map; + +import org.cacert.gigi.Language; + +public interface Outputable { + public void output(PrintWriter out, Language l, Map vars); +} diff --git a/src/org/cacert/gigi/output/Template.java b/src/org/cacert/gigi/output/Template.java new file mode 100644 index 00000000..266761a8 --- /dev/null +++ b/src/org/cacert/gigi/output/Template.java @@ -0,0 +1,61 @@ +package org.cacert.gigi.output; + +import java.io.PrintWriter; +import java.io.Reader; +import java.util.LinkedList; +import java.util.Map; +import java.util.Scanner; +import java.util.regex.Pattern; + +import org.cacert.gigi.Language; + +public class Template implements Outputable { + String[] contents; + + public Template(Reader r) { + LinkedList splitted = new LinkedList(); + Scanner sc = new Scanner(r); + Pattern p1 = Pattern.compile("([^<]|<[^?])*<\\?"); + Pattern p2 = Pattern.compile("([^<]|<[^?])*\\?>"); + while (true) { + String s1 = sc.findWithinHorizon(p1, 0); + if (s1 == null) { + break; + } + s1 = s1.substring(0, s1.length() - 2); + splitted.add(s1); + String s2 = sc.findWithinHorizon(p2, 0); + s2 = s2.substring(0, s2.length() - 2); + splitted.add(s2); + } + sc.useDelimiter("\0"); + if (sc.hasNext()) { + splitted.add(sc.next()); + } + sc.close(); + contents = splitted.toArray(new String[splitted.size()]); + } + public void output(PrintWriter out, Language l, Map vars) { + for (int i = 0; i < contents.length; i++) { + if (i % 2 == 0) { + out.print(contents[i]); + } else if (contents[i].startsWith("=_")) { + out.print(l.getTranslation(contents[i].substring(2))); + } else if (contents[i].startsWith("=$")) { + Object s = vars.get(contents[i].substring(2)); + if (s == null) { + System.out.println("Empty variable: " + + contents[i].substring(2)); + } + if (s instanceof Outputable) { + ((Outputable) s).output(out, l, vars); + } else { + out.print(s); + } + } else { + System.out.println("Unknown processing instruction: " + + contents[i]); + } + } + } +} diff --git a/src/org/cacert/gigi/pages/LoginPage.java b/src/org/cacert/gigi/pages/LoginPage.java index 905daf16..fe04cd46 100644 --- a/src/org/cacert/gigi/pages/LoginPage.java +++ b/src/org/cacert/gigi/pages/LoginPage.java @@ -2,8 +2,8 @@ package org.cacert.gigi.pages; import java.io.IOException; -import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; public class LoginPage extends Page { public LoginPage(String title) { @@ -11,7 +11,7 @@ public class LoginPage extends Page { } @Override - public void doGet(ServletRequest req, ServletResponse resp) + public void doGet(HttpServletRequest req, ServletResponse resp) throws IOException { resp.getWriter() .println( diff --git a/src/org/cacert/gigi/pages/MainPage.java b/src/org/cacert/gigi/pages/MainPage.java index d1528528..3da5a0bf 100644 --- a/src/org/cacert/gigi/pages/MainPage.java +++ b/src/org/cacert/gigi/pages/MainPage.java @@ -2,8 +2,8 @@ package org.cacert.gigi.pages; import java.io.IOException; -import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; public class MainPage extends Page { public MainPage(String title) { @@ -11,7 +11,7 @@ public class MainPage extends Page { } @Override - public void doGet(ServletRequest req, ServletResponse resp) + public void doGet(HttpServletRequest req, ServletResponse resp) throws IOException { resp.getWriter().println("Access granted."); } diff --git a/src/org/cacert/gigi/pages/Page.java b/src/org/cacert/gigi/pages/Page.java index 7b69e56c..cfc58d7a 100644 --- a/src/org/cacert/gigi/pages/Page.java +++ b/src/org/cacert/gigi/pages/Page.java @@ -4,6 +4,7 @@ import java.io.IOException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; import org.cacert.gigi.Language; @@ -14,10 +15,10 @@ public abstract class Page { this.title = title; } - public abstract void doGet(ServletRequest req, ServletResponse resp) + public abstract void doGet(HttpServletRequest req, ServletResponse resp) throws IOException; - public void doPost(ServletRequest req, ServletResponse resp) + public void doPost(HttpServletRequest req, ServletResponse resp) throws IOException { doGet(req, resp); } @@ -29,9 +30,14 @@ public abstract class Page { public void setTitle(String title) { this.title = title; } + public static Language getLanguage(ServletRequest req) { + return Language.getInstance("de"); + } + public static String translate(ServletRequest req, String string) { - Language l = Language.getInstance("de"); + Language l = getLanguage(req); return l.getTranslation(string); } + } diff --git a/src/org/cacert/gigi/pages/main/RegisterPage.java b/src/org/cacert/gigi/pages/main/RegisterPage.java index f162b913..b63dbce1 100644 --- a/src/org/cacert/gigi/pages/main/RegisterPage.java +++ b/src/org/cacert/gigi/pages/main/RegisterPage.java @@ -1,57 +1,44 @@ package org.cacert.gigi.pages.main; import java.io.IOException; +import java.io.InputStreamReader; import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.util.HashMap; -import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; - +import javax.servlet.http.HttpServletRequest; +import org.cacert.gigi.output.Template; import org.cacert.gigi.pages.Page; public class RegisterPage extends Page { public static final String PATH = "/register"; + Template t; public RegisterPage() { super("Register"); + try { + t = new Template(new InputStreamReader( + Signup.class.getResourceAsStream("RegisterPage.templ"), + "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } } @Override - public void doGet(ServletRequest req, ServletResponse resp) + public void doGet(HttpServletRequest req, ServletResponse resp) throws IOException { PrintWriter out = resp.getWriter(); - out.print("

"); - out.print(translate( - req, - "By joining CAcert and becoming a member, you agree to the CAcert Community Agreement. Please take a moment now to read that and agree to it; this will be required to complete the process of joining.")); - out.println("

"); - out.print("

"); - out.print(translate( - req, - "Warning! This site requires cookies to be enabled to ensure your privacy and security. This site uses session cookies to store temporary values to prevent people from copying and pasting the session ID to someone else exposing their account, personal details and identity theft as a result.")); - out.println("

"); - out.print("

"); - out.print(translate( - req, - "Note: Please enter your date of birth and names as they are written in your official documents.")); - out.println("

"); - out.println(translate( - req, - "Because CAcert is a certificate authority (CA) people rely on us knowing about the identity of the users of our certificates. So even as we value privacy very much, we need to collect at least some basic information about our members. This is especially the case for everybody who wants to take part in our web of trust.")); - out.print(translate( - req, - "Your private information will be used for internal procedures only and will not be shared with third parties.")); - out.println("

"); - out.print("

"); - out.println(translate( - req, - "A proper password wouldn't match your name or email at all, it contains at least 1 lower case letter, 1 upper case letter, a number, white space and a misc symbol. You get additional security for being over 15 characters and a second additional point for having it over 30. The system starts reducing security if you include any section of your name, or password or email address or if it matches a word from the english dictionary...")); - out.println("

"); - out.print(""); - out.print(translate(req, - "Note: White spaces at the beginning and end of a password will be removed.")); - out.println(""); - out.println("

"); + t.output(out, getLanguage(req), new HashMap()); + Signup s = new Signup(); + s.writeForm(out, req); + } + @Override + public void doPost(HttpServletRequest req, ServletResponse resp) + throws IOException { + super.doPost(req, resp); } } diff --git a/src/org/cacert/gigi/pages/main/RegisterPage.templ b/src/org/cacert/gigi/pages/main/RegisterPage.templ new file mode 100644 index 00000000..4fbb41d5 --- /dev/null +++ b/src/org/cacert/gigi/pages/main/RegisterPage.templ @@ -0,0 +1,11 @@ +

+

+

+

+ + +

+

+

+ +

diff --git a/src/org/cacert/gigi/pages/main/Signup.java b/src/org/cacert/gigi/pages/main/Signup.java new file mode 100644 index 00000000..09f50e10 --- /dev/null +++ b/src/org/cacert/gigi/pages/main/Signup.java @@ -0,0 +1,61 @@ +package org.cacert.gigi.pages.main; + +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.util.HashMap; + +import javax.servlet.ServletRequest; + +import org.cacert.gigi.User; +import org.cacert.gigi.output.DateSelector; +import org.cacert.gigi.output.Template; +import org.cacert.gigi.pages.Page; +import org.cacert.gigi.util.HTMLEncoder; + +public class Signup { + User buildup = new User(); + String password; + Template t; + boolean general = true, country = true, regional = true, radius = true; + public Signup() { + try { + t = new Template(new InputStreamReader( + Signup.class.getResourceAsStream("Signup.templ"), "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + buildup.setFname(""); + buildup.setMname(""); + buildup.setLname(""); + buildup.setSuffix(""); + buildup.setEmail(""); + buildup.setDob(new Date(0)); + } + DateSelector myDoB = new DateSelector("day", "month", "year"); + + public void writeForm(PrintWriter out, ServletRequest req) { + HashMap vars = new HashMap(); + vars.put("fname", HTMLEncoder.encodeHTML(buildup.getFname())); + vars.put("mname", HTMLEncoder.encodeHTML(buildup.getMname())); + vars.put("lname", HTMLEncoder.encodeHTML(buildup.getLname())); + vars.put("suffix", HTMLEncoder.encodeHTML(buildup.getSuffix())); + vars.put("dob", myDoB); + vars.put("email", HTMLEncoder.encodeHTML(buildup.getEmail())); + vars.put("general", general ? " checked=\"checked\"" : ""); + vars.put("country", country ? " checked=\"checked\"" : ""); + vars.put("region", regional ? " checked=\"checked\"" : ""); + vars.put("radius", radius ? " checked=\"checked\"" : ""); + vars.put( + "helpOnNames", + String.format( + Page.translate(req, "Help on Names %sin the wiki%s"), + "", + "")); + t.output(out, Page.getLanguage(req), vars); + } + public void update(ServletRequest r) { + buildup.setFname(r.getParameter("fname")); + } +} diff --git a/src/org/cacert/gigi/pages/main/Signup.templ b/src/org/cacert/gigi/pages/main/Signup.templ new file mode 100644 index 00000000..ad0fc131 --- /dev/null +++ b/src/org/cacert/gigi/pages/main/Signup.templ @@ -0,0 +1,83 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:

+ () +
:

+ ()


+ ()
 
:
*:  
*:
*
: + >
+ >
+ >
+ >
 
: http://www.cacert.org/policy/CAcertCommunityAgreement.php
+
diff --git a/src/org/cacert/gigi/util/HTMLEncoder.java b/src/org/cacert/gigi/util/HTMLEncoder.java new file mode 100644 index 00000000..9303d8d9 --- /dev/null +++ b/src/org/cacert/gigi/util/HTMLEncoder.java @@ -0,0 +1,12 @@ +package org.cacert.gigi.util; + +public class HTMLEncoder { + public static String encodeHTML(String s) { + s = s.replace("&", "&"); + s = s.replace("<", "<"); + s = s.replace(">", ">"); + s = s.replace("\"", """); + s = s.replace("'", "'"); + return s; + } +}