From 3750096e23cae3c86766c6fb9d31d2e53e8c59b0 Mon Sep 17 00:00:00 2001 From: Araozu Date: Sun, 24 Jun 2018 19:38:59 -0500 Subject: [PATCH] Funcionalidad lista al 100%: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -El método que revisa el acceso a un servlet se encuentra en el método checkPermission en controller.access.AccessControllerView -Ahora agregaré cosas al Front-end. --- .idea/workspace.xml | 932 ++++++++++++------ .../access/AccessControllerAdd.java | 23 +- .../access/AccessControllerDelete.java | 13 +- .../access/AccessControllerEdit.java | 64 +- .../access/AccessControllerIndex.java | 5 +- .../access/AccessControllerView.java | 81 +- .../resources/ResourcesControllerAdd.java | 4 +- .../resources/ResourcesControllerDelete.java | 1 + .../resources/ResourcesControllerIndex.java | 2 + src/controller/roles/RolesControllerAdd.java | 3 +- .../roles/RolesControllerDelete.java | 1 + .../roles/RolesControllerIndex.java | 2 + src/controller/roles/RolesControllerView.java | 2 +- .../services/ServicesControllerAdd.java | 103 ++ .../services/ServicesControllerDelete.java | 61 ++ .../services/ServicesControllerIndex.java | 63 ++ .../services/ServicesControllerView.java | 108 ++ src/controller/users/UsersControllerAdd.java | 14 +- .../users/UsersControllerDelete.java | 3 + .../users/UsersControllerIndex.java | 8 +- src/model/Access.java | 41 +- src/model/Service.java | 80 ++ src/model/User.java | 18 +- war/WEB-INF/View/Access/add.jsp | 119 ++- war/WEB-INF/View/Access/edit.jsp | 195 +++- war/WEB-INF/View/Access/index.jsp | 143 +-- war/WEB-INF/View/Access/view.jsp | 113 ++- war/WEB-INF/View/Resources/add.jsp | 105 +- war/WEB-INF/View/Resources/index.jsp | 128 ++- war/WEB-INF/View/Resources/view.jsp | 108 +- war/WEB-INF/View/Roles/add.jsp | 74 +- war/WEB-INF/View/Roles/index.jsp | 151 ++- war/WEB-INF/View/Roles/view.jsp | 127 +-- war/WEB-INF/View/Services/add.jsp | 120 +++ war/WEB-INF/View/Services/index.jsp | 160 +++ war/WEB-INF/View/Services/view.jsp | 145 +++ war/WEB-INF/View/Users/add.jsp | 105 +- war/WEB-INF/View/Users/index.jsp | 140 ++- war/WEB-INF/View/Users/view.jsp | 177 ++-- .../access/AccessControllerAdd.class | Bin 3758 -> 5801 bytes .../access/AccessControllerDelete.class | Bin 2104 -> 2326 bytes .../access/AccessControllerIndex.class | Bin 2281 -> 3436 bytes .../access/AccessControllerView.class | Bin 3159 -> 5378 bytes .../controller/roles/RolesControllerAdd.class | Bin 4348 -> 4288 bytes .../roles/RolesControllerDelete.class | Bin 2447 -> 2681 bytes .../roles/RolesControllerIndex.class | Bin 2535 -> 2601 bytes .../roles/RolesControllerView.class | Bin 4412 -> 4733 bytes .../controller/users/UsersControllerAdd.class | Bin 5595 -> 6282 bytes .../users/UsersControllerDelete.class | Bin 2078 -> 2340 bytes .../users/UsersControllerIndex.class | Bin 2692 -> 2763 bytes .../users/UsersControllerView.class | Bin 4982 -> 5089 bytes war/WEB-INF/classes/model/Access.class | Bin 11511 -> 12993 bytes war/WEB-INF/classes/model/Resource.class | Bin 261 -> 12219 bytes war/WEB-INF/classes/model/User.class | Bin 12132 -> 12005 bytes war/WEB-INF/web.xml | 50 +- war/css/Diseno.css | 2 +- war/css/Elements.css | 61 ++ war/index.html | 31 +- war/js/GlobalJs.js | 37 + 59 files changed, 2659 insertions(+), 1264 deletions(-) create mode 100644 src/controller/services/ServicesControllerAdd.java create mode 100644 src/controller/services/ServicesControllerDelete.java create mode 100644 src/controller/services/ServicesControllerIndex.java create mode 100644 src/controller/services/ServicesControllerView.java create mode 100644 src/model/Service.java create mode 100644 war/WEB-INF/View/Services/add.jsp create mode 100644 war/WEB-INF/View/Services/index.jsp create mode 100644 war/WEB-INF/View/Services/view.jsp create mode 100644 war/css/Elements.css create mode 100644 war/js/GlobalJs.js diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 3e7fe9b..6e4278b 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,23 +1,29 @@ - + - - - - - - - - - + + + + + + + + + + + - - - - + + + + + + + + @@ -25,17 +31,21 @@ - - - + + + + + + + + + - - @@ -50,9 +60,9 @@ - + @@ -68,43 +78,53 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -112,17 +132,38 @@ - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + @@ -132,60 +173,85 @@ responsive-img + e + + + + @@ -202,9 +268,9 @@ - @@ -231,6 +297,13 @@ + + + + + + + @@ -238,6 +311,20 @@ + + + + + + + + + + + + + + @@ -249,6 +336,18 @@ + + + + + + + + + + + + @@ -262,6 +361,22 @@ + + + + + + + + + + + + + + + + @@ -270,6 +385,14 @@ + + + + + + + + @@ -278,32 +401,14 @@ - - - @@ -368,12 +473,36 @@ + + + + @@ -383,11 +512,14 @@ + + + + + + + - - - - @@ -474,7 +606,16 @@ - + + + + + + + + + + 1528408256446 @@ -595,14 +736,56 @@ - - - + @@ -622,19 +805,19 @@ - + - + + - @@ -649,6 +832,7 @@ - - - file://$PROJECT_DIR$/src/model/User.java - 68 - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + - - + + + + + - - + + - + - - + + - - - - - - - - - - + + + - + - - - - - + + - + - - - - - - - - - + + - - + + + + + + + + + + + + + + + + + + + + - - - - - + + - + - - + + + + + + + + + - - - - - - - - - - - - - - - - + + - + + - + - - + + - - - + + + + + + + - - - - - - - - - + + - + + + - + - - - - - - - - - + + - - + - + - - + + + + + + + + + - - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - - + + + + + + + + + + + + + + + + + + + diff --git a/src/controller/access/AccessControllerAdd.java b/src/controller/access/AccessControllerAdd.java index 793a7cf..ed938d5 100644 --- a/src/controller/access/AccessControllerAdd.java +++ b/src/controller/access/AccessControllerAdd.java @@ -25,16 +25,7 @@ public class AccessControllerAdd extends HttpServlet { @SuppressWarnings("unchecked") public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PersistenceManager pm = PMF.get().getPersistenceManager(); - /*Role r = new Role("mesero"); - Resource re = new Resource("/comida"); - try { - pm.makePersistent(r); - pm.makePersistent(re); - } finally { - pm.close(); - }*/ - System.out.print(request.getParameter("info")); String query = "select from " + Role.class.getName(); String query2 = "select from " + Resource.class.getName(); @@ -85,7 +76,7 @@ public class AccessControllerAdd extends HttpServlet { Access a = new Access(idRole, idResource,true); //persist the entity pm.makePersistent(a); - + request.getSession().setAttribute("serverResponse","Access created successfully."); } } else if (request.getParameter("info").equals("check")){ @@ -96,8 +87,10 @@ public class AccessControllerAdd extends HttpServlet { pm.close(); try{ - if (redirect) + if (redirect){ + request.setAttribute("serverResponse",""); response.sendRedirect("/access"); + } } //Al redirigr al jsp para crear, se usa RequestDispatcher, y este entra en conflicto con sendRedirect. catch (IllegalStateException e){ @@ -113,7 +106,6 @@ public class AccessControllerAdd extends HttpServlet { @SuppressWarnings("unchecked") private boolean accessExist(String role, String resource){ - System.out.println("\nCheking..."); PersistenceManager pm = PMF.get().getPersistenceManager(); List accessList = (List) pm.newQuery("select from " + Access.class.getName()).execute(); @@ -122,17 +114,14 @@ public class AccessControllerAdd extends HttpServlet { String roleKey = RolesControllerView.getRole(role).getKey(); String resourceKey = ResourcesControllerView.getResource(resource).getKey(); for (Access access: accessList){ - if (access.getIdRole().equals(roleKey)){ - if (access.getIdResource().equals(resourceKey)){ - System.out.println("Hey! That Access already Exists!! v:<"); + if (access.getRoleKey().equals(roleKey)){ + if (access.getResourceKey().equals(resourceKey)){ return true; } } } - System.out.println("nope :p"); return false; } catch (IllegalArgumentException e){ - System.out.println("A parameter is illegal... Maybe the AJAX call is incomplete?"); return true; } diff --git a/src/controller/access/AccessControllerDelete.java b/src/controller/access/AccessControllerDelete.java index 788ea01..a089920 100644 --- a/src/controller/access/AccessControllerDelete.java +++ b/src/controller/access/AccessControllerDelete.java @@ -19,15 +19,20 @@ public class AccessControllerDelete extends HttpServlet { PersistenceManager pm = PMF.get().getPersistenceManager(); // create the new account try{ - Key k = KeyFactory.createKey(Access.class.getSimpleName(), new Long(request.getParameter("accessId")).longValue()); - Access r = pm.getObjectById(Access.class, k); - pm.deletePersistent(r); - response.sendRedirect("/access"); + Key k = KeyFactory.createKey(Access.class.getSimpleName(), new Long(request.getParameter("accessId"))); + Access r = pm.getObjectById(Access.class, k); + + pm.deletePersistent(r); + + request.getSession().setAttribute("serverResponse","Access deleted successfully."); + response.sendRedirect("/access"); } catch(javax.jdo.JDOObjectNotFoundException nf) { response.sendRedirect("/access"); } } + public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } + } \ No newline at end of file diff --git a/src/controller/access/AccessControllerEdit.java b/src/controller/access/AccessControllerEdit.java index 91ca5b6..3d7ad36 100644 --- a/src/controller/access/AccessControllerEdit.java +++ b/src/controller/access/AccessControllerEdit.java @@ -3,6 +3,7 @@ package controller.access; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.KeyFactory; import controller.PMF; +import controller.users.UsersControllerView; import model.Access; import model.Resource; import model.Role; @@ -15,51 +16,78 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; + @SuppressWarnings("serial") public class AccessControllerEdit extends HttpServlet { + + @SuppressWarnings("unchecked") public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // create the persistence manager instance PersistenceManager pm = PMF.get().getPersistenceManager(); try{ - System.out.print(request.getParameter("info")); + Key k = KeyFactory.createKey(Access.class.getSimpleName(), new Long(request.getParameter("id"))); + Access a = pm.getObjectById(Access.class, k); + request.setAttribute("access", a); + String query = "select from " + Role.class.getName(); String query2 = "select from " + Resource.class.getName(); + List roles = (List)pm.newQuery(query).execute(); List resources = (List)pm.newQuery(query2).execute(); + request.setAttribute("roles", roles); request.setAttribute("resources", resources); - RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/View/Access/edit.jsp"); - dispatcher.forward(request, response); try{ if(request.getParameter("info").equals("editar")){ - String idRole=request.getParameter("rolesl"); - String idResource=request.getParameter("resourcesl"); - if(idRole == null || idRole.equals("")|| idResource == null || idResource.equals("")){System.out.print("nombre vacio");} - else{ - if(!a.getIdRole().equals(idRole)){ - a.setIdRole(idRole); - } + String idRole = request.getParameter("rolesl"); + String idResource = request.getParameter("resourcesl"); - if(!a.getIdResource().equals(idResource)){ - a.setIdResource(idResource); - } + if(idRole == null || idRole.equals("")|| idResource == null || idResource.equals("")){ + + System.out.print("nombre vacio"); } - } + else{ + + if(!a.getRoleKey().equals(idRole)){ + a.setRoleKey(idRole); + } + + if(!a.getResourceKey().equals(idResource)){ + a.setResourceKey(idResource); + } + + request.getSession().setAttribute("serverResponse","Access updated successfully."); + + response.sendRedirect("/access"); + + } + } else if(request.getParameter("info").equals("redirect")){ + + RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/View/Access/edit.jsp"); + request.setAttribute("User",UsersControllerView.getUser(request.getSession().getAttribute("userID").toString())); + dispatcher.forward(request, response); + } + }catch (java.lang.NullPointerException np){ - + System.err.println("AccessControllerEdit Exception -> NPE:"); + np.printStackTrace(); } - }catch(javax.jdo.JDOObjectNotFoundException nf) { - response.sendRedirect("/index.html"); - } + } catch(javax.jdo.JDOObjectNotFoundException nf) { + response.sendRedirect("/index.html"); + } catch (NumberFormatException e){ + response.sendRedirect("/users"); + } } + public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } + } \ No newline at end of file diff --git a/src/controller/access/AccessControllerIndex.java b/src/controller/access/AccessControllerIndex.java index 6ee3cb7..36a4313 100644 --- a/src/controller/access/AccessControllerIndex.java +++ b/src/controller/access/AccessControllerIndex.java @@ -42,12 +42,15 @@ public class AccessControllerIndex extends HttpServlet { // pass the list to the jsp request.setAttribute("accesses", accesses); + request.setAttribute("serverResponse",sesion.getAttribute("serverResponse")); + sesion.setAttribute("serverResponse","!"); + // forward the request to the jsp RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/View/Access/index.jsp"); dispatcher.forward(request, response); } - //Si no la encuentra, redirige a la pagina inicial. + //Si no la encuentra, redirige a la pagina inicial para que se cree la sesion. catch (Exception e){ e.printStackTrace(); response.getWriter().println(""); diff --git a/src/controller/access/AccessControllerView.java b/src/controller/access/AccessControllerView.java index c1817b9..982b83b 100644 --- a/src/controller/access/AccessControllerView.java +++ b/src/controller/access/AccessControllerView.java @@ -3,9 +3,13 @@ package controller.access; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.KeyFactory; import controller.PMF; +import controller.resources.ResourcesControllerView; +import controller.roles.RolesControllerView; +import controller.users.UsersControllerView; import model.Access; import model.Resource; import model.Role; +import model.User; import javax.jdo.PersistenceManager; import javax.servlet.RequestDispatcher; @@ -14,6 +18,7 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.List; @SuppressWarnings("serial") public class AccessControllerView extends HttpServlet { @@ -21,39 +26,91 @@ public class AccessControllerView extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // create the persistence manager instance PersistenceManager pm = PMF.get().getPersistenceManager(); - try{ - System.out.print(request.getParameter("info")); + try{ Key k = KeyFactory.createKey(Access.class.getSimpleName(), new Long(request.getParameter("id"))); Access a = pm.getObjectById(Access.class, k); request.setAttribute("access", a); - Key krol = KeyFactory.createKey(Role.class.getSimpleName(), a.getIdRole()); - Role rol = pm.getObjectById(Role.class, krol); + Role rol = RolesControllerView.getRole(a.getRoleKey()); String nrol = rol.getName(); - Key kres = KeyFactory.createKey(Resource.class.getSimpleName(), a.getIdResource()); - Resource res = pm.getObjectById(Resource.class, kres); + Resource res = ResourcesControllerView.getResource(a.getResourceKey()); String nres = res.getUrl(); - System.out.print(nres); - - request.setAttribute("role", nrol); - request.setAttribute("resource", nres); + request.setAttribute("User",UsersControllerView.getUser(request.getSession().getAttribute("userID").toString())); RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/View/Access/view.jsp"); dispatcher.forward(request, response); }catch(javax.jdo.JDOObjectNotFoundException nf) { - response.sendRedirect("/access"); - } + System.err.println("JDOObjectNotFound -> AccessControllerView"); + nf.printStackTrace(); + request.getSession().setAttribute("serverResponse","Error trying to view the Access."); + response.sendRedirect("/access"); + + } catch (NullPointerException e){ + System.err.println("NPE -> Trying to access a servlet without logging in."); + response.sendRedirect("/users"); + } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } + @SuppressWarnings("unchecked") + private static List getAllAccess(){ + PersistenceManager pm = PMF.get().getPersistenceManager(); + List accessList = (List) pm.newQuery("select from " + Access.class.getName()).execute(); + pm.close(); + return accessList; + } + + /** + * Metodo estatico checkPermission. + * + * Al llamarlo, revisa si un usuario tiene acceso a una URI, devuelve true si es cierto, false si no. + * Se debe colocar como primer condicional del Servlet: + * + * public doGet/doPost ()~~~~{ + * if (checkPermission(userID,uri){ + * //El usuario tiene permiso, realizar las acciones necesarias + * } else { + * //El usuario no tiene permiso, mostrar mensaje de error. + * } + * } + * + * Los usuarion con rol admin tienen acceso completo por defecto. + * + * @param userID El id del usuario que ha iniciado sesion. Ver UsersControllerAdd + * @param uri El URI al que se intenta acceder. request.getRequestURI() + * + * */ + public static boolean checkPermission(String userID, String uri){ + + User user = (User) UsersControllerView.getUser(userID); + String userRoleName = user.getRoleName(); + String userRoleKey = user.getRoleKey(); + if (userRoleKey == null) + userRoleKey = ""; + + for (Access access: getAllAccess()){ + if (userRoleName.equals("admin")){ + return true; + } else if (access.getRoleKey().equals(userRoleKey)){ + System.out.println("Encontrado USuario con Rol coincidente"); + if (access.getResourceName().equals(uri)){ + System.out.println("El USuario tiene acceso a esta URI"); + return true; + } + } + } + + return false; + } + } \ No newline at end of file diff --git a/src/controller/resources/ResourcesControllerAdd.java b/src/controller/resources/ResourcesControllerAdd.java index 8d7db76..ed39a7d 100644 --- a/src/controller/resources/ResourcesControllerAdd.java +++ b/src/controller/resources/ResourcesControllerAdd.java @@ -35,7 +35,7 @@ public class ResourcesControllerAdd extends HttpServlet { Boolean status = Boolean.parseBoolean(request.getParameter("status")); createRole(url,status,pm); - + request.getSession().setAttribute("serverResponse","Resource created successfully."); break; case "redirect": @@ -53,6 +53,8 @@ public class ResourcesControllerAdd extends HttpServlet { resourc.setUrl(request.getParameter("url")); resourc.setStatus(Boolean.parseBoolean(request.getParameter("status"))); + + request.getSession().setAttribute("serverResponse","Resource updated successfully."); break; } diff --git a/src/controller/resources/ResourcesControllerDelete.java b/src/controller/resources/ResourcesControllerDelete.java index 74750c1..3462e8c 100644 --- a/src/controller/resources/ResourcesControllerDelete.java +++ b/src/controller/resources/ResourcesControllerDelete.java @@ -25,6 +25,7 @@ public class ResourcesControllerDelete extends HttpServlet { Key key = KeyFactory.stringToKey(request.getParameter("key")); try{ pm.deletePersistent(pm.getObjectById(Resource.class, key)); + request.getSession().setAttribute("serverResponse","Resource deleted successfully."); } catch (JDOObjectNotFoundException e){ System.err.println("Exception catched -> " + e.getMessage()); } diff --git a/src/controller/resources/ResourcesControllerIndex.java b/src/controller/resources/ResourcesControllerIndex.java index 57ed8a9..945f76e 100644 --- a/src/controller/resources/ResourcesControllerIndex.java +++ b/src/controller/resources/ResourcesControllerIndex.java @@ -27,6 +27,8 @@ public class ResourcesControllerIndex extends HttpServlet { request.setAttribute("User",user); request.setAttribute("ResourceList",ResourcesControllerView.getAllResources()); + request.setAttribute("serverResponse",sesion.getAttribute("serverResponse")); + sesion.setAttribute("serverResponse","!"); RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/View/Resources/index.jsp"); dispatcher.forward(request,response); diff --git a/src/controller/roles/RolesControllerAdd.java b/src/controller/roles/RolesControllerAdd.java index 6a48ba6..91f77b5 100644 --- a/src/controller/roles/RolesControllerAdd.java +++ b/src/controller/roles/RolesControllerAdd.java @@ -47,6 +47,7 @@ public class RolesControllerAdd extends HttpServlet { Boolean status = Boolean.parseBoolean(request.getParameter("roleStatus")); createRole(name,status,pm); + request.getSession().setAttribute("serverResponse","Role created successfully."); break; @@ -66,7 +67,7 @@ public class RolesControllerAdd extends HttpServlet { role1.setName(request.getParameter("roleName")); role1.setStatus(Boolean.parseBoolean(request.getParameter("roleStatus"))); //role1.setImgUrl(userImg); - + request.getSession().setAttribute("serverResponse","Role updated successfully."); break; diff --git a/src/controller/roles/RolesControllerDelete.java b/src/controller/roles/RolesControllerDelete.java index 395c84a..0257e85 100644 --- a/src/controller/roles/RolesControllerDelete.java +++ b/src/controller/roles/RolesControllerDelete.java @@ -22,6 +22,7 @@ public class RolesControllerDelete extends HttpServlet { Key k = KeyFactory.stringToKey(request.getParameter("key")); try{ pm.deletePersistent(pm.getObjectById(Role.class, k)); + request.getSession().setAttribute("serverResponse","Role deleted successfully."); } catch (JDOObjectNotFoundException e){ System.err.println("Exception catched -> " + e.getMessage()); } diff --git a/src/controller/roles/RolesControllerIndex.java b/src/controller/roles/RolesControllerIndex.java index d4d17cf..c3f0737 100644 --- a/src/controller/roles/RolesControllerIndex.java +++ b/src/controller/roles/RolesControllerIndex.java @@ -26,6 +26,8 @@ public class RolesControllerIndex extends HttpServlet { request.setAttribute("User",user); request.setAttribute("RoleList",RolesControllerView.getAllRoles()); + request.setAttribute("serverResponse",sesion.getAttribute("serverResponse")); + sesion.setAttribute("serverResponse","!"); RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/View/Roles/index.jsp"); dispatcher.forward(request,response); diff --git a/src/controller/roles/RolesControllerView.java b/src/controller/roles/RolesControllerView.java index 384145e..403e891 100644 --- a/src/controller/roles/RolesControllerView.java +++ b/src/controller/roles/RolesControllerView.java @@ -25,7 +25,7 @@ import java.util.List; * public static getAllRoles() * Devuelve un List con todos los roles que existen. * - * public static getRole(String key) + * public static getRoleKey(String key) * Devuelve un Rol dada una key. * La key se obtiene usando el metodo getKey() de un objeto Role * diff --git a/src/controller/services/ServicesControllerAdd.java b/src/controller/services/ServicesControllerAdd.java new file mode 100644 index 0000000..f5cf63b --- /dev/null +++ b/src/controller/services/ServicesControllerAdd.java @@ -0,0 +1,103 @@ +package controller.services; + +import java.io.IOException; +import java.util.List; + +import javax.jdo.PersistenceManager; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + + +import com.google.appengine.api.datastore.Key; +import com.google.appengine.api.datastore.KeyFactory; +import controller.PMF; +import controller.access.AccessControllerView; +import controller.roles.RolesControllerView; +import controller.users.UsersControllerView; +import model.Access; +import model.Service; + +@SuppressWarnings("serial") +public class ServicesControllerAdd extends HttpServlet { + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ + + try{ + + if (AccessControllerView.checkPermission(request.getSession().getAttribute("userID").toString(),request.getRequestURI())){ + PersistenceManager pm = PMF.get().getPersistenceManager(); + + System.out.println("Request URI Add->" + request.getRequestURI()); + + String action = request.getParameter("action"); + + if (action == null) + action = ""; + + if (action.equals("create")){ + + String name = request.getParameter("Name"); + Double price = Double.parseDouble(request.getParameter("Price")); + String description = request.getParameter("Description"); + String userCreatorKey = request.getParameter("userId"); + + Service service = new Service (name, price, description,userCreatorKey); + + request.getSession().setAttribute("serverResponse","Service created successfully."); + + pm.makePersistent(service); + + + } else if (action.equals("update")){ + + Key k = KeyFactory.stringToKey(request.getParameter("key")); + + Service service = pm.getObjectById(Service.class,k); + + service.setName(request.getParameter("Name")); + service.setPrice(Double.parseDouble(request.getParameter("Price"))); + service.setDescription(request.getParameter("Description")); + + pm.close(); + + request.getSession().setAttribute("serverResponse","Service updated successfully."); + + } else if (action.equals("redirect")){ + + HttpSession sesion= request.getSession(); + RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/View/Services/add.jsp"); + request.setAttribute("User",UsersControllerView.getUser(sesion.getAttribute("userID").toString())); + dispatcher.forward(request, response); + + } + + pm.close(); + try{ + response.sendRedirect("/services"); + } + //Al redirigr al jsp para crear, se usa RequestDispatcher, y este entra en conflicto con sendRedirect. + catch (IllegalStateException e){ + System.err.println("IllegalStateException: There was a double redirect."); + } + + } else { + + request.getSession().setAttribute("serverResponse","You do not have the rights to access."); + response.sendRedirect("/users"); + + } + + } catch (NullPointerException e){ + response.sendRedirect("/users"); + } + + + } + + public void doPost (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ + doGet(request, response); + } +} diff --git a/src/controller/services/ServicesControllerDelete.java b/src/controller/services/ServicesControllerDelete.java new file mode 100644 index 0000000..27c1375 --- /dev/null +++ b/src/controller/services/ServicesControllerDelete.java @@ -0,0 +1,61 @@ +package controller.services; + +import com.google.appengine.api.datastore.Key; +import com.google.appengine.api.datastore.KeyFactory; +import controller.PMF; +import controller.access.AccessControllerView; +import model.Service; + +import javax.jdo.JDOObjectNotFoundException; +import javax.jdo.PersistenceManager; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +@SuppressWarnings("serial") +public class ServicesControllerDelete extends HttpServlet { + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + + try{ + + if (AccessControllerView.checkPermission(request.getSession().getAttribute("userID").toString(),request.getRequestURI())){ + + PersistenceManager pm = PMF.get().getPersistenceManager(); + + String serviceKey = request.getParameter("serviceKey"); + + try{ + Key k = KeyFactory.stringToKey(serviceKey); + Service service = pm.getObjectById(Service.class, k); + + pm.deletePersistent(service); + + request.getSession().setAttribute("serverResponse","Service deleted successfully."); + } catch (JDOObjectNotFoundException e){ + System.err.println("Exception catched -> " + e.getMessage()); + } + + pm.close(); + + response.sendRedirect("/services"); + + } else { + request.getSession().setAttribute("serverResponse","You do not have the rights to access."); + response.sendRedirect("/users"); + } + + + } catch (NullPointerException e){ + response.sendRedirect("/users"); + } + + + } + + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{ + doGet(request, response); + } + +} \ No newline at end of file diff --git a/src/controller/services/ServicesControllerIndex.java b/src/controller/services/ServicesControllerIndex.java new file mode 100644 index 0000000..505dbaf --- /dev/null +++ b/src/controller/services/ServicesControllerIndex.java @@ -0,0 +1,63 @@ +package controller.services; + +import controller.access.AccessControllerView; +import controller.users.UsersControllerView; +import model.User; + +import javax.servlet.RequestDispatcher; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +import static controller.services.ServicesControllerView.getAllServices; + +public class ServicesControllerIndex extends HttpServlet { + + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + + try{ + + if (AccessControllerView.checkPermission(request.getSession().getAttribute("userID").toString(),request.getRequestURI())){ + + //Se usa para revisar si hay una sesion activa + HttpSession sesion= request.getSession(); + + //Intenta hallar una sesion activa + try{ + User user = UsersControllerView.getUser(sesion.getAttribute("userID").toString()); + if (user == null) throw new NullPointerException("UsersControllerIndex: El usuario recibido es nulo."); + + request.setAttribute("User",user); + request.setAttribute("ServicesList",getAllServices()); + request.setAttribute("serverResponse",sesion.getAttribute("serverResponse")); + sesion.setAttribute("serverResponse","!"); + RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/View/Services/index.jsp"); + dispatcher.forward(request,response); + + } + //Si no la encuentra, redirige a la pagina inicial. + catch (Exception e){ + System.err.println("UserControllerIndex: Error catched. " + e.getMessage()); + response.getWriter().println(""); + } + + } else { + request.getSession().setAttribute("serverResponse","You do not have the rights to access."); + response.sendRedirect("/users"); + } + + } catch (NullPointerException e){ + response.sendRedirect("/users"); + } + + + } + + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + doPost(req, resp); + } + + +} diff --git a/src/controller/services/ServicesControllerView.java b/src/controller/services/ServicesControllerView.java new file mode 100644 index 0000000..26f389a --- /dev/null +++ b/src/controller/services/ServicesControllerView.java @@ -0,0 +1,108 @@ +package controller.services; + +import com.google.appengine.api.datastore.Key; +import com.google.appengine.api.datastore.KeyFactory; +import controller.PMF; +import controller.access.AccessControllerView; +import controller.users.UsersControllerView; +import model.Service; + +import javax.jdo.JDOObjectNotFoundException; +import javax.jdo.PersistenceManager; +import javax.servlet.RequestDispatcher; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +@SuppressWarnings("serial") +public class ServicesControllerView extends HttpServlet { + + @SuppressWarnings("unchecked") + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + + try{ + + if (AccessControllerView.checkPermission(request.getSession().getAttribute("userID").toString(),request.getRequestURI())){ + + String action = request.getParameter("action"); + + if (action == null) + action = ""; + + PersistenceManager pm = PMF.get().getPersistenceManager(); + + if (action.equals("editRedirect")) { + RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/View/Services/view.jsp"); + + request.setAttribute("User",UsersControllerView.getUser(request.getSession().getAttribute("userID").toString())); + request.setAttribute("Service",getService(request.getParameter("serviceKey"))); + + request.setAttribute("editAllowed",true); + request.setAttribute("action","Edit"); + + try{ + dispatcher.forward(request,response); + } catch (javax.servlet.ServletException e){ + e.printStackTrace(); + } + + } + else if (action.equals("viewRedirect")) { + RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/View/Services/view.jsp"); + + request.setAttribute("User",UsersControllerView.getUser(request.getSession().getAttribute("userID").toString())); + request.setAttribute("Service",getService(request.getParameter("serviceKey"))); + + request.setAttribute("editAllowed",false); + request.setAttribute("action","View"); + + try{ + dispatcher.forward(request,response); + } catch (javax.servlet.ServletException e){ + e.printStackTrace(); + } + + } + //Si no se encontró acción, regresa al inicio + else { + response.getWriter().println(""); + } + + pm.close(); + + } else { + request.getSession().setAttribute("serverResponse","You do not have the rights to access."); + response.sendRedirect("/users"); + } + + } catch (NullPointerException e){ + response.sendRedirect("/users"); + } + + } + + public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { + doGet(req, resp); + } + + @SuppressWarnings("unchecked") + static List getAllServices(){ + PersistenceManager pm = controller.PMF.get().getPersistenceManager(); + List services = (List) pm.newQuery("select from " + Service.class.getName()).execute(); + pm.close(); + return services; + } + + private static Service getService(String key){ + PersistenceManager pm = PMF.get().getPersistenceManager(); + + Key k = KeyFactory.stringToKey(key); + Service service = pm.getObjectById(Service.class,k); + + pm.close(); + return service; + } + +} \ No newline at end of file diff --git a/src/controller/users/UsersControllerAdd.java b/src/controller/users/UsersControllerAdd.java index 224be82..f85f676 100644 --- a/src/controller/users/UsersControllerAdd.java +++ b/src/controller/users/UsersControllerAdd.java @@ -1,9 +1,7 @@ package controller.users; -import controller.resources.ResourcesControllerView; import controller.roles.RolesControllerAdd; import controller.roles.RolesControllerView; -import model.Resource; import model.Role; import model.User; @@ -28,6 +26,9 @@ public class UsersControllerAdd extends HttpServlet { //Accion a realizar String action = request.getParameter("action"); + //Respuesta del servidor + String serverResponse = "!"; + if (action == null) action = ""; @@ -71,6 +72,8 @@ public class UsersControllerAdd extends HttpServlet { //Si no existe la sesion, la crea usando el ID del usuario if (!sesionExist(misesion)) { + misesion.invalidate(); + misesion = request.getSession(true); misesion.setAttribute("userID", userID); @@ -78,6 +81,8 @@ public class UsersControllerAdd extends HttpServlet { misesion.setMaxInactiveInterval(3600); } + serverResponse = "You are logged-in"; + break; //Si lo que se quiere es redirigir al Form para crear usuario @@ -92,6 +97,7 @@ public class UsersControllerAdd extends HttpServlet { //Si lo que se quiere es Crear (proviene del formulario) case "create": createUser(userID, userEmail, userName, userImg, userRole, pm); + serverResponse = "User created successfully."; break; //Si lo que se quiere es actualizar un Usuario @@ -102,14 +108,16 @@ public class UsersControllerAdd extends HttpServlet { user.setName(userName); user.setEmail(userEmail); user.setImgUrl(userImg); - user.setRole(userRole); + user.setRoleKey(userRole); + serverResponse = "User Updated successfully."; break; } pm.close(); try{ + request.getSession().setAttribute("serverResponse",serverResponse); response.sendRedirect("/users"); } //Al redirigr al jsp para crear, se usa RequestDispatcher, y este entra en conflicto con sendRedirect. diff --git a/src/controller/users/UsersControllerDelete.java b/src/controller/users/UsersControllerDelete.java index d7ba61b..abf0816 100644 --- a/src/controller/users/UsersControllerDelete.java +++ b/src/controller/users/UsersControllerDelete.java @@ -20,10 +20,13 @@ public class UsersControllerDelete extends HttpServlet { try{ pm.deletePersistent(pm.getObjectById(User.class, userID)); + request.getSession().setAttribute("serverResponse","User deleted successfully."); } catch (JDOObjectNotFoundException e){ System.err.println("Exception catched -> " + e.getMessage()); } + pm.close(); + response.sendRedirect("/users"); } diff --git a/src/controller/users/UsersControllerIndex.java b/src/controller/users/UsersControllerIndex.java index 8a52d23..9c369e7 100644 --- a/src/controller/users/UsersControllerIndex.java +++ b/src/controller/users/UsersControllerIndex.java @@ -22,11 +22,13 @@ public class UsersControllerIndex extends HttpServlet { //Intenta hallar una sesion activa try{ - User usario = UsersControllerView.getUser(sesion.getAttribute("userID").toString()); - if (usario == null) throw new NullPointerException("UsersControllerIndex: El usuario recibido es nulo."); + User user = UsersControllerView.getUser(sesion.getAttribute("userID").toString()); + if (user == null) throw new NullPointerException("UsersControllerIndex: El usuario recibido es nulo."); - request.setAttribute("User",usario); + request.setAttribute("User",user); request.setAttribute("UsersList",UsersControllerView.getAllUsers()); + request.setAttribute("serverResponse",sesion.getAttribute("serverResponse")); + sesion.setAttribute("serverResponse","!"); RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/View/Users/index.jsp"); dispatcher.forward(request,response); diff --git a/src/model/Access.java b/src/model/Access.java index 1fa9adf..5e6514b 100644 --- a/src/model/Access.java +++ b/src/model/Access.java @@ -2,7 +2,6 @@ package model; import controller.resources.ResourcesControllerView; import controller.roles.RolesControllerView; -import org.datanucleus.exceptions.NucleusObjectNotFoundException; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.IdentityType; @@ -18,17 +17,17 @@ public class Access { private Long id; @Persistent - private String idRole; + private String roleKey; @Persistent - private String idResource; + private String resourceKey; @Persistent private boolean status; public Access(String idRole, String idResource, boolean status) { - this.idRole = idRole; - this.idResource = idResource; + this.roleKey = idRole; + this.resourceKey = idResource; this.status = status; } @@ -36,18 +35,18 @@ public class Access { return id; } - public String getIdRole() { - return idRole; + public String getRoleKey() { + return roleKey; } - public void setIdRole(String idRole) { - this.idRole = idRole; + public void setRoleKey(String roleKey) { + this.roleKey = roleKey; } - public String getIdResource() { - return idResource; + public String getResourceKey() { + return resourceKey; } - public void setIdResource(String idResource) { - this.idResource = idResource; + public void setResourceKey(String resourceKey) { + this.resourceKey = resourceKey; } public boolean getStatus() { @@ -60,9 +59,9 @@ public class Access { public String getRoleName(){ String ret; try { - ret = RolesControllerView.getRole(idRole).getName(); + ret = RolesControllerView.getRole(roleKey).getName(); } catch (Exception e){ - ret = "The Role doesn´t exists."; + ret = "The Role doesn't exists."; } return ret; } @@ -70,11 +69,19 @@ public class Access { public String getResourceName(){ String ret; try { - ret = ResourcesControllerView.getResource(idResource).getUrl(); + ret = ResourcesControllerView.getResource(resourceKey).getUrl(); }catch (Exception e){ - ret = "The Resource doesn´t exists."; + ret = "The Resource doesn't exists."; } return ret; } + @Override + public String toString() { + return "[ ID: " + id +"\n" + + "roleKey: " + roleKey + "\n" + + "resourceKey: " + resourceKey + "\n" + + "status: " + status +"\n" + + "]"; + } } \ No newline at end of file diff --git a/src/model/Service.java b/src/model/Service.java new file mode 100644 index 0000000..63918a0 --- /dev/null +++ b/src/model/Service.java @@ -0,0 +1,80 @@ +package model; + +import javax.jdo.annotations.*; +import com.google.appengine.api.datastore.Key; +import com.google.appengine.api.datastore.KeyFactory; +import controller.users.UsersControllerView; + +@PersistenceCapable(identityType=IdentityType.APPLICATION) +public class Service { + + @PrimaryKey + @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) + private Key key; + + @Persistent + private String name; + + @Persistent + private double price; + + @Persistent + private String description; + + @Persistent + private String creatorUserId; + + public Service(String name, double price, String description, String creatorUserKey) { + this.name = name; + this.price = price; + this.description = description; + this.creatorUserId = creatorUserKey; + } + + + /*Getters and Setters*/ + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + public double getPrice() { + return price; + } + public void setPrice(double price) { + this.price = price; + } + + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + + public String getKey() { + return KeyFactory.keyToString(key); + } + + public String getCreatorUserId(){ + return creatorUserId; + } + + public String getCreatorUserName(){ + String name; + try{ + name = UsersControllerView.getUser(creatorUserId).getName(); + } catch (Exception e){ + name = "The User doesn't exists."; + } + return name; + } + + /*To String*/ + public String toString(){ + return "Name: " + name + "\n Price: " + price + "\n Description: " + description + ".\n"; + } + +} diff --git a/src/model/User.java b/src/model/User.java index 824394d..4275434 100644 --- a/src/model/User.java +++ b/src/model/User.java @@ -30,7 +30,7 @@ public class User { //Rol del Usuario -> Lo que se almacena no es un objeto Role, sino la llave (key) de ese objeto. @Persistent - private String role; + private String roleKey; //Constructor public User(String id, String name, String imgUrl, String email ,String role){ @@ -38,7 +38,7 @@ public class User { this.name = name; this.imgUrl = imgUrl; this.email = email; - this.role = role; + this.roleKey = role; } @@ -68,26 +68,26 @@ public class User { this.email = email; } - public String getRole() { - return role; + public String getRoleKey() { + return roleKey; } public String getRoleName() { String roleName; try{ - roleName = RolesControllerView.getRole(role).getName(); + roleName = RolesControllerView.getRole(roleKey).getName(); } catch (Exception e){ - roleName = "The Role of this User does not exists."; + roleName = "The Role doesn't exists."; } return roleName; } - public void setRole(String role) { - this.role = role; + public void setRoleKey(String roleKey) { + this.roleKey = roleKey; } //To String @Override public String toString() { - return "User name: " + name + "\nUser role: " + role + "\n"; + return "User name: " + name + "\nUser roleKey: " + roleKey + "\n"; } } diff --git a/war/WEB-INF/View/Access/add.jsp b/war/WEB-INF/View/Access/add.jsp index 4a88a43..cb2e9f6 100644 --- a/war/WEB-INF/View/Access/add.jsp +++ b/war/WEB-INF/View/Access/add.jsp @@ -20,34 +20,12 @@ + - + @@ -55,18 +33,22 @@ @@ -91,6 +96,19 @@

+ +
+
+ info_outline +
+
+ The admin Role has full access by default.
+
+
+
+
+
+ @@ -103,8 +121,7 @@ <% if(roles.size() > 0) {%> - - <% for (Resource res: resourses) { %> - - <% } %> + + + <% for (Resource res: resourses) { %> + + <% } %> <% } else { %> @@ -166,24 +184,6 @@ isUserOptionsEnable = !isUserOptionsEnable; } - function postRedirect(url, postData){ - var postForm = document.createElement("form"); - postForm.action = url; - postForm.method = "POST"; - postForm.style.display = "none"; - for (var key in postData){ - if (postData.hasOwnProperty(key)){ - var input = document.createElement("input"); - input.type = "hidden"; - input.name = key; - input.value = postData[key]; - postForm.appendChild(input); - } - } - document.body.appendChild(postForm); - postForm.submit(); - } - if (buttonDisabled) document.getElementById("sendButton").disabled = "disabled"; @@ -191,7 +191,7 @@ function accessExists() { - var role = document.forms["mainForm"]["formRole"].value; + var roleKey = document.forms["mainForm"]["formRole"].value; var resource = document.forms["mainForm"]["formResource"].value; var req = new XMLHttpRequest(); @@ -199,7 +199,6 @@ req.onreadystatechange = function () { if (req.readyState === 4 && req.status === 200){ - console.log("Response -> " + req.responseText); if (req.responseText === "true") { safeToSend = false; } @@ -210,7 +209,7 @@ }; - req.open("get", "/access/add?info=check&rolesl=" + role + "&resourcesl=" + resource); + req.open("get", "/access/add?info=check&rolesl=" + roleKey + "&resourcesl=" + resource); req.send(); } diff --git a/war/WEB-INF/View/Access/edit.jsp b/war/WEB-INF/View/Access/edit.jsp index c9fee8f..3b5bee3 100644 --- a/war/WEB-INF/View/Access/edit.jsp +++ b/war/WEB-INF/View/Access/edit.jsp @@ -4,42 +4,177 @@ <%@ page import="java.util.List"%> <% List roles = (List)request.getAttribute("roles"); - List resourses = (List)request.getAttribute("resources"); - Access a = (Access)request.getAttribute("access"); + List resources = (List)request.getAttribute("resources"); + User user = (User) request.getAttribute("User"); + Access a = (Access) request.getAttribute("access"); %> - -Insert title here + + + Edit an Access - Hotel Services + + + + + + + + + + + + + -Back

-

- - - - - -
+ + +
+
+ Edit an Access +
+
+ +
+ + + + + + New Role: + +
+ + New Resource: +
+ + + +
+ +
+ + + \ No newline at end of file diff --git a/war/WEB-INF/View/Access/index.jsp b/war/WEB-INF/View/Access/index.jsp index 78d060f..0479a6a 100644 --- a/war/WEB-INF/View/Access/index.jsp +++ b/war/WEB-INF/View/Access/index.jsp @@ -4,8 +4,10 @@ <%@ page import="model.*"%> <% List accesses = (List)request.getAttribute("accesses"); + User usuario = (User) request.getAttribute("User"); + String serverResponse = (String) request.getAttribute("serverResponse"); + if (serverResponse == null) serverResponse = "!"; %> -<% User usuario = (User) request.getAttribute("User"); %> @@ -19,52 +21,34 @@ + - + @@ -89,6 +95,37 @@

+ <%if (!serverResponse.equals("!")){ %> + +
+
+
+ + + <% } %> +
+
+ +
+
+ info_outline +
+
+ The admin Role has full access by default.
+
+
+
+
+
+ addCreate

@@ -118,12 +155,12 @@ <%= e.getResourceName() %> <%= e.getStatus() %> - View | - Edit | + View | + Edit |
- Delete + Delete <% } %> @@ -136,38 +173,6 @@ - - \ No newline at end of file diff --git a/war/WEB-INF/View/Access/view.jsp b/war/WEB-INF/View/Access/view.jsp index da79939..af4a0a3 100644 --- a/war/WEB-INF/View/Access/view.jsp +++ b/war/WEB-INF/View/Access/view.jsp @@ -3,30 +3,103 @@ <%@ page import="model.*"%> <% Access access = (Access)request.getAttribute("access"); - String role = (String)request.getAttribute("role"); - String resource = (String)request.getAttribute("resource"); + User user = (User) request.getAttribute("User"); %> - + - -Insert title here + + + Insert title here + + + + + + + + + + -Back

- - - - - - - - - - - - - -
ID<%= access.getId() %>
Role<%= role %>
Resource<%= resource %>
+ +

+ +
+
+ View an Access +
+
+ +
+ ID: <%=access.getId()%>
+ Role: <%=access.getRoleName()%>
+ Resource: <%= access.getResourceName() %> +
+
+ +
+ arrow_backGo Back + +
+ \ No newline at end of file diff --git a/war/WEB-INF/View/Resources/add.jsp b/war/WEB-INF/View/Resources/add.jsp index 5204c39..174aded 100644 --- a/war/WEB-INF/View/Resources/add.jsp +++ b/war/WEB-INF/View/Resources/add.jsp @@ -10,7 +10,7 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% User user = (User) request.getAttribute("User"); %> - + Add a Resource - Hotel Services @@ -20,52 +20,33 @@ + - - + @@ -122,38 +125,6 @@ sourceImg.src = input.value; } - - diff --git a/war/WEB-INF/View/Resources/index.jsp b/war/WEB-INF/View/Resources/index.jsp index 6e05961..6a64d82 100644 --- a/war/WEB-INF/View/Resources/index.jsp +++ b/war/WEB-INF/View/Resources/index.jsp @@ -9,8 +9,11 @@ To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> -<% User usuario = (User) request.getAttribute("User"); %> -<% List resourceList = (List) request.getAttribute("ResourceList");%> +<% User usuario = (User) request.getAttribute("User"); + List resourceList = (List) request.getAttribute("ResourceList"); + String serverResponse = (String) request.getAttribute("serverResponse"); + if (serverResponse == null) serverResponse = "!"; +%> Resources - Hotel Services @@ -22,52 +25,34 @@ + - + @@ -92,6 +100,24 @@

+ <%if (!serverResponse.equals("!")){ %> + +
+
+
+ + + <% } %> +
+
+ addCreate

@@ -140,37 +166,5 @@ - - diff --git a/war/WEB-INF/View/Resources/view.jsp b/war/WEB-INF/View/Resources/view.jsp index 92858e0..92fa152 100644 --- a/war/WEB-INF/View/Resources/view.jsp +++ b/war/WEB-INF/View/Resources/view.jsp @@ -8,7 +8,7 @@ To change this template use File | Settings | File Templates. --%> <% Resource resource = (Resource) request.getAttribute("Resource"); - User userLogged = (User) request.getAttribute("UserLogged"); + User usuario = (User) request.getAttribute("UserLogged"); boolean editAllowed = (Boolean) request.getAttribute("editAllowed"); String action = (String) request.getAttribute("action"); %> @@ -24,51 +24,33 @@ + - + @@ -135,37 +139,5 @@ - - diff --git a/war/WEB-INF/View/Roles/add.jsp b/war/WEB-INF/View/Roles/add.jsp index 0b7d877..a977221 100644 --- a/war/WEB-INF/View/Roles/add.jsp +++ b/war/WEB-INF/View/Roles/add.jsp @@ -19,53 +19,33 @@ + - - + diff --git a/war/WEB-INF/View/Roles/index.jsp b/war/WEB-INF/View/Roles/index.jsp index e2b0bf6..67c0490 100644 --- a/war/WEB-INF/View/Roles/index.jsp +++ b/war/WEB-INF/View/Roles/index.jsp @@ -8,8 +8,11 @@ To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> -<% User usuario = (User) request.getAttribute("User"); %> -<% List roleList = (List) request.getAttribute("RoleList");%> +<% User usuario = (User) request.getAttribute("User"); + List roleList = (List) request.getAttribute("RoleList"); + String serverResponse = (String) request.getAttribute("serverResponse"); + if (serverResponse == null) serverResponse = "!"; +%> Roles - Hotel Services @@ -21,53 +24,33 @@ + - - + @@ -92,6 +98,25 @@

+ <%if (!serverResponse.equals("!")){ %> + +
+
+
+ + + <% } %> +
+
+ addCreate

@@ -109,8 +134,8 @@ <% for (int i = 0; i < roleList.size(); i++) {%> - <% Role role = roleList.get(i); %> - <% String key = role.getKey(); + <% Role roleKey = roleList.get(i); %> + <% String key = roleKey.getKey(); String[] arr = key.split(""); @@ -125,9 +150,9 @@ %> - <%= role.getName()%> - <%= role.getStatus()%> - <%= role.getCreateDate()%> + <%= roleKey.getName()%> + <%= roleKey.getStatus()%> + <%= roleKey.getCreateDate()%> View | Edit @@ -143,47 +168,5 @@ - - diff --git a/war/WEB-INF/View/Roles/view.jsp b/war/WEB-INF/View/Roles/view.jsp index 08db8c3..7c13b85 100644 --- a/war/WEB-INF/View/Roles/view.jsp +++ b/war/WEB-INF/View/Roles/view.jsp @@ -7,8 +7,8 @@ Time: 16:39 To change this template use File | Settings | File Templates. --%> -<% Role role = (Role) request.getAttribute("Role"); - User userLogged = (User) request.getAttribute("UserLogged"); +<% Role roleKey = (Role) request.getAttribute("Role"); + User usuario = (User) request.getAttribute("UserLogged"); boolean editAllowed = (Boolean) request.getAttribute("editAllowed"); String action = (String) request.getAttribute("action");%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> @@ -23,52 +23,33 @@ + - + @@ -97,11 +100,11 @@
- + Name:
-
+

Status:
+ + Name of the Service:
+
+ + Price of the Service:
+
+ + Description of the Service:
+
+ + + + + +
+
+
+ arrow_backGo Back + + + + + + diff --git a/war/WEB-INF/View/Services/index.jsp b/war/WEB-INF/View/Services/index.jsp new file mode 100644 index 0000000..ec81cb5 --- /dev/null +++ b/war/WEB-INF/View/Services/index.jsp @@ -0,0 +1,160 @@ +<%@ page import="model.User" %> +<%@ page import="java.util.List" %> +<%@ page import="model.Service" %><%-- + Created by IntelliJ IDEA. + User: Fernando + Date: 07/06/2018 + Time: 16:39 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<% User usuario = (User) request.getAttribute("User"); + List servicesList = (List) request.getAttribute("ServicesList"); + String serverResponse = (String) request.getAttribute("serverResponse"); + if (serverResponse == null) serverResponse = "!"; +%> + + + Services - Hotel Services + + + + + + + + + + + + + + + + + + + + +
+
+ Services +
+
+ + <%if (!serverResponse.equals("!")){ %> + +
+
+
+ + + <% } %> +
+
+ + addCreate +
+
+ + + + + + + + + + + + + + + <% for (Service service: servicesList) {%> + + + + + + + + <% } %> + + + + + +
NamePriceDescriptionCreated byActions
<%= service.getName()%><%= service.getPrice() %><%= service.getDescription() %><%= service.getCreatorUserName() %> + View + | Edit + | Delete
+ +
+ + + diff --git a/war/WEB-INF/View/Services/view.jsp b/war/WEB-INF/View/Services/view.jsp new file mode 100644 index 0000000..74e808a --- /dev/null +++ b/war/WEB-INF/View/Services/view.jsp @@ -0,0 +1,145 @@ +<%@ page import="model.User" %> +<%@ page import="model.Service" %> +<%-- + Created by IntelliJ IDEA. + User: Fernando + Date: 07/06/2018 + Time: 16:39 + To change this template use File | Settings | File Templates. +--%> +<% Service service = (Service) request.getAttribute("Service"); + User usuario = (User) request.getAttribute("User"); + boolean editAllowed = (Boolean) request.getAttribute("editAllowed"); + String action = (String) request.getAttribute("action");%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + <%=action%> a Service - Hotel Services + + + + + + + + + + + + + + + + + + + +
+
+ <%=action%> a Service +
+
+ + <% if (editAllowed) {%> + +
+ + + + + Name of the Service:
+
+ + Price of the Service:
+
+ + Description of the Service:
+
+ + + + +
+ + <% } else {%> + + +
+ Name: <%= service.getName() %>
+ Price: <%= service.getPrice() %>
+ Description: <%= service.getDescription() %>
+ Created by: <%= service.getCreatorUserName() %> +
+ + + <% } %> + +
+
+ arrow_backGo Back + + +
+ + + diff --git a/war/WEB-INF/View/Users/add.jsp b/war/WEB-INF/View/Users/add.jsp index 2444f39..7686e80 100644 --- a/war/WEB-INF/View/Users/add.jsp +++ b/war/WEB-INF/View/Users/add.jsp @@ -21,42 +21,19 @@ + - + @@ -114,8 +113,8 @@ Role of the User:

@@ -140,47 +139,5 @@ sourceImg.src = input.value; } - - diff --git a/war/WEB-INF/View/Users/index.jsp b/war/WEB-INF/View/Users/index.jsp index 35a40f2..af39fcc 100644 --- a/war/WEB-INF/View/Users/index.jsp +++ b/war/WEB-INF/View/Users/index.jsp @@ -7,8 +7,11 @@ To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> -<% User usuario = (User) request.getAttribute("User"); %> -<% List userList = (List) request.getAttribute("UsersList");%> +<% User usuario = (User) request.getAttribute("User"); + List userList = (List) request.getAttribute("UsersList"); + String serverResponse = (String) request.getAttribute("serverResponse"); + if (serverResponse == null) serverResponse = "!"; +%> Users - Hotel Services @@ -20,53 +23,34 @@ + - + @@ -91,6 +98,25 @@

+ <%if (!serverResponse.equals("!")){ %> + +
+
+
+ + + <% } %> +
+
+ addCreate

@@ -132,47 +158,5 @@ - - diff --git a/war/WEB-INF/View/Users/view.jsp b/war/WEB-INF/View/Users/view.jsp index 1d9956c..faf8836 100644 --- a/war/WEB-INF/View/Users/view.jsp +++ b/war/WEB-INF/View/Users/view.jsp @@ -9,7 +9,7 @@ To change this template use File | Settings | File Templates. --%> <% User user = (User) request.getAttribute("User"); - User userLogged = (User) request.getAttribute("UserLogged"); + User usuario = (User) request.getAttribute("UserLogged"); boolean editAllowed = (Boolean) request.getAttribute("editAllowed"); String action = (String) request.getAttribute("action");%> <% List roles = (List) request.getAttribute("Roles"); %> @@ -25,52 +25,34 @@ + -

- <%=action%> a Role + <%=action%> a User

<% if (editAllowed) {%> -
+ - - + + - Name:
-
-
- Email:
-
-
+ Name:
+
+
+ Email:
+
+
-
-
- Profile Image link
-
-
+
+
+ Profile Image link
+
+
+
+
+ +
-
- -
-
- Role of the User:
- -
+ Role of the User:
+ +
- + - + <% } else {%> @@ -165,47 +169,6 @@ sourceImg.src = input.value; } - - diff --git a/war/WEB-INF/classes/controller/access/AccessControllerAdd.class b/war/WEB-INF/classes/controller/access/AccessControllerAdd.class index cace1953052e92a046e94223d1d600d548476c5b..8af0e09e0815b517c48ff59eb9f57b34d169dda2 100644 GIT binary patch literal 5801 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 literal 3758 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 delta 394 zcmYk0%}N4c6o#Lf)NdR$M6t4nq;OT_CO6?G=+9D1?f>6qW+9Y8x@i?%LJV{REn2mZ zT2zamZP(Hr1l1YIX!D)(9p3Yt=O*?PHQ&EpUV$l`wwcu<@zXQgImtMUR=sucFsGOF zgu$|g%G4~&X*NR?Sy7bSEB|<6m8?d%=``$$W7p3etEH&8Z~l+oMBzWjeGF8!W7kmE zCZG5T$ia$xt8$kUv887UI(I~-ecewRjUcluP^Je{!lM}S#%0<^ntrhzAV*R%gX9^K z+%O?YETTL#VIoq!uF9Iwyl$NhbRp!~WJ|bdM#ycmgHLc#cG(lNyd2u+KxT)sltlj) z3!g$$Oe%_s8Luq|g?Z%O8)Ngew&e7Vq$w4F21s>eQgQ?l>dL4;8TBipVRg3cAAFxZ A`~Uy| diff --git a/war/WEB-INF/classes/controller/access/AccessControllerIndex.class b/war/WEB-INF/classes/controller/access/AccessControllerIndex.class index 588183f816dd889683bc9f83536a4aed80129dec..333ef281f041e468814ee2627f99c92b8e32930e 100644 GIT binary patch literal 3436 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 XK5IomQ@GYXYc1FXAx_~b5z+jA6ra&B delta 1361 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 diff --git a/war/WEB-INF/classes/controller/roles/RolesControllerDelete.class b/war/WEB-INF/classes/controller/roles/RolesControllerDelete.class index 9ab8a85fcf07785ac1deaae8424a9f3846707bf0..1ccc7332f7e57e20d6ff94eb5ef6d1910e85d046 100644 GIT binary patch delta 818 zcmZuuT~8B16g|W4GW}T86fCwFAcD0OV-1GHw2A_vs7R4dD=HQkYGG;X?iR%_{Pw{I zgYzSJMw1#eAwK)&A29mngVASS#Jfu%nwUvu?%Z?FJ!kH`to~Kw`}q6a8i2!izT*3) z?DnG>M|B)SJA*GP>_K5!xk8>{Pc*jlCEV@ak{+C3*k%cHUYG;IDi-pV@Su|+JWw!1 ziL}o6@ z(a%sTtF&6hg8|vEhNCGA>CiAtl>aEkMtm4Wn&YB;rN)#?7?W#i#FN4m9ak|fzpKfv z6f!y{Fvj4q3mZ;-n8Gv%J)_!n`L7KfSx1i-9cM<~gPfev>MCa)9Yem*ngTTH%D72W zwEQT-A;1z7z}A;jFfS?jB8~~E~6o#Zo=0cSS@2_3qBB-TScJ)E2uyaZ8$=+ z@M4JeSt#(4=ze#vrfiVbE-Xe6qQWo|sH4ILq|pcqO}K--@Drg2-0=z>RdhO$jS`p} z&EqBsd8z&u7Dyn7cHAbWO5MU#d5``n?MC-0w@92;DC^`(<6s=k9K{GnE5`%pI=YT} ys9OjDPIk7AsE_0)ULzCU?ZL+@)TP3GgpW=jO0$f~ac^yC(-+5vFNUXX?Xy1^)wDqX delta 648 zcmX|8O-~b16g{u=@ut%;A=EY^#!iHcG-7ISN3~jOp;QnQ0a2??+p!eenc9wsD}I6@ zFa8GB)ucvE+!$TB^C!5|pWsHkGlXW6_wK#to_o%_^Y`SNxc=kcr!N35<8@#EEoo6) zL5}09_$eo(Yq&1{$R@iXbmdIpCPSjQTXQ;o({s(5?bo)Px_L2Y>d0fxfP#7Im|EPn zckE2db{m;hzuR;h+4Q=O1>E8&i>8v67O^DWDwdYVvVj%c5nq*TA&*r9_prpE`Q8yv z$2#tFY%s*bkxehNLi2n=9lLE{GtlFmpwx0TJQR6#T&)B;k406TNIYdwGhMIc^kS%@ z&QW8q_J5hNUdMBLjsXYr@4u;+nA{^kj7XM9X$IR7)7pMC3mGcyr7gZ|*4_bfv&uVU zKO?_6TKItCm@+_VfZGGy9boMMsag3Leh|R&0FQ?7^yrh1up{Urf+Q@YX&X@#Q9=b0 zbW*V>2jX-l={rUF7%t#6^_)c+sXf$j4lPU~Mr|eVz!(gipgV}3p#c^~TWFFv zoQ5ZnAzqsv6O41=(O)WuQHN?Th%*D}kQ^x-jAN3c$}z*y4YGwpl9vgH50Ri;87HbQ pM)ZlfmwlQL37??T4VIgVU1yb9U7{{geYccB0P diff --git a/war/WEB-INF/classes/controller/roles/RolesControllerIndex.class b/war/WEB-INF/classes/controller/roles/RolesControllerIndex.class index 3d9e0d5946026382b753dd29f2d0712c15a8b4ca..6366fc3b3913631b34350dc6ef3973adafe2fda0 100644 GIT binary patch delta 609 zcmX|-OHWf#6otRjdv8x$3ekdKQ)vOQQ68xY6Dd=mC@K%Bh}1_5S1c_pwzcAm#~(17 z^9vjqhmDb>4vbFuBM$rxJ~lNtIs0+eT6^vNqw`}|;OO_4ufP}wjX=a6@-e08sJfN9 zTUm6g+vQT#^^sDj{x+hF2T)uKGRt+7u*cO+leY)F^DJr>%sac^y2X*bVNJNCY7zUjCAS!}$r^?_OOP3#SaCPzb)O?o{vxndzjXu8Ra#n2&FLpPetc}O~8 zXLzJZ+TsIel6KfWWL4^iiqNA&9ydf>Q=mi!i-3qH>5#Wex@YMjOq>XpImZOOa=$2P zV&v#!ufTxN2HEBUPX)HmCEA2KBUJH7kamg3*_Pl`D=Q1yBmXaWLPZAlutb%b?3KeW zDs>z|oZ=Zf(t9qP0jyudHBlk`A%(3`nr=-;R+`6o=CnXxnO*<+>DLWmcv@=&B*KW? ZYqaI6Po^Q0Ph9E$t~CE#DfU|I{l6d6Y{~!t delta 522 zcmX|+OHUJF6o#L#ote)W2BSqG4GG0UPyy3K-B>p+1nRX^E>(+4r9&Mo9ULlxnz(jn z^8EKE4-XG;_6)A=e*~`iJt@Bx8I+?02g@O_J%FbLowqs%bY1% zm((@$*2+3JxTU#i+SaM$ZHnf*RdPx!XzrM4dpxM?Z9!;CEK(MPCy4X-=BS%~Q(#2;qcX{| z%or8MS?4r;vQrR^9K)wyVmEt2D5P$-!BY}4U!}pOFo(#~B*GGv%NEbDg?EgYZRxc{ zlO_3!3C)P+`5(?I?JL9h=>4iz3l;>Pdu2d3>tpYE-Tvmk(X( O|E}~uSBjTC^{c|G-Mk20_m~MB)*tmvasu4(I#*o_CFZ6XEr}H!DDz@?v-) z67{`-{Lpakc+L|N=1!p2IDud+HBrdsQkkq@xG1#!!zOJXO@!DI9QWa{m-pNU17n`s z+37Zg*b$^j2p%9)jHIQ~{EQ^!_)=|jO1u-;oFYmRhZc^J;v{D{ODo;9(XUgMbNHO+ z3GGaAf#-BE!zJeFqQqs^xWX1!`NcJUb6wzuRB%)3$w(u&6>aFGyYeLH_y%Hd-HLf=y vuO56&SqEp;TeO5=0K#W z2*-y02a~3zW+%mGJ!klwvrK*_?C;gb6eu&F*yDh1se)K~sIn4ydr>2~*}%^xiY>xy z6D3BPI8}ByW|wP{+>)Zt9(Sf0k>QCP&*XXKfOlNJDDZ25e=01f2^@+=UE(w(!I9)? z>W9#ub%K{uJqX{cGh?2!Pn!}K+UL09({-oibWDCpkgi#BW%QnYbc%jqW)67xSp%mW BC*%MC diff --git a/war/WEB-INF/classes/controller/users/UsersControllerAdd.class b/war/WEB-INF/classes/controller/users/UsersControllerAdd.class index d3eb860a75e11343a544f5a4c418b139c25cb4e0..1caa8d114c715a51fcb698c328fb177e0f3c0e16 100644 GIT binary patch literal 6282 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 Iafyci0ZF)~k^lez delta 2772 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 P{C`RQuO!3MmiE~nBp;L3 delta 571 zcmZvYL32w{6vuxzukYQLm&a5xgtjCklZnxpEDWlzN}FnFixL_|@eq+pQKP)b#uBm?3#j7`LZYZq6^H!zVicw}ob5oIf^F6(3*~TrV z!kG0_Jq~xQl&Xa({o3IN16Z<}g>Xw}UVR`nZhqv%Hr`77%qPwsFgr|lxX@v-!#_DNex gBRw)lZb*yw;T}a=nj^G-DfB-I{f9!a)>A+I4QMxJ9smFU diff --git a/war/WEB-INF/classes/controller/users/UsersControllerIndex.class b/war/WEB-INF/classes/controller/users/UsersControllerIndex.class index 68caa7b2b273a90bb5ccd8880d4e4ba318686d06..800c63cc8fafcf61b394f72b512bd21deba1c659 100644 GIT binary patch delta 847 zcmZvaTW?cG6otR>IrcawCZeWR2so_+!9}6L6-Xcw2>~gPK)8k!C{2kI4^F^7HpeI7 z))HFomxf9s_zS$XO&?sDO68$%RN_ZaiC@8`+o44~^krtx-m~^vYtLLu{gv{bzJB}% zu#q1Zyk|~Nob8IXnh9o2aM;wU6~AWU3@B7rD`_@+D0U^-&7ghmY*Bk`+FjK$%zn*2 zMcTe}($NG5IB2KbL$Sjg(Tvz9Znrba7xsmFVD1=SYK|+Gp3cwabEUjr%#B>Ag{GX~ z1Yao}69kIX@M3wok~ew113lk1`dFuUPg!auZb9sL<7>gOcA$K&YuHvUXf$ zTHlT~!3?wZYHY20UNK~Ujt#WsrowV*tH;G=?@P8#{}gp+#FqV2`z!B=%yOk*O1Y*} zMYK@aZNlcG{9uRU^DX1J#N;_2+P~xdbL*1ZdXw84tc=iLlY<PoMiMM}KGRc=F_LoBK3Dio2-`Wr_godT6SQ!R>qMpB8g6h?a<>Gt3g^{ovYNE!_8a-H zu10A-)C7`ihLc%oe%E$-UAyir2qLm*!;>9)Wr*t+Rb_+?Vg65*ey2+Rt4cAyh`#?1 D)Lpa{ delta 754 zcmYjOT~8BH5Iwiu?roPEO|>a#)q%%7iJ=m#gU)`Dp zhI4)lU{Jc0Gi*rqDJ{McT;NDDgk@L>d;GYFOLAM8RL3yRaan#-qV5SyO4T!7nZgXm zG{b>aeO-@d^?W)$RW8~h=f_pdGPs3hF$72J?Ti_purhgj%C>}_OK{9Hg#H8C)JzYQ zGFd}dUR-C`KV(^^6-nuKYDE}b5e;+b*06{rj++bzSG)GM4sE1F!Ooa@KXk+xw6w6t zM6sx+g@a1@VL-@`nrN6qRKp5ZIWlrVZEU=a9tK`;gk|#$$id{uGsNT)i^w-zB?Agr zlke3wrN}TVzpI1cWz#74_r;yy#1%W2?blFpNY~|QPN-5*w=$;u!ShF+lA4@ph-`eO zD98$QE9K?Y~cJZhF$3OG&}-r+`*Qo}+G%Qf7pAx%SBhJaOrT_s+QNlcSXZfL~Y4L`j>sx~2n!-ye_Q#gtQ zjvw&D>UQ|$?1THyYP7)O|6>o-n9;b0txIC4~T(#05YvuD!KnuniP3E`^C f*C+xVWKm~bRfM*IHvdz__f+w}su*6>(J%i12zZ$# diff --git a/war/WEB-INF/classes/controller/users/UsersControllerView.class b/war/WEB-INF/classes/controller/users/UsersControllerView.class index 7e3f9026216013f9995ef9c9c47953a1c9fa5103..be83d0556d7aef23ac408b89fdf5b0514f693d44 100644 GIT binary patch delta 1876 zcmZWq33L-x6um#&B$H`Lr)$9O2()P(p-`lVARaBA7N|h+aAb?kw5FXTZITucrB)PC zS(NWq!GfYxMI{vs4JZOCDk>`OE8+@nxS+@5LGjJBa1?Wr`G4N~@4b89yZ_|(A%};G z`~Tjt3qTou>kv$mLatSUAB}vtb*e){ zP(Xkohqsv0d6(6Beh4;(0nK55FgiWzt!tVQ_SUI(v@l3*RC1c?^M}>Cs2vdoiw?qx zRxA+E#xR5*vgJ7=&7ojKm9P+txXU(-E#_lvwfWbgUBD8CR0Ennq}1pYE)V;oYFNT` z=-9f&md*yRl8}r6B5uPP0k<dj#Cg^X$XSow%1**~ew9 zV-N!&pQ$Ffr70}J|9qaf(hcdp0 zA=3b-d4mng^eEwLnAqyqd}`Q^twcYfYD7G*J{$_k^iE4;|rnEj@NgF0r>A8hk#exEn0I+205CA@=odCaK{e;+jhK48fBKY{vs z9sfrRrt=gL1^7h5r#Qr2Qfca837_K&0_+d^)P+;)8PfS4G0l0Ye(oy?U*j7dl7>2t zQgA@A<2$}y;_L@rmXyzeyf$ewlQ~N+a&*7~0bnJ(EV&B9QmDyx-I(<;(_EU z#Usz@#k>T@nc=p2N)k}b=*F4~o7)ygQ#Y2E%FX|c8Qp$5!Xr;N_oCK__QL}fTtK+z)2PV={C)Pn@B1>f%&|rp0H*X1Y>6s1(vXBHfTo{Cb$U!05i;#yB z;$P8Duay{#88{muGA~9kZiI(YmQvDlXp{;zVmLO@Mc#&y*n?3xfN~tgXdFic1I98D z<5(&#U|AT?vN4h6;bP{&Bsi)3Y${JZgG3PML%Zv-6ck3g8>mvd2@Y0>G%O?31DQE83J0#V0`O! zgZ3vJXSfT`^ovw|1qM)8U6k8KtHw9D(koW>(5uO4tVkc4O^iPXZemN@D#R7Nfp6kWDSv)IY);U2&L2)+^{L z%*I)mL*BVGzQ z=u4O0mrZo^arnsp1o=(aVwBbApc5V0i$3&K#XAw3B|o_x+vK%z#N*f*$Fm9SHX(uM z8FAWQP3(x1Cq{97DwGX)V?u%L+?3()w&i;y7jNyDSFuZwb2F zLb&Dc`@qu$>V{Zhbz9^3v4^Tw(w~SQDgEHf4b^s>Ym79BgquZ@Eg*%KkvhvspOvJQ znOI5xP%9{K6`HV`Xs+QYshLwwiJ-+0x`}c$;uwCS)LAsrpADTi8A|?zp88}`VEGH> U0w&RDTwVbwHbV3(IZQbI5BqGO^Z)<= delta 1789 zcmah~X>e0j6#j0um%O}g0RpYGv{1G#lVK6DfD4WkghC65f`G*2wWduQnxq9(NM#j7 zz+OcV#oY>swxWRmB8sAdxbF*!yNLS7aU6$=UtS8zFO$r@=bd}*Ip24dmlFg37@!{c zd+z}N!|-c|`lrS2#9Yi%aJ>v#3(a2KAfYekp2~`G8g9p0d6j*rV;wdqSTE2|9<}$@#(90wP5>V?yem&^9I--Z2*oaLE?rC)tm^b5IS?HML-iZ4&+@IuZ^#wx_UBLqah4Q4M zP;PfL$tr6%nX3*F+vOCscg2%TLPQUeetva0RG+V68=lf&#Ud5$ct$}7Q)e&>dK+py zR|LJ0h=yI5DxlQp(aGL=J$dCh4RP$2d(=^B+fbQAwO7MF>~D2mn0o*R6}-^pW}&Cn zAM#W+=}As6;w3rN*-yMIo1L|}M>HHwqE-V9&E8FAvnigfYYsNNJSL9^r+~I4>f#*kL4V#)b^={&+xh2pbfAc*YG92lKZuR zj<0E2@3G@sc}kPwd)bm!kX9{Vi|CO+h?UQmmnk{2kHspFrL~AGIXQi>!v_l#K)7W~ zdQm1$mAVGUQLq_-Y|CNz<=*s(h1u5Pk_6_M(S}uJwrpD*zBVi_b=`Qr;Yhh4BP~{& zz!)?BbEVh0E9vwS6mW&(h<3n)6@Z)!M3UD_=QVyhCkLts*|OBN+?w;2Z^D~c1?B2d!aC5U$B$-zS9VJkf*OPOZ?nL+KfZ2Fn# zjak%P$0E)~f6OtW7m)!l(8wfcnTH4Q5IwnJ$HRDpSo^>pV@@BXn9QFG;tZ`!MxHh% z^R$(wkKu8ixAEMBCycNw={QMr_#ULtPb}JpZ8Kdvc4MbY#_@C<&&IJQfrJSOJTJ)U z&?K@Wr{Z?rOHptc@GcG#Sv^~?f&CORaJ%W;!In#+1yAgF1&4|IRX%ClQ<~T04p-mU z>vWmG8-hLYc9|vH;(9NR4>qG`w#A%!_{2IdjxWkAZRnoTorvSCE;Td;^lu0~+d|x~ z?^577NNrHdtl8E$e&}G-a#SP021tP)VRZ4581oUM*urUA%E?*Afmn_aoS1T~#tf{1 zk9#%W)^%9RKZNxL!Asa6K;yZ#Xgt>zja{RlpcX&kCkE@q;+`}{q0Z>_pSdP$l?6*D WMzFERvs#&61z9$NJjD|ee)$K_f`4BC diff --git a/war/WEB-INF/classes/model/Access.class b/war/WEB-INF/classes/model/Access.class index a9fdefaaf1dbde099776753eff24ac5c30532821..527309707f5de354a617e4f3d360692b0a2d4f78 100644 GIT binary patch literal 12993 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 literal 11511 zcmbVS349aRng2dnwv0XawmEFa;s`d9vCEl*BN%f;#2AVl8beYd_T zeZ1%S#`nMa5)p0S=a?ENQloaF*G^{R+0(s!v6!971c;gHPDCGz_9mjq@!tK%PS~+* zfXbMHGJ2}_#AvEFGa2taV5c+jOx8}u?EdIv^jN|UP&rez#_5sCOrZgHQ8bxMWuw`6 zDw!#C0R~dZam-pi z3)q2ld?K1Y{eXRXu1PsjvzWB-v1nq-9?GVpS$q66Q+O8S$mkwBX=7F@otuo+m64sh z28ScVBTNllW4NivKu1#k{_yHUOl4iG z4_UN`mQ<0SmRi(E3m1@&+AM0)S9e&{Of51NWb$W^$3duhpoAZQ)$(yW8-X?(x>gqw zgB);!J$6>K-Pu(VplFdrtEjUIq`QEf(b$bea)}rMKBU3BN`n_NBw}~d8bR-2TA(=B z%C&Ng%B@9fH4E!7NwMHgQUvv+jT&hajIEIz>(n`DX2_y@G~&IOtP%4jYgA|QR*ejc z3Xem^)G!;2Z8*)@e{pHaS0A=$2lb1jJGBrw6n~fU0f7P49L$o^Fqmr5{S*fdg0SPfbcmQ7)I+olZ^YGAh}0pXSUB ztYW~Gx!J~LlbNXrJH6S%nVtZ`C~Tq{UFsr+N~!(PjF*>> zF>Or6M-}B%HW*JLQ=x}Qjp_cP2kPs|f%ka9E9v7^bWYf)K<y=m2PlK8zw-Xhp%T)=WVTH zWj3aku82pUj>#R4xuC@Y-O69xAs)h z3srPQJn9WcC92qDB0g(W`o>U{swboAs0n@XP1P~E!lODA8_uEu+9!$iYoaJV%c1h;LG$%HQl72*QFN~<&dwW2-zBl=_E_)lO!@B^@TI*Vi(0F+!=^yhlQU+6Y2k{Ps7#>?aKYtdip zhkv8(9LYF}MN4GGJ+~J9y`K6HNI{BFo^V(n&*Y6*^v`<1zi2V{MNis>w*?dK^_4{52q>qta8huUa*T>1ouJO^^I?as$8u?w>;Ucgmo#<*JiC^;I(Spmw| z5%kd<*HjMLlZj}|p;8BQ)rPq6^%~wg(c(sp+XSE!`Oo$4q9(0yk-g2F# z*d`OqDQyIsdcKG66)2Rm7ODGMR2|tnrpCsw(c!I-AT^Z@qE}Y=4bAhYeJXfwCEr)Y z+f-*9ot(6jFnBAX)}whZ&Sncc_I@njok(|C?E7WA4CuUm#N-r>Zd%si&A%{MC zQYVzrJSE;;=mjOr8u74{a|Yy=2Y5h4-v=IY(D_Ql5mSCIR0>;;G1o- zotmf(npTP;HJHlo#(B!9CkD|p2GDv-;k9@Yn|QYQZA^E#v_hQP9Diu&bN`Y62kysTF{H~& zVNZA{iaiNt49geD55$wUj#e|W5LF{~a$j`P+*di47Z)5-hw!`O37eK-59TLSIjY7L z_OtlI$fxm_lX~3M;I|gf>TKLLU;yXr=5YmvYw_48C+|v{_-zVJQ)?)EmD)qySE(b^ewCJe z1>-(`2Hzn)hnCX{++nunTU`maK6NELmhpL9w@^90>#(Yx7C_D#%x}ahgc99pDEH!y zF{?Z@L#r?0LX)!epeCijL@@%1zX?&;EZzo^LbM_jo}pfs(H1@GFj`^sFHFgaAkh-A zwiH-zD#^(D+cVOJ#T!a9a@SmpXiK|{bbyf{uKzouLQjVnqA2%SafEbWkd(7P_vqnByyG9@n4sT<@QnWlHo(EEix z!4L75ErYoN+-kpr$ID|@E}rLinD8Whz$`e8`f88}!sj!-uEoBR9KWp|j^@ z;M_>VC#LC>H@jb^vxDKXHP`5w8T#CH`eGTm((4FX?>Odq`Vw7Ke5|LRq@RLou0-^I znSL4(bU|_KtC9FYGi%s*gv#)rXnEK}_-BQ17=-tQx;5RabjhU})GHjS%M~s3i3kg! zIPjIX}CH~*KXoY>q$pgl>=F2AZ7iuVRegPwbXjel6UK6px5RF z)I`7RxX(R?qXx~ou|eeAX3l;0d((~rn$@wQO)m0hu@9tm#|m-fP!C7t!)>mJ``^2xyIHR->tT1Z+)jQ;dMG>I(Z@2Kz1}N zT#NQcC%j53t9_j+c_E0_IYg&GRPub6OSC}~-P-mXHI;1(h1)^2`AiwNw|(K(w_U0_ zxpz5KyA0I^YSC2DZq;%N=n=yByb-7Dib1saW=UlP~8@yqZIXtKIM=DPm2gLhtJq+TFrMx9g3%Mwnb6vsrO~ z*1+O0T2RykV0IhK2XQZUTVgN=*9hhs!CcdQjeFL(z}iqt978QJz*x+^s`ymG9zp{8 zlmkXX;+yD9BnU2uGQ}l%EnIT_G;g@s`elqK@sWQbT01`L@Y#dU!&>XD*ZJ-;LWrO^ zU!;eM20JcNf6-w3Me1<|w}{b}U8FV%h8w&M)VEJ_U+XpAb&Vt9rLJ>m`(1E^yuf?m zdD?ypDA3T})YMcj{XY(7jeK7>@|~MSJ{z*gznpx%xbDMeNcm?gzAs(pK|gBOL1(1H zjBIyC+RaFhGqUVDACy(|7weoO*11Bl>hW(edj=USnnWK1!g%R&{w zD*O{uJjjO(&#%FkW%G1Wl$7sk-OlYp;(6!;edlxO@vzENFOzRj)~&(ki@8S+%cE{& z&Q1Pi{{^&CYr32LNMvt4sehf8qCI(?s<;lDEWGYwgj%fv6tNL_k!hr?ksloz@i%gGXr#Q6j}47f zG;(Z6!c?}gc*(^qTW6N7!ZKTyjib+3EA<5y>x+uZoN(6ToforyrCGl?@U_a3vbx2? zBmTPP;gNFrs=$|~sNQxlE2LJ)Kb_48`37&o6g~?`10?+_-f1a(rdl_`rWfy_m}i6V zK}jABp&3qJ8o0sPk?=Kse40<)RMcQ^PMIy1j@<@6jbe`7E$BbNZwHQ)bri>40X6d- zsO&yfD7OGvu(5sT_rUrC;WFgDFeCSc-L$7sbNLim6wN>Uk)Op%bO!t`$bvWQ48P*3 zqJ?sJ(j^x}*PL>GFP4h%cxlcoIB2p*P`hlk6cyw-)xU(w1O;X1$#PGFtQiU#ETSNP zK%IG*olk8o@bPw>!9OBQg64+M3*7!3g@w$kv{HUT{_FgqGIS!UVut(}L*Ds_Uy|)5 zxe@-oyVnhxrcx+!d@l&$%{oJ9#0b(Ugr31sh$7^H)^c2=N)fTcjTnDbtxE+g-9)I-SYK^2tm( zSB888Q^i612vh6!cxI$)IFlJp*GQ9C`HOv_cWD-p}ba`{Zw?z+`J0)nN}p=XmL zvFwq{Oe$!Q2hyBFvDBE|pU=kf_ArEKn+7?WxXDi2n3c&ECWAT{-MX!BAUZGz9d>0? zOtp$!+Ys}T>0!*O%0c_F924(h3dFNEcqK5rF_}*0uVuGno+16>g! zKP|ARnrdc|j}}=}OLcP9#I#5`EpH#rcl9SnMpO1yp!a05BQdz|ZA>*c-@JZgWPL6d zP9(Z|d%KPt2~wD;p$t#WY-xxV(=w={fXDL5R9AN_Wv3IdY=Ew0nmugiqiLvw2oTv< zXyJ<{Zm_6@T0?Xdt$@ZL7)Xv_a&6IM5fl^Ks9h#@Fx9)Nc$MgasfLt7Ov{bfikkv3 z>{Zkni(9mcR)=UMt+A+Ho9r4Ue|~=wKB(Sa9Qp81#hAFxml%RNS{Y?dR|fGRlt5TP z$bt@Dj!d(VA2-=~70Bybr}9`a)6ll)db%M5&)&$?F|%~&iNz6=M*_43z5)M%j5Y() z#u;Z+StD+xZ6WHW9tmJOufkij>^Ij}mS|ZT#S&3bxkfw9yzJUYc8WrgXZ z+XQ6?EDd4$O+xuwRi0Q{tU{XAmq22cMFX@;AdpwH;LHL9atv812#~0NP*;MmVvj|8 zXs-a=fvN$3Zk5LpB)He)CbccPOH2DMREWIejw@7nd%|YRSTdEckyUY3KjUNBTqcZI zTptdS9ioI}VU;R`s1_aN61K$R1`=ttpOOM`097Xxq?ASbXp;=2ndXVPU_rY#mW~bE zS*9ih&G=t;$frGz2MMBAREol2N7-(CzZ#$f5%&_6b6XXB|@4x}|6X}e_z z$PU!Nkx?6SYWH4hQeSLDCe?W-IaPK(1c;{h+u0h@t>}4e^q-ho$?-8a`<+9}Vhtf(Z`qkeRfl zB+jO!K&jC-ND+CGPK4+Q`Z{t3QPiCom1aXlTdpUY8PR=H6#3e#C3BT21zcX3ZK5@u z8ym5+8$6Qf31Ezt$E_aGRLUNXr8Z}WF+ZK(b~tX2N_Q2YrMX!_79`W$f^;TC&xt6-ORCY?qKz~eqEmF1X{{@3`4+UiB?EL0!KwO24XW%cJxjEl zjV*eSUYboW(0MciLvf~SFB=l&`J%2>z$nGtpiv9uD8sbOgIqAr6zc<|s7EvO5(?|F z%7^1pK?`WKx`es;d~|>kEK%K>7m2u{K7G#?cK@z{%}8<>XfZqS%}om zApK^Dek`%{rqd29)MzR>ZQA*Uu;9!djb&pdw^0HiElP1gd5cEr-D0CZFwMA|^4?`M zK!2!v=K>wV`tl`WgSQznAz;xT)1SnCK{EnAulmi7=D6LVwHU+8InsaO0R zS-T&LV=R@t2OWzwT6AmbwJUmQwNmBpZ|HA@^WQNo&{puwbGnJJSxq!r=?n>N$XWV; zY0HdFGA+18|3v>RLjH@XUenDC(7(xwqntUAjiqyFq+!HZ%Jt9!h*|cLML*HT{ZHLH zMsr*3l&!XPvy$%hjLeG8^1tZ6MdJT~10fHIfg}FV*d|U%p{Gh-3?ri1%(@?kQ8Q=66p<Suia&%98rG!g5k&H`+?Awc; zmy?>yPJ1*Ji#uGZfv)-n7rsrydna1lp>aC_giVC(84Az!PGD|U;i4LwZNQ9zeT&7b zd5!q|YKyXzL*eAL+T#Y^TQsq)m>OE%$Eq=EaOChlV!C50rIQxU$(3%k+@j|NFqL8qN^oG-oyzL>rRkeT~C(5ar>C|RYSfbt~(xjTjxA6{f&)d;mI?y`N z-zu~z6BhULfI#npRu1%*OeST=(gxd9q)QqyiW3EX2j4DGI6j>3T2bq;Wo&2&n;zZ^ z4Kic-Fk0#%sgUTg6ZYZo`XJvK;yc84ji>`2UwX;q9Dv`2c^s3;Xb>tDIkupqy7nMi zJ@&qKYQU6a%( z`XJ2;5|+eyZZxUYD8L^!OIN3yKXq!S2l=Sp40P&4_fF@~9aqWDMB&iA6I~j zv*NO0()|U3mGmowONoLuRot(Ru)0&3G>DeFLZ}glFZ+i~7M-6*1)Pag#)ZP-FUcm> z&tFF4mdtI(0g0Wk_$xZ?zl!pYhNdV3qcaKRG8tGpWbqUHqy+m3iIIH=c65WCIy?0w z{4H;dT`4z7uBZ5$!ViZK6?m&+tY_z)7ar#H7`s=d4J9Y6Gd&`g4oURT1;V87o7F=T zmpy8+_!OTOJ)T1z!98!O)S$MH^Ms&G0tM0*qqNS%?0ZzjdY;b-%nM8lcj7n`?@@Lq zb4k2*+w8toLkf1|b)FnJWU!y!9m6&cGX~@X?6>1Jnl4OcWDZv7_`%-TsJRb0v5OKH z>Q`?Bdy*-emS9`!$G)P9X5$KH0eDR)uMlf+Hyhs;p3SjoF3rOL-cFgvRT#GL*eCC) zO2+U?X3E%6*+OIfQRxWry-1Ee)i(|v)i=&g)i(}d)i;hf@x2y&8fZSy&g1T0s(`RW zEs+UY7->60jgh7^)O?N>57sW3pyhp$j!BA)Q|CBceTLRPi>W@ofX|2~qjhvG?f^j7 ziHPb-6u{9W6kJam@H+Hmj4pybh?aqBIc#zz)V~TdTJYHls*SYC2(%h^f)b2O(&kCJ z=_IZ-N3k2mHAjUhCL_EHW4f7^8v5(O*@w}pNZTZBcjcY0M;&>qw7d#O4pNCasgk;Y z)$7P2cfz3(vb=q&AeAM8tit4-)L$Y<<0QS~Qi5oIzYIoNkgFlcHNd)^1`U>1kUO8o zM6X3k1z88;cb3&6c6lu}fEcem4CijdhnQgDIZ6!H4o%Ro*kYUx){fv~oHA1Z7nYdi z2Kem#bcF%zp#b2B)=$!hPt(y!`uJ(OZ<0Q9njV;>2T#-IC+YZUdbIYjN&3nuI(mxk zJ4FwiqDRk>Z*YRXI!WIUQxf6`uXqjSGKi@Cgdmp3tU^==j4=-;JVoC$1cyx2uWWmj z=A5Hv25Y}PK_}0*zf7l&%fNGkwc`^salZWmo$70=>=>u#&(ehoa=oa-f29*nE9qtW zjuK)eeV4w6fLe}h{yx2e@c)hy*EhEsLSrLfWVjPDRN%?dHV@Yy2-h}n?Txg9=>__= zGxVCvHLNKdu1gg!G{T0LPw|4sBolw#VYM1$65*k9^y9(W-bbAVUUH z=zqtEy3vSQj$Vu8rT<;1FWv~z?IePsSnk!$Cv-D>^I>}Qb zsoq4Am=7w|qP+b1<$(TbMnLuS*G}wQXC$iC63sCZ{k_lQY#m6o#q!iZo`0Z!G>UCD zF!MD`wSoCpADuuaGgYTe9tzXR?+9QCGw`{|6~{DAwJQ$KDfFWvttxQeL- z#VcKV{d!x)i5Gi=I7i_3DUV)>Fkv8m}1s)@8Ub&m5@M|~HY9=-UpspYQ4 zVbj7bEZssq)$s~6GrHUbsbbz66y!Nz8gZD8fvGe$tuE7c&2&@KV^m*peWa}!OuLR& zaC6h+7k}z<)up}F;o54r*3x{cPhC?m*eI0_?A($QQ<9u_63#=Vw8V(^b zz;YE;OHUB~5Eihf9L*XQKSF;cDe#aOQ?h_>MHciMZ_lB8JW3S#~ihem8w+(wd&=x#;Elq)Dn@0n#4Us zx2jLA#$sGY@P7^dkpR#@d1jMbuEmb!1g)0K*U(3uz%B=u&E-7MRL%oBa)%sIhY(iR zs{9yILKo^!RXBt{aYc^vM&?%$#g&lhpctt*$l9ITLlSf7|9r;_wfL~AQ5VS9Cv+Y7 zf1>c{9(mM`nz`2B;C}=yR7ZP*A0_O)NBtKY{EuGzi5ohyg8*ws@PjHJq!t}i#moma z*6{mOW(?33s;v1{^{%F>+PO7v&?2-YZ%_z}&La6ak5OucN=;-%;6-j6tf=Gn_YeB( z_yhfem392V{=up`{!qUpsOBWUgwrM>|1$J9vGDgKm0kKgnd z`sIdxLEwepU`2Jqz@T3~DytU^3|8Svb5y_PF%)x^m#|M#bqsrM{xlt%`Ya%gkMybd z&Cb+ks%0ZAYxuE^dDe#*l(JD9ndD<9x1Zw&2iwN^3lsds^NJh%&G(y~naei(~5 z_M+f_oF4&>^s?BsZVRZHk77mlsU>nFkOjLwGQp3-``gG(ZN*vsS_K^^)ssXjFowkcx}Q$U zl`!;fFjw(6z=jIFNISUT_lbtfpeZ>m!sTIV7Wh~6lBaR8NIg@D+7MKy3vP^RWm+^g zIJWS&oQ?-A$`U`=;3t7IP{v=Rj2{x9W*KGHUS1jg_KcKKxJAl%PD5s*41T0)lvxJ9 zh-WGx>T9lh&3@HbB*Z8ASwpbX7&$D~eU)a5DN)X}_Y?{QJ5%Y|vS@+Aj&;MZt{g;3 z0K&TS=HU)M&76UCtBR~!1qo2?&-&?Uxth9lC=)991*ze3sZde4h`|?isGx{9UpiFe Xh|DO1Q1S8iBxot1PTJ&LC`k1Gvqcys literal 261 zcmY+9!4APd6h-f=R;gCSAJ}1`3rk`nv1&*V`)N%WsWz$Be_2T^e1MMvNDgQ4U^D0iK_?_ksg9obdqsFs83a@iW#BSAM6O` zoKp^JXu7aaC-|XC<+40SGT(|Qk%VrT#Uj~>TxtJZn#ECF7!dwbCj@6x@fS*Gy_G07gQdwhIce>yfEOf>ThtM#p+gXi>Jqq&t)~>e*h4)G%x@F diff --git a/war/WEB-INF/classes/model/User.class b/war/WEB-INF/classes/model/User.class index c99559f2f1254072fdbdcd9c9d5a627118e45c08..8ada34944a2a037a0192694e55b430394ec2e5f5 100644 GIT binary patch literal 12005 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 Qh2`Wah|eq={x|#o0SVa=-T(jq literal 12132 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 diff --git a/war/WEB-INF/web.xml b/war/WEB-INF/web.xml index 4d0420a..1980996 100644 --- a/war/WEB-INF/web.xml +++ b/war/WEB-INF/web.xml @@ -125,6 +125,7 @@ AccessControllerEdit /access/edit + AccessControllerAdd controller.access.AccessControllerAdd @@ -132,7 +133,8 @@ AccessControllerAdd /access/add - + + AccessControllerIndex controller.access.AccessControllerIndex @@ -140,7 +142,8 @@ AccessControllerIndex /access - + + AccessControllerView controller.access.AccessControllerView @@ -148,7 +151,8 @@ AccessControllerView /access/view - + + AccessControllerDelete controller.access.AccessControllerDelete @@ -159,6 +163,46 @@ + + + ServicesControllerAdd + controller.services.ServicesControllerAdd + + + ServicesControllerAdd + /services/add + + + + ServicesControllerDelete + controller.services.ServicesControllerDelete + + + ServicesControllerDelete + /services/delete + + + + ServicesControllerIndex + controller.services.ServicesControllerIndex + + + ServicesControllerIndex + /services + + + + ServicesControllerView + controller.services.ServicesControllerView + + + ServicesControllerView + /services/view + + + index.html diff --git a/war/css/Diseno.css b/war/css/Diseno.css index 3652326..b691eee 100644 --- a/war/css/Diseno.css +++ b/war/css/Diseno.css @@ -113,4 +113,4 @@ a:active { font-family: "Product Sans"; font-weight: bold; src: url("../fonts/ProductSansBold.ttf"); -} \ No newline at end of file +} diff --git a/war/css/Elements.css b/war/css/Elements.css new file mode 100644 index 0000000..edf3699 --- /dev/null +++ b/war/css/Elements.css @@ -0,0 +1,61 @@ +.postLink{ + color: blue; + font-size: large; + cursor: pointer; + + transition: color 250ms ease-in; +} +.postLink:hover{ + color: green; + font-size: larger; +} +body{ + margin: 0; + padding: 0; + background-color: white; + font-family: Roboto, serif; +} +.whiteLink{ + color: white; +} +.whiteLink:hover{ + color: white; +} +#serverResponse{ + color: white; + background-color: #26a69a; + display: inline-block; + font-size: large; + border-radius: 4px; + box-shadow: 2px 2px gray; + cursor: default; + overflow: hidden; + max-height: 0; + transition: max-height 1s ease-in-out; +} +#serverResponse::selection{ + background: transparent; + text-shadow: 2px 2px gray; +} + +.dropdown { + position: relative; + display: inline-block; + text-decoration: underline; +} +#dropdownContent { + max-height: 0; + position: absolute; + background-color: #f9f9f9; + min-width: 150px; + box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2); + z-index: 2; + overflow: hidden; + transition: max-height 250ms; +} +#dropdownContent a { + color: black; + padding: 4px 16px; + text-decoration: none; + display: block; +} \ No newline at end of file diff --git a/war/index.html b/war/index.html index 640667a..485280b 100644 --- a/war/index.html +++ b/war/index.html @@ -51,10 +51,36 @@
- Welcome! Log In to Start: + Welcome! Log In to Start

-
+
+ With Google: +
+
+
+ Or with your email:
+
+ + +
+ + + + + + + + +
+


@@ -63,7 +89,6 @@ Jose Rodriguez, 20101650
Gustavo Turpo, 20173374
-
diff --git a/war/js/GlobalJs.js b/war/js/GlobalJs.js new file mode 100644 index 0000000..6cc9fff --- /dev/null +++ b/war/js/GlobalJs.js @@ -0,0 +1,37 @@ +var dropdownOpen = false; +var dropdown = document.getElementById("dropdownContent"); +function toggleDropdown() { + (dropdownOpen)? dropdown.style.maxHeight = "0": dropdown.style.maxHeight = "300px"; + dropdownOpen = !dropdownOpen; +} + +var userOptions = document.getElementById("userOptions"); +var isUserOptionsEnable = true; +document.getElementById("cerrar").addEventListener("click", changeUserOptions()); +function changeUserOptions() { + if (isUserOptionsEnable){ + userOptions.style.display = "none"; + } else { + userOptions.style.display = "block"; + } + isUserOptionsEnable = !isUserOptionsEnable; +} + +function postRedirect(url, postData){ + var postForm = document.createElement("form"); + postForm.action = url; + postForm.method = "POST"; + postForm.style.display = "none"; + for (var key in postData){ + if (postData.hasOwnProperty(key)){ + var input = document.createElement("input"); + input.type = "hidden"; + input.name = key; + input.value = postData[key]; + postForm.appendChild(input); + } + } + document.body.appendChild(postForm); + postForm.submit(); +} +