From 506f7678b1ddd20b42b143b5447151b8113e43fc Mon Sep 17 00:00:00 2001
From: Fernando Pietchaki Domingues <fpd09@inf.ufpr.br>
Date: Tue, 2 Apr 2013 14:02:07 -0300
Subject: [PATCH] =?UTF-8?q?adicinado=20altera=C3=A7=C3=A3o=20de=20senha=20?=
 =?UTF-8?q?por=20parte=20do=20Usu=C3=A1rio=20e=20corrigida=20via=20Adminis?=
 =?UTF-8?q?trador?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pom.xml                                       |  2 +-
 .../participatorio/web/UsuarioController.java | 53 +++++++++++++++++++
 .../web/UsuarioController_Roo_Controller.aj   | 13 -----
 .../WEB-INF/i18n/application.properties       |  2 +
 .../webapp/WEB-INF/i18n/messages.properties   |  1 +
 src/main/webapp/WEB-INF/views/footer.jspx     | 10 ++++
 .../webapp/WEB-INF/views/projetos/list.jspx   |  4 +-
 .../WEB-INF/views/usuarios/accepted.jspx      | 11 ++++
 .../views/usuarios/changepassword.jspx        | 17 ++++++
 .../webapp/WEB-INF/views/usuarios/error.jspx  | 11 ++++
 .../webapp/WEB-INF/views/usuarios/views.xml   |  9 ++++
 11 files changed, 118 insertions(+), 15 deletions(-)
 create mode 100644 src/main/webapp/WEB-INF/views/usuarios/accepted.jspx
 create mode 100644 src/main/webapp/WEB-INF/views/usuarios/changepassword.jspx
 create mode 100644 src/main/webapp/WEB-INF/views/usuarios/error.jspx

diff --git a/pom.xml b/pom.xml
index 89fc388..b660e17 100644
--- a/pom.xml
+++ b/pom.xml
@@ -326,7 +326,7 @@
     </dependencies>
     <build>
         <plugins>
-		<plugin>
+            <plugin>
                 <groupId>org.apache.tomcat.maven</groupId>
                 <artifactId>tomcat6-maven-plugin</artifactId>
                 <version>2.0</version>
diff --git a/src/main/java/br/ufpr/c3sl/participatorio/web/UsuarioController.java b/src/main/java/br/ufpr/c3sl/participatorio/web/UsuarioController.java
index 4ef263f..0cb64df 100644
--- a/src/main/java/br/ufpr/c3sl/participatorio/web/UsuarioController.java
+++ b/src/main/java/br/ufpr/c3sl/participatorio/web/UsuarioController.java
@@ -5,11 +5,14 @@ import javax.validation.Valid;
 
 import org.springframework.roo.addon.web.mvc.controller.scaffold.RooWebScaffold;
 import org.springframework.security.authentication.encoding.ShaPasswordEncoder;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import br.ufpr.c3sl.participatorio.Usuario;
 
@@ -34,4 +37,54 @@ public class UsuarioController {
         return "redirect:/usuarios/" + encodeUrlPathSegment(usuario.getId().toString(), httpServletRequest);
     }
 	
+    @RequestMapping(method = RequestMethod.PUT, produces = "text/html")
+    public String update(@Valid Usuario usuario, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest) {
+        if (bindingResult.hasErrors()) {
+            populateEditForm(uiModel, usuario);
+            return "usuarios/update";
+        }
+        
+        ShaPasswordEncoder encoder = new ShaPasswordEncoder(256);
+	   	
+        usuario.setSenha(encoder.encodePassword(usuario.getSenha(), ""));
+        
+        uiModel.asMap().clear();
+        usuario.merge();
+        return "redirect:/usuarios/" + encodeUrlPathSegment(usuario.getId().toString(), httpServletRequest);
+    }
+
+	
+	
+	@RequestMapping(value = "changepassword", method = RequestMethod.GET)
+    public String chancePassword() {
+        return "usuarios/changepassword";
+    }
+    
+    @RequestMapping(value = "accepted", method = RequestMethod.GET)
+    public String accepted() {
+        return "usuarios/accepted";
+    }
+    
+    @RequestMapping(value = "error", method = RequestMethod.GET)
+    public String error() {
+        return "usuarios/error";
+    }
+    
+    @RequestMapping(value = "updatepassword", method = RequestMethod.GET)
+    public String updatePassword(@RequestParam(value = "oldpassword", required = true) String opass,
+                               @RequestParam(value = "newpassword", required = true) String npass) {
+           Usuario p = (Usuario) Usuario.entityManager().createNativeQuery("select * from usuario where login='"
+                 +SecurityContextHolder.getContext().getAuthentication().getName()+"'",
+                 Usuario.class).getSingleResult();
+
+        ShaPasswordEncoder encoder = new ShaPasswordEncoder(256);
+               
+        if (!(p.getSenha().equals(encoder.encodePassword(opass, ""))))
+            return "redirect:error";
+        
+        p.setSenha(encoder.encodePassword(npass, ""));
+        
+        p.merge();
+        return "redirect:accepted";
+    }
 }
diff --git a/src/main/java/br/ufpr/c3sl/participatorio/web/UsuarioController_Roo_Controller.aj b/src/main/java/br/ufpr/c3sl/participatorio/web/UsuarioController_Roo_Controller.aj
index e902971..ca2c015 100644
--- a/src/main/java/br/ufpr/c3sl/participatorio/web/UsuarioController_Roo_Controller.aj
+++ b/src/main/java/br/ufpr/c3sl/participatorio/web/UsuarioController_Roo_Controller.aj
@@ -9,9 +9,7 @@ import br.ufpr.c3sl.participatorio.web.UsuarioController;
 import java.io.UnsupportedEncodingException;
 import java.util.Arrays;
 import javax.servlet.http.HttpServletRequest;
-import javax.validation.Valid;
 import org.springframework.ui.Model;
-import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -48,17 +46,6 @@ privileged aspect UsuarioController_Roo_Controller {
         return "usuarios/list";
     }
     
-    @RequestMapping(method = RequestMethod.PUT, produces = "text/html")
-    public String UsuarioController.update(@Valid Usuario usuario, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest) {
-        if (bindingResult.hasErrors()) {
-            populateEditForm(uiModel, usuario);
-            return "usuarios/update";
-        }
-        uiModel.asMap().clear();
-        usuario.merge();
-        return "redirect:/usuarios/" + encodeUrlPathSegment(usuario.getId().toString(), httpServletRequest);
-    }
-    
     @RequestMapping(value = "/{id}", params = "form", produces = "text/html")
     public String UsuarioController.updateForm(@PathVariable("id") Long id, Model uiModel) {
         populateEditForm(uiModel, Usuario.findUsuario(id));
diff --git a/src/main/webapp/WEB-INF/i18n/application.properties b/src/main/webapp/WEB-INF/i18n/application.properties
index f213008..262d0be 100644
--- a/src/main/webapp/WEB-INF/i18n/application.properties
+++ b/src/main/webapp/WEB-INF/i18n/application.properties
@@ -67,6 +67,8 @@ label_br_ufpr_c3sl_participatorio_usuario_permissao=Permissão
 label_br_ufpr_c3sl_participatorio_usuario_plural=Usuários
 label_br_ufpr_c3sl_participatorio_usuario_senha=Senha
 label_br_ufpr_c3sl_participatorio_usuario_version=Versão
+label_br_ufpr_c3sl_participatorio_usuario_oldpass=Senha Atual
+label_br_ufpr_c3sl_participatorio_usuario_newpass=Nova Senha
 
 menu_category_ministerio_label=Ministério
 menu_category_projeto_label=Projeto
diff --git a/src/main/webapp/WEB-INF/i18n/messages.properties b/src/main/webapp/WEB-INF/i18n/messages.properties
index f931665..f9867e3 100644
--- a/src/main/webapp/WEB-INF/i18n/messages.properties
+++ b/src/main/webapp/WEB-INF/i18n/messages.properties
@@ -100,5 +100,6 @@ security_login_form_name=Usuário
 security_login_form_name_message=Digite seu nome de Usuário
 security_login_form_password=Senha
 security_login_form_password_message=Digite sua senha
+security_login_change_password=Alterar Senha
 security_login_unsuccessful=Seu login não foi realizado, Tente outra vez. Motivo:
 security_logout=Logout
diff --git a/src/main/webapp/WEB-INF/views/footer.jspx b/src/main/webapp/WEB-INF/views/footer.jspx
index bb9998e..14e1d8a 100644
--- a/src/main/webapp/WEB-INF/views/footer.jspx
+++ b/src/main/webapp/WEB-INF/views/footer.jspx
@@ -11,6 +11,16 @@
   </span>
   <c:if test="${pageContext['request'].userPrincipal != null}">
     <c:out value=" | "/>
+    
+    <span>
+      <spring:url value="/usuarios/changepassword" var="changepass"/>
+      <a href="${changepass}">
+        <spring:message code="security_login_change_password"/>
+      </a>
+    </span>
+    
+    <c:out value=" | "/>
+    
     <span>
       <spring:url value="/resources/j_spring_security_logout" var="logout"/>
       <a href="${logout}">
diff --git a/src/main/webapp/WEB-INF/views/projetos/list.jspx b/src/main/webapp/WEB-INF/views/projetos/list.jspx
index 142c8d7..40300d2 100644
--- a/src/main/webapp/WEB-INF/views/projetos/list.jspx
+++ b/src/main/webapp/WEB-INF/views/projetos/list.jspx
@@ -5,12 +5,14 @@
     <sec:authorize ifAnyGranted="Administrador">
         <page:list id="pl_br_ufpr_c3sl_participatorio_Projeto" items="${projetos}" z="user-managed">
             <table:table data="${projetos}" id="l_br_ufpr_c3sl_participatorio_Projeto" path="/projetos" z="user-managed">
-            <!--             <table:column id="c_br_ufpr_c3sl_participatorio_Projeto_pai" property="pai" z="JnX374OPNV+3oLlfOcMYu3wG024="/> -->
+                <!--             <table:column id="c_br_ufpr_c3sl_participatorio_Projeto_pai" property="pai" z="JnX374OPNV+3oLlfOcMYu3wG024="/> -->
                 <table:column id="c_br_ufpr_c3sl_participatorio_Projeto_nome" property="nome" z="djZOsc2/qBPTa0C3ffNAlDEgP0U="/>
                 <table:column id="c_br_ufpr_c3sl_participatorio_Projeto_acao" property="acao" z="2hGM9LKsHjh5/zpeavaa+slBUkA="/>
                 <table:column id="c_br_ufpr_c3sl_participatorio_Projeto_demanda" property="demanda" z="K99mnRN9vX7sE9XtHufPcJBkBdg="/>
                 <!--             <table:column id="c_br_ufpr_c3sl_participatorio_Projeto_outroAcao" property="outroAcao" z="KDK14ptwJLWXh4xCooeqI+wBnJk="/> -->
                 <table:column id="c_br_ufpr_c3sl_participatorio_Projeto_ministerio" property="ministerio" z="qYUkNm475DOx0s81JEz3ff7BQho="/>
+                <table:column id="c_br_ufpr_c3sl_participatorio_Projeto_pai" property="pai" z="JnX374OPNV+3oLlfOcMYu3wG024="/>
+                <table:column id="c_br_ufpr_c3sl_participatorio_Projeto_outroAcao" property="outroAcao" z="KDK14ptwJLWXh4xCooeqI+wBnJk="/>
             </table:table>
         </page:list>
     </sec:authorize>
diff --git a/src/main/webapp/WEB-INF/views/usuarios/accepted.jspx b/src/main/webapp/WEB-INF/views/usuarios/accepted.jspx
new file mode 100644
index 0000000..c4c845e
--- /dev/null
+++ b/src/main/webapp/WEB-INF/views/usuarios/accepted.jspx
@@ -0,0 +1,11 @@
+<div xmlns:spring="http://www.springframework.org/tags" xmlns:util="urn:jsptagdir:/WEB-INF/tags/util" xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
+  <jsp:directive.page contentType="text/html;charset=UTF-8" />
+  <jsp:output omit-xml-declaration="yes" />
+  <spring:message var="app_name" code="application_name" htmlEscape="false" />
+  <spring:message var="title" code="welcome_titlepane" arguments="${app_name}" htmlEscape="false" />
+  <util:panel id="title" title="Aceito">
+    <b>
+      Operação realizada com sucesso.
+    </b>
+  </util:panel>
+</div>
diff --git a/src/main/webapp/WEB-INF/views/usuarios/changepassword.jspx b/src/main/webapp/WEB-INF/views/usuarios/changepassword.jspx
new file mode 100644
index 0000000..835296d
--- /dev/null
+++ b/src/main/webapp/WEB-INF/views/usuarios/changepassword.jspx
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<div xmlns:field="urn:jsptagdir:/WEB-INF/tags/form/fields" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:page="urn:jsptagdir:/WEB-INF/tags/form" xmlns:table="urn:jsptagdir:/WEB-INF/tags/form/fields" version="2.0">
+	<jsp:directive.page import="org.springframework.ui.Model"/>
+    <jsp:directive.page contentType="text/html;charset=UTF-8"/>
+    <jsp:output omit-xml-declaration="yes"/>
+	
+
+	    <b>Informe sua senha antiga e sua nova senha.</b>
+	    <p/>
+	    <form name="chancepassword" action="updatepassword" method="get">
+	    	<field:input field="oldpassword" type="password" id="c_br_ufpr_c3sl_participatorio_usuario_oldpass" disableFormBinding="true" z="user_managed"/>
+	        <field:input field="newpassword" type="password" id="c_br_ufpr_c3sl_participatorio_usuario_newpass" disableFormBinding="true" z="user_managed"/>
+			<input type="submit" value="Save"/> 
+		</form>  
+
+    
+</div>
diff --git a/src/main/webapp/WEB-INF/views/usuarios/error.jspx b/src/main/webapp/WEB-INF/views/usuarios/error.jspx
new file mode 100644
index 0000000..03262ef
--- /dev/null
+++ b/src/main/webapp/WEB-INF/views/usuarios/error.jspx
@@ -0,0 +1,11 @@
+<div xmlns:spring="http://www.springframework.org/tags" xmlns:util="urn:jsptagdir:/WEB-INF/tags/util" xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
+  <jsp:directive.page contentType="text/html;charset=UTF-8" />
+  <jsp:output omit-xml-declaration="yes" />
+  <spring:message var="app_name" code="application_name" htmlEscape="false" />
+  <spring:message var="title" code="welcome_titlepane" arguments="${app_name}" htmlEscape="false" />
+  <util:panel id="title" title="Error">
+    <b>
+      Não foi possível concluir a operação.
+    </b>
+  </util:panel>
+</div>
diff --git a/src/main/webapp/WEB-INF/views/usuarios/views.xml b/src/main/webapp/WEB-INF/views/usuarios/views.xml
index af1ed3f..711d6cf 100644
--- a/src/main/webapp/WEB-INF/views/usuarios/views.xml
+++ b/src/main/webapp/WEB-INF/views/usuarios/views.xml
@@ -13,4 +13,13 @@
 <definition extends="default" name="usuarios/update">
         <put-attribute name="body" value="/WEB-INF/views/usuarios/update.jspx"/>
     </definition>
+<definition extends="default" name="usuarios/accepted">
+        <put-attribute name="body" value="/WEB-INF/views/usuarios/accepted.jspx"/>
+    </definition>
+<definition extends="default" name="usuarios/error">
+        <put-attribute name="body" value="/WEB-INF/views/usuarios/error.jspx"/>
+    </definition>
+<definition extends="default" name="usuarios/changepassword">
+        <put-attribute name="body" value="/WEB-INF/views/usuarios/changepassword.jspx"/>
+    </definition>
 </tiles-definitions>
-- 
GitLab