1.1 --- a/freemarkerdor/src/main/java/cz/xelfi/quoridor/freemarkerdor/UI.java Sun Jan 17 14:37:01 2010 +0100
1.2 +++ b/freemarkerdor/src/main/java/cz/xelfi/quoridor/freemarkerdor/UI.java Thu Mar 04 19:37:58 2010 +0100
1.3 @@ -40,6 +40,7 @@
1.4 import java.io.InputStream;
1.5 import java.io.StringWriter;
1.6 import java.net.URI;
1.7 +import java.text.MessageFormat;
1.8 import java.util.Date;
1.9 import java.util.HashMap;
1.10 import java.util.List;
1.11 @@ -89,6 +90,8 @@
1.12 }
1.13 private static WebResource base;
1.14 private static WebResource stat;
1.15 + private static WebResource web;
1.16 + private static Requests requests;
1.17
1.18 @Context
1.19 private HttpHeaders headers;
1.20 @@ -98,10 +101,17 @@
1.21 public UI() {
1.22 }
1.23
1.24 - private Viewable checkLogin() {
1.25 + private String login() {
1.26 Cookie cookie = headers.getCookies().get("login");
1.27 if (cookie != null) {
1.28 - String id = cookie.getValue();
1.29 + return cookie.getValue();
1.30 + }
1.31 + return null;
1.32 + }
1.33 +
1.34 + private Viewable checkLogin() {
1.35 + String id = login();
1.36 + if (id != null) {
1.37 UserInfo us;
1.38 try {
1.39 us = base.path("users").queryParam("loginID", id).
1.40 @@ -342,23 +352,45 @@
1.41 return viewable("index.fmt", got, args);
1.42 }
1.43
1.44 + @Path("requests")
1.45 + public Requests getRequests() {
1.46 + if (requests == null) {
1.47 + requests = new Requests(web.path("requests"));
1.48 + }
1.49 + return requests;
1.50 + }
1.51 +
1.52
1.53 @GET
1.54 @Path("options")
1.55 public Response changeOptions(
1.56 @QueryParam("email") String email,
1.57 - @QueryParam("language") String language
1.58 - ) {
1.59 + @QueryParam("language") String language,
1.60 + @QueryParam("verified") String verified
1.61 + ) throws IOException {
1.62 Viewable v = checkLogin();
1.63 if (v != null) {
1.64 return Response.status(Response.Status.FORBIDDEN).entity(v).build();
1.65 }
1.66
1.67 if (email != null) {
1.68 - UserInfo ui = base.path("users/" + user.getId()).
1.69 - queryParam("loginID", uuid).
1.70 - queryParam("name", "email").
1.71 - queryParam("value", email).accept(MediaType.TEXT_XML).post(UserInfo.class);
1.72 + if (getRequests().isVerified(verified)) {
1.73 + UserInfo ui = base.path("users/" + user.getId()).
1.74 + queryParam("loginID", uuid).
1.75 + queryParam("name", "email").
1.76 + queryParam("value", email).accept(MediaType.TEXT_XML).post(UserInfo.class);
1.77 + } else {
1.78 + WebResource request;
1.79 + request = web.path("options").queryParam("name", "email").queryParam("email", email);
1.80 + URI callback = getRequests().register(login(), request);
1.81 +
1.82 + ResourceBundle rb = bundle(null);
1.83 + String subject = rb.getString("MSG_ChangeEmailSubject");
1.84 + String text = MessageFormat.format(rb.getString("MSG_ChangeEmailText"), user.getId(), callback);
1.85 + EmailService.getDefault().sendEmail(email, subject, text);
1.86 + return Response.ok(viewable("email.fmt", null)).build();
1.87 +
1.88 + }
1.89 }
1.90
1.91 if (language != null) {
1.92 @@ -490,6 +522,8 @@
1.93
1.94 final String baseUri = "http://localhost:" + port + "/";
1.95 final HttpServer server = HttpServerFactory.create(baseUri, rc);
1.96 + Client c3 = new Client();
1.97 + web = c3.resource(baseUri);
1.98 server.start();
1.99 System.out.println("Quoridor started at port " + port);
1.100
1.101 @@ -504,24 +538,27 @@
1.102 };
1.103 }
1.104
1.105 - private Viewable viewable(String page, Document doc, Object... more) {
1.106 + private ResourceBundle bundle(Locale[] locale) {
1.107 ResourceBundle rb = null;
1.108 String lng = user == null ? null : user.getProperty("language"); // NOI18N
1.109 - Locale locale = null;
1.110 if (lng != null) {
1.111 - try {
1.112 - Locale l = new Locale(lng);
1.113 - rb = ResourceBundle.getBundle("cz.xelfi.quoridor.freemarkerdor.UI.Bundle", l);
1.114 - locale = l;
1.115 - } catch (MissingResourceException e) {
1.116 - // OK
1.117 + try {
1.118 + Locale l = new Locale(lng);
1.119 + rb = ResourceBundle.getBundle("cz.xelfi.quoridor.freemarkerdor.UI.Bundle", l);
1.120 + if (locale != null) {
1.121 + locale[0] = l;
1.122 }
1.123 + } catch (MissingResourceException e) {
1.124 + // OK
1.125 + }
1.126 }
1.127 if (rb == null) {
1.128 for (Locale l : headers.getAcceptableLanguages()) {
1.129 try {
1.130 rb = ResourceBundle.getBundle("cz.xelfi.quoridor.freemarkerdor.UI.Bundle", l);
1.131 - locale = l;
1.132 + if (locale != null) {
1.133 + locale[0] = l;
1.134 + }
1.135 break;
1.136 } catch (MissingResourceException e) {
1.137 // OK
1.138 @@ -530,8 +567,16 @@
1.139 }
1.140 if (rb == null) {
1.141 rb = ResourceBundle.getBundle("cz.xelfi.quoridor.freemarkerdor.UI.Bundle", Locale.ENGLISH);
1.142 - locale = Locale.ENGLISH;
1.143 + if (locale != null) {
1.144 + locale[0] = Locale.ENGLISH;
1.145 + }
1.146 }
1.147 + return rb;
1.148 + }
1.149 +
1.150 + private Viewable viewable(String page, Document doc, Object... more) {
1.151 + Locale[] locale = new Locale[1];
1.152 + ResourceBundle rb = bundle(locale);
1.153
1.154 Map<String,Object> map = new HashMap<String,Object>();
1.155 class ConvertToDate extends HashMap<Object,Object> {
1.156 @@ -542,7 +587,7 @@
1.157 }
1.158 }
1.159
1.160 - map.put("locale", locale.toString());
1.161 + map.put("locale", locale[0].toString());
1.162 map.put("doc", doc);
1.163 if (user != null) {
1.164 map.put("user", user.getId());