From 291a35d3cc609b3a3431ac4b0c6ba2a37700e10b Mon Sep 17 00:00:00 2001
From: Razvan Raducu
Date: Tue, 6 Jun 2017 10:46:51 +0200
Subject: [PATCH] =?UTF-8?q?Corrigiendo=20errores.=20A=C3=B1adido=20bot?=
=?UTF-8?q?=C3=B3n=20eliminar=20consulta=20s=C3=B3lo=20ADMIN?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../web/QueryPageController.java | 103 +++++++++++++-----
.../webapp/WEB-INF/views/currentaccount.jsp | 80 +++++++-------
.../webapp/WEB-INF/views/officeclientpage.jsp | 2 +-
.../main/webapp/WEB-INF/views/officeindex.jsp | 2 +-
.../main/webapp/WEB-INF/views/querypage.jsp | 15 ++-
5 files changed, 134 insertions(+), 68 deletions(-)
diff --git a/ulebankoffice/src/main/java/es/unileon/ulebankoffice/web/QueryPageController.java b/ulebankoffice/src/main/java/es/unileon/ulebankoffice/web/QueryPageController.java
index 1f29d24..0309bbe 100644
--- a/ulebankoffice/src/main/java/es/unileon/ulebankoffice/web/QueryPageController.java
+++ b/ulebankoffice/src/main/java/es/unileon/ulebankoffice/web/QueryPageController.java
@@ -19,6 +19,10 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
+import com.google.appengine.api.blobstore.BlobKey;
+import com.google.appengine.api.blobstore.BlobstoreService;
+import com.google.appengine.api.blobstore.BlobstoreServiceFactory;
+
import es.unileon.ulebankoffice.domain.SolicitudFinancialAdvisorDomain;
import es.unileon.ulebankoffice.repository.SolicitudesFinancialAdvisorRepository;
@@ -26,30 +30,42 @@
@RequestMapping(value = "/offersconsulting/querypage")
public class QueryPageController {
+ private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
+
@Autowired
private SolicitudesFinancialAdvisorRepository repo;
-
+
private static final Logger logger = Logger.getLogger("ulebankLogger");
-
- @GetMapping( params = { "id" })
+
+ @GetMapping(params = { "id" })
public String add(ModelMap model, HttpServletRequest req, HttpServletResponse resp, Principal principal,
@RequestParam("id") String idSolicitud) throws IOException {
SolicitudFinancialAdvisorDomain solicitud = repo.findOne(idSolicitud);
-
- if(solicitud == null){
- logger.warn(principal.getName() + " " + req.getRemoteAddr() + " " + req.getLocalAddr() + " ha tratado de acceder a una consulta inexistente. Devolviendo 404 advisor.");
+
+ if (solicitud == null) {
+ logger.warn(principal.getName() + " " + req.getRemoteAddr() + " " + req.getLocalAddr()
+ + " ha tratado de acceder a una consulta inexistente. Devolviendo 404 advisor.");
return "redirect:/e/404";
}
-
- /* Se comprueba que el usuario que está accediendo a la solicitud es el creador de la misma o bien un empleado de la oficina o superiores */
+
+ /*
+ * Se comprueba que el usuario que está accediendo a la solicitud es el
+ * creador de la misma o bien un empleado de la oficina o superiores
+ */
String creadorSolicitud = solicitud.getEmail();
- if(hasRole("ROLE_ADVISORUSER") && !principal.getName().equals(creadorSolicitud)){
- logger.warn("El usuario " + principal.getName() + req.getRemoteAddr() + " ha intentado acceder a la consulta " + solicitud.getId() + " del usuario " + creadorSolicitud + ". Redireccionando a 403.");
- return "redirect:/e/403";
- }
-
- /* Si es empleado, podrá ver los comandos para añadir nueva respuesta. Si la solicitud ya tiene una respuesta, se le cargará en el text área por si lo que quiere es modificarla. */
+ if (hasRole("ROLE_ADVISORUSER") && !principal.getName().equals(creadorSolicitud)) {
+ logger.warn(
+ "El usuario " + principal.getName() + req.getRemoteAddr() + " ha intentado acceder a la consulta "
+ + solicitud.getId() + " del usuario " + creadorSolicitud + ". Redireccionando a 403.");
+ return "redirect:/e/403";
+ }
+
+ /*
+ * Si es empleado, podrá ver los comandos para añadir nueva respuesta.
+ * Si la solicitud ya tiene una respuesta, se le cargará en el text área
+ * por si lo que quiere es modificarla.
+ */
model.addAttribute("asuntoOferta", solicitud.getAsuntoOferta());
model.addAttribute("idQuery", solicitud.getId());
model.addAttribute("enlaceArchivo", "/offersconsulting/serve?blob-key=" + solicitud.getFileBlobKey());
@@ -62,27 +78,64 @@ public String add(ModelMap model, HttpServletRequest req, HttpServletResponse re
return "querypage";
}
-
- @PostMapping(params = {"id"})
- public String addResponse(ModelMap model, @RequestParam("response") String respuestaSolicitud, @RequestParam("id") String idSolicitud, Principal principal, HttpServletRequest req){
- if(hasRole("ROLE_ADMIN") || hasRole("ROLE_SUPERVISOR") || hasRole("ROLE_EMPLEADO")){
+
+ @PostMapping(params = { "id" })
+ public String addResponse(ModelMap model, @RequestParam("response") String respuestaSolicitud,
+ @RequestParam("id") String idSolicitud, Principal principal, HttpServletRequest req) {
+ if (hasRole("ROLE_ADMIN") || hasRole("ROLE_SUPERVISOR") || hasRole("ROLE_EMPLEADO")) {
SolicitudFinancialAdvisorDomain solicitud = repo.findOne(idSolicitud);
-
- if(solicitud == null){
- logger.warn(principal.getName() + " " + req.getRemoteAddr() + " " + req.getLocalAddr() + " ha tratado de acceder a una consulta inexistente. Devolviendo 404 advisor.");
+
+ if (solicitud == null) {
+ logger.warn(principal.getName() + " " + req.getRemoteAddr() + " " + req.getLocalAddr()
+ + " ha tratado de acceder a una consulta inexistente. Devolviendo 404 advisor.");
return "redirect:/e/404";
}
-
+
solicitud.setRespuestaOferta(respuestaSolicitud);
solicitud.setEstado("Contestada");
repo.save(solicitud);
logger.info(principal.getName() + " ha añadido una respuesta a la consulta " + solicitud.getId());
- return "redirect:/offersconsulting/querypage?id="+idSolicitud;
+ return "redirect:/offersconsulting/querypage?id=" + idSolicitud;
} else {
- logger.error(req.getRemoteAddr() + " " + req.getLocalAddr() + " Alguien ha tratado de hacer POST a una id de una consulta sin tener los roles necesarios o haber iniciado sesión. Esto significa que alguien ha tratado, por medios externos, contestar a una query.");
+ logger.error(req.getRemoteAddr() + " " + req.getLocalAddr()
+ + " Alguien ha tratado de hacer POST a una id de una consulta sin tener los roles necesarios o haber iniciado sesión. Esto significa que alguien ha tratado, por medios externos, contestar a una query.");
return "redirect:/e/403";
}
-
+
+ }
+
+ @GetMapping(value = "/e", params = { "id" })
+ public String eliminarConsulta(ModelMap model, HttpServletRequest req, HttpServletResponse resp,
+ Principal principal, @RequestParam("id") String idSolicitud) {
+ SolicitudFinancialAdvisorDomain solicitud = repo.findOne(idSolicitud);
+
+ logger.info(principal.getName() + " " + req.getRemoteAddr() + " " + req.getLocalAddr()
+ + "está tratando de borrar una consulta.");
+
+ if (solicitud == null) {
+ logger.warn(principal.getName() + " " + req.getRemoteAddr() + " " + req.getLocalAddr()
+ + " ha tratado de borrar una consulta inexistente. Devolviendo 404 advisor.");
+ return "redirect:/e/404";
+ }
+
+ if (!hasRole("ROLE_ADMIN")) {
+ logger.warn(principal.getName() + " " + req.getRemoteAddr() + " " + req.getLocalAddr()
+ + "ha tratado de eliminar la consulta" + idSolicitud + " sin tener los privilegios necesarios.");
+ return "redirect:/e/403";
+ }
+
+ if (solicitud.getFileBlobKey() != null) {
+ /*
+ * Si no encuentra la blobkey no hay nullPointer, aparentemente,
+ * simplemente lo omite.
+ */
+ blobstoreService.delete(new BlobKey(solicitud.getFileBlobKey()));
+ }
+
+ repo.delete(solicitud);
+ logger.info(principal.getName() + " " + req.getRemoteAddr() + " " + req.getLocalAddr()
+ + " ha borrado la consulta " + idSolicitud);
+ return "redirect:/offersconsulting";
}
private boolean hasRole(String role) {
diff --git a/ulebankoffice/src/main/webapp/WEB-INF/views/currentaccount.jsp b/ulebankoffice/src/main/webapp/WEB-INF/views/currentaccount.jsp
index a2c45fe..4f7bab3 100644
--- a/ulebankoffice/src/main/webapp/WEB-INF/views/currentaccount.jsp
+++ b/ulebankoffice/src/main/webapp/WEB-INF/views/currentaccount.jsp
@@ -193,7 +193,19 @@