diff --git a/src/java/com/library/controller/admin/user/LogaoutAllUser.java b/src/java/com/library/controller/admin/user/LogaoutAllUser.java index 5ae7d8b..fe0e95c 100644 --- a/src/java/com/library/controller/admin/user/LogaoutAllUser.java +++ b/src/java/com/library/controller/admin/user/LogaoutAllUser.java @@ -5,6 +5,7 @@ package com.library.controller.admin.user; import com.library.factory.ServiceFactory; +import com.library.service.TrackingUserService; import com.library.service.UserService; import com.library.util.SessionTracker; import java.io.IOException; @@ -32,8 +33,9 @@ public class LogaoutAllUser extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - + userService.logoutAllUser(); + TrackingUserService.clear(); HttpSession session = request.getSession(); session.setAttribute("logAll", "logout all users done!"); response.sendRedirect(request.getContextPath() + "/admin/user-manager"); diff --git a/src/java/com/library/controller/admin/user/LogoutUserController.java b/src/java/com/library/controller/admin/user/LogoutUserController.java index bc03b4c..c2cd0e3 100644 --- a/src/java/com/library/controller/admin/user/LogoutUserController.java +++ b/src/java/com/library/controller/admin/user/LogoutUserController.java @@ -30,6 +30,7 @@ public class LogoutUserController extends HttpServlet { UserDao userDao = new UserDaoImpl(); + private final TrackingUserService trackService = ServiceFactory.getTrackingUserService(); private final UserService userService = ServiceFactory.getUserService(); diff --git a/src/java/com/library/controller/admin/user/UserBorrowingRecordController.java b/src/java/com/library/controller/admin/user/UserBorrowingRecordController.java index b6b3113..ca9aef0 100644 --- a/src/java/com/library/controller/admin/user/UserBorrowingRecordController.java +++ b/src/java/com/library/controller/admin/user/UserBorrowingRecordController.java @@ -23,7 +23,7 @@ */ @WebServlet(name = "ManagerUserController", urlPatterns = {"/admin/user-borrowing-record"}) public class UserBorrowingRecordController extends HttpServlet { - + private final UserService userService = ServiceFactory.getUserService(); @Override diff --git a/src/java/com/library/controller/filter/AuthenticationLoginController.java b/src/java/com/library/controller/filter/AuthenticationLoginController.java index b073a2d..24ca43a 100644 --- a/src/java/com/library/controller/filter/AuthenticationLoginController.java +++ b/src/java/com/library/controller/filter/AuthenticationLoginController.java @@ -76,15 +76,14 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) String hashedPassword = userService.getHashedPassword(account); if (HashPassword.checkPassword(pass, hashedPassword)) { session.setAttribute("account", account); - session.setAttribute("user", user); - TrackingUserService.add(account); - activityService.ActivityUser(1, account); - userService.setOnlineUser(account); - int userID = userDao.findUserID(account); - trackService.updateData(session.getId(), userID); - SessionTracker.addSessionToServer(session.getId(), session); - + session.setAttribute("user", user); + SessionTracker.addSessionToServer(session.getId(), session); if (user.getRole().equals("user")) { + TrackingUserService.add(account); + activityService.ActivityUser(1, account); + userService.setOnlineUser(account); + int userID = userDao.findUserID(account); + trackService.updateData(session.getId(), userID); response.sendRedirect(request.getContextPath() + "/book/list"); return; } else { diff --git a/src/java/com/library/controller/filter/AutholizationUserController.java b/src/java/com/library/controller/filter/AutholizationUserController.java index a0799fd..ce902ec 100644 --- a/src/java/com/library/controller/filter/AutholizationUserController.java +++ b/src/java/com/library/controller/filter/AutholizationUserController.java @@ -44,7 +44,7 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo String[] publicPaths = { "/login", "/register", "/book/list", - "/resource/", "/images/", ".css", ".js", ".png", ".jpg" + "/resource/", "/images/", ".css", ".js", ".png", ".jpg", "/user/forgot-password" }; for (String p : publicPaths) { if (path.contains(p)) { diff --git a/src/java/com/library/controller/user/ForgotPassword.java b/src/java/com/library/controller/user/ForgotPassword.java index 860cb57..f9892ea 100644 --- a/src/java/com/library/controller/user/ForgotPassword.java +++ b/src/java/com/library/controller/user/ForgotPassword.java @@ -51,10 +51,10 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) Validator.requireNotEmpty(account); userService.isAccountExist(account); String tmp = RandomPassword.generatePassword(); - String subject = "Password Recovery - Library System"; + String title = "Password Recovery - Library System"; String message = "

Your New Pass : " + tmp + "

"; userService.updatePassword(account, HashPassword.hash(tmp)); - MailService.send(account, subject, message); + MailService.send(account, title, message); session.setAttribute("message", "we have sent your password via email"); response.sendRedirect(request.getContextPath() + "/user/forgot-password"); } catch (ValidationException e) { diff --git a/src/java/com/library/controller/user/RegisterController.java b/src/java/com/library/controller/user/RegisterController.java index 9135658..6d37100 100644 --- a/src/java/com/library/controller/user/RegisterController.java +++ b/src/java/com/library/controller/user/RegisterController.java @@ -2,7 +2,6 @@ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/JSP_Servlet/Servlet.java to edit this template */ - package com.library.controller.user; import java.io.IOException; @@ -14,61 +13,58 @@ import jakarta.servlet.http.HttpServletResponse; import com.library.dao.UserDao; import com.library.dao.UserDaoImpl; +import com.library.exception.AccountHasExistedException; +import com.library.exception.AccountNotExistException; +import com.library.exception.ValidationException; + +import com.library.factory.ServiceFactory; +import com.library.service.UserService; import com.library.util.HashPassword; +import com.library.util.Validator; import jakarta.servlet.http.HttpSession; + + /** * - * @author hieuchu + * @author hieuchu */ -@WebServlet(name="RegisterController", urlPatterns={"/user/register"}) +@WebServlet(name = "RegisterController", urlPatterns = {"/user/register"}) public class RegisterController extends HttpServlet { - UserDao userDao = new UserDaoImpl(); - + + private final UserService userService = ServiceFactory.getUserService(); + @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { + throws ServletException, IOException { HttpSession session = request.getSession(); String error = (String) session.getAttribute("error"); request.setAttribute("error", error); session.removeAttribute("error"); - request.getRequestDispatcher("/WEB-INF/views/user/register.jsp").forward(request, response); - } + request.getRequestDispatcher("/WEB-INF/views/user/register.jsp").forward(request, response); + } + @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { + throws ServletException, IOException { HttpSession session = request.getSession(); String userName = request.getParameter("username"); String pass = request.getParameter("password"); - String account = request.getParameter("account"); - if(userName.trim().isEmpty()){ - session.setAttribute("error", "Vui lòng nhập họ và tên!"); - response.sendRedirect(request.getContextPath() + "/user/register"); - return; - } - else if(pass.trim().isEmpty()){ - session.setAttribute("error", "Vui lòng nhập mật khẩu!"); - response.sendRedirect(request.getContextPath() + "/user/register"); - return; - } - else if(account.trim().isEmpty()){ - session.setAttribute("error", "Vui lòng nhập tên đăng nhập!"); + String account = request.getParameter("account"); + try { + Validator.validateUserInput(account, pass); + userService.hasAccountExisted(account); + String hashedPassword = HashPassword.hash(pass); + userService.addUser(userName, account, hashedPassword); + session.setAttribute("success", "Resgiter Done !!!"); + response.sendRedirect(request.getContextPath() + "/user/login"); + } catch (AccountHasExistedException s) { + session.setAttribute("error", "account has existed !!!"); response.sendRedirect(request.getContextPath() + "/user/register"); - return; - } - - if(userDao.checkUserExistence(account)){ - session.setAttribute("error", "Tên đăng nhập đã được sử dụng!"); + } catch (ValidationException s1) { + session.setAttribute("error", s1.getMessage()); response.sendRedirect(request.getContextPath() + "/user/register"); - return; - } - else{ - String hashedPassword = HashPassword.hash(pass); - userDao.addNewUser(userName, account, hashedPassword); - session.setAttribute("success", "Bạn đã đăng kí thành công!"); - response.sendRedirect(request.getContextPath() + "/user/login"); - return; + } } - } diff --git a/src/java/com/library/controller/user/SettingController.java b/src/java/com/library/controller/user/SettingController.java index d663f47..8027022 100644 --- a/src/java/com/library/controller/user/SettingController.java +++ b/src/java/com/library/controller/user/SettingController.java @@ -33,29 +33,19 @@ public class SettingController extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - - HttpSession session = request.getSession(false); -// if (session == null || session.getAttribute("account") == null) { -// response.sendRedirect(request.getContextPath() + "/user/login"); -// return; -// } + HttpSession session = request.getSession(false); String account = (String) session.getAttribute("account"); try { - UserProfileDTO dto = userService.getProfileUserByAccount(account); - + UserProfileDTO dto = userService.getProfileUserByAccount(account); String error = (String) session.getAttribute("changePasswordError"); - String success = (String) session.getAttribute("changePasswordSuccess"); - + String success = (String) session.getAttribute("changePasswordSuccess"); request.setAttribute("error", error); - request.setAttribute("success", success); - + request.setAttribute("success", success); session.removeAttribute("changePasswordError"); session.removeAttribute("changePasswordSuccess"); - session.setAttribute("user", dto); - + session.setAttribute("user", dto); request.getRequestDispatcher("/WEB-INF/views/user/setting.jsp").forward(request, response); return; - } catch (UserNotFoundException u) { response.sendError(404, "User not found"); } diff --git a/src/java/com/library/controller/user/UpdateProfileController.java b/src/java/com/library/controller/user/UpdateProfileController.java index dbe1138..dce8198 100644 --- a/src/java/com/library/controller/user/UpdateProfileController.java +++ b/src/java/com/library/controller/user/UpdateProfileController.java @@ -83,13 +83,13 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) boolean checkUpdate = userService.updateProfileUser(account, avatar, fullName, userID); if (checkUpdate) { - request.setAttribute("isUpdated", "✅ You have updated your profile successfully!"); + request.setAttribute("isUpdated", "You have updated your profile successfully!"); session.removeAttribute("user"); u.setNewProfile(fullName, account, avatar); session.setAttribute("user", u); activityService.ActivityUser(2, account); } else { - request.setAttribute("isUpdated", "❌ Failed to update your profile. Please try again!"); + request.setAttribute("isUpdated", " Failed to update your profile"); } request.getRequestDispatcher("/WEB-INF/views/user/setting.jsp").forward(request, response); } diff --git a/src/java/com/library/controller/user/UserDashBoardController.java b/src/java/com/library/controller/user/UserDashBoardController.java index b33b12a..656d774 100644 --- a/src/java/com/library/controller/user/UserDashBoardController.java +++ b/src/java/com/library/controller/user/UserDashBoardController.java @@ -25,18 +25,14 @@ public class UserDashBoardController extends HttpServlet { BookDao bookDao = new BookDaoImpl(); - BorrowingDao borrowDao = new BorrowingDaoImpl(); + BorrowingDao borrowDao = new BorrowingDaoImpl(); + @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int totalBook = bookDao.totalBook(); - HttpSession session = request.getSession(false); //get available session + HttpSession session = request.getSession(false); -// check if the session is null or if the user has not logged in yet - if(session == null || session.getAttribute("account") == null){ - response.sendRedirect(request.getContextPath() + "/user/login"); - return ; - } // take current user account String account = (String)session.getAttribute("account"); diff --git a/src/java/com/library/dao/BookDaoImpl.java b/src/java/com/library/dao/BookDaoImpl.java index 24d6db3..ef4ab7b 100644 --- a/src/java/com/library/dao/BookDaoImpl.java +++ b/src/java/com/library/dao/BookDaoImpl.java @@ -47,7 +47,7 @@ public List getAllBook(){ b.setCoverImage(rs.getString("cover_image")); Category category = new Category(); - category.setCategoryID(rs.getInt("category_ID")); + category.setCategoryID(rs.getInt("category_ID")); category.setType(BookType.convert(rs.getString("category_name"))); b.setCategory(category); list.add(b); diff --git a/src/java/com/library/dao/UserDao.java b/src/java/com/library/dao/UserDao.java index b211224..344bfdc 100644 --- a/src/java/com/library/dao/UserDao.java +++ b/src/java/com/library/dao/UserDao.java @@ -21,7 +21,7 @@ public interface UserDao { boolean checkUserExistence(String username); - void addNewUser(String username,String account,String password); + boolean addNewUser(String username,String account,String password); boolean checkAdminLogin(String username,String pass); diff --git a/src/java/com/library/dao/UserDaoImpl.java b/src/java/com/library/dao/UserDaoImpl.java index 44d4f12..605e427 100644 --- a/src/java/com/library/dao/UserDaoImpl.java +++ b/src/java/com/library/dao/UserDaoImpl.java @@ -70,7 +70,7 @@ public boolean checkUserExistence(String username) { } @Override - public void addNewUser(String username, String account, String password) { + public boolean addNewUser(String username, String account, String password) { String sql = "insert into users(fullname, account, password, role, avatar) values (?, ?, ?, ?, ?)"; String role = "user"; String avatar = "ava.jpg"; @@ -82,10 +82,12 @@ public void addNewUser(String username, String account, String password) { ps.setString(3, password); ps.setString(4, role); ps.setString(5, avatar); - ps.executeUpdate(); + int tmp = ps.executeUpdate(); + if(tmp > 0 ) return true ; } catch (SQLException e) { e.printStackTrace();; } + return false ; } @Override diff --git a/src/java/com/library/dao/UserSessionDao.java b/src/java/com/library/dao/UserSessionDao.java index 3f0b484..2ccdaf8 100644 --- a/src/java/com/library/dao/UserSessionDao.java +++ b/src/java/com/library/dao/UserSessionDao.java @@ -17,5 +17,5 @@ public interface UserSessionDao { void updateData(String sessionID , int userID); String getSessionID(int userID); public void deleteUserFromSessions(Connection conn, int userId); - + List getSessionIDUser(); } diff --git a/src/java/com/library/dao/UserSessionDaoImpl.java b/src/java/com/library/dao/UserSessionDaoImpl.java index 4be0149..a81acdd 100644 --- a/src/java/com/library/dao/UserSessionDaoImpl.java +++ b/src/java/com/library/dao/UserSessionDaoImpl.java @@ -80,7 +80,7 @@ public void updateData(String sessionID, int userID) { public void deleteUserFromSessions(Connection conn, int userId) { String sql = "DELETE FROM user_sessions WHERE user_id = ?"; try ( - PreparedStatement ps = conn.prepareStatement(sql)) { + PreparedStatement ps = conn.prepareStatement(sql)) { ps.setInt(1, userId); int tmp = ps.executeUpdate(); } catch (SQLException e) { @@ -89,7 +89,24 @@ public void deleteUserFromSessions(Connection conn, int userId) { } - - + @Override + public List getSessionIDUser() { + List listSession = new ArrayList<>(); + String sql = " SELECT user_sessions.session_id\n" + + " FROM users\n" + + " JOIN user_sessions ON user_sessions.user_id = users.user_id\n" + + " WHERE users.role = 'user' "; + + try ( + Connection conn = DBConnection.getInstance().getConnection(); PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery();) { + while (rs.next()) { + listSession.add(rs.getString("session_id")); + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return listSession; + } } diff --git a/src/java/com/library/exception/AccountHasExistedException.java b/src/java/com/library/exception/AccountHasExistedException.java new file mode 100644 index 0000000..9298519 --- /dev/null +++ b/src/java/com/library/exception/AccountHasExistedException.java @@ -0,0 +1,17 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package com.library.exception; + +/** + * + * @author hieuchu + */ +public class AccountHasExistedException extends LibraryException{ + + public AccountHasExistedException(String message) { + super(message); + } + +} diff --git a/src/java/com/library/factory/ServiceFactory.java b/src/java/com/library/factory/ServiceFactory.java index d3a8d8d..2c6b261 100644 --- a/src/java/com/library/factory/ServiceFactory.java +++ b/src/java/com/library/factory/ServiceFactory.java @@ -19,7 +19,7 @@ * @author hieuchu */ public final class ServiceFactory { - + private static ActivityService activityService; private static BookService bookService; private static BorrowingService borrowService; @@ -56,7 +56,7 @@ public static BookService getBookService() { return bookService; } - public static BorrowingService getBorrowService() { + public static BorrowingService getBorrowService() { if (borrowService == null) { borrowService = new BorrowingService( DaoFactory.getBorrowingDao(), @@ -98,6 +98,7 @@ public static ReturnService getReturnService() { return returnService; } + public static TrackingUserService getTrackingUserService() { if (trackService == null) { trackService = new TrackingUserService( diff --git a/src/java/com/library/service/ActivityService.java b/src/java/com/library/service/ActivityService.java index 87fc94e..0c02b70 100644 --- a/src/java/com/library/service/ActivityService.java +++ b/src/java/com/library/service/ActivityService.java @@ -64,10 +64,10 @@ public void BookActivityOfUser(String account, int actionID, int bookID) { String actionName = this.actionDao.getNameByID(actionID); String detail = ""; if (actionName.equalsIgnoreCase("borrow book")) { - detail = account + "has just borrowed " + getBookTitle(bookID); + detail = account + " has just borrowed " + getBookTitle(bookID); } if (actionName.equalsIgnoreCase("return book")) { - detail = account + "has just returned " + getBookTitle(bookID); + detail = account + " has just returned " + getBookTitle(bookID); } this.activityDao.insertData(userID, actionID, detail, LocalDateTime.now()); diff --git a/src/java/com/library/service/BookService.java b/src/java/com/library/service/BookService.java index e49fed2..bba328d 100644 --- a/src/java/com/library/service/BookService.java +++ b/src/java/com/library/service/BookService.java @@ -84,5 +84,5 @@ public boolean addBook(Book b) { public Map getNumberBorrowedBookByCategory() { return this.bookDao.countingBorrowedBookByCategory(); } - + } diff --git a/src/java/com/library/service/MailService.java b/src/java/com/library/service/MailService.java index 9f471db..1e5f953 100644 --- a/src/java/com/library/service/MailService.java +++ b/src/java/com/library/service/MailService.java @@ -24,15 +24,15 @@ public class MailService { private static final String USERNAME = "hieuminh9873@gmail.com"; private static final String PASSWORD = "qifs buxh anin erpa"; - public static void send(String to, String subject, String messageText) { - Properties props = new Properties(); - props.put("mail.smtp.auth", "true"); // true : notice to server need to authentication password and gmail - props.put("mail.smtp.starttls.enable", "true"); // true : use encytion TLS for sending email - props.put("mail.smtp.host", "smtp.gmail.com"); // server addderess - props.put("mail.smtp.port", "587"); // 587 entry to send email to starttls + public static void send(String account, String title, String messageText) { + Properties config = new Properties(); + config.put("mail.smtp.auth", "true"); // true : notice to server need to authentication password and gmail + config.put("mail.smtp.starttls.enable", "true"); // true : use encytion TLS for sending email + config.put("mail.smtp.host", "smtp.gmail.com"); // server addderess + config.put("mail.smtp.port", "587"); // 587 entry to send email to starttls - Session session = Session.getInstance(props, new Authenticator() { + Session session = Session.getInstance(config, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(USERNAME, PASSWORD); // return password and account to server gmail @@ -42,8 +42,8 @@ protected PasswordAuthentication getPasswordAuthentication() { try { MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(USERNAME, "Library System", "UTF-8")); - message.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); - message.setSubject(subject, "UTF-8"); + message.setRecipient(Message.RecipientType.TO, new InternetAddress(account)); + message.setSubject(title, "UTF-8"); message.setContent(messageText, "text/html; charset=UTF-8"); Transport.send(message); // send message to server diff --git a/src/java/com/library/service/TrackingUserService.java b/src/java/com/library/service/TrackingUserService.java index 96823f9..0a6e94f 100644 --- a/src/java/com/library/service/TrackingUserService.java +++ b/src/java/com/library/service/TrackingUserService.java @@ -36,6 +36,9 @@ public static void remove(String account){ public static int getSize(){ return list.size(); } + public static void clear(){ + list.clear(); + } /** * updateDate : insert data into user_session table after user login in diff --git a/src/java/com/library/service/UserService.java b/src/java/com/library/service/UserService.java index 9091662..873e80e 100644 --- a/src/java/com/library/service/UserService.java +++ b/src/java/com/library/service/UserService.java @@ -8,6 +8,7 @@ import com.library.dao.UserDao; import com.library.dao.UserSessionDao; import com.library.enums.UserStatus; +import com.library.exception.AccountHasExistedException; import com.library.exception.AccountNotExistException; import com.library.exception.UserNotFoundException; import com.library.model.dto.UserBorrowRecordDTO; @@ -64,14 +65,17 @@ public UserProfileDTO getProfileUserByAccount(String account) { public List showProfileUser() { List entityList = this.userDao.getALLUser(); List dtoList = new ArrayList<>(); - for (User u : entityList) { + for (User u : entityList) { UserProfileDTO dto = new UserProfileDTO(); - dto.setAccount(u.getAccount()); + if(u.getRole().equals("user")){ + dto.setAccount(u.getAccount()); dto.setFullName(u.getFullname()); dto.setUserID(u.getUserID()); dto.setAvatar(u.getAvatar()); dto.setStatus(u.getStatus()); dtoList.add(dto); + } + } return dtoList; } @@ -111,7 +115,6 @@ public String getHashedPassword(String account) { public void logoutAllUser() { Collection session = SessionTracker.getAllValue(); - for (HttpSession s : session) { s.invalidate(); } @@ -129,9 +132,19 @@ public boolean updatePassword(String account, String password) { } public void isAccountExist(String account) { - if (!this.userDao.checkUserExistence(account)) { + if (this.userDao.checkUserExistence(account) == false ) { throw new AccountNotExistException("The account : " + account + " not exist!!"); } } + + public void hasAccountExisted(String account) { + if (this.userDao.checkUserExistence(account)) { + throw new AccountHasExistedException("The account : " + account + " has existed!!"); + } + } + + public boolean addUser(String username, String account , String password){ + return this.userDao.addNewUser(username, account, password); + } } diff --git a/src/java/com/library/util/DBConnection.java b/src/java/com/library/util/DBConnection.java index 40a461c..3decf0b 100644 --- a/src/java/com/library/util/DBConnection.java +++ b/src/java/com/library/util/DBConnection.java @@ -18,7 +18,7 @@ public class DBConnection { private static final Logger logger = LoggerFactory.getLogger(DBConnection.class); - private static DBConnection instance; + private static DBConnection instance ; private static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=LibraryManagement;encrypt=true;trustServerCertificate=true"; private static final String USER = "sa"; diff --git a/src/java/com/library/util/SessionTracker.java b/src/java/com/library/util/SessionTracker.java index 2dcabd1..f5e9263 100644 --- a/src/java/com/library/util/SessionTracker.java +++ b/src/java/com/library/util/SessionTracker.java @@ -4,11 +4,16 @@ */ package com.library.util; +import com.library.dao.UserSessionDao; +import com.library.dao.UserSessionDaoImpl; +import com.library.factory.DaoFactory; import jakarta.servlet.http.HttpSession; import jakarta.servlet.http.HttpSessionEvent; import jakarta.servlet.http.HttpSessionListener; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -18,6 +23,7 @@ public class SessionTracker implements HttpSessionListener { private static final Map map = new HashMap<>(); + public static UserSessionDao dao = DaoFactory.getUserSessionDao(); @Override public void sessionCreated(HttpSessionEvent se) { @@ -32,13 +38,20 @@ public void sessionDestroyed(HttpSessionEvent se) { public static HttpSession getSessionOnServer(String sessionIDFromDB) { return map.get(sessionIDFromDB); } - + public static void addSessionToServer(String sessionIDFromDB, HttpSession se) { map.put(sessionIDFromDB, se); } - public static Collection getAllValue() { - return map.values(); + public static List getAllValue() { + List listSessionID = new ArrayList<>(); + List listSession = dao.getSessionIDUser(); + for(String s : listSession){ + if(s.equals(map.keySet())){ + listSessionID.add((HttpSession) map.values()); + } + } + return listSessionID; } public static boolean isEmpty() { diff --git a/src/java/com/library/util/TimeFormatter.java b/src/java/com/library/util/TimeFormatter.java index bcc94ee..76dd8fa 100644 --- a/src/java/com/library/util/TimeFormatter.java +++ b/src/java/com/library/util/TimeFormatter.java @@ -21,14 +21,14 @@ public static String timeAgo(LocalDateTime logTime) { Duration duration = Duration.between(logTime, LocalDateTime.now()); // 1h:00 -> 1h:05 => 5 long minutes = duration.toMinutes(); // convert 5 to 5 minutes if (minutes < 1) { - return timeFormatted = "vừa xong"; + return timeFormatted = "just now"; } if (minutes < 60) { - return timeFormatted = minutes + " phút trước"; + return timeFormatted = minutes + "minutes ago"; } long hours = duration.toHours(); // convert to hour unit if (hours < 24) { - return timeFormatted = hours + " giờ trước"; + return timeFormatted = hours + " hours ago"; } } return null; diff --git a/src/java/com/library/util/Validator.java b/src/java/com/library/util/Validator.java index 7aae270..e6dde2d 100644 --- a/src/java/com/library/util/Validator.java +++ b/src/java/com/library/util/Validator.java @@ -40,11 +40,10 @@ public static void validateSearchBook(String value) { */ public static void validateUserAccount(String account) { - String gmailRegex = "^[a-z0-9]([a-z0-9._%+-]{0,62}[a-z0-9])?@gmail\\.com$"; + String gmailRegex = "^[A-Za-z0-9]([A-Za-z0-9._%+-]{0,62}[A-Za-z0-9])?@gmail\\.com$"; if (!account.matches(gmailRegex)) { throw new ValidationException("Account must be email format!"); } - } public static void validateUserInput(String account, String password) { diff --git a/web/WEB-INF/views/user/setting.jsp b/web/WEB-INF/views/user/setting.jsp index 683064e..f6b0479 100644 --- a/web/WEB-INF/views/user/setting.jsp +++ b/web/WEB-INF/views/user/setting.jsp @@ -585,7 +585,7 @@ -
${isUpdated}
+
${isUpdated}
@@ -649,7 +649,7 @@

<%= request.getAttribute("error") %>

<% } %> <% if (request.getAttribute("success") != null) { %> -

<%= request.getAttribute("success") %>

+

<%= request.getAttribute("success") %>

<% } %>
@@ -673,56 +673,7 @@ Update Password -
- - -
-

- - Notification Preferences -

- -
-
-
-
Email Notifications
-
Receive email updates about your borrowed books
-
- -
- -
-
-
Due Date Reminders
-
Get reminded 3 days before book due date
-
- -
- -
-
-
New Book Alerts
-
Be notified when new books are added
-
- -
- - -
-
- - + diff --git a/web/resources/images/avatar/578272435_1783045355961033_8515654082100005620_n.jpg b/web/resources/images/avatar/578272435_1783045355961033_8515654082100005620_n.jpg new file mode 100644 index 0000000..0664c28 Binary files /dev/null and b/web/resources/images/avatar/578272435_1783045355961033_8515654082100005620_n.jpg differ