KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jcorporate > expresso > services > validation > ChangePasswordValidator


1 /* ====================================================================
2  * The Jcorporate Apache Style Software License, Version 1.2 05-07-2002
3  *
4  * Copyright (c) 1995-2002 Jcorporate Ltd. 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
8  * are 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
15  * the documentation and/or other materials provided with the
16  * distribution.
17  *
18  * 3. The end-user documentation included with the redistribution,
19  * if any, must include the following acknowledgment:
20  * "This product includes software developed by Jcorporate Ltd.
21  * (http://www.jcorporate.com/)."
22  * Alternately, this acknowledgment may appear in the software itself,
23  * if and wherever such third-party acknowledgments normally appear.
24  *
25  * 4. "Jcorporate" and product names such as "Expresso" must
26  * not be used to endorse or promote products derived from this
27  * software without prior written permission. For written permission,
28  * please contact info@jcorporate.com.
29  *
30  * 5. Products derived from this software may not be called "Expresso",
31  * or other Jcorporate product names; nor may "Expresso" or other
32  * Jcorporate product names appear in their name, without prior
33  * written permission of Jcorporate Ltd.
34  *
35  * 6. No product derived from this software may compete in the same
36  * market space, i.e. framework, without prior written permission
37  * of Jcorporate Ltd. For written permission, please contact
38  * partners@jcorporate.com.
39  *
40  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
41  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
42  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
43  * DISCLAIMED. IN NO EVENT SHALL JCORPORATE LTD OR ITS CONTRIBUTORS
44  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
45  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
46  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
47  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
48  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
49  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
50  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51  * SUCH DAMAGE.
52  * ====================================================================
53  *
54  * This software consists of voluntary contributions made by many
55  * individuals on behalf of the Jcorporate Ltd. Contributions back
56  * to the project(s) are encouraged when you make modifications.
57  * Please send them to support@jcorporate.com. For more information
58  * on Jcorporate Ltd. and its products, please see
59  * <http://www.jcorporate.com/>.
60  *
61  * Portions of this software are based upon other open source
62  * products and are subject to their respective licenses.
63  */

64 package com.jcorporate.expresso.services.validation;
65
66 import com.jcorporate.expresso.core.ExpressoSchema;
67 import com.jcorporate.expresso.core.controller.Controller;
68 import com.jcorporate.expresso.core.controller.ControllerException;
69 import com.jcorporate.expresso.core.controller.ControllerRequest;
70 import com.jcorporate.expresso.core.controller.ControllerResponse;
71 import com.jcorporate.expresso.core.controller.NonHandleableException;
72 import com.jcorporate.expresso.core.controller.Transition;
73 import com.jcorporate.expresso.core.db.DBException;
74 import com.jcorporate.expresso.core.i18n.Messages;
75 import com.jcorporate.expresso.core.misc.StringUtil;
76 import com.jcorporate.expresso.core.security.User;
77 import com.jcorporate.expresso.services.dbobj.Setup;
78
79 import java.util.Hashtable JavaDoc;
80 import java.util.Vector JavaDoc;
81
82
83 /**
84  * This class is a helper class that allows the LoginController controller to
85  * validate the password-change request.
86  *
87  * @author Shash Chatterjee
88  * @see com.jcorporate.expresso.services.controller.LoginController
89  */

90 public class ChangePasswordValidator implements ValidationHandler {
91
92     /**
93      * Default constructor Creation date: (9/23/2001 2:23:06 PM) Author: Shash
94      * Chatterjee
95      */

96     public ChangePasswordValidator() {
97         super();
98     }
99
100     /**
101      * This method is used to send the user request a password change an email
102      * with a validation link to verify that the user indeed requested this
103      * service. This method is called by ValidationJob when a new validation
104      * request is submitted. Creation date: (9/23/2001 2:24:30 PM) Author:
105      * Shash Chatterjee
106      *
107      * @param params params All the application-specific parameters from
108      * LoginController
109      * @param URL URL The link that the user will click on to validate the
110      * request
111      * @throws AuthValidationException AuthValidationException
112      * @see com.jcorporate.expresso.services.job.ValidationJob
113      */

114     public void notify(Hashtable JavaDoc params, String JavaDoc URL)
115             throws AuthValidationException {
116         // The db context for the user (Note: this is different from the Validation entry context, which
117
// could very well be in a different DB context)
118
String JavaDoc dbName = (String JavaDoc) params.get("db");
119
120         // The login name of the user
121
String JavaDoc loginName = (String JavaDoc) params.get("UserName");
122         Vector JavaDoc addresses = new Vector JavaDoc(0);
123
124         try {
125             // Create the list of addresses to notify, in this case just the user
126
User myUser = new User();
127             myUser.setDataContext(dbName);
128             myUser.setLoginName(loginName);
129
130             if (!myUser.find()) {
131                 throw new AuthValidationException("User with login \"" +
132                         loginName + "\" not found");
133             }
134
135             addresses.add(myUser.getEmail());
136
137             Object JavaDoc[] args = {
138                 URL, Setup.getValue(dbName, "CompanyName"),
139                 Setup.getValue(dbName, "HomePageURL")
140             };
141
142             // add a schema param if you want to draw localized messages from your schema
143
String JavaDoc schema = (String JavaDoc) params.get("schema");
144             if (schema == null) {
145                 schema = ExpressoSchema.class.getName();
146             }
147
148             // Send email notification
149
ValidationEntry.notifyByEmail(dbName,
150                     Setup.getValue(dbName, "MAILFrom"),
151                     addresses,
152                     Messages.getString(schema, "passwdRequestedSubject"),
153                     Messages.getString(schema, "passwdRequested", args));
154         } catch (DBException dbe) {
155             throw new AuthValidationException("DB error accessing user \"" +
156                     loginName + "\"", dbe);
157         }
158     }
159
160     /**
161      * This method is used to regenerate an users password after the validation
162      * is successful. This method is called by ValidationController after a
163      * validation code matches that stored in the validation entry. Creation
164      * date: (9/23/2001 2:24:30 PM) Author: Shash Chatterjee
165      *
166      * @param params All the application-specific parameters from
167      * LoginController
168      * @param request the ControllerRequest object
169      * @param response The controller response from the runValidationState of
170      * ValidationController
171      * @param ctlr The ValidationController instance
172      * @return ControllerResponse object
173      * @throws ControllerException upon error
174      * @throws NonHandleableException for fatal error
175      * @see com.jcorporate.expresso.services.controller.ValidationController
176      */

177     public ControllerResponse validated(Hashtable JavaDoc params,
178                                         ControllerRequest request, ControllerResponse response, Controller ctlr)
179             throws ControllerException, NonHandleableException {
180         // The db context for the user (Note: this is different from the Validation entry context, which
181
// could very well be in a different DB context)
182
String JavaDoc dbname = (String JavaDoc) params.get("db");
183
184         // The login name of the user
185
String JavaDoc loginName = (String JavaDoc) params.get("UserName");
186         String JavaDoc loginController = (String JavaDoc) params.get("LoginController");
187
188         StringUtil.assertNotBlank(loginController,
189                 "Error - Change Password validator needed login controller parameter");
190
191         Transition t = new Transition();
192         t.setControllerObject(loginController);
193         t.setState("emailValidate");
194         t.setName("emailValidate");
195         t.addParam("db", dbname);
196         t.addParam("UserName", loginName);
197         t.addParam("LoginController", loginController);
198
199         //We redirect transition so that the user's URL changes
200
t.redirectTransition(request, response);
201
202         return response;
203     }
204
205 }
206
Popular Tags