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)
		);
	}
}