Ignore:
Timestamp:
Mar 14, 2009, 10:04:39 AM (16 years ago)
Author:
gav
Message:

Add changePassword under options view so that users can change their own password.
Adjust for password validation, userCache etc. Only a small bug during "edit" is left on second "update" command.

Location:
branches/TaskRewrite/src/grails-app
Files:
1 added
4 deleted
13 edited

Legend:

Unmodified
Added
Removed
  • branches/TaskRewrite/src/grails-app/conf/BootStrap.groovy

    r71 r73  
    7272           
    7373        //Person
    74         def passwordEncoded = authenticateService.encodePassword("pass")
     74        def passClearText = "pass"
     75        def passwordEncoded = authenticateService.encodePassword(passClearText)
    7576        def personInstance
    7677
     
    7879                                    firstName:"Admin",
    7980                                    lastName:"Powers",
     81                                    pass:passClearText,
    8082                                    password:passwordEncoded,
    8183                                    email:"admin@example.com")
     84        BootStrapSaveAndTest(personInstance)
     85        personInstance.addToAuthorities(Authority.get(1))
     86        personInstance.addToAuthorities(Authority.get(2))
     87        personInstance.addToPersonGroups(PersonGroup.findByName("gnuMims"))
     88
     89        personInstance = new Person(loginName:"admin2",
     90                                    firstName:"Admin2",
     91                                    lastName:"Powers2",
     92                                    pass:passClearText,
     93                                    password:passwordEncoded,
     94                                    email:"admin2@example.com")
    8295        BootStrapSaveAndTest(personInstance)
    8396        personInstance.addToAuthorities(Authority.get(1))
     
    88101                                    firstName:"Demo",
    89102                                    lastName:"Danza",
     103                                    pass:passClearText,
    90104                                    password:passwordEncoded,
    91105                                    email:"user@example.com")
     
    97111                                    firstName:"Craig",
    98112                                    lastName:"SuperTech",
     113                                    pass:passClearText,
    99114                                    password:passwordEncoded,
    100115                                    email:"user@example.com")
     
    103118        personInstance.addToPersonGroups(PersonGroup.findByName("Electrical"))
    104119
    105         personInstance = new Person(loginName:"joe",
    106                                     firstName:"Joe",
     120        personInstance = new Person(loginName:"john",
     121                                    firstName:"John",
    107122                                    lastName:"Samples",
     123                                    pass:passClearText,
    108124                                    password:passwordEncoded,
    109125                                    email:"user@example.com")
     
    115131                                    firstName:"Production",
    116132                                    lastName:"Mann",
     133                                    pass:passClearText,
    117134                                    password:passwordEncoded,
    118135                                    email:"user@example.com")
  • branches/TaskRewrite/src/grails-app/conf/SecurityConfig.groovy

    r71 r73  
    4646    alwaysUseDefaultTargetUrl = true
    4747
     48    //User caching, turned this off so that password changes take effect.
     49    //It would appear that user is still in the session as logout/login
     50    // is still required for role changes to take effect.
     51    //If this option causes high database load try:
     52    //  import org.acegisecurity.providers.dao.DaoAuthenticationProvider
     53    //  import org.acegisecurity.context.SecurityContextHolder
     54    //  DaoAuthenticationProvider daoAuthenticationProvider
     55    //  def user = SecurityContextHolder.context.authentication.principal.username
     56    //  daoAuthenticationProvider.userCache.removeUserFromCache(user)
     57    //  in logout controller and perhaps on password change and role change.
     58    cacheUsers = false
     59
    4860}
  • branches/TaskRewrite/src/grails-app/controllers/AppCoreController.groovy

    r71 r73  
    1010    //def allowedMethods = [delete:'POST', save:'POST', update:'POST']
    1111
    12 
    1312    def home = {
    1413    }
    1514
    1615    def options = {
    17         def principal = authenticateService.principal()
    18         println principal.getUsername()//get username
    19         println principal.getAuthorities()//get authorities()
    2016    }
     17
     18    def changePassword = {
     19        //def principal = authenticateService.principal()
     20        //println principal.getAuthorities()
     21
     22        if (request.method == 'GET') {
     23            def personInstance = Person.get(authenticateService.userDomain().id)
     24            return [ personInstance : personInstance ]       
     25        } 
     26
     27        if (request.method == 'POST') {
     28            def personInstance = Person.get(authenticateService.userDomain().id)
     29   
     30            personInstance.pass = params.pass
     31            personInstance.password = authenticateService.encodePassword(personInstance.pass)
     32
     33            if (!personInstance.hasErrors() && personInstance.save()) {
     34                //userCache.removeUserFromCache(personInstance.loginName)
     35                flash.message = "Password changed successfully."
     36                redirect(action:options)
     37            }
     38            else {
     39                render(view:'changePassword',model:[personInstance:personInstance])
     40            }                         
     41        } 
     42    }
     43
    2144
    2245    @Secured(['ROLE_AppAdmin'])   
  • branches/TaskRewrite/src/grails-app/controllers/LoginController.groovy

    r59 r73  
    4949        def auth = {
    5050
    51                 nocache response
     51                nocache(response)
    5252
    5353                if (isLoggedIn()) {
  • branches/TaskRewrite/src/grails-app/controllers/PersonController.groovy

    r72 r73  
    9696                }
    9797
    98                 def oldPassword = person.password
    9998                person.properties = params
    100                 if (!params.password.equals(oldPassword)) {
    101                         person.password = authenticateService.encodePassword(params.password)
    102                 }
    103                 if (person.save()) {
    104                         Authority.findAll().each { it.removeFromPersons(person) }
    105                         addRoles(person)
    106                         redirect action: show, id: person.id
    107                 }
    108                 else {
    109                         render view: 'edit', model: buildPersonModel(person)
    110                 }
     99
     100        if (person.pass != "") {
     101            if (!person.hasErrors()) {
     102                person.password = authenticateService.encodePassword(params.pass)
     103            }
     104        }
     105        else {
     106            person.pass = "NothingToClearValidation"
     107        }
     108
     109        if (!person.hasErrors() && person.save()) {
     110            Authority.findAll().each { it.removeFromPersons(person) }
     111            addRoles(person)
     112            redirect action: show, id: person.id
     113        }
     114        else {
     115            render view: 'edit', model: buildPersonModel(person)
     116        }
     117
    111118        }
    112119
     
    122129                def person = new Person()
    123130                person.properties = params
    124                 person.password = authenticateService.encodePassword(params.password)
     131                person.password = authenticateService.encodePassword(params.pass)
    125132                if (person.save()) {
    126133                        addRoles(person)
  • branches/TaskRewrite/src/grails-app/domain/Person.groovy

    r66 r73  
    2727
    2828        /** plain password to create a MD5 password */
    29         String pass = '[secret]'
     29        String pass
    3030
    3131        static constraints = {
    32                 loginName(blank: false, unique: true)//minSize:7
     32                loginName(blank: false, unique: true, minSize:4)//minSize:7
    3333                firstName(blank: false)
    3434        lastName(blank: false)
    35                 password(blank: false) //minSize:7
    3635        employeeID(blank: true, nullable:true)
     36        description()
     37        email()
     38        emailShow()
     39        isActive()
     40        //Enforcing minSize on password does not work since "" gets encoded to a string.
     41                password(blank: false)
     42        //So we need to use pass for validation then encode it for above.
     43        pass(blank: false, minSize:4)
     44
    3745        }
    3846
  • branches/TaskRewrite/src/grails-app/i18n/messages.properties

    r55 r73  
     1person.pass.minSize.notmet=Password is less than the minimum size of [{3}]
     2person.pass.blank=Password cannot be blank
     3
    14default.doesnt.match.message=Property [{0}] of class [{1}] with value [{2}] does not match the required pattern [{3}]
    25default.invalid.url.message=Property [{0}] of class [{1}] with value [{2}] is not a valid URL
     
    2932typeMismatch.java.math.BigDecimal=Property {0} must be a valid number
    3033typeMismatch.java.math.BigInteger=Property {0} must be a valid number
     34
     35
  • branches/TaskRewrite/src/grails-app/views/_adminmenubar.gsp

    r71 r73  
    1414    <span class="appControlButton">
    1515        <g:link controller="logout">
    16                 Log out
     16                Log out (<g:loggedInUsername/>)
    1717        </g:link>
    1818    </span>
  • branches/TaskRewrite/src/grails-app/views/appCore/home.gsp

    r71 r73  
    1515                <div class="message">${flash.message}</div>
    1616            </g:if>
    17             <g:hasErrors bean="${appCoreInstance}">
     17            <g:hasErrors bean="${appCore}">
    1818                <div class="errors">
    19                     <g:renderErrors bean="${appCoreInstance}" as="list" />
     19                    <g:renderErrors bean="${appCore}" as="list" />
    2020                </div>
    2121            </g:hasErrors>
  • branches/TaskRewrite/src/grails-app/views/appCore/options.gsp

    r71 r73  
    1111        <div class="body">
    1212            <h1>Welcome to Options</h1>
     13            <g:if test="${flash.message}">
     14            <div class="message">${flash.message}</div>
     15            </g:if>
    1316            <br/>
    1417            <div class="dialog">
     18            <a href="${createLink(action:'changePassword')}">Change Password</a>
    1519
    1620            </div>
  • branches/TaskRewrite/src/grails-app/views/layouts/main.gsp

    r70 r73  
    77        <g:javascript library="application" />
    88    </head>
    9     <body>
     9   
     10    <!-- Added g:pageProperty so that onload in each page works -->
     11    <body onload="<g:pageProperty name='body.onload'/>">
    1012    <div id="wrapper" style="height: 100%;">
    1113    <div id="top">
     
    2426        </div>
    2527        <div class="appControl">
    26             <g:render template="/adminmenubar" />
     28             <g:render template="/adminmenubar" />
    2729        </div>
    2830        <!-- Body wrapper div for IE -->
  • branches/TaskRewrite/src/grails-app/views/person/create.gsp

    r59 r73  
    4949
    5050                                        <tr class="prop">
    51                                                 <td valign="top" class="name"><label for="password">Password:</label></td>
    52                                                 <td valign="top" class="value ${hasErrors(bean:person,field:'password','errors')}">
    53                                                         <input type="password" id="password" name="password" value="${person.password?.encodeAsHTML()}"/>
     51                                                <td valign="top" class="name"><label for="pass">Password:</label></td>
     52                                                <td valign="top" class="value ${hasErrors(bean:person,field:'pass','errors')}">
     53                                                        <input type="password" id="pass" name="pass"/>
    5454                                                </td>
    5555                                        </tr>
  • branches/TaskRewrite/src/grails-app/views/person/edit.gsp

    r65 r73  
    3131                        <input type="hidden" name="id" value="${person.id}" />
    3232                        <input type="hidden" name="version" value="${person.version}" />
     33            <input type="hidden" name="password" value="${person.password}" />
    3334                        <div class="dialog">
    3435                                <table>
     
    5758
    5859                                        <tr class="prop">
    59                                                 <td valign="top" class="name"><label for="password">Password:</label></td>
    60                                                 <td valign="top" class="value ${hasErrors(bean:person,field:'password','errors')}">
    61                                                         <input type="password" id="password" name="password" value="${person.password?.encodeAsHTML()}"/>
     60                                                <td valign="top" class="name"><label for="pass">Password:</label></td>
     61                                                <td valign="top" class="value ${hasErrors(bean:person,field:'pass','errors')}">
     62                                                        <input type="password" id="pass" name="pass"/>
    6263                                                </td>
    6364                                        </tr>
Note: See TracChangeset for help on using the changeset viewer.