Mercurial Hosting > nabble
view src/nabble/view/web/user/ChangeEmail3.java @ 0:7ecd1a4ef557
add content
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Mar 2019 19:15:52 -0600 |
parents | |
children |
line wrap: on
line source
package nabble.view.web.user; import fschmidt.db.DbDatabase; import fschmidt.util.servlet.ServletUtils; import nabble.model.ModelException; import nabble.model.Site; import nabble.model.User; import nabble.naml.compiler.Template; import nabble.naml.compiler.TemplatePrintWriter; import nabble.naml.namespaces.BasicNamespace; import nabble.view.lib.Jtp; import nabble.view.lib.Shared; import nabble.view.web.template.NabbleNamespace; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; public final class ChangeEmail3 extends HttpServlet { private static final Logger logger = LoggerFactory.getLogger(ChangeEmail3.class); protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.print( "\r\n<html>\r\n<head>\r\n " ); Shared.title(request,response,"Change Email Confirmation"); out.print( "\r\n</head>\r\n<body>\r\n " ); Shared.minHeaderGlobal(request,response); out.print( "\r\n <h1>Change Email Confirmation</h1>\r\n " ); String email = request.getParameter("email"); long userId = Long.valueOf(request.getParameter("user")); Site site = Jtp.getSite(request); User user = site.getUser(userId); String newEmail = user.getProperty("_new_email"); int hash = Integer.parseInt(request.getParameter("h")); user.setProperty("_new_email", null); // delete key if (newEmail == null || !newEmail.equals(email) || hash != ChangeEmail.emailHash(newEmail)) { out.print( "\r\n<p><strong>We were unable to change your email address.</strong></p>\r\n<p>Please try <a href=\"ChangeEmail.jtp?user=" ); out.print( (user.getId()) ); out.print( "\">changing your email</a> again or <a href=\"/template/NamlServlet.jtp?macro=user_profile\">go back to menu</a>.</p>\r\n" ); } else { DbDatabase db = site.getDb(); db.beginTransaction(); try { User u = user.getGoodCopy(); String oldEmail = u.getEmail(); u.setEmail(email); u.update(); ServletUtils.setCookie(request, response, "email", email, true, null); db.commitTransaction(); callNaml(site, oldEmail, email); out.print( "\r\n<p>Your email has been changed.</p>\r\n<p><a href=\"/template/NamlServlet.jtp?macro=user_profile\">Go back to your profile</a></p>\r\n" ); } catch(ModelException e) { logger.info("ex inTrans="+db.isInTransaction(),e); out.print( "\r\nEmail change failed:\r\n<br />" ); out.print( (e.getMessage()) ); out.print( "\r\n" ); } catch(RuntimeException e) { logger.error("ex inTrans="+db.isInTransaction(),e); throw e; } finally { db.endTransaction(); } } out.print( "\r\n\r\n" ); Shared.footer(request,response); out.print( "\r\n" ); Shared.analytics(request,response); out.print( "\r\n</body>\r\n</html>\r\n" ); } private static void callNaml(Site site, String oldEmail, String newEmail) { Template template = site.getTemplate( "user email changed", BasicNamespace.class, NabbleNamespace.class ); Map<String,Object> params = new HashMap<String,Object>(); params.put("old_email",oldEmail); params.put("new_email",newEmail); template.run( TemplatePrintWriter.NULL, params, new BasicNamespace(template), new NabbleNamespace(site) ); } }