1 28 29 package com.opencms.workplace; 30 31 import org.opencms.db.CmsDbEntryNotFoundException; 32 import org.opencms.db.CmsUserSettings; 33 import org.opencms.file.CmsObject; 34 import org.opencms.file.CmsProject; 35 import org.opencms.file.CmsUser; 36 import org.opencms.i18n.CmsMessages; 37 import org.opencms.main.CmsException; 38 import org.opencms.main.CmsLog; 39 import org.opencms.main.OpenCms; 40 import org.opencms.security.CmsSecurityException; 41 import org.opencms.workplace.CmsFrameset; 42 import org.opencms.workplace.CmsWorkplaceView; 43 44 import com.opencms.core.I_CmsSession; 45 import com.opencms.legacy.CmsLegacyException; 46 import com.opencms.legacy.CmsXmlTemplateLoader; 47 import com.opencms.template.A_CmsXmlContent; 48 import com.opencms.template.CmsCacheDirectives; 49 import com.opencms.template.CmsXmlTemplate; 50 import com.opencms.template.CmsXmlTemplateFile; 51 52 import java.util.Hashtable ; 53 import java.util.Iterator ; 54 55 64 65 public class CmsLoginNew extends CmsXmlTemplate { 66 67 68 private static final int DEBUG = 0; 69 70 86 public byte[] getContent(CmsObject cms, String templateFile, 87 String elementName, Hashtable parameters, String templateSelector) 88 throws CmsException { 89 90 if (DEBUG > 1) System.err.println("\nCmsLoginNew: Login process started"); 91 92 CmsXmlLanguageFile langFile = new CmsXmlLanguageFile(cms); 94 m_messages = langFile.getMessages(); 95 cms.getRequestContext().setEncoding(langFile.getEncoding()); 97 98 boolean logout = (null != (String )parameters.get("logout")); 100 101 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), false); 102 if (session != null) { 104 if (logout) { 106 session.invalidate(); 107 if (DEBUG > 2) System.err.println("CmsLoginNew: logout, trashed old session"); 108 } else { 109 if (DEBUG > 2) System.err.println("CmsLoginNew: kept old session, no logout parameter found"); 110 } 111 } else { 112 if (DEBUG > 2) System.err.println("CmsLoginNew: no current active session"); 113 } 114 115 CmsXmlTemplateFile xmlTemplateDocument = new CmsXmlTemplateFile(cms, templateFile); 117 118 String username = null; 119 CmsUser user; 120 121 String name = (String )parameters.get("OPENCMSUSERNAME"); 123 String password = (String )parameters.get("OPENCMSPASSWORD"); 124 String startTaskId = (String )parameters.get(CmsWorkplaceDefault.C_PARA_STARTTASKID); 126 String startProjectId = (String )parameters.get(CmsWorkplaceDefault.C_PARA_STARTPROJECTID); 127 128 if (DEBUG > 1) System.err.println("CmsLoginNew: name=" + name + " password=" + password + " task=" + startTaskId + " project=" + startProjectId); 129 130 if ((name != null) && (password != null)) { 131 if (DEBUG > 1) System.err.println("CmsLoginNew: trying to log in"); 132 boolean validLogin; 134 try { 135 username = cms.loginUser(name, password); 136 validLogin = true; 137 if (DEBUG > 1) System.err.println("CmsLoginNew: cms.loginUser() successfull"); 138 } catch (CmsException e) { 139 validLogin = false; 141 if (DEBUG > 1) System.err.println("CmsLoginNew: cms.loginUser() failed"); 142 } 143 144 if ((username != null) && (username.equals(OpenCms.getDefaultUsers().getUserGuest()))) { 145 validLogin = false; 148 if (DEBUG > 1) System.err.println("CmsLoginNew: user was guest user"); 149 } else if ((username != null) 150 && (! cms.userInGroup(username, OpenCms.getDefaultUsers().getGroupUsers())) 151 && (! cms.userInGroup(username, OpenCms.getDefaultUsers().getGroupProjectmanagers())) 152 && (! cms.userInGroup(username, OpenCms.getDefaultUsers().getGroupAdministrators()))) { 153 validLogin = false; 156 if (DEBUG > 1) System.err.println("CmsLoginNew: user was not in default groups"); 157 } 158 159 if (! validLogin) { 160 if (CmsLog.getLog(this).isInfoEnabled()) { 161 CmsLog.getLog(this).info("Failed login attempt for user '" + name + "'"); 162 } 163 throw new CmsLegacyException("[OpenCms login failed]", CmsLegacyException.C_NO_USER); 164 } 165 if (DEBUG > 0) System.err.println("CmsLoginNew: user " + username + " logged in"); 166 167 session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 170 if (CmsLog.getLog(this).isInfoEnabled()) { 171 CmsLog.getLog(this).info("Login of user '" + username + "'"); 172 } 173 174 user = cms.readUser(username); 176 177 setStartProjectId(cms, session, startProjectId); 179 180 setStartTaskId(session, startTaskId); 182 183 Hashtable preferences = (Hashtable )user.getAdditionalInfo(CmsUserSettings.ADDITIONAL_INFO_PREFERENCES); 185 if (preferences == null) { 187 preferences = getDefaultPreferences(); 188 } 189 session.removeValue(com.opencms.core.I_CmsConstants.C_START_LOCALE); 191 192 preferences.put(com.opencms.core.I_CmsConstants.C_START_LOCALE, cms.getRequestContext().getLocale().toString()); 193 session.putValue(CmsUserSettings.ADDITIONAL_INFO_PREFERENCES, preferences); 194 195 langFile = new CmsXmlLanguageFile(cms, cms.getRequestContext().getLocale().getLanguage()); 196 if (DEBUG > 1) System.err.println("CmsLoginNew: encoding: " + langFile.getEncoding()); 197 cms.getRequestContext().setEncoding(langFile.getEncoding()); 198 199 xmlTemplateDocument.setData("onload", "onload='login();'"); 201 } else if ((! logout) && ((cms.getRequestContext().currentUser()) != null) 202 && (! OpenCms.getDefaultUsers().getUserGuest().equals(cms.getRequestContext().currentUser().getName())) 203 && ((cms.userInGroup(cms.getRequestContext().currentUser().getName(), OpenCms.getDefaultUsers().getGroupUsers())) 204 || (cms.userInGroup(cms.getRequestContext().currentUser().getName(), OpenCms.getDefaultUsers().getGroupProjectmanagers())) 205 || (cms.userInGroup(cms.getRequestContext().currentUser().getName(), OpenCms.getDefaultUsers().getGroupAdministrators())))) { 206 if (DEBUG > 1) System.err.println("CmsLoginNew: re-using old login"); 208 xmlTemplateDocument.setData("onload", "onload='login();'"); 209 } else { 210 if (DEBUG > 1) System.err.println("CmsLoginNew: no login or logout, displaying template"); 212 xmlTemplateDocument.setData("onload", "onload='init();'"); 213 } 214 215 long id = System.currentTimeMillis(); 216 xmlTemplateDocument.setData("windowId", new Long (id).toString()); 217 xmlTemplateDocument.setData("startTaskId", startTaskId); 218 xmlTemplateDocument.setData("startProjectId", startProjectId); 219 220 if (DEBUG > 1) System.err.println("CmsLoginNew: Login process finished"); 221 222 return startProcessing(cms, xmlTemplateDocument, "", parameters, templateSelector); 224 } 225 226 235 private void setStartProjectId(CmsObject cms, I_CmsSession session, String startProjectId) 236 throws CmsException { 237 int currentProject = CmsProject.ONLINE_PROJECT_ID; 240 241 if ((startProjectId != null) && (! "".equals(startProjectId))) { 242 try { 244 currentProject = (new Integer (startProjectId)).intValue(); 245 } catch (NumberFormatException e) { 246 } 248 } else { 249 CmsUserSettings settings = new CmsUserSettings(cms); 251 try { 252 CmsProject project = cms.readProject(settings.getStartProject()); 253 currentProject = project.getId(); 254 } catch (CmsDbEntryNotFoundException e) { 255 currentProject = CmsProject.ONLINE_PROJECT_ID; 258 } 259 } 260 261 try { 263 CmsProject project = cms.readProject(currentProject); 264 if (! cms.getAllAccessibleProjects().contains(project)) { 265 currentProject = CmsProject.ONLINE_PROJECT_ID; 267 } 268 } catch (Exception e) { 269 currentProject = CmsProject.ONLINE_PROJECT_ID; 271 } 272 273 cms.getRequestContext().setCurrentProject(cms.readProject(currentProject)); 275 } 276 277 283 private void setStartTaskId(I_CmsSession session, String startTaskId) { 284 if ((startTaskId == null) || ("".equals(startTaskId))) { 285 return; 286 } 287 String link = ""; 288 Iterator i = OpenCms.getWorkplaceManager().getViews().iterator(); 289 while (i.hasNext()) { 290 CmsWorkplaceView view = (CmsWorkplaceView)i.next(); 291 if (view.getKey().equals("${key.select.tasks}")) { 292 link = view.getUri(); 293 break; 294 } 295 } 296 session.putValue(CmsWorkplaceDefault.C_PARA_STARTTASKID, startTaskId); 297 session.putValue(CmsWorkplaceDefault.C_PARA_VIEW, link); 298 } 299 300 private CmsMessages m_messages; 301 302 306 307 private Hashtable getDefaultPreferences() { 308 Hashtable pref = new Hashtable (); 309 int filelist = 4095 + 512; 311 pref.put(CmsWorkplaceDefault.C_USERPREF_FILELIST, new Integer (filelist)); 312 return pref; 313 } 314 315 326 public Object getTitle(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 327 throws CmsException { 328 String title = (String )super.getTitle(cms, tagcontent, doc, userObject); 329 if (title == null) title = ""; 330 title += " - " + OpenCms.getSystemInfo().getVersionName(); 331 return title; 332 } 333 334 344 public Object version(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 345 throws CmsException { 346 return OpenCms.getSystemInfo().getVersionName(); 347 } 348 349 360 public Object message(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 361 throws CmsException { 362 return m_messages.key(tagcontent); 363 } 364 365 375 public Object workplaceUri(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) 376 throws CmsException { 377 try { 378 cms.readResource(CmsFrameset.JSP_WORKPLACE_URI); 379 return OpenCms.getLinkManager().substituteLink(cms, CmsFrameset.JSP_WORKPLACE_URI); 380 } catch (CmsSecurityException se) { 381 return OpenCms.getLinkManager().substituteLink(cms, CmsFrameset.JSP_WORKPLACE_URI); 382 } catch (CmsException ce) { 383 } 385 return OpenCms.getLinkManager().substituteLink(cms, CmsWorkplaceAction.XML_WORKPLACE_URI); 386 } 387 388 398 public boolean isCacheable(CmsObject cms, String templateFile, String elementName, 399 Hashtable parameters, String templateSelector) { 400 return false; 401 } 402 403 413 public CmsCacheDirectives getCacheDirectives(CmsObject cms, String templateFile, String elementName, Hashtable parameters, String templateSelector) { 414 return new CmsCacheDirectives(false); 415 } 416 } 417 | Popular Tags |