updated email templates

This commit is contained in:
Ziver Koc 2018-07-25 15:36:57 +02:00
parent de503bd441
commit 467151abd0
14 changed files with 106 additions and 81 deletions

View file

@ -1,31 +1,18 @@
package zall; package zall;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.naming.Context; import javax.naming.Context;
import javax.naming.InitialContext; import javax.naming.InitialContext;
import javax.naming.NamingException; import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig; import javax.servlet.ServletConfig;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.Cookie; import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import zall.bean.Folder;
import zall.bean.Image;
import zall.bean.Media;
import zall.bean.User;
import zall.manager.AuthenticationManager;
import zall.util.ZalleryEmail; import zall.util.ZalleryEmail;
import zall.util.UserMessage;
import zall.util.UserMessage.MessageType;
import zutil.db.DBConnection; import zutil.db.DBConnection;
import zutil.log.LogUtil; import zutil.log.LogUtil;
@ -36,6 +23,9 @@ public class Zallery extends HttpServlet{
public static String WEBSITE_NAME = "Example.com"; public static String WEBSITE_NAME = "Example.com";
public static String WEBSITE_URL = "http://example.com"; public static String WEBSITE_URL = "http://example.com";
public static String WEBSITE_EMAIL = "admin@example.com";
public static String WEBSITE_EMAIL_NICE = "Example.com Admin";
public static String SMTP_HOST = "localhost";
public static String ROOT_PATH = ""; public static String ROOT_PATH = "";
public static String DATA_PATH = ""; public static String DATA_PATH = "";
@ -56,12 +46,15 @@ public class Zallery extends HttpServlet{
if ("C:\\\\data".equals(context.lookup("java:comp/env/DATA_PATH"))) if ("C:\\\\data".equals(context.lookup("java:comp/env/DATA_PATH")))
throw new ServletException("Zallery has not been properly configured, set proper configuration in Zallery.xml context file."); throw new ServletException("Zallery has not been properly configured, set proper configuration in Zallery.xml context file.");
WEBSITE_NAME = (String)context.lookup("java:comp/env/WEBSITE_NAME"); WEBSITE_NAME = (String)context.lookup("java:comp/env/WEBSITE_NAME");
WEBSITE_URL = (String)context.lookup("java:comp/env/WEBSITE_URL"); WEBSITE_URL = (String)context.lookup("java:comp/env/WEBSITE_URL");
if( WEBSITE_URL.charAt(WEBSITE_URL.length()-1) != '/') if( WEBSITE_URL.charAt(WEBSITE_URL.length()-1) != '/')
WEBSITE_URL += "/"; WEBSITE_URL += "/";
ZalleryEmail.setSMTPHost( (String)context.lookup("java:comp/env/SMTP_HOST") );
DATA_PATH = (String)context.lookup("java:comp/env/DATA_PATH"); WEBSITE_EMAIL = (String)context.lookup("java:comp/env/WEBSITE_EMAIL");
WEBSITE_EMAIL_NICE = (String)context.lookup("java:comp/env/WEBSITE_EMAIL_NICE");
SMTP_HOST = (String)context.lookup("java:comp/env/WEBSITE_EMAIL_NICE");
DATA_PATH = (String)context.lookup("java:comp/env/DATA_PATH");
LogUtil.setLevel("zall", Level.FINEST); LogUtil.setLevel("zall", Level.FINEST);
//LogUtil.setLevel("zutil", Level.FINEST); //LogUtil.setLevel("zutil", Level.FINEST);

View file

@ -24,9 +24,7 @@ public abstract class ZalleryServlet extends HttpServlet {
public final void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException { public final void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {
DBConnection db = null; DBConnection db = null;
try { try {
include("header.jsp", request, response);
doGet(request, response, db = Zallery.getDB()); doGet(request, response, db = Zallery.getDB());
include("footer.jsp", request, response);
} catch (ServletException e) { } catch (ServletException e) {
throw e; throw e;
} catch (Exception e) { } catch (Exception e) {
@ -42,9 +40,7 @@ public abstract class ZalleryServlet extends HttpServlet {
public final void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException { public final void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException {
DBConnection db = null; DBConnection db = null;
try { try {
include("header.jsp", request, response);
doPost(request, response, db = Zallery.getDB()); doPost(request, response, db = Zallery.getDB());
include("footer.jsp", request, response);
} catch (ServletException e) { } catch (ServletException e) {
throw e; throw e;
} catch (Exception e) { } catch (Exception e) {

View file

@ -8,10 +8,9 @@ import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.Objects;
/** /**
* This filter will check if user is valid if not will redirect to /login page * This filter will check if user is isValid if not will redirect to /login page
*/ */
@WebFilter(urlPatterns = "/") @WebFilter(urlPatterns = "/")
public class AuthenticationFilter implements Filter { public class AuthenticationFilter implements Filter {
@ -26,8 +25,8 @@ public class AuthenticationFilter implements Filter {
String requestURI = ((HttpServletRequest) request).getRequestURI(); String requestURI = ((HttpServletRequest) request).getRequestURI();
User user = null; User user = null;
// continue the request via the filter pipeline if it is login page or it is a valid User // continue the request via the filter pipeline if it is login page or it is a isValid User
if (requestURI.equals(LOGIN_URI) || AuthenticationManager.valid(user, (HttpServletRequest) request)) { if (requestURI.equals(LOGIN_URI) || AuthenticationManager.isValid(user, (HttpServletRequest) request)) {
chain.doFilter(request, response); chain.doFilter(request, response);
} else { } else {
// do not continue the filter pipeline but respond back to client // do not continue the filter pipeline but respond back to client

View file

@ -16,4 +16,12 @@ error.not.found.last.name=Please provide a valid last name!
error.not.found.email=Please provide a valid email! error.not.found.email=Please provide a valid email!
error.not.found.password=Please provide a valid password! error.not.found.password=Please provide a valid password!
error.incorrect.password.matching=Provided passwords do not match! error.incorrect.password.matching=Provided passwords do not match!
error.email_exists=An account with that email already exists! error.email_exists=An account with that email already exists!
email.activation.title=Account activation at
email.activation.body=Your account has now been activated. You can now login and use the site.
email.activation.request.title=New user activation request at
email.activation.request.body=A new user has registered for an account at
email.registration.title=Registration at
email.registration.body1=You receive this message because you have requested an account at
email.registration.body2=Please click the link below to verify your email address:
email.registration.body3=You will have to wait for an admin to activate your account after you have verified your email.

View file

@ -55,9 +55,9 @@ public class AuthenticationManager {
} }
/** /**
* @return true if the user has a valid authentication session * @return true if the user has a isValid authentication session
*/ */
public static boolean valid(User user, HttpServletRequest request) { public static boolean isValid(User user, HttpServletRequest request) {
if(user == null) if(user == null)
return false; return false;
if(!user.isEnabled()) if(!user.isEnabled())

View file

@ -22,7 +22,7 @@ import java.util.logging.Logger;
public class GalleryServlet extends ZalleryServlet { public class GalleryServlet extends ZalleryServlet {
private static Logger logger = LogUtil.getLogger(); private static Logger logger = LogUtil.getLogger();
public static final String JSP_FILE = "gallery.jsp"; public static final String JSP_FILE = "page_gallery.jsp";
public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws SQLException, IOException, ServletException { public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws SQLException, IOException, ServletException {

View file

@ -19,7 +19,7 @@ import java.util.logging.Logger;
public class LoginServlet extends ZalleryServlet { public class LoginServlet extends ZalleryServlet {
private static Logger logger = LogUtil.getLogger(); private static Logger logger = LogUtil.getLogger();
private static final String JSP_FILE = "register.jsp"; private static final String JSP_FILE = "page_login.jsp";
public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, IOException { public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, IOException {
@ -44,5 +44,7 @@ public class LoginServlet extends ZalleryServlet {
else { else {
msgs.add(UserMessage.MessageType.ERROR, lang.getString("error.incorrect.user_or_pass")); msgs.add(UserMessage.MessageType.ERROR, lang.getString("error.incorrect.user_or_pass"));
} }
doGet(request, response, db);
} }
} }

View file

@ -22,7 +22,7 @@ import java.util.logging.Logger;
public class MediaServlet extends ZalleryServlet { public class MediaServlet extends ZalleryServlet {
private static Logger logger = LogUtil.getLogger(); private static Logger logger = LogUtil.getLogger();
private static final String JSP_FILE = "media.jsp"; private static final String JSP_FILE = "page_media.jsp";
public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, SQLException, IOException { public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, SQLException, IOException {

View file

@ -19,7 +19,7 @@ import java.util.logging.Logger;
public class ProfileServlet extends ZalleryServlet { public class ProfileServlet extends ZalleryServlet {
private static Logger logger = LogUtil.getLogger(); private static Logger logger = LogUtil.getLogger();
private static final String JSP_FILE = "profile.jsp"; private static final String JSP_FILE = "page_profile.jsp";
public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, IOException, SQLException { public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, IOException, SQLException {
@ -42,7 +42,7 @@ public class ProfileServlet extends ZalleryServlet {
} }
public void doPost(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws SQLException, IOException { public void doPost(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws SQLException, IOException, ServletException {
doGet(request, response, db);
} }
} }

View file

@ -2,8 +2,10 @@ package zall.page;
import zall.ZalleryServlet; import zall.ZalleryServlet;
import zall.bean.User; import zall.bean.User;
import zall.util.UserMessage.MessageType;
import zall.util.ZalleryEmail; import zall.util.ZalleryEmail;
import zall.util.UserMessage; import zall.util.UserMessage;
import zutil.ObjectUtil;
import zutil.db.DBConnection; import zutil.db.DBConnection;
import zutil.log.LogUtil; import zutil.log.LogUtil;
@ -18,7 +20,7 @@ import java.util.logging.Logger;
public class RegisterServlet extends ZalleryServlet { public class RegisterServlet extends ZalleryServlet {
private static Logger logger = LogUtil.getLogger(); private static Logger logger = LogUtil.getLogger();
private static final String JSP_FILE = "register.jsp"; private static final String JSP_FILE = "page_register.jsp";
private static final String INPUT_ID_FIRST_NAME = "first-name"; private static final String INPUT_ID_FIRST_NAME = "first-name";
private static final String INPUT_ID_LAST_NAME = "last-name"; private static final String INPUT_ID_LAST_NAME = "last-name";
@ -27,7 +29,26 @@ public class RegisterServlet extends ZalleryServlet {
private static final String INPUT_ID_PASSWORD_REPEATE = "password-re"; private static final String INPUT_ID_PASSWORD_REPEATE = "password-re";
public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, IOException { public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, IOException, SQLException {
UserMessage msgs = UserMessage.getUserMessage(request.getSession());
// Verify email address
String verifyEmailHash = request.getParameter("verifyemail");
if(!ObjectUtil.isEmpty(verifyEmailHash)){
User verfUser = User.load(db, Long.parseLong(request.getParameter("id")));
if (verfUser != null) {
if( verfUser.verifyEmail(request.getParameter("hash")) ){
ZalleryEmail.sendNewUserRegistrationToAdmin(verfUser, db);
verfUser.save(db);
msgs.add(MessageType.INFO, "Your email has been successfully verified.");
msgs.add(MessageType.WARNING, "The account is waiting account activation by an admin.");
}
else
msgs.add(MessageType.ERROR, "Email verification failed!");
}
else msgs.add(MessageType.ERROR, "Invalid user id: "+request.getParameter("id"));
}
include(JSP_FILE, request, response); include(JSP_FILE, request, response);
} }
@ -46,20 +67,20 @@ public class RegisterServlet extends ZalleryServlet {
String passwordRe = (String)request.getAttribute(INPUT_ID_PASSWORD_REPEATE); String passwordRe = (String)request.getAttribute(INPUT_ID_PASSWORD_REPEATE);
if (firstName == null) if (firstName == null)
msgs.add(UserMessage.MessageType.ERROR, lang.getString("error.not.found.first.name")); msgs.add(MessageType.ERROR, lang.getString("error.not.found.first.name"));
if (lastName == null) if (lastName == null)
msgs.add(UserMessage.MessageType.ERROR, lang.getString("error.not.found.last.name")); msgs.add(MessageType.ERROR, lang.getString("error.not.found.last.name"));
if (email == null) if (email == null)
msgs.add(UserMessage.MessageType.ERROR, lang.getString("error.not.found.email")); msgs.add(MessageType.ERROR, lang.getString("error.not.found.email"));
if (password == null) if (password == null)
msgs.add(UserMessage.MessageType.ERROR, lang.getString("error.not.found.password")); msgs.add(MessageType.ERROR, lang.getString("error.not.found.password"));
if (passwordRe == null) if (passwordRe == null)
msgs.add(UserMessage.MessageType.ERROR, lang.getString("error.not.found.password")); msgs.add(MessageType.ERROR, lang.getString("error.not.found.password"));
else if (passwordRe.equals(password)) else if (passwordRe.equals(password))
msgs.add(UserMessage.MessageType.ERROR, lang.getString("error.incorrect.password.matching")); msgs.add(MessageType.ERROR, lang.getString("error.incorrect.password.matching"));
if(User.load(db, (String)request.getAttribute(INPUT_ID_EMAIL)) != null){ if(User.load(db, (String)request.getAttribute(INPUT_ID_EMAIL)) != null){
msgs.add(UserMessage.MessageType.ERROR, lang.getString("error.email_exists")); msgs.add(MessageType.ERROR, lang.getString("error.email_exists"));
return; return;
} }
@ -75,9 +96,9 @@ public class RegisterServlet extends ZalleryServlet {
ZalleryEmail.sendVerificationEmail( user ); ZalleryEmail.sendVerificationEmail( user );
request.getSession().setAttribute("user", user); request.getSession().setAttribute("user", user);
logger.info("Registered new user: "+user.getName()+"."); logger.info("Registered new user: "+user.getName()+".");
msgs.add(UserMessage.MessageType.INFO, msgs.add(MessageType.INFO,
lang.getString("info.created.account") + " " + lang.getString("info.sent.email.verification")); lang.getString("info.created.account") + " " + lang.getString("info.sent.email.verification"));
include(JSP_FILE, request, response); forward("/login", request, response);
} }
} }

View file

@ -18,7 +18,7 @@ import java.util.logging.Logger;
public class SlideshowServlet extends ZalleryServlet { public class SlideshowServlet extends ZalleryServlet {
private static Logger logger = LogUtil.getLogger(); private static Logger logger = LogUtil.getLogger();
private static final String JSP_FILE = "slideshow.jsp"; private static final String JSP_FILE = "page_slideshow.jsp";
public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, SQLException, IOException { public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, SQLException, IOException {

View file

@ -18,7 +18,7 @@ import java.util.logging.Logger;
public class UserListServlet extends ZalleryServlet { public class UserListServlet extends ZalleryServlet {
private static Logger logger = LogUtil.getLogger(); private static Logger logger = LogUtil.getLogger();
private static final String JSP_FILE = "users.jsp"; private static final String JSP_FILE = "page_users.jsp";
public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, SQLException, IOException { public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, SQLException, IOException {

View file

@ -10,6 +10,7 @@ import java.util.logging.Logger;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.servlet.ServletConfig; import javax.servlet.ServletConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServlet;
import com.xuggle.mediatool.IMediaReader; import com.xuggle.mediatool.IMediaReader;
@ -37,7 +38,7 @@ import zutil.StringUtil;
import zutil.db.DBConnection; import zutil.db.DBConnection;
import zutil.log.LogUtil; import zutil.log.LogUtil;
@WebServlet(value = "/transcoder", loadOnStartup = 1)
public class ZalleryTranscoder extends HttpServlet{ public class ZalleryTranscoder extends HttpServlet{
private static final Logger logger = LogUtil.getLogger(); private static final Logger logger = LogUtil.getLogger();
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -48,11 +49,11 @@ public class ZalleryTranscoder extends HttpServlet{
public void init( ServletConfig config ){ public void init( ServletConfig config ){
try{ try{
transcodingQueue = new LinkedList<Video>(); transcodingQueue = new LinkedList<>();
worker = new TranscoderThread(); worker = new TranscoderThread();
worker.start(); worker.start();
// get untranscoded videos // get not transcoded videos
DBConnection db = null; DBConnection db = null;
try { try {
db = Zallery.getDB(); db = Zallery.getDB();

View file

@ -2,70 +2,75 @@ package zall.util;
import zall.Zallery; import zall.Zallery;
import zall.bean.User; import zall.bean.User;
import zall.manager.AuthenticationManager;
import zutil.db.DBConnection; import zutil.db.DBConnection;
import zutil.net.smtp.Email; import zutil.net.smtp.Email;
import zutil.net.smtp.SmtpClient; import zutil.net.smtp.SmtpClient;
import java.io.IOException; import java.io.IOException;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Locale;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
import static zall.ZalleryConstant.LANG_BASENAME;
/** /**
* *
*/ */
public class ZalleryEmail { public class ZalleryEmail {
private static String host; private static ResourceBundle lang = PropertyResourceBundle.getBundle(LANG_BASENAME, Locale.getDefault());
public static void setSMTPHost(String host){
ZalleryEmail.host = host;
}
public static void sendVerificationEmail(User user) throws IOException { public static void sendVerificationEmail(User user) throws IOException {
// Email String verifyUrl = Zallery.getWebsiteURL() + "?verfemail=" + user.generateEmailVerificationHash() + "&id=" + user.getId();
Email email = new Email();
email.setFrom("admin@koc.se", "Koc.se Admin");
email.setTo(user.getEmail());
email.setSubject("Registration at "+ Zallery.getWebsiteName());
email.setContentType(Email.ContentType.HTML);
email.setMessage("You receive this message because you have requested an account" +
"<br>at "+Zallery.getWebsiteName()+". Please click the link to verify your email address: " +
"<p><a href='"+Zallery.getWebsiteURL()+"?action=verfemail&id="+user.getId()+"&hash="+user.generateEmailVerificationHash()+"'>"+Zallery.getWebsiteURL()+"?action=verfemail&id="+user.getId()+"&hash="+user.generateEmailVerificationHash()+"</a>" +
"<p> You will have to wait for an admin to activate your account after you have verified your email.");
SmtpClient smtp = new SmtpClient(host); Email email = new Email();
email.setFrom(Zallery.WEBSITE_EMAIL, Zallery.WEBSITE_EMAIL_NICE);
email.setTo(user.getEmail());
email.setSubject(lang.getString("email.registration.title") + Zallery.getWebsiteName());
email.setContentType(Email.ContentType.HTML);
email.setMessage(
lang.getString("email.registration.body1") + " " + Zallery.getWebsiteName() + "." +
"<br>" + lang.getString("email.registration.body2") +
"<p><a href='" + verifyUrl + "'>" + verifyUrl + "</a>" +
"<p>" + lang.getString("email.registration.body3"));
SmtpClient smtp = new SmtpClient(Zallery.SMTP_HOST);
smtp.send(email); smtp.send(email);
smtp.close(); smtp.close();
} }
public static void sendActivationEmail(User user) throws IOException { public static void sendActivationEmail(User user) throws IOException {
Email email = new Email(); Email email = new Email();
email.setFrom("admin@koc.se", "Koc.se Admin"); email.setFrom(Zallery.WEBSITE_EMAIL, Zallery.WEBSITE_EMAIL_NICE);
email.setTo(user.getEmail()); email.setTo(user.getEmail());
email.setSubject("Account activation at " + Zallery.getWebsiteName()); email.setSubject(lang.getString("email.activation.title") + " " + Zallery.getWebsiteName());
email.setContentType(Email.ContentType.HTML); email.setContentType(Email.ContentType.HTML);
email.setMessage("Your account has now been activated by an admin. You can now login and use the site. " + email.setMessage(
"<a href='" + Zallery.getWebsiteURL() + "'>" + Zallery.getWebsiteURL() + "</a>"); lang.getString("email.activation.body") +
"<br><a href='" + Zallery.getWebsiteURL() + "'>" + Zallery.getWebsiteURL() + "</a>");
SmtpClient smtp = new SmtpClient(host); SmtpClient smtp = new SmtpClient(Zallery.SMTP_HOST);
smtp.send(email); smtp.send(email);
smtp.close(); smtp.close();
} }
public static void sendNewUserRegistrationToAdmin(User user, DBConnection db) throws SQLException, IOException{ public static void sendNewUserRegistrationToAdmin(User user, DBConnection db) throws SQLException, IOException {
// Email the admin about new user
Email email = new Email(); Email email = new Email();
email.setFrom("admin@koc.se", "Koc.se Admin"); email.setFrom(Zallery.WEBSITE_EMAIL, Zallery.WEBSITE_EMAIL_NICE);
email.setSubject("New user activation request at "+Zallery.getWebsiteName()); email.setSubject(lang.getString("email.activation.request.title") + " " + Zallery.getWebsiteName());
email.setContentType(Email.ContentType.HTML); email.setContentType(Email.ContentType.HTML);
email.setMessage("A new user has registered for an account at " + email.setMessage(
"<a href='"+Zallery.getWebsiteURL()+"'>"+Zallery.getWebsiteName()+"</a>:" + lang.getString("email.activation.request.body") +
" <a href='" + Zallery.getWebsiteURL() + "'>" + Zallery.getWebsiteName() + "</a>:" +
"<p>Email: <b>" + user.getEmail() + "</b>" + "<p>Email: <b>" + user.getEmail() + "</b>" +
"<br>Name: <b>" + user.getName() + "</b>" "<br>Name: <b>" + user.getName() + "</b>"
); );
SmtpClient smtp = new SmtpClient(host); SmtpClient smtp = new SmtpClient(Zallery.SMTP_HOST);
for(User admin : User.loadSuperUsers(db)){ for (User admin : User.loadSuperUsers(db)) {
if( admin.isEmailVerified() ){ if (admin.isEmailVerified()) {
email.setTo( admin.getEmail() ); email.setTo(admin.getEmail());
smtp.send(email); smtp.send(email);
} }
} }