KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > compiere > www > WLogin


1 /******************************************************************************
2  * The contents of this file are subject to the Compiere License Version 1.1
3  * ("License"); You may not use this file except in compliance with the License
4  * You may obtain a copy of the License at http://www.compiere.org/license.html
5  * Software distributed under the License is distributed on an "AS IS" basis,
6  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
7  * the specific language governing rights and limitations under the License.
8  * The Original Code is Compiere ERP & CRM Business Solution
9  * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
10  * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
11  * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
12  * Contributor(s): ______________________________________.
13  *****************************************************************************/

14 package org.compiere.www;
15
16 import javax.servlet.*;
17 import javax.servlet.http.*;
18
19 import java.io.*;
20 import java.util.*;
21 import java.sql.*;
22 import java.text.*;
23 import java.security.*;
24
25 import org.apache.ecs.*;
26 import org.apache.ecs.xhtml.*;
27
28 import org.compiere.util.*;
29
30 /**
31  * Web Login Page.
32  * <p>
33  * Page request:
34  * <pre>
35  * - Check database connection
36  * - LoginInfo from request?
37  * - Yes: DoLogin success ?
38  * - Yes: return (second) preferences page
39  * - No: return (first) user/password page
40  * - No: User Principal ?
41  * - Yes: DoLogin success ?
42  * - Yes: return (second) preferences page
43  * - No: return (first) user/password page
44  * - No: return (first) user/password page
45  * </pre>
46  *
47  * @author Jorg Janke
48  * @version $Id: WLogin.java,v 1.3 2003/09/29 01:34:27 jjanke Exp $
49  */

50 public class WLogin extends HttpServlet
51 {
52     /**
53      * Initialize
54      * @param config confif
55      * @throws ServletException
56      */

57     public void init(ServletConfig config) throws ServletException
58     {
59         super.init(config);
60         if (!WEnv.initWeb(config))
61             throw new ServletException("WLogin.init");
62     } // init
63

64     /**
65      * Get Servlet information
66      * @return servlet info
67      */

68     public String JavaDoc getServletInfo()
69     {
70         return "Compiere Web Login";
71     } // getServletInfo
72

73     /**
74      * Clean up
75      */

76     public void destroy()
77     {
78         Log.trace(Log.l1_User, "WLogin.destroy");
79         super.destroy();
80     } // destroy
81

82
83     /**
84      * Process the HTTP Get request - forward to Post
85      * @param request request
86      * @param response response
87      * @throws ServletException
88      * @throws IOException
89      */

90     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
91     {
92         Log.trace(Log.l1_User, "WLogin.doGet");
93         doPost (request, response);
94     } // doGet
95

96
97     /**
98      * Process the HTTP Post request.
99      * <pre>
100      * - Optionally create Session
101      * - Check database connection
102      * - LoginInfo from request?
103      * - Yes: DoLogin success ?
104      * - Yes: return (second) preferences page
105      * - No: return (first) user/password page
106      * - No: User Principal ?
107      * - Yes: DoLogin success ?
108      * - Yes: return (second) preferences page
109      * - No: return (first) user/password page
110      * - No: return (first) user/password page
111      * </pre>
112      * @param request request
113      * @param response response
114      * @throws ServletException
115      * @throws IOException
116      */

117     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
118     {
119         Log.trace(Log.l1_User, "WLogin.doPost");
120         // Create New Session
121
HttpSession sess = request.getSession(true);
122         sess.setMaxInactiveInterval(WEnv.TIMEOUT);
123
124         // Get/set Context
125
Properties ctx = (Properties)sess.getAttribute(WEnv.SA_CONTEXT);
126         if (ctx == null)
127             ctx = new Properties();
128         sess.setAttribute(WEnv.SA_CONTEXT, ctx);
129
130         // Get Cookie
131
Properties cProp = WUtil.getCookieProprties(request);
132         // Language
133
checkLanguage (request, sess, ctx, cProp);
134         // Page
135
WDoc doc = null;
136
137         // Check DB connection
138
if (!DB.isConnected())
139         {
140             String JavaDoc msg = Msg.getMsg(ctx, "WLoginNoDB");
141             doc = WDoc.create (msg);
142             if (msg.equals("WLoginNoDB"))
143                 msg = "No Database Connection";
144             doc.getBody().addElement(new h1(msg));
145         }
146
147         // Login Info from request?
148
else
149         {
150             // Get Parameters: UserName/Password
151
String JavaDoc usr = request.getParameter(P_USERNAME);
152             String JavaDoc pwd = request.getParameter(P_PASSWORD);
153             // Get Principle
154
Principal userPr = request.getUserPrincipal();
155             Log.trace(Log.l4_Data, "Principal=" + userPr + "; User=" + usr);
156
157             // Login info not from request and not pre-authorized
158
if (userPr == null && (usr == null || pwd == null))
159                 doc = createFirstPage (cProp, request, "");
160             // Login info from request or authorized
161
else
162             {
163                 KeyNamePair[] roles = null;
164                 // Pre-authorized
165
if (userPr != null)
166                 {
167                     roles = DB.login(ctx, userPr);
168                     usr = userPr.getName();
169                 }
170                 else
171                     roles = DB.login(ctx, usr, pwd);
172                 //
173
if (roles == null)
174                     doc = createFirstPage(cProp, request, Msg.getMsg(ctx, "UserPwdError"));
175                 else
176                     doc = createSecondPage(cProp, request, WUtil.convertToOption(roles, null), "");
177                 // Can we save Cookie ?
178
if (request.getParameter(P_STORE) == null)
179                 {
180                     cProp.clear(); // erase all
181
}
182                 else // Save Cookie Parameter
183
{
184                     cProp.setProperty(P_USERNAME, usr);
185                     cProp.setProperty(P_STORE, "Y");
186                     cProp.setProperty(P_PASSWORD, pwd); // For test only
187
}
188             }
189         }
190
191         //
192
WUtil.createResponse (request, response, this, cProp, doc, true);
193     } // doPost
194

195     // Variable Names
196
public static final String JavaDoc P_USERNAME = "User";
197     private static final String JavaDoc P_PASSWORD = "Password";
198     protected static final String JavaDoc P_LANGUAGE = Env.LANG;
199     private static final String JavaDoc P_SUBMIT = "Submit";
200     // WMenu picks it up
201
protected static final String JavaDoc P_ROLE = "AD_Role_ID";
202     protected static final String JavaDoc P_CLIENT = "AD_Client_ID";
203     protected static final String JavaDoc P_ORG = "AD_Org_ID";
204     protected static final String JavaDoc P_DATE = "Date";
205     protected static final String JavaDoc P_WAREHOUSE = "M_Warehouse_ID";
206     protected static final String JavaDoc P_ERRORMSG = "ErrorMessage";
207     protected static final String JavaDoc P_STORE = "SaveCookie";
208
209     /*************************************************************************/
210
211     /**
212      * Set Language from request or session in.
213      * - Properties
214      * - Cookie
215      * - Session
216      * @param request request
217      * @param sess sess
218      * @param ctx context
219      * @param cProp properties
220      */

221     private static void checkLanguage (HttpServletRequest request,
222         HttpSession sess, Properties ctx, Properties cProp)
223     {
224         // Get/set Parameter: Language
225
String JavaDoc AD_Language = request.getParameter(P_LANGUAGE);
226         if (AD_Language == null)
227         {
228             // Check Cookie
229
AD_Language = cProp.getProperty(P_LANGUAGE);
230             if (AD_Language == null)
231             {
232                 // Check Request Locale
233
Locale locale = request.getLocale();
234                 AD_Language = Language.getAD_Language (locale);
235             }
236         }
237         if (AD_Language != null)
238         {
239             Language language = Language.getLanguage(AD_Language);
240             Env.verifyLanguage(ctx, language);
241             Env.setContext(ctx, Env.LANG, language.getAD_Language());
242             cProp.setProperty(P_LANGUAGE, language.getAD_Language());
243             sess.setAttribute(WEnv.SA_LANGUAGE, language);
244         }
245     } // checkLanguage
246

247     /*************************************************************************/
248
249
250     /**
251      * First Login Page
252      * @param cProp Login Cookie information for defaults
253      * @param request request
254      * @param errorMessage error message
255      * @return WDoc page
256      */

257     private WDoc createFirstPage(Properties cProp, HttpServletRequest request,
258         String JavaDoc errorMessage)
259     {
260         Log.trace(Log.l4_Data, "WLogin.createFirstPage", errorMessage);
261         String JavaDoc AD_Language = (cProp.getProperty(P_LANGUAGE, Language.getAD_Language(request.getLocale())));
262         //
263
String JavaDoc windowTitle = Msg.getMsg(AD_Language, "Login");
264         String JavaDoc usrText = Msg.getMsg(AD_Language, "User");
265         String JavaDoc pwdText = Msg.getMsg(AD_Language, "Password");
266         String JavaDoc lngText = Msg.translate(AD_Language, "AD_Language");
267         String JavaDoc okText = Msg.getMsg(AD_Language, "OK");
268         String JavaDoc cancelText = Msg.getMsg(AD_Language, "Cancel");
269         String JavaDoc storeTxt = Msg.getMsg(AD_Language, "SaveCookie");
270
271         // Document
272
WDoc doc = WDoc.create (windowTitle);
273         body b = doc.getBody();
274         // Clear Menu Frame
275
b.addElement(WUtil.getClearFrame(WEnv.TARGET_MENU));
276
277         // Form - post to same URL
278
String JavaDoc action = request.getRequestURI();
279         form myForm = null;
280         myForm = new form(action, form.post, form.ENC_DEFAULT).setName("Login1");
281         myForm.setAcceptCharset(WEnv.CHARACTERSET);
282         table table = new table().setAlign(AlignType.center);
283
284         // Username
285
String JavaDoc userData = cProp.getProperty(P_USERNAME, "");
286         tr line = new tr();
287         label usrLabel = new label().setFor(P_USERNAME).addElement(usrText);
288         usrLabel.setID("ID_"+P_USERNAME);
289         line.addElement(new td().addElement(usrLabel).setAlign(AlignType.right));
290         input usr = new input(input.text, P_USERNAME, userData).setSize(20).setMaxlength(30);
291         usr.setID("ID_"+P_USERNAME);
292         line.addElement(new td().addElement(usr).setAlign(AlignType.left));
293         table.addElement(line);
294
295         // Password
296
String JavaDoc pwdData = cProp.getProperty(P_PASSWORD, "");
297         line = new tr();
298         label pwdLabel = new label().setFor(P_PASSWORD).addElement(pwdText);
299         pwdLabel.setID("ID_"+P_PASSWORD);
300         line.addElement(new td().addElement(pwdLabel).setAlign(AlignType.right));
301         input pwd = new input(input.password, P_PASSWORD, pwdData).setSize(20).setMaxlength(30);
302         pwd.setID("ID_"+P_PASSWORD);
303         line.addElement(new td().addElement(pwd).setAlign(AlignType.left));
304         table.addElement(line);
305
306         // Language Pick
307
String JavaDoc langData = cProp.getProperty(AD_Language);
308         line = new tr();
309         label langLabel = new label().setFor(P_LANGUAGE).addElement(lngText);
310         langLabel.setID("ID_"+P_LANGUAGE);
311         line.addElement(new td().addElement(langLabel).setAlign(AlignType.right));
312         option options[] = new option[Language.getLanguageCount()];
313         for (int i = 0; i < Language.getLanguageCount(); i++)
314         {
315             Language language = Language.getLanguage(i);
316             options[i] = new option(language.getAD_Language()).addElement(language.getName());
317             if (language.getAD_Language().equals(langData))
318                 options[i].setSelected(true);
319             else
320                 options[i].setSelected(false);
321         }
322         line.addElement(new td().addElement(new select(P_LANGUAGE, options).setID("ID_"+P_LANGUAGE) ));
323         table.addElement(line);
324
325         // Store Cookie
326
String JavaDoc storeData = cProp.getProperty(P_STORE, "N");
327         line = new tr();
328         line.addElement(new td());
329         input store = new input(input.checkbox, P_STORE, "Y").addElement(storeTxt).setChecked(storeData.equals("Y"));
330         store.setID("ID_"+P_STORE);
331         line.addElement(new td().addElement(store).setAlign(AlignType.left));
332         table.addElement(line);
333
334         // ErrorMessage
335
if (errorMessage != null && errorMessage.length() > 0)
336         {
337             line = new tr();
338         // line.addElement(new td());
339
line.addElement(new td().setColSpan(2)
340                 .addElement(new font(HtmlColor.red, 4).addElement(new b(errorMessage)))); // color, size
341
table.addElement(line);
342         }
343
344         // Finish
345
line = new tr();
346         input cancel = new input(input.reset, "Reset", cancelText);
347         line.addElement(new td().addElement(cancel ));
348         line.addElement(new td().addElement(new input(input.submit, P_SUBMIT, okText) ));
349         table.addElement(line);
350         //
351
myForm.addElement(table);
352         b.addElement(myForm);
353
354         return doc;
355     } // getUserPasswordPage
356

357
358     /**
359      * Create Second Page
360      * @param cProp clinet properties
361      * @param request request
362      * @param roleOptions role options
363      * @param errorMessage error message
364      * @return WDoc page
365      */

366     private WDoc createSecondPage(Properties cProp, HttpServletRequest request,
367         option[] roleOptions, String JavaDoc errorMessage)
368     {
369         Log.trace(Log.l4_Data, "WLogin.createSecondPage", errorMessage);
370         String JavaDoc AD_Language = cProp.getProperty(P_LANGUAGE, Language.getAD_Language(request.getLocale()));
371         String JavaDoc windowTitle = Msg.getMsg(AD_Language, "LoginSuccess");
372         // Create Document
373
WDoc doc = WDoc.create (windowTitle);
374         body b = doc.getBody();
375
376         // Form - Get Menu
377
String JavaDoc action = WEnv.getBaseDirectory("WMenu");
378         form myForm = null;
379         myForm = new form(action, form.post, form.ENC_DEFAULT).setName("Login2");
380         myForm.setTarget(WEnv.TARGET_MENU);
381         myForm.setAcceptCharset(WEnv.CHARACTERSET);
382         table table = new table().setAlign(AlignType.center);
383
384         // Role Pick
385
tr line = new tr();
386         label roleLabel = new label().setFor(P_ROLE).addElement(Msg.translate(AD_Language, "AD_Role_ID"));
387         line.addElement(new td().addElement(roleLabel).setAlign(AlignType.right));
388         select role = new select(P_ROLE, roleOptions);
389         role.setOnClick("fieldUpdate();"); // WFieldUpdate sets Client & Org
390
line.addElement(new td().addElement(role));
391         table.addElement(line);
392
393         // Client Pick
394
line = new tr();
395         label clientLabel = new label().setFor(P_CLIENT).addElement(Msg.translate(AD_Language, "AD_Client_ID"));
396         line.addElement(new td().addElement(clientLabel).setAlign(AlignType.right));
397         select client = new select(P_CLIENT);
398         client.setOnClick("fieldUpdate();"); // WFieldUpdate sets Warehouse
399
line.addElement(new td().addElement(client));
400         table.addElement(line);
401
402         // Org Pick
403
line = new tr();
404         label orgLabel = new label().setFor(P_ORG).addElement(Msg.translate(AD_Language, "AD_Org_ID"));
405         line.addElement(new td().addElement(orgLabel).setAlign(AlignType.right));
406         line.addElement(new td().addElement(new select(P_ORG) ));
407         table.addElement(line);
408
409         // Warehouse
410
line = new tr();
411         label whLabel = new label().setFor(P_WAREHOUSE).addElement(Msg.translate(AD_Language, "M_Warehouse_ID"));
412         line.addElement(new td().addElement(whLabel).setAlign(AlignType.right));
413         line.addElement(new td().addElement(new select(P_WAREHOUSE) ));
414         table.addElement(line);
415
416         // Date
417
Language language = (Language)request.getSession().getAttribute(WEnv.SA_LANGUAGE);
418         DateFormat df = DisplayType.getDateFormat(DisplayType.Date, language);
419         String JavaDoc dateData = df.format(new java.util.Date JavaDoc());
420         line = new tr();
421         label dateLabel = new label().setFor(P_DATE).addElement(Msg.getMsg(AD_Language, "Date"));
422         line.addElement(new td().addElement(dateLabel).setAlign(AlignType.right));
423         input date = new input(input.text, P_DATE, dateData).setSize(10).setMaxlength(10);
424         date.setID("ID_Date");
425         line.addElement(new td().addElement(date).setAlign(AlignType.left));
426         table.addElement(line);
427
428         // ErrorMessage
429
if (errorMessage != null && errorMessage.length() > 0)
430         {
431             line = new tr();
432             line.addElement(new td().addElement(new strong(errorMessage)).setColSpan(2).setAlign(AlignType.center));
433             table.addElement(line);
434         }
435
436         // Finish
437
line = new tr();
438         input cancel = new input(input.reset, "Reset", Msg.getMsg(AD_Language, "Cancel"));
439         line.addElement(new td().addElement(cancel ));
440         input submit = new input(input.submit, "Submit", Msg.getMsg(AD_Language, "OK"));
441         submit.setOnClick("showLoadingMenu('" + WEnv.getBaseDirectory("") + "');");
442         line.addElement(new td().addElement(submit));
443         table.addElement(line);
444
445         // Note
446
line = new tr();
447         String JavaDoc note = Msg.getMsg(AD_Language, "WLoginBrowserNote");
448         line.addElement(new td().addElement(note).setColSpan(2).setAlign(AlignType.center));
449         table.addElement(line);
450         //
451
myForm.addElement(table);
452         b.addElement(myForm);
453         //
454
String JavaDoc script = "document.Login2." + P_ROLE + ".click();"; // init dependency updates
455
b.addElement(new script(script));
456
457         return doc;
458     } // getSecondPage
459

460 } // WLogin
461
Popular Tags