diff --git a/Zallery.iml b/Zallery.iml index 70b745e..d6e869e 100755 --- a/Zallery.iml +++ b/Zallery.iml @@ -76,5 +76,6 @@ + \ No newline at end of file diff --git a/src/zall/Zallery.java b/src/zall/Zallery.java index 7f8c1fb..c378436 100755 --- a/src/zall/Zallery.java +++ b/src/zall/Zallery.java @@ -24,9 +24,8 @@ import zall.bean.Media; import zall.bean.User; import zall.manager.AuthenticationManager; import zall.util.ZalleryEmail; -import zutil.net.smtp.Email; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; +import zall.util.UserMessage; +import zall.util.UserMessage.MessageType; import zutil.db.DBConnection; import zutil.log.LogUtil; diff --git a/src/zall/ZalleryServlet.java b/src/zall/ZalleryServlet.java new file mode 100644 index 0000000..75cad08 --- /dev/null +++ b/src/zall/ZalleryServlet.java @@ -0,0 +1,66 @@ +package zall; + +import zutil.db.DBConnection; +import zutil.log.LogUtil; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.*; +import java.io.IOException; +import java.sql.SQLException; +import java.util.logging.Logger; + +public abstract class ZalleryServlet extends HttpServlet { + private static Logger logger = LogUtil.getLogger(); + + + public final void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException { + DBConnection db = null; + try { + include("header.jsp", request, response); + doGet(request, response, db = Zallery.getDB()); + include("footer.jsp", request, response); + } catch (ServletException e) { + throw e; + } catch (Exception e) { + throw new ServletException(e); + } finally { + if (db != null) db.close(); + } + } + + public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, SQLException, IOException { + } + + public final void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException { + DBConnection db = null; + try { + include("header.jsp", request, response); + doPost(request, response, db = Zallery.getDB()); + include("footer.jsp", request, response); + } catch (ServletException e) { + throw e; + } catch (Exception e) { + throw new ServletException(e); + } finally { + if (db != null) db.close(); + } + } + + public void doPost(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, SQLException, IOException { + doGet(request, response, db); + } + + + public void include(String url, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/" + url); + if (dispatcher != null) + dispatcher.include(request, response); + } + + public void forward(String url, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/" + url); + if (dispatcher != null) + dispatcher.forward(request, response); + } +} diff --git a/src/zall/action/LoginAction.java b/src/zall/action/LoginAction.java index 37c03e5..d67af23 100644 --- a/src/zall/action/LoginAction.java +++ b/src/zall/action/LoginAction.java @@ -9,18 +9,19 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import zall.bean.User; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; +import zall.util.UserMessage; +import zall.util.UserMessage.MessageType; import zutil.db.DBConnection; import zutil.log.LogUtil; public class LoginAction extends ZalleryAction{ - - private static final Logger logger = LogUtil.getLogger(); + + private static final Logger logger = LogUtil.getLogger(); + public LoginAction() { super("login"); } - + @Override public void handleRequest(DBConnection db, HttpServletRequest request, HttpServletResponse response, HttpSession session, diff --git a/src/zall/action/RegisterAction.java b/src/zall/action/RegisterAction.java index b95c963..c372a71 100755 --- a/src/zall/action/RegisterAction.java +++ b/src/zall/action/RegisterAction.java @@ -11,8 +11,8 @@ import javax.servlet.http.HttpSession; import zall.bean.User; import zall.util.ZalleryEmail; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; +import zall.util.UserMessage; +import zall.util.UserMessage.MessageType; import zutil.db.DBConnection; import zutil.log.LogUtil; diff --git a/src/zall/action/ZalleryAction.java b/src/zall/action/ZalleryAction.java index d8c1887..c37f2a9 100644 --- a/src/zall/action/ZalleryAction.java +++ b/src/zall/action/ZalleryAction.java @@ -7,7 +7,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import zall.bean.User; -import zall.util.msg.UserMessage; +import zall.util.UserMessage; import zutil.db.DBConnection; public abstract class ZalleryAction { diff --git a/src/zall/action/media/CommentAction.java b/src/zall/action/media/CommentAction.java index 61e4652..c82bff8 100644 --- a/src/zall/action/media/CommentAction.java +++ b/src/zall/action/media/CommentAction.java @@ -12,8 +12,8 @@ import zall.action.ZalleryAction; import zall.bean.Comment; import zall.bean.Media; import zall.bean.User; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; +import zall.util.UserMessage; +import zall.util.UserMessage.MessageType; import zutil.db.DBConnection; public class CommentAction extends ZalleryAction{ diff --git a/src/zall/action/media/CreateFolderAction.java b/src/zall/action/media/CreateFolderAction.java index 0d34045..ffa6fcb 100644 --- a/src/zall/action/media/CreateFolderAction.java +++ b/src/zall/action/media/CreateFolderAction.java @@ -12,8 +12,8 @@ import javax.servlet.http.HttpSession; import zall.action.ZalleryAction; import zall.bean.Folder; import zall.bean.User; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; +import zall.util.UserMessage; +import zall.util.UserMessage.MessageType; import zutil.db.DBConnection; import zutil.log.LogUtil; diff --git a/src/zall/action/media/ModifyMediaAction.java b/src/zall/action/media/ModifyMediaAction.java index 9fc13b6..09dbf45 100755 --- a/src/zall/action/media/ModifyMediaAction.java +++ b/src/zall/action/media/ModifyMediaAction.java @@ -12,8 +12,8 @@ import zall.action.ZalleryAction; import zall.bean.Media; import zall.bean.User; import zall.manager.AuthenticationManager; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; +import zall.util.UserMessage; +import zall.util.UserMessage.MessageType; import zutil.db.DBConnection; public class ModifyMediaAction extends ZalleryAction{ diff --git a/src/zall/action/media/RemoveFolderAction.java b/src/zall/action/media/RemoveFolderAction.java index 085c11d..696029e 100755 --- a/src/zall/action/media/RemoveFolderAction.java +++ b/src/zall/action/media/RemoveFolderAction.java @@ -12,8 +12,8 @@ import zall.action.ZalleryAction; import zall.bean.Folder; import zall.bean.User; import zall.manager.AuthenticationManager; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; +import zall.util.UserMessage; +import zall.util.UserMessage.MessageType; import zutil.db.DBConnection; public class RemoveFolderAction extends ZalleryAction{ diff --git a/src/zall/action/media/RemoveMediaAction.java b/src/zall/action/media/RemoveMediaAction.java index 3bc39fb..a40d6a1 100755 --- a/src/zall/action/media/RemoveMediaAction.java +++ b/src/zall/action/media/RemoveMediaAction.java @@ -12,8 +12,8 @@ import zall.action.ZalleryAction; import zall.bean.Media; import zall.bean.User; import zall.manager.AuthenticationManager; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; +import zall.util.UserMessage; +import zall.util.UserMessage.MessageType; import zutil.db.DBConnection; public class RemoveMediaAction extends ZalleryAction{ diff --git a/src/zall/action/media/TogglePrivateAction.java b/src/zall/action/media/TogglePrivateAction.java index 73f1807..dfb6b97 100755 --- a/src/zall/action/media/TogglePrivateAction.java +++ b/src/zall/action/media/TogglePrivateAction.java @@ -11,12 +11,11 @@ import javax.servlet.http.HttpSession; import zall.action.ZalleryAction; import zall.bean.Folder; import zall.bean.User; -import zall.manager.AuthenticationManager; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; +import zall.util.UserMessage; +import zall.util.UserMessage.MessageType; import zutil.db.DBConnection; -public class TogglePrivateAction extends ZalleryAction{ +public class TogglePrivateAction extends ZalleryAction { public TogglePrivateAction() { super("mkprivate", true); @@ -26,31 +25,14 @@ public class TogglePrivateAction extends ZalleryAction{ public void handleRequest(DBConnection db, HttpServletRequest request, HttpServletResponse response, HttpSession session, PrintWriter out, User user, UserMessage msgs) throws SQLException, IOException { - // Toggle folder private - if( request.getParameter("id") == null){ - if(out != null) out.println("{ \"error\": \"Missing parameters!\"}"); - else msgs.add(MessageType.ERROR, "Missing parameters!"); - return; - } - long id = Long.parseLong(request.getParameter("id")); - Folder folder = Folder.load(db, id); - - if( folder != null ){ - if( AuthenticationManager.canEdit(user, folder) ){ - folder.setPrivate( !folder.isPrivate() ); - folder.save(db); - if(out != null) out.println("{}"); - else{ - if(folder.isPrivate()) msgs.add(MessageType.INFO, "Folder is now private (not visible to other users)."); - else msgs.add(MessageType.INFO, "Folder is now public (can be viewed by other users)."); - } - } - else if(out != null) out.println("{ \"error\": \"You are not authorize to edit this folder!\"}"); - else msgs.add(MessageType.ERROR, "You are not authorize to edit this folder!"); - } - else if(out != null) out.println("{ \"error\": \"No such folder!\"}"); - else msgs.add(MessageType.ERROR, "The folder does not exist!"); - - } + // Toggle folder private + if (request.getParameter("id") == null) { + if (out != null) out.println("{ \"error\": \"Missing parameters!\"}"); + else msgs.add(MessageType.ERROR, "Missing parameters!"); + return; + } + long id = Long.parseLong(request.getParameter("id")); + Folder folder = Folder.load(db, id); + } } diff --git a/src/zall/action/user/ModifyUserAction.java b/src/zall/action/user/ModifyUserAction.java index d43619b..db27bd0 100755 --- a/src/zall/action/user/ModifyUserAction.java +++ b/src/zall/action/user/ModifyUserAction.java @@ -8,14 +8,11 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; -import zall.Zallery; import zall.action.ZalleryAction; import zall.bean.User; import zall.util.ZalleryEmail; -import zutil.net.smtp.Email; -import zutil.net.smtp.Email.ContentType; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; +import zall.util.UserMessage; +import zall.util.UserMessage.MessageType; import zutil.db.DBConnection; public class ModifyUserAction extends ZalleryAction{ diff --git a/src/zall/action/user/ModifyUserStatusAction.java b/src/zall/action/user/ModifyUserStatusAction.java index 094b719..c7a91f5 100755 --- a/src/zall/action/user/ModifyUserStatusAction.java +++ b/src/zall/action/user/ModifyUserStatusAction.java @@ -12,8 +12,8 @@ import zall.action.ZalleryAction; import zall.bean.User; import zall.manager.AuthenticationManager; import zall.util.ZalleryEmail; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; +import zall.util.UserMessage; +import zall.util.UserMessage.MessageType; import zutil.db.DBConnection; public class ModifyUserStatusAction extends ZalleryAction{ diff --git a/src/zall/action/user/RemoveUserAction.java b/src/zall/action/user/RemoveUserAction.java index afc3ca4..96d5b6d 100644 --- a/src/zall/action/user/RemoveUserAction.java +++ b/src/zall/action/user/RemoveUserAction.java @@ -10,8 +10,8 @@ import javax.servlet.http.HttpSession; import zall.action.ZalleryAction; import zall.bean.User; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; +import zall.util.UserMessage; +import zall.util.UserMessage.MessageType; import zutil.db.DBConnection; public class RemoveUserAction extends ZalleryAction{ diff --git a/src/zall/action/user/SendVerificationEmailAction.java b/src/zall/action/user/SendVerificationEmailAction.java index fe70a4e..5a5b6b8 100755 --- a/src/zall/action/user/SendVerificationEmailAction.java +++ b/src/zall/action/user/SendVerificationEmailAction.java @@ -12,8 +12,8 @@ import javax.servlet.http.HttpSession; import zall.action.ZalleryAction; import zall.bean.User; import zall.util.ZalleryEmail; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; +import zall.util.UserMessage; +import zall.util.UserMessage.MessageType; import zutil.db.DBConnection; import zutil.log.LogUtil; diff --git a/src/zall/action/user/VerifyEmailAction.java b/src/zall/action/user/VerifyEmailAction.java index 990fa02..88d8d06 100755 --- a/src/zall/action/user/VerifyEmailAction.java +++ b/src/zall/action/user/VerifyEmailAction.java @@ -11,8 +11,8 @@ import javax.servlet.http.HttpSession; import zall.action.ZalleryAction; import zall.bean.User; import zall.util.ZalleryEmail; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; +import zall.util.UserMessage; +import zall.util.UserMessage.MessageType; import zutil.db.DBConnection; public class VerifyEmailAction extends ZalleryAction{ diff --git a/src/zall/manager/AuthenticationManager.java b/src/zall/manager/AuthenticationManager.java index 1e3b152..ad9bcff 100755 --- a/src/zall/manager/AuthenticationManager.java +++ b/src/zall/manager/AuthenticationManager.java @@ -5,7 +5,6 @@ import zall.ZalleryConstant; import zall.bean.Folder; import zall.bean.Media; import zall.bean.User; -import zall.util.msg.UserMessage; import zutil.Hasher; import zutil.db.DBConnection; import zutil.log.LogUtil; diff --git a/src/zall/page/GalleryServlet.java b/src/zall/page/GalleryServlet.java new file mode 100755 index 0000000..46098d8 --- /dev/null +++ b/src/zall/page/GalleryServlet.java @@ -0,0 +1,83 @@ +package zall.page; + +import zall.ZalleryServlet; +import zall.bean.Folder; +import zall.bean.Media; +import zall.util.UserMessage; +import zutil.db.DBConnection; +import zutil.log.LogUtil; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; +import java.util.logging.Logger; + +@WebServlet("/gallery") +public class GalleryServlet extends ZalleryServlet { + private static Logger logger = LogUtil.getLogger(); + + + public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws SQLException, IOException, ServletException { + Folder folder; + if (request.getParameter("folder") != null && !request.getParameter("folder").equalsIgnoreCase("null")) + folder = Folder.load(db, Long.parseLong(request.getParameter("folder"))); + else { + folder = Folder.loadRoot(db, user); + // Setup new root folder + if (folder == null) { + folder = Folder.genRoot(); + folder.save(db); + } + } + List list = Media.load(db, folder); + List subFolders = Folder.loadSubFolders(db, folder, user); + + //session.setAttribute("user", user); + request.setAttribute("folder", folder); + request.setAttribute("subfolders", subFolders); + request.setAttribute("media", list); + + include("header.jsp", request, response); + include("gallery.jsp", request, response); + include("footer.jsp", request, response); + } + + public void doPost(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws SQLException, IOException, ServletException { + UserMessage msgs = UserMessage.getUserMessage(request.getSession()); + long id = Long.parseLong(request.getParameter("id")); + + if (request.getParameter("id") == null) { + msgs.add(UserMessage.MessageType.ERROR, "Missing parameters!"); + return; + } + + long id = Long.parseLong(request.getParameter("id")); + Folder folder = Folder.load(db, id); + + switch (request.getParameter("action")) { + + // ----------------------------------------- + // Toggle private mode + // ----------------------------------------- + + case "private": + if (folder != null) { + if (user.canEdit(folder)) { + folder.setPrivate(!folder.isPrivate()); + folder.save(db); + if (folder.isPrivate()) + msgs.add(UserMessage.MessageType.INFO, "Folder is now private (not visible to other users)."); + else + msgs.add(UserMessage.MessageType.INFO, "Folder is now public (can be viewed by other users)."); + } else + msgs.add(UserMessage.MessageType.ERROR, "You are not authorize to edit this folder!"); + } else + msgs.add(UserMessage.MessageType.ERROR, "The folder does not exist!"); + break; + } + } +} diff --git a/src/zall/page/LoginServlet.java b/src/zall/page/LoginServlet.java new file mode 100755 index 0000000..7ea11ae --- /dev/null +++ b/src/zall/page/LoginServlet.java @@ -0,0 +1,48 @@ +package zall.page; + +import zall.ZalleryServlet; +import zall.bean.User; +import zall.manager.AuthenticationManager; +import zutil.db.DBConnection; +import zutil.log.LogUtil; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.SQLException; +import java.util.logging.Logger; + +import static zall.ZalleryConstant.SESSION_KEY_USER; + +@WebServlet("/login") +public class LoginServlet extends ZalleryServlet { + private static Logger logger = LogUtil.getLogger(); + + private static final String JSP_FILE = "register.jsp"; + + + public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, IOException { + include(JSP_FILE, request, response); + } + + + public void doPost(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws SQLException, ServletException, IOException { + User user = AuthenticationManager.authenticate(db, + request.getParameter("email"), + request.getParameter("password")); + + // Successfull login + if (user != null) { + user.registerOnHost(request, response, db, true ); + request.getSession().setAttribute(SESSION_KEY_USER, user); + + forward("/", request, response); + } + // Failed login + else { + include(JSP_FILE, request, response); + } + } +} diff --git a/src/zall/servlet/LogoutServlet.java b/src/zall/page/LogoutServlet.java similarity index 70% rename from src/zall/servlet/LogoutServlet.java rename to src/zall/page/LogoutServlet.java index 3fb93bc..86479a9 100755 --- a/src/zall/servlet/LogoutServlet.java +++ b/src/zall/page/LogoutServlet.java @@ -1,9 +1,8 @@ -package zall.servlet; +package zall.page; -import zall.ZalleryConstant; +import zall.ZalleryServlet; import zall.bean.User; import zall.manager.AuthenticationManager; -import zall.util.DbHttpServlet; import zutil.db.DBConnection; import javax.servlet.annotation.WebServlet; @@ -18,9 +17,9 @@ import static zall.ZalleryConstant.SESSION_KEY_USER; * */ @WebServlet(urlPatterns = "/logout") -public class LogoutServlet extends DbHttpServlet { +public class LogoutServlet extends ZalleryServlet { - protected void doGet(HttpServletRequest req, HttpServletResponse resp, DBConnection db) throws SQLException, IOException { + public void doGet(HttpServletRequest req, HttpServletResponse resp, DBConnection db) throws SQLException, IOException { User user = (User) req.getSession().getAttribute(SESSION_KEY_USER); AuthenticationManager.reset(db, user); diff --git a/src/zall/page/MediaServlet.java b/src/zall/page/MediaServlet.java new file mode 100755 index 0000000..975f8d1 --- /dev/null +++ b/src/zall/page/MediaServlet.java @@ -0,0 +1,93 @@ +package zall.page; + +import zall.ZalleryServlet; +import zall.bean.Comment; +import zall.bean.Media; +import zall.util.UserMessage; +import zutil.db.DBConnection; +import zutil.log.LogUtil; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.SQLException; +import java.util.logging.Level; +import java.util.logging.Logger; + +@WebServlet("/media") +public class MediaServlet extends ZalleryServlet { + private static Logger logger = LogUtil.getLogger(); + + + public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, SQLException, IOException { + UserMessage msgs = UserMessage.getUserMessage(request.getSession()); + + if (request.getParameter("id") == null && request.getParameter("type") == null) { + msgs.add(UserMessage.MessageType.ERROR, "Missing parameters!"); + return; + } + try { + int id = Integer.parseInt(request.getParameter("id")); + Media media = Media.load(db, request.getParameter("type"), id); + + request.setAttribute("media", media); + } catch (NumberFormatException e) { + logger.log(Level.FINE, "", e); + } + + include("header.jsp", request, response); + include("media.jsp", request, response); + include("footer.jsp", request, response); + } + + public void doPost(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws SQLException { + UserMessage msgs = UserMessage.getUserMessage(request.getSession()); + long id = Long.parseLong(request.getParameter("id")); + + if (request.getParameter("id") == null || request.getParameter("type") == null) { + msgs.add(UserMessage.MessageType.ERROR, "Missing parameters!"); + return; + } + + Media media = Media.load(db, request.getParameter("type"), id); + + switch (request.getParameter("action")) { + // ----------------------------------------- + // Comment + // ----------------------------------------- + + case "comment": + Comment cm = new Comment(); + cm.setUser(user); + cm.setMessage(request.getParameter("msg")); + media.addComment(cm); + media.save(db); + + msgs.add(UserMessage.MessageType.INFO, "Comment saved."); + break; + + // ----------------------------------------- + // Modify media + // ----------------------------------------- + + case "modify": + if (media != null) { + if (user.canEdit(media)) { + media.setTitle(request.getParameter("title")); + media.setDescription(request.getParameter("description")); + media.save(db); + + msgs.add(UserMessage.MessageType.INFO, "Item edited successfully."); + } else + msgs.add(UserMessage.MessageType.ERROR, "You are not authorize to modify this item!"); + } else + msgs.add(UserMessage.MessageType.ERROR, "The item does not exist!"); + + break; + } + + } + +} \ No newline at end of file diff --git a/src/zall/page/ProfileServlet.java b/src/zall/page/ProfileServlet.java new file mode 100755 index 0000000..a305234 --- /dev/null +++ b/src/zall/page/ProfileServlet.java @@ -0,0 +1,51 @@ +package zall.page; + +import zall.ZalleryServlet; +import zall.bean.User; +import zall.util.UserMessage; +import zutil.db.DBConnection; +import zutil.log.LogUtil; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.SQLException; +import java.util.logging.Logger; + +@WebServlet("/profile") +public class ProfileServlet extends ZalleryServlet { + private static Logger logger = LogUtil.getLogger(); + + + public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException{ + UserMessage msgs = UserMessage.getUserMessage(request.getSession()); + + try{ + if(request.getParameter("id") != null){ + User profile_user = User.load(db, Long.parseLong( request.getParameter("id") )); + if(user.canEdit(profile_user)){ + request.setAttribute("profile_user", profile_user); + } else { + msgs.add(UserMessage.MessageType.ERROR, "You do not have permission to edit the user."); + } + } else { + request.setAttribute("profile_user", user); + } + + include("header.jsp", request, response); + include("profile.jsp", request, response); + include("footer.jsp", request, response); + + } catch (Exception e) { + logger.severe(e.getMessage()); + throw new ServletException(e); + } + } + + + public void doPost(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws SQLException, IOException { + + } +} diff --git a/src/zall/page/RegisterServlet.java b/src/zall/page/RegisterServlet.java new file mode 100755 index 0000000..e96cefa --- /dev/null +++ b/src/zall/page/RegisterServlet.java @@ -0,0 +1,89 @@ +package zall.page; + +import zall.ZalleryServlet; +import zall.bean.User; +import zall.util.ZalleryEmail; +import zall.util.UserMessage; +import zutil.db.DBConnection; +import zutil.log.LogUtil; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.*; +import java.io.IOException; +import java.sql.SQLException; +import java.util.Locale; +import java.util.PropertyResourceBundle; +import java.util.ResourceBundle; +import java.util.logging.Logger; + +import static zall.ZalleryConstant.LANG_BASENAME; + +@WebServlet("/register") +public class RegisterServlet extends ZalleryServlet { + private static Logger logger = LogUtil.getLogger(); + + private static final String JSP_FILE = "register.jsp"; + + 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_EMAIL = "email"; + private static final String INPUT_ID_PASSWORD = "password"; + private static final String INPUT_ID_PASSWORD_REPEATE = "password-re"; + + + public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, IOException { + include(JSP_FILE, request, response); + } + + + public void doPost(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws SQLException, IOException, ServletException { + UserMessage msgHandler = UserMessage.getUserMessage(request.getSession()); + ResourceBundle lang = PropertyResourceBundle.getBundle(LANG_BASENAME, Locale.getDefault()); + + /* + * Check inputs + */ + + String firstName = (String)request.getAttribute(INPUT_ID_FIRST_NAME); + String lastName = (String)request.getAttribute(INPUT_ID_LAST_NAME); + String email = (String)request.getAttribute(INPUT_ID_EMAIL); + String password = (String)request.getAttribute(INPUT_ID_PASSWORD); + String passwordRe = (String)request.getAttribute(INPUT_ID_PASSWORD_REPEATE); + + if (firstName == null) + msgHandler.add(UserMessage.MessageType.ERROR, lang.getString("error.first_name_missing")); + if (lastName == null) + msgHandler.add(UserMessage.MessageType.ERROR, lang.getString("error.last_name_missing")); + if (email == null) + msgHandler.add(UserMessage.MessageType.ERROR, lang.getString("error.email_missing")); + if (password == null) + msgHandler.add(UserMessage.MessageType.ERROR, lang.getString("error.password_missing")); + if (passwordRe == null) + msgHandler.add(UserMessage.MessageType.ERROR, lang.getString("error.password_missing")); + else if (passwordRe.equals(password)) + msgHandler.add(UserMessage.MessageType.ERROR, lang.getString("error.password_not_matching")); + + if(User.load(db, (String)request.getAttribute(INPUT_ID_EMAIL)) != null){ + msgHandler.add(UserMessage.MessageType.ERROR, lang.getString("error.email_exsists")); + return; + } + + /* + * Create new user + */ + + User user = new User(); + user.setName(firstName + " " + lastName); + user.setEmail(email); + user.setPassword(password); + user.save(db); + ZalleryEmail.sendVerificationEmail( user ); + request.getSession().setAttribute("user", user); + logger.info("Registered new user: "+user.getName()+"."); + msgHandler.add(UserMessage.MessageType.INFO, + lang.getString("info.account_created") + lang.getString("info.verification_email_sent")); + + include(JSP_FILE, request, response); + } +} diff --git a/src/zall/page/SlideshowServlet.java b/src/zall/page/SlideshowServlet.java new file mode 100755 index 0000000..8b2c68d --- /dev/null +++ b/src/zall/page/SlideshowServlet.java @@ -0,0 +1,35 @@ +package zall.page; + +import zall.ZalleryServlet; +import zall.bean.Image; +import zutil.db.DBConnection; +import zutil.log.LogUtil; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; +import java.util.logging.Logger; + +@WebServlet("/slideshow") +public class SlideshowServlet extends ZalleryServlet { + private static Logger logger = LogUtil.getLogger(); + + + public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, SQLException, IOException { + Image image = Image.load(db, Integer.parseInt(request.getParameter("id"))); + request.setAttribute("image", image); + List list = Image.loadFolder(db, image.getFolder()); + + request.setAttribute("image", image); + request.setAttribute("images", list); + + include("header.jsp", request, response); + include("slideshow.jsp", request, response); + include("footer.jsp", request, response); + } + +} diff --git a/src/zall/page/UserListServlet.java b/src/zall/page/UserListServlet.java new file mode 100755 index 0000000..e4d014b --- /dev/null +++ b/src/zall/page/UserListServlet.java @@ -0,0 +1,31 @@ +package zall.page; + +import zall.ZalleryServlet; +import zall.bean.User; +import zutil.db.DBConnection; +import zutil.log.LogUtil; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; +import java.util.logging.Logger; + +@WebServlet("/register") +public class UserListServlet extends ZalleryServlet { + private static Logger logger = LogUtil.getLogger(); + + + public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, SQLException, IOException { + List users = User.load(db); + request.setAttribute("users", users); + + include("header.jsp", request, response); + include("users.jsp", request, response); + include("footer.jsp", request, response); + + } +} diff --git a/src/zall/servlet/LoginServlet.java b/src/zall/servlet/LoginServlet.java deleted file mode 100755 index 8c179cf..0000000 --- a/src/zall/servlet/LoginServlet.java +++ /dev/null @@ -1,49 +0,0 @@ -package zall.servlet; - -import zall.bean.User; -import zall.manager.AuthenticationManager; -import zall.util.DbHttpServlet; -import zutil.db.DBConnection; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.annotation.WebServlet; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.sql.SQLException; - -import static zall.ZalleryConstant.SESSION_KEY_USER; - -/** - * - */ -@WebServlet(urlPatterns = "/login") -public class LoginServlet extends DbHttpServlet { - private static final String JSP_FILE = "login.jsp"; - - - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - getServletContext().getRequestDispatcher("/" + JSP_FILE).include(req, resp); - } - - protected void doPost(HttpServletRequest req, HttpServletResponse resp, DBConnection db) throws ServletException, IOException, SQLException { - User user = AuthenticationManager.authenticate(db, - req.getParameter("email"), - req.getParameter("password")); - - - // Successfull login - if (user != null) { - user.registerOnHost(req, resp, db, true ); - req.getSession().setAttribute(SESSION_KEY_USER, user); - - getServletContext().getRequestDispatcher("/").forward(req, resp); - } - // Failed login - else { - getServletContext().getRequestDispatcher("/" + JSP_FILE).include(req, resp); - } - } -} diff --git a/src/zall/servlet/RegisterServlet.java b/src/zall/servlet/RegisterServlet.java deleted file mode 100755 index 4d16c3d..0000000 --- a/src/zall/servlet/RegisterServlet.java +++ /dev/null @@ -1,93 +0,0 @@ -package zall.servlet; - -import zall.bean.User; -import zall.util.DbHttpServlet; -import zall.util.ZalleryEmail; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; -import zutil.db.DBConnection; -import zutil.log.LogUtil; - -import javax.servlet.ServletException; -import javax.servlet.annotation.WebServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.sql.SQLException; -import java.util.Locale; -import java.util.PropertyResourceBundle; -import java.util.ResourceBundle; -import java.util.logging.Logger; - -import static zall.ZalleryConstant.*; - -/** - * - */ -@WebServlet(urlPatterns = "/register") -public class RegisterServlet extends DbHttpServlet { - private static final Logger logger = LogUtil.getLogger(); - - private static final String JSP_FILE = "register.jsp"; - - 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_EMAIL = "email"; - private static final String INPUT_ID_PASSWORD = "password"; - private static final String INPUT_ID_PASSWORD_REPEATE = "password-re"; - - - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - getServletContext().getRequestDispatcher("/"+JSP_FILE).include(req, resp); - } - - protected void doGet(HttpServletRequest req, HttpServletResponse resp, DBConnection db) throws ServletException, IOException, SQLException { - UserMessage msgHandler = UserMessage.getUserMessage(req.getSession()); - ResourceBundle lang = PropertyResourceBundle.getBundle(LANG_BASENAME, Locale.getDefault()); - - /* - * Check inputs - */ - - String firstName = (String)req.getAttribute(INPUT_ID_FIRST_NAME); - String lastName = (String)req.getAttribute(INPUT_ID_LAST_NAME); - String email = (String)req.getAttribute(INPUT_ID_EMAIL); - String password = (String)req.getAttribute(INPUT_ID_PASSWORD); - String passwordRe = (String)req.getAttribute(INPUT_ID_PASSWORD_REPEATE); - - if (firstName == null) - msgHandler.add(MessageType.ERROR, lang.getString("error.first_name_missing")); - if (lastName == null) - msgHandler.add(MessageType.ERROR, lang.getString("error.last_name_missing")); - if (email == null) - msgHandler.add(MessageType.ERROR, lang.getString("error.email_missing")); - if (password == null) - msgHandler.add(MessageType.ERROR, lang.getString("error.password_missing")); - if (passwordRe == null) - msgHandler.add(MessageType.ERROR, lang.getString("error.password_missing")); - else if (passwordRe.equals(password)) - msgHandler.add(MessageType.ERROR, lang.getString("error.password_not_matching")); - - if(User.load(db, (String)req.getAttribute(INPUT_ID_EMAIL)) != null){ - msgHandler.add(MessageType.ERROR, lang.getString("error.email_exsists")); - return; - } - - /* - * Create new user - */ - - User user = new User(); - user.setName(firstName + " " + lastName); - user.setEmail(email); - user.setPassword(password); - user.save(db); - ZalleryEmail.sendVerificationEmail( user ); - req.getSession().setAttribute("user", user); - logger.info("Registered new user: "+user.getName()+"."); - msgHandler.add(MessageType.INFO, - lang.getString("info.account_created") + lang.getString("info.verification_email_sent")); - - getServletContext().getRequestDispatcher("/"+JSP_FILE).include(req, resp); - } -} diff --git a/src/zall/util/DbHttpServlet.java b/src/zall/util/DbHttpServlet.java deleted file mode 100755 index b4740ae..0000000 --- a/src/zall/util/DbHttpServlet.java +++ /dev/null @@ -1,69 +0,0 @@ -package zall.util; - -import zall.bean.Folder; -import zall.bean.Image; -import zall.bean.Media; -import zall.bean.User; -import zall.manager.AuthenticationManager; -import zall.util.msg.UserMessage; -import zall.util.msg.UserMessage.MessageType; -import zutil.db.DBConnection; -import zutil.log.LogUtil; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.*; -import java.io.File; -import java.io.IOException; -import java.sql.SQLException; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; - -public abstract class DbHttpServlet extends HttpServlet{ - private static Logger logger = LogUtil.getLogger(); - - - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - DBConnection db = null; - try{ - doGet(request, response, db = getDB()); - } catch (SQLException e) { - throw new IOException(e); - } finally{ - if(db != null) db.close(); - } - } - - protected void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) - throws ServletException, IOException, SQLException { } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - DBConnection db = null; - try{ - doPost(request, response, db = getDB()); - } catch (SQLException e) { - throw new IOException(e); - } finally{ - if(db != null) db.close(); - } - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response, DBConnection db) - throws ServletException, IOException, SQLException { } - - - public static DBConnection getDB() throws ServletException{ - try { - return new DBConnection("jdbc/mysql"); - } catch (Exception e) { - throw new ServletException(e); - } - } -} diff --git a/src/zall/util/msg/UserMessage.java b/src/zall/util/UserMessage.java similarity index 94% rename from src/zall/util/msg/UserMessage.java rename to src/zall/util/UserMessage.java index c0ab648..475d611 100644 --- a/src/zall/util/msg/UserMessage.java +++ b/src/zall/util/UserMessage.java @@ -1,147 +1,147 @@ -package zall.util.msg; - -import java.util.LinkedList; -import java.util.Queue; -import java.util.logging.Logger; - -import javax.servlet.http.HttpSession; - -import zutil.log.LogUtil; - -/** - * This class represents all the messages to a single user. - * The class is implemented as an Iterator. - * - * - * Example HTML: - * -<SCRIPT type="text/javascript"> - jQuery(document).ready(function(){ - jQuery(".message").click(function(){ - jQuery(this).animate({ - opacity: 0 - }, 300).animate({ - height: 0, - border: 0 - }, 300, function(){ - jQuery(this).css("display","none"); - }); - }); - }); -</SCRIPT> -<div class="menu"> - <div class="message" style="border: 2px solid #E6E600; padding: 0px; margin: 5px; background: #FFFF99 none repeat scroll 0%; font-size: 11px; color: black; border-radius: 7px;"> - <center><b>Warning:</b></center> - </div> - <div class="message" style="border: 2px solid #FF0000; padding: 0px; margin: 5px; background: #FFDDCC none repeat scroll 0%; font-size: 11px; color: black; border-radius: 7px;"> - <center><b>Error:</b></center> - </div> - <div class="message" style="border: 2px solid #039C00; padding: 0px; margin: 5px; background: #9BFB66 none repeat scroll 0%; font-size: 11px; color: black; border-radius: 7px;"> - <center><b>Info:</b></center> - </div> -</div> - * - * - * - * @author Ziver - */ -public class UserMessage{ - public static final Logger logger = LogUtil.getLogger(); - public static final String SESSION_USERMESSAGE_KEY = "AJAX_USER_MESSAGES"; - - /** - * Is the different types of messages - */ - public enum MessageType{ - ERROR, WARNING, INFO - } - /** - * This class represents a single message to a user - */ - protected class Message{ - MessageType type; - String msg; - } - /** is the queue that contains the messages **/ - private Queue msg_queue; - /** is the current message **/ - private Message current; - - - public UserMessage(){ - msg_queue = new LinkedList(); - } - - //******** Queue methods - - /** - * Adds a new message to the queue - * - * @param type is the type of the message - * @param msg is the message itself - */ - public void add(MessageType type, String msg){ - Message m = new Message(); - m.type = type; - m.msg = msg; - msg_queue.add( m ); - logger.finer("Queueing(Size: "+msg_queue.size()+") user message: "+type+"= \""+msg+"\""); - } - - /** - * @return if there is more messages in the queue - */ - public boolean hasNext(){ - return msg_queue.size() != 0; - } - - /** - * Polls a new message from the Queue - * - * @return if the poll was successful - */ - public boolean next(){ - boolean tmp = hasNext(); - current = msg_queue.poll(); - return tmp; - } - - public int size(){ - return msg_queue.size(); - } - - public void clear(){ - msg_queue.clear(); - } - - //******** Message Methods - - /** - * @return the type of the current message - */ - public MessageType getType(){ - return current.type; - } - - /** - * @return the message of the current one - */ - public String getMessage(){ - return current.msg; - } - - //******** Static methods - - public static UserMessage getUserMessage(HttpSession session){ - if( session.getAttribute(SESSION_USERMESSAGE_KEY) == null ){ - UserMessage msg = new UserMessage(); - msg.setSession( session ); - return msg; - } - return (UserMessage) session.getAttribute(SESSION_USERMESSAGE_KEY); - } - - public void setSession(HttpSession session) { - session.setAttribute(SESSION_USERMESSAGE_KEY, this); - } -} +package zall.util; + +import java.util.LinkedList; +import java.util.Queue; +import java.util.logging.Logger; + +import javax.servlet.http.HttpSession; + +import zutil.log.LogUtil; + +/** + * This class represents all the messages to a single user. + * The class is implemented as an Iterator. + * + * + * Example HTML: + * +<SCRIPT type="text/javascript"> + jQuery(document).ready(function(){ + jQuery(".message").click(function(){ + jQuery(this).animate({ + opacity: 0 + }, 300).animate({ + height: 0, + border: 0 + }, 300, function(){ + jQuery(this).css("display","none"); + }); + }); + }); +</SCRIPT> +<div class="menu"> + <div class="message" style="border: 2px solid #E6E600; padding: 0px; margin: 5px; background: #FFFF99 none repeat scroll 0%; font-size: 11px; color: black; border-radius: 7px;"> + <center><b>Warning:</b></center> + </div> + <div class="message" style="border: 2px solid #FF0000; padding: 0px; margin: 5px; background: #FFDDCC none repeat scroll 0%; font-size: 11px; color: black; border-radius: 7px;"> + <center><b>Error:</b></center> + </div> + <div class="message" style="border: 2px solid #039C00; padding: 0px; margin: 5px; background: #9BFB66 none repeat scroll 0%; font-size: 11px; color: black; border-radius: 7px;"> + <center><b>Info:</b></center> + </div> +</div> + * + * + * + * @author Ziver + */ +public class UserMessage{ + public static final Logger logger = LogUtil.getLogger(); + public static final String SESSION_USERMESSAGE_KEY = "AJAX_USER_MESSAGES"; + + /** + * Is the different types of messages + */ + public enum MessageType{ + ERROR, WARNING, INFO + } + /** + * This class represents a single message to a user + */ + protected class Message{ + MessageType type; + String msg; + } + /** is the queue that contains the messages **/ + private Queue msg_queue; + /** is the current message **/ + private Message current; + + + public UserMessage(){ + msg_queue = new LinkedList<>(); + } + + //******** Queue methods + + /** + * Adds a new message to the queue + * + * @param type is the type of the message + * @param msg is the message itself + */ + public void add(MessageType type, String msg){ + Message m = new Message(); + m.type = type; + m.msg = msg; + msg_queue.add( m ); + logger.finer("Queueing(Size: "+msg_queue.size()+") user message: "+type+"= \""+msg+"\""); + } + + /** + * @return if there is more messages in the queue + */ + public boolean hasNext(){ + return msg_queue.size() != 0; + } + + /** + * Polls a new message from the Queue + * + * @return if the poll was successful + */ + public boolean next(){ + boolean tmp = hasNext(); + current = msg_queue.poll(); + return tmp; + } + + public int size(){ + return msg_queue.size(); + } + + public void clear(){ + msg_queue.clear(); + } + + //******** Message Methods + + /** + * @return the type of the current message + */ + public MessageType getType(){ + return current.type; + } + + /** + * @return the message of the current one + */ + public String getMessage(){ + return current.msg; + } + + //******** Static methods + + public static UserMessage getUserMessage(HttpSession session){ + if( session.getAttribute(SESSION_USERMESSAGE_KEY) == null ){ + UserMessage msg = new UserMessage(); + msg.setSession( session ); + return msg; + } + return (UserMessage) session.getAttribute(SESSION_USERMESSAGE_KEY); + } + + public void setSession(HttpSession session) { + session.setAttribute(SESSION_USERMESSAGE_KEY, this); + } +} diff --git a/src/zall/util/msg/AjaxUserMessageServlet.java b/src/zall/util/msg/AjaxUserMessageServlet.java deleted file mode 100644 index 4dd3c6d..0000000 --- a/src/zall/util/msg/AjaxUserMessageServlet.java +++ /dev/null @@ -1,24 +0,0 @@ -package zall.util.msg; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * This class reads a get request and returns all messages - * to that user as JSON. - * - * @author Ziver - */ -public class AjaxUserMessageServlet extends HttpServlet{ - private static final long serialVersionUID = 1L; - - /** - * Ajax request - */ - public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException{ - - } - -}