view src/nabble/view/web/user/ChangeEmail.java @ 19:18cf4872fd7f

remove anonymous posting
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 29 May 2020 22:58:25 -0600
parents 7ecd1a4ef557
children
line wrap: on
line source


package nabble.view.web.user;

import fschmidt.util.java.HtmlUtils;
import fschmidt.util.servlet.ServletUtils;
import nabble.model.ModelException;
import nabble.model.ModelHome;
import nabble.model.Site;
import nabble.model.User;
import nabble.view.lib.ChangeEmailMail;
import nabble.view.lib.Jtp;
import nabble.view.lib.Permissions;
import nabble.view.lib.Shared;

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;


public final class ChangeEmail extends HttpServlet {

	protected void service(HttpServletRequest request,HttpServletResponse response)
		throws ServletException, IOException
	{
		long userId = Jtp.getLong(request, "user");
		Site site = Jtp.getSiteNotNull(request);
		User user = site.getUser(userId);

		User visitor = Jtp.getUser(request);
		boolean isAllowed = user.equals(visitor) || Permissions.isInGroup(visitor, Permissions.ADMINISTRATORS_GROUP);
		if (visitor == null || !isAllowed) {
			Jtp.login("You must login to change your email.",request,response);
			return;
		}
		String email = request.getParameter("email");
		String errorMsg = null;

		if( "Change".equals( request.getParameter("Action") ) && "POST".equals(request.getMethod()) ) {
			try {
				email = email.trim();
				ModelHome.validateEmail(email);
				if( !email.equalsIgnoreCase(user.getEmail()) && Jtp.getSite(request).getUserFromEmail(email) != null)
					throw ModelException.newInstance("duplicate_email","Email already in use");
				user.setProperty("_new_email", email);
				String url = ServletUtils.getContextURL(request)
					+ "/user/ChangeEmail3.jtp?email=" + HtmlUtils.urlEncode(email)
					+ "&user=" + user.getId()
					+ "&h=" + emailHash(email)
				;
				ChangeEmailMail.send(site, user.getName(), user.getEmail(), email, url);
				response.sendRedirect( "ChangeEmail2.jtp");
				return;
			} catch(ModelException e) {
				errorMsg = e.getMessage();
			}
		}
		PrintWriter out = response.getWriter();
		
		out.print( "\r\n<html>\r\n	<head>\r\n		" );
 Shared.title(request,response,"Change Email"); 
		out.print( "\r\n	</head>\r\n	<body>\r\n		" );

				Shared.minHeaderGlobal(request,response);
				Shared.profileHeading(request,out,user,"Change Email");

				Shared.errorMessage(request,response,errorMsg,
					"Please enter a correct email address and click Change Email."
				);
				
		out.print( "\r\n\r\n<form method=post action=\"" );
		out.print( (response.encodeURL("ChangeEmail.jtp")) );
		out.print( "\">\r\n	<input type=hidden name=\"Action\" value=\"Change\">\r\n	<input type=hidden name=\"user\" value=\"" );
		out.print( (user.getId()) );
		out.print( "\">\r\n\r\n	<div class=\"second-font field-title\">\r\n		Current Email\r\n	</div>\r\n	<div class=\"weak-color\" style=\"margin-left:1.9em\">\r\n		" );
		out.print( (user.getEmail()) );
		out.print( "\r\n	</div>\r\n\r\n	<div class=\"second-font field-title\">\r\n		Change email\r\n	</div>\r\n	<div class=\"weak-color\" style=\"margin-bottom:1em\">\r\n		<input name=\"email\" size=\"30\" value=\"" );
		out.print( (Jtp.hideNull(email)) );
		out.print( "\">\r\n	</div>\r\n\r\n	<input type=submit value=\"Change Email\"></input>\r\n	or <a href=\"/template/NamlServlet.jtp?macro=user_profile\">Cancel</a>\r\n   </form>\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" );

	}

	static int emailHash(String email) {
		return (email+"jyk.y/$sh%EW4w2333").hashCode();
	}
}