]> source.dussan.org Git - archiva.git/blob
e686277c2fe7e15defc01511d676b7bf7420ed8e
[archiva.git] /
1 package org.apache.archiva.redback.struts2.action;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.archiva.redback.keys.KeyManager;
23 import org.apache.archiva.redback.policy.UserSecurityPolicy;
24 import org.apache.archiva.redback.users.UserManager;
25 import org.apache.archiva.redback.users.UserNotFoundException;
26 import org.apache.archiva.redback.keys.AuthenticationKey;
27 import org.apache.archiva.redback.keys.KeyManagerException;
28 import org.apache.archiva.redback.system.SecuritySystem;
29 import org.apache.archiva.redback.users.User;
30 import org.codehaus.plexus.util.StringUtils;
31 import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
32 import org.apache.archiva.redback.integration.interceptor.SecureActionException;
33 import org.apache.archiva.redback.integration.mail.Mailer;
34 import org.springframework.context.annotation.Scope;
35 import org.springframework.stereotype.Controller;
36
37 import javax.inject.Inject;
38 import java.util.Arrays;
39
40 /**
41  * PasswordResetAction
42  *
43  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
44  * @version $Id$
45  */
46 @Controller( "redback-password-reset" )
47 @Scope( "prototype" )
48 public class PasswordResetAction
49     extends AbstractSecurityAction
50     implements CancellableAction
51 {
52     // ------------------------------------------------------------------
53     //  Component Requirements
54     // ------------------------------------------------------------------
55
56     /**
57      *
58      */
59     @Inject
60     private Mailer mailer;
61
62     /**
63      *
64      */
65     @Inject
66     private SecuritySystem securitySystem;
67
68     private String username;
69
70     // ------------------------------------------------------------------
71     // Action Entry Points - (aka Names)
72     // ------------------------------------------------------------------
73
74     public String show()
75     {
76         return INPUT;
77     }
78
79     public String reset()
80     {
81         if ( StringUtils.isEmpty( username ) )
82         {
83             addFieldError( "username", getText( "username.cannot.be.empty" ) );
84             return INPUT;
85         }
86
87         UserManager userManager = securitySystem.getUserManager();
88         KeyManager keyManager = securitySystem.getKeyManager();
89         UserSecurityPolicy policy = securitySystem.getPolicy();
90
91         try
92         {
93             User user = userManager.findUser( username );
94
95             AuthenticationKey authkey = keyManager.createKey( username, "Password Reset Request",
96                                                               policy.getUserValidationSettings().getEmailValidationTimeout() );
97
98             mailer.sendPasswordResetEmail( Arrays.asList( user.getEmail() ), authkey, getBaseUrl() );
99
100             AuditEvent event = new AuditEvent( getText( "log.password.reset.request" ) );
101             event.setAffectedUser( username );
102             event.log();
103
104             addActionMessage( getText( "password.reset.success" ) );
105         }
106         catch ( UserNotFoundException e )
107         {
108             // By default, the success and failure messages are the same.
109             // This is done to prevent a malicious user from attempting to ascertain the
110             // validity of usernames.
111             addActionMessage( getText( "password.reset.failure" ) );
112
113             log.info( "Password Reset on non-existant user [{}].", username );
114         }
115         catch ( KeyManagerException e )
116         {
117             addActionError( getText( "password.reset.email.generation.failure" ) );
118             log.info( "Unable to issue password reset.", e );
119         }
120
121         return INPUT;
122     }
123
124     // ------------------------------------------------------------------
125     // Security Specification
126     // ------------------------------------------------------------------
127
128     public SecureActionBundle initSecureActionBundle()
129         throws SecureActionException
130     {
131         return SecureActionBundle.OPEN;
132     }
133
134     public String cancel()
135     {
136         return NONE;
137     }
138
139     // ------------------------------------------------------------------
140     // Parameter Accessor Methods
141     // ------------------------------------------------------------------
142
143     public String getUsername()
144     {
145         return username;
146     }
147
148     public void setUsername( String username )
149     {
150         this.username = username;
151     }
152
153 }