1 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 50 public class WLogin extends HttpServlet 51 { 52 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 } 64 68 public String getServletInfo() 69 { 70 return "Compiere Web Login"; 71 } 73 76 public void destroy() 77 { 78 Log.trace(Log.l1_User, "WLogin.destroy"); 79 super.destroy(); 80 } 82 83 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 } 96 97 117 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 118 { 119 Log.trace(Log.l1_User, "WLogin.doPost"); 120 HttpSession sess = request.getSession(true); 122 sess.setMaxInactiveInterval(WEnv.TIMEOUT); 123 124 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 Properties cProp = WUtil.getCookieProprties(request); 132 checkLanguage (request, sess, ctx, cProp); 134 WDoc doc = null; 136 137 if (!DB.isConnected()) 139 { 140 String 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 else 149 { 150 String usr = request.getParameter(P_USERNAME); 152 String pwd = request.getParameter(P_PASSWORD); 153 Principal userPr = request.getUserPrincipal(); 155 Log.trace(Log.l4_Data, "Principal=" + userPr + "; User=" + usr); 156 157 if (userPr == null && (usr == null || pwd == null)) 159 doc = createFirstPage (cProp, request, ""); 160 else 162 { 163 KeyNamePair[] roles = null; 164 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 if (roles == null) 174 doc = createFirstPage(cProp, request, Msg.getMsg(ctx, "UserPwdError")); 175 else 176 doc = createSecondPage(cProp, request, WUtil.convertToOption(roles, null), ""); 177 if (request.getParameter(P_STORE) == null) 179 { 180 cProp.clear(); } 182 else { 184 cProp.setProperty(P_USERNAME, usr); 185 cProp.setProperty(P_STORE, "Y"); 186 cProp.setProperty(P_PASSWORD, pwd); } 188 } 189 } 190 191 WUtil.createResponse (request, response, this, cProp, doc, true); 193 } 195 public static final String P_USERNAME = "User"; 197 private static final String P_PASSWORD = "Password"; 198 protected static final String P_LANGUAGE = Env.LANG; 199 private static final String P_SUBMIT = "Submit"; 200 protected static final String P_ROLE = "AD_Role_ID"; 202 protected static final String P_CLIENT = "AD_Client_ID"; 203 protected static final String P_ORG = "AD_Org_ID"; 204 protected static final String P_DATE = "Date"; 205 protected static final String P_WAREHOUSE = "M_Warehouse_ID"; 206 protected static final String P_ERRORMSG = "ErrorMessage"; 207 protected static final String P_STORE = "SaveCookie"; 208 209 210 211 221 private static void checkLanguage (HttpServletRequest request, 222 HttpSession sess, Properties ctx, Properties cProp) 223 { 224 String AD_Language = request.getParameter(P_LANGUAGE); 226 if (AD_Language == null) 227 { 228 AD_Language = cProp.getProperty(P_LANGUAGE); 230 if (AD_Language == null) 231 { 232 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 } 247 248 249 250 257 private WDoc createFirstPage(Properties cProp, HttpServletRequest request, 258 String errorMessage) 259 { 260 Log.trace(Log.l4_Data, "WLogin.createFirstPage", errorMessage); 261 String AD_Language = (cProp.getProperty(P_LANGUAGE, Language.getAD_Language(request.getLocale()))); 262 String windowTitle = Msg.getMsg(AD_Language, "Login"); 264 String usrText = Msg.getMsg(AD_Language, "User"); 265 String pwdText = Msg.getMsg(AD_Language, "Password"); 266 String lngText = Msg.translate(AD_Language, "AD_Language"); 267 String okText = Msg.getMsg(AD_Language, "OK"); 268 String cancelText = Msg.getMsg(AD_Language, "Cancel"); 269 String storeTxt = Msg.getMsg(AD_Language, "SaveCookie"); 270 271 WDoc doc = WDoc.create (windowTitle); 273 body b = doc.getBody(); 274 b.addElement(WUtil.getClearFrame(WEnv.TARGET_MENU)); 276 277 String 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 String 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 String 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 String 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 String 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 if (errorMessage != null && errorMessage.length() > 0) 336 { 337 line = new tr(); 338 line.addElement(new td().setColSpan(2) 340 .addElement(new font(HtmlColor.red, 4).addElement(new b(errorMessage)))); table.addElement(line); 342 } 343 344 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 myForm.addElement(table); 352 b.addElement(myForm); 353 354 return doc; 355 } 357 358 366 private WDoc createSecondPage(Properties cProp, HttpServletRequest request, 367 option[] roleOptions, String errorMessage) 368 { 369 Log.trace(Log.l4_Data, "WLogin.createSecondPage", errorMessage); 370 String AD_Language = cProp.getProperty(P_LANGUAGE, Language.getAD_Language(request.getLocale())); 371 String windowTitle = Msg.getMsg(AD_Language, "LoginSuccess"); 372 WDoc doc = WDoc.create (windowTitle); 374 body b = doc.getBody(); 375 376 String 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 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();"); line.addElement(new td().addElement(role)); 391 table.addElement(line); 392 393 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();"); line.addElement(new td().addElement(client)); 400 table.addElement(line); 401 402 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 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 Language language = (Language)request.getSession().getAttribute(WEnv.SA_LANGUAGE); 418 DateFormat df = DisplayType.getDateFormat(DisplayType.Date, language); 419 String dateData = df.format(new java.util.Date ()); 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 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 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 line = new tr(); 447 String note = Msg.getMsg(AD_Language, "WLoginBrowserNote"); 448 line.addElement(new td().addElement(note).setColSpan(2).setAlign(AlignType.center)); 449 table.addElement(line); 450 myForm.addElement(table); 452 b.addElement(myForm); 453 String script = "document.Login2." + P_ROLE + ".click();"; b.addElement(new script(script)); 456 457 return doc; 458 } 460 } | Popular Tags |