1 65 package com.ivata.groupware.admin.security; 66 67 import javax.ejb.EJBException ; 68 69 import com.ivata.groupware.admin.security.server.SecurityServer; 70 import com.ivata.groupware.admin.security.server.SecuritySession; 71 import com.ivata.groupware.admin.security.user.UserDO; 72 import com.ivata.groupware.business.BusinessLogic; 73 import com.ivata.groupware.container.persistence.QueryPersistenceManager; 74 import com.ivata.mask.Mask; 75 import com.ivata.mask.MaskFactory; 76 import com.ivata.mask.persistence.FinderException; 77 import com.ivata.mask.persistence.PersistenceSession; 78 import com.ivata.mask.util.SystemException; 79 import com.ivata.mask.validation.ValidationError; 80 import com.ivata.mask.validation.ValidationException; 81 82 83 93 public class SecurityImpl extends BusinessLogic implements Security { 94 private MaskFactory maskFactory; 95 96 100 private QueryPersistenceManager persistenceManager; 101 102 105 private SecurityServer securityServer; 106 107 111 private boolean demoVersion; 112 113 119 public SecurityImpl(final QueryPersistenceManager persistenceManager, 120 final SecurityServer securityServer, 121 final MaskFactory maskFactory, 122 final Boolean demoVersion) { 123 this.persistenceManager = persistenceManager; 124 this.securityServer = securityServer; 125 this.maskFactory = maskFactory; 126 this.demoVersion = demoVersion.booleanValue(); 127 } 128 139 public UserDO addUser(final SecuritySession securitySession, 140 final UserDO user) 141 throws SystemException { 142 if (demoVersion) { 144 return user; 145 } 146 147 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 148 Mask mask = maskFactory.getMask(UserDO.class); 149 150 if (user.isDeleted()) { 152 user.setEnabled(false); 153 } 154 if (isUser(securitySession, user.getName())) { 156 throw new ValidationException( 157 new ValidationError( 158 "user", 159 Security.BUNDLE_PATH, 160 mask.getField("name"), 161 "errors.unique" 162 )); 163 } 164 165 try { 166 persistenceManager.add(persistenceSession, user); 167 if (user.isEnabled()) { 169 securityServer.addUser(securitySession, 170 user.getName(), getRealName( 171 persistenceSession, user)); 172 } 173 } catch (Exception e) { 174 persistenceSession.cancel(); 175 throw new SystemException(e); 176 } finally { 177 persistenceSession.close(); 178 } 179 180 return user; 181 } 182 183 190 public void amendUser(final SecuritySession securitySession, 191 final UserDO user) 192 throws SystemException { 193 if (demoVersion) { 194 return; 195 } 196 Mask mask = maskFactory.getMask(UserDO.class); 197 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 199 UserDO oldUser = null; 200 201 try { 202 oldUser = (UserDO) persistenceManager.findByPrimaryKey(persistenceSession, 203 UserDO.class, user.getId()); 204 } catch (Exception e) { 205 persistenceSession.cancel(); 206 throw new SystemException(e); 207 } finally { 208 persistenceSession.close(); 209 } 210 persistenceSession = persistenceManager.openSession(securitySession); 211 try { 212 213 if (user.isDeleted()) { 215 user.setEnabled(false); 216 } 217 218 if (!user.isEnabled()) { 221 if (oldUser.isEnabled()) { 222 securityServer.removeUser(securitySession, 223 oldUser.getName()); 224 } 225 } else { 226 if (!oldUser.isEnabled()) { 229 securityServer.addUser(securitySession, 230 user.getName(), user.getDisplayName()); 231 } 232 if(!oldUser.getName().equals(user.getName())) { 233 try { 234 UserDO sameNameUser = 235 (UserDO) persistenceManager.findInstance(persistenceSession, 236 "securityUserByName", 237 new Object [] { user.getName() }); 238 throw new ValidationException( 239 new ValidationError( 240 "user", 241 Security.BUNDLE_PATH, 242 mask.getField("name"), 243 "errors.unique" 244 )); 245 } catch (FinderException thatsGood) { persistenceManager.amend(persistenceSession, user); 247 248 onAmendUserName(securitySession, persistenceSession, 251 user, oldUser.getName()); 252 } 253 } else { 254 persistenceManager.amend(persistenceSession, user); 255 } 256 } 257 } catch (Exception e) { 258 persistenceSession.cancel(); 259 throw new SystemException(e); 260 } finally { 261 persistenceSession.close(); 262 } 263 } 264 274 public void checkPassword(final SecuritySession securitySession, 275 final String password) 276 throws SystemException { 277 if (demoVersion) { 278 return; 279 } 280 UserDO user = securitySession.getUser(); 281 282 securityServer.checkPassword(securitySession, 284 user.getName(), password); 285 } 286 287 298 public void enableUser(final SecuritySession securitySession, 299 final String userNameEnable, 300 final boolean enable) 301 throws SystemException { 302 if (demoVersion) { 303 return; 304 } 305 Mask mask = maskFactory.getMask(UserDO.class); 306 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 308 try { 309 if (userNameEnable == null) { 310 throw new ValidationException( 311 new ValidationError( 312 "user", 313 Security.BUNDLE_PATH, 314 mask.getField("name"), 315 "errors.required")); 316 } 317 318 UserDO user = (UserDO) persistenceManager.findInstance(persistenceSession, 320 "securityUserByName", 321 new Object [] { userNameEnable }); 322 user.setEnabled(enable); 323 amendUser(securitySession, user); 324 } catch (Exception e) { 325 persistenceSession.cancel(); 326 throw new SystemException(e); 327 } finally { 328 persistenceSession.close(); 329 } } 330 331 337 public UserDO findUserByName(final SecuritySession securitySession, 338 final String userName) 339 throws SystemException { 340 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 341 try { 342 return (UserDO) persistenceManager.findInstance(persistenceSession, 343 "securityUserByName", new Object [] {userName}); 344 } catch (Exception e) { 345 persistenceSession.cancel(); 346 if (e instanceof SystemException) { 347 throw (SystemException) e; 348 } else { 349 throw new SystemException(e); 350 } 351 } finally { 352 persistenceSession.close(); 353 } 354 } 355 356 368 protected String getRealName(final PersistenceSession persistenceSession, 369 final UserDO user) 370 throws SystemException { 371 return user.getName(); 372 } 373 374 380 public final String getSystemUserName(final SecuritySession securitySession, 381 final String userName) { 382 return securityServer.getSystemUserName(securitySession, 383 userName); 384 } 385 386 390 public final String getUserNameFromSystemUserName( 391 final SecuritySession securitySession, 392 final String systemUserName) { 393 return securityServer.getUserNameFromSystemUserName(securitySession, 394 systemUserName); 395 } 396 401 public boolean isUser(SecuritySession securitySession, 402 String userNameParam) throws SystemException { 403 return securityServer.isUser(securitySession, 404 userNameParam); 405 } 406 407 415 public boolean isUserEnabled(final SecuritySession securitySession, 416 final String userName) 417 throws SystemException { 418 if (demoVersion) { 419 return false; 420 } 421 assert (userName != null); 422 423 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 425 try { 426 427 UserDO user = (UserDO) persistenceManager.findInstance(persistenceSession, 429 "securityUserByName", 430 new Object [] { userName }); 431 432 return user.isEnabled(); 433 } catch (Exception e) { 434 persistenceSession.cancel(); 435 throw new SystemException(e); 436 } finally { 437 persistenceSession.close(); 438 } 439 } 440 441 452 public SecuritySession login(final UserDO user, 453 final String password) throws SystemException { 454 SecuritySession session; 455 session = securityServer.login(user, password); 456 457 return session; 458 } 459 460 465 public String loginAgain(final SecuritySession securitySession, 466 final String userName) 467 throws SystemException { 468 return "guest"; 469 } 470 471 478 public SecuritySession loginGuest() throws SystemException { 479 SecuritySession session; 480 481 session = securityServer.loginGuest(); 482 483 return session; 484 } 485 486 496 protected void onAmendUserName( 497 final SecuritySession securitySession, 498 final PersistenceSession persistenceSession, 499 final UserDO user, 500 final String oldName) 501 throws SystemException { 502 if (demoVersion) { 503 return; 504 } 505 Mask mask = maskFactory.getMask(UserDO.class); 506 if (securityServer.isUser(securitySession, user.getName())) { 511 throw new ValidationException( 512 new ValidationError( 513 "user", 514 Security.BUNDLE_PATH, 515 mask.getField("name"), 516 "errors.unique")); 517 } 518 securityServer.removeUser(securitySession, oldName); 519 securityServer.addUser(securitySession, user.getName(), 520 getRealName(persistenceSession, user)); 521 } 522 523 533 public void removeUser(final SecuritySession securitySession, 534 final String userNameRemove) 535 throws SystemException { 536 if (demoVersion) { 537 return; 538 } 539 Mask mask = maskFactory.getMask(UserDO.class); 541 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 542 543 try { 544 if (userNameRemove == null) { 545 throw new ValidationException( 546 new ValidationError( 547 "user", 548 Security.BUNDLE_PATH, 549 mask.getField("name"), 550 "errors.required")); 551 } 552 553 UserDO user = (UserDO) persistenceManager.findInstance(persistenceSession, 555 "securityUserByName", 556 new Object [] { userNameRemove }); 557 user.setDeleted(true); 559 amendUser(securitySession, user); 560 } catch (Exception e) { 561 persistenceSession.cancel(); 562 throw new SystemException(e); 563 } finally { 564 persistenceSession.close(); 565 } 566 } 567 568 573 public void restoreUser(final SecuritySession securitySession, 574 final String restoreUserName) throws SystemException { 575 if (demoVersion) { 576 return; 577 } 578 assert (restoreUserName != null); 579 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 580 try { 581 UserDO user = (UserDO) persistenceManager.findInstance(persistenceSession, 583 "securityUserByName", 584 new Object [] { restoreUserName }); 585 user.setDeleted(false); 586 amendUser(securitySession, user); 587 } catch (Exception e) { 588 persistenceSession.cancel(); 589 throw new SystemException(e); 590 } finally { 591 persistenceSession.close(); 592 } 593 } 594 595 607 public final void setPassword(final SecuritySession securitySession, 608 final String userNamePassword, 609 final String password) 610 throws SystemException { 611 if (demoVersion) { 612 return; 613 } 614 Mask mask = maskFactory.getMask(UserDO.class); 616 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 617 try { 618 if (userNamePassword == null) { 619 throw new ValidationException( 620 new ValidationError( 621 "user", 622 Security.BUNDLE_PATH, 623 mask.getField("name"), 624 "errors.required")); 625 } 626 627 UserDO user = (UserDO) persistenceManager.findInstance(persistenceSession, 629 "securityUserByName", 630 new Object [] { userNamePassword }); 631 632 securityServer.setPassword(securitySession, 634 user.getName(), password); 635 } catch (Exception e) { 636 persistenceSession.cancel(); 637 throw new SystemException(e); 638 } finally { 639 persistenceSession.close(); 640 } 641 } 642 645 protected boolean isDemoVersion() { 646 return demoVersion; 647 } 648 } 649 | Popular Tags |