KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > tigris > scarab > actions > ForgotPassword


1 package org.tigris.scarab.actions;
2
3 /* ================================================================
4  * Copyright (c) 2000-2002 CollabNet. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are
8  * met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in the
15  * documentation and/or other materials provided with the distribution.
16  *
17  * 3. The end-user documentation included with the redistribution, if
18  * any, must include the following acknowlegement: "This product includes
19  * software developed by Collab.Net <http://www.Collab.Net/>."
20  * Alternately, this acknowlegement may appear in the software itself, if
21  * and wherever such third-party acknowlegements normally appear.
22  *
23  * 4. The hosted project names must not be used to endorse or promote
24  * products derived from this software without prior written
25  * permission. For written permission, please contact info@collab.net.
26  *
27  * 5. Products derived from this software may not use the "Tigris" or
28  * "Scarab" names nor may "Tigris" or "Scarab" appear in their names without
29  * prior written permission of Collab.Net.
30  *
31  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
32  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
33  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
34  * IN NO EVENT SHALL COLLAB.NET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
35  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
37  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
38  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
39  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
40  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
41  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42  *
43  * ====================================================================
44  *
45  * This software consists of voluntary contributions made by many
46  * individuals on behalf of Collab.Net.
47  */

48
49 import java.util.Calendar JavaDoc;
50 import java.util.Locale JavaDoc;
51
52 // Turbine Stuff
53
import org.apache.turbine.Turbine;
54 import org.apache.turbine.TemplateContext;
55 import org.apache.turbine.RunData;
56 import org.apache.turbine.modules.ContextAdapter;
57
58 import org.apache.fulcrum.security.TurbineSecurity;
59 import org.apache.turbine.tool.IntakeTool;
60 import org.apache.fulcrum.intake.model.Group;
61 import org.apache.fulcrum.security.util.TurbineSecurityException;
62
63 // Scarab Stuff
64
import org.tigris.scarab.om.ScarabUser;
65 import org.tigris.scarab.tools.ScarabLocalizationTool;
66 import org.tigris.scarab.tools.localization.L10NKeySet;
67 import org.tigris.scarab.tools.localization.L10NMessage;
68 import org.tigris.scarab.tools.localization.Localizable;
69 import org.tigris.scarab.util.Email;
70 import org.tigris.scarab.util.Log;
71 import org.tigris.scarab.util.PasswordGenerator;
72 import org.tigris.scarab.util.ScarabConstants;
73 import org.tigris.scarab.actions.base.ScarabTemplateAction;
74
75 /**
76  * This class is responsible for dealing with the Forgot Password
77  * Action.
78  *
79  * @author <a HREF="mailto:kevin.minshull@bitonic.com">Kevin Minshull</a>
80  */

81 public class ForgotPassword extends ScarabTemplateAction
82 {
83     /**
84      * This manages clicking the Forgot Password button
85      */

86     public void doForgotpassword(RunData data, TemplateContext context)
87         throws Exception JavaDoc
88     {
89         data.setACL(null);
90         IntakeTool intake = getIntakeTool(context);
91         if (intake.isAllValid() && forgotPassword(data, context))
92         {
93             setTarget(data, "Login.vm");
94         }
95     }
96     
97     /**
98      * This takes care of looking the user up, setting the password to an arbitrary
99      * value and sending the user an email
100      */

101     public boolean forgotPassword(RunData data, TemplateContext context)
102         throws Exception JavaDoc
103     {
104         IntakeTool intake = getIntakeTool(context);
105         
106         Group password = intake.get("ForgotPassword", IntakeTool.DEFAULT_KEY);
107         String JavaDoc username = password.get("Username").toString();
108         
109         ScarabUser user = null;
110         try
111         {
112             user = (ScarabUser) TurbineSecurity.getUser(username);
113             
114             String JavaDoc tempPassword = PasswordGenerator.generate();
115             
116             // first we need to save the user out of the session
117
user.setPasswordExpire(Calendar.getInstance());
118             user.setHasLoggedIn(Boolean.FALSE);
119             data.setUser(user);
120             data.save();
121
122             // set the password to a temporary value then set the password to
123
// expire now, forcing the user to change their password after login.
124
TurbineSecurity.forcePassword(user, tempPassword);
125
126             sendNotificationEmail(context, user, tempPassword);
127             
128             // create confirmation message
129
Localizable msg = new L10NMessage(L10NKeySet.PasswordResetMessage,
130                                               user.getEmail());
131             getScarabRequestTool(context).setConfirmMessage(msg);
132         }
133         catch (TurbineSecurityException e)
134         {
135             Localizable msg = new L10NMessage(L10NKeySet.InvalidUsername,username);
136             getScarabRequestTool(context).setAlertMessage(msg);
137             Log.get().error("ForgotPassword: ", e);
138             setTarget(data, "ForgotPassword.vm");
139             return false;
140         }
141         return true;
142     }
143
144     /**
145      * Send the a password reset notification to the given user.
146      *
147      * @param context
148      * @param user
149      * @param tempPassword
150      * @throws Exception
151      */

152     public static void sendNotificationEmail(TemplateContext context, ScarabUser user, String JavaDoc tempPassword) throws Exception JavaDoc
153     {
154         // place the password
155
// in the context for use in the email template.
156
context.put("password", tempPassword);
157
158         Email te = new Email();
159         
160         // Retrieve the charset to be used for the Email.
161
ScarabLocalizationTool l10n = (new ForgotPassword()).getLocalizationTool(context);
162         Locale JavaDoc locale = l10n.getPrimaryLocale();
163         String JavaDoc charset = Email.getCharset(locale);
164         te.setCharset(charset);
165         
166         
167         te.setContext(new ContextAdapter(context));
168         te.setTo(user.getFirstName() + " " + user.getLastName(), user.getEmail());
169         te.setFrom(
170             Turbine.getConfiguration()
171                 .getString("scarab.email.forgotpassword.fromName",
172                            "Scarab System"),
173             Turbine.getConfiguration()
174                 .getString("scarab.email.forgotpassword.fromAddress",
175                            "help@localhost"));
176         te.setSubject(
177             l10n.get(L10NKeySet.ForgotPasswordEmailSubject));
178         te.setTemplate(
179             Turbine.getConfiguration()
180                 .getString("scarab.email.forgotpassword.template",
181                            "email/ForgotPassword.vm"));
182         te.send();
183     }
184 }
185
Popular Tags