1 74 package com.ivata.groupware.admin.security.addressbook; 75 76 import java.util.Arrays ; 77 import java.util.Collection ; 78 import java.util.Iterator ; 79 80 import com.ivata.groupware.admin.security.Security; 81 import com.ivata.groupware.admin.security.SecurityImpl; 82 import com.ivata.groupware.admin.security.server.SecurityServer; 83 import com.ivata.groupware.admin.security.server.SecuritySession; 84 import com.ivata.groupware.admin.security.user.UserDO; 85 import com.ivata.groupware.business.addressbook.person.PersonDO; 86 import com.ivata.groupware.business.addressbook.person.group.GroupConstants; 87 import com.ivata.groupware.business.addressbook.person.group.GroupDO; 88 import com.ivata.groupware.container.persistence.QueryPersistenceManager; 89 import com.ivata.groupware.container.persistence.TimestampDOHandling; 90 import com.ivata.mask.Mask; 91 import com.ivata.mask.MaskFactory; 92 import com.ivata.mask.field.Field; 93 import com.ivata.mask.persistence.FinderException; 94 import com.ivata.mask.persistence.PersistenceSession; 95 import com.ivata.mask.util.StringHandling; 96 import com.ivata.mask.util.SystemException; 97 import com.ivata.mask.validation.ValidationError; 98 import com.ivata.mask.validation.ValidationException; 99 100 101 111 public class AddressBookSecurityImpl extends SecurityImpl implements AddressBookSecurity { 112 private MaskFactory maskFactory; 113 117 private QueryPersistenceManager persistenceManager; 118 119 122 private SecurityServer securityServer; 123 124 130 public AddressBookSecurityImpl(QueryPersistenceManager persistenceManager, 131 SecurityServer securityServer, 132 final MaskFactory maskFactory, 133 final Boolean demoVersion) { 134 super(persistenceManager, securityServer, maskFactory, demoVersion); 135 this.persistenceManager = persistenceManager; 136 this.securityServer = securityServer; 137 this.maskFactory = maskFactory; 138 } 139 140 156 public void addUserToPerson(final SecuritySession securitySession, 157 final PersonDO person) 158 throws SystemException { 159 if (isDemoVersion()) { 160 return; 161 } 162 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 164 Mask userMask = maskFactory.getMask(UserDO.class); 165 Field userNameField = userMask.getField("name"); 166 Mask personMask = maskFactory.getMask(PersonDO.class); 167 try { 168 171 if ((person.getUser() == null) 173 || StringHandling.isNullOrEmpty(person 174 .getUser().getName())) { 175 throw new ValidationException( 176 new ValidationError( 177 "user", 178 Security.BUNDLE_PATH, 179 userNameField, 180 "errors.required")); 181 } 182 183 UserDO user = person.getUser(); 186 if (user.isDeleted()) { 188 user.setEnabled(false); 189 } 190 191 if (user.isEnabled() && 192 StringHandling.isNullOrEmpty(person.getEmailAddress())) { 193 throw new ValidationException( 194 new ValidationError( 195 "errors.addressBook.user.emailAddress", 196 Arrays.asList(new Object [] { 197 person.getFileAs() 198 }))); 199 200 } 201 if (isUser(securitySession, user.getName())) { 203 throw new ValidationException( 204 new ValidationError( 205 "user", 206 Security.BUNDLE_PATH, 207 userNameField, 208 "errors.unique" 209 )); 210 } 211 user.setId(person.getId()); 213 persistenceManager.add(persistenceSession, user); 214 215 if (user.isEnabled()) { 217 securityServer.addUser(securitySession, 218 user.getName(), getRealName( 219 persistenceSession, user)); 220 } 221 222 GroupDO userGroup = (GroupDO) persistenceManager.findByPrimaryKey( 225 persistenceSession, 226 GroupDO.class, 227 GroupConstants.USER_GROUP); 228 229 user.getGroups().add(userGroup); 231 persistenceManager.amend(persistenceSession, user); 232 233 createPrivateGroups(persistenceSession, securitySession, user); 235 236 TimestampDOHandling.amend(securitySession, person); 237 persistenceManager.amend(persistenceSession, person); 238 } catch (Exception e) { 239 persistenceSession.cancel(); 240 throw new SystemException(e); 241 } finally { 242 persistenceSession.close(); 243 } 244 } 245 252 public void createPrivateGroups( 253 final PersistenceSession persistenceSession, 254 final SecuritySession securitySession, 255 final UserDO user) 256 throws SystemException { 257 if (isDemoVersion()) { 258 return; 259 } 260 GroupDO privateUser = (GroupDO) persistenceManager.findByPrimaryKey( 262 persistenceSession, 263 GroupDO.class, 264 GroupConstants.USER_GROUP_PRIVATE); 265 GroupDO privateAddressBook = (GroupDO) persistenceManager 266 .findByPrimaryKey(persistenceSession, 267 GroupDO.class, 268 GroupConstants.ADDRESS_BOOK_PRIVATE); 269 270 GroupDO privateUserGroup = new GroupDO(); 272 privateUserGroup.setName(user.getName()); 273 privateUserGroup.setParent(privateUser); 274 275 privateUserGroup.getUsers().add(user); 277 privateUserGroup.setDescription("Private group for user id " 278 + user.getId()); 279 privateUserGroup = (GroupDO) persistenceManager.add(persistenceSession, 280 privateUserGroup); 281 282 283 GroupDO privateUserAddressBookGroup = new GroupDO(); 286 privateUserAddressBookGroup.setParent(privateAddressBook); 287 privateUserAddressBookGroup.setName(user.getName()); 288 privateUserAddressBookGroup.setDescription( 289 "Private address book for user id " 290 + user.getId()); 291 privateUserAddressBookGroup = (GroupDO) persistenceManager.add(persistenceSession, 292 privateUserAddressBookGroup); 293 294 } 295 296 306 protected String getRealName(final PersistenceSession persistenceSession, 307 final UserDO user) 308 throws SystemException { 309 return user.getName(); 311 } 312 321 public boolean isUser(SecuritySession securitySessionParam, 322 String userNameParam) throws SystemException { 323 if (isDemoVersion()) { 324 return false; 325 } 326 boolean isUser = super.isUser(securitySessionParam, userNameParam); 327 if (!isUser) { 328 PersistenceSession persistenceSession = persistenceManager 329 .openSession(securitySessionParam); 330 try { 331 persistenceManager.findInstance(persistenceSession, 332 "securityUserByName", 333 new Object [] { userNameParam }); 334 isUser = true; 335 } catch (FinderException thatsGood) { 336 } finally { 338 persistenceSession.close(); 339 } 340 } 341 return isUser; 342 } 343 344 349 public String loginAgain(final SecuritySession securitySession, 350 final String userNameParam) 351 throws SystemException { 352 String userNameReturn = userNameParam; 353 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 354 try { 355 if (userNameReturn.equals("emergency")) { 356 GroupDO group = (GroupDO) persistenceManager.findByPrimaryKey( 357 persistenceSession, 358 GroupDO.class, 359 GroupConstants.GROUP_ADMINISTRATOR); 360 Collection admins = group.getUsers(); 361 Iterator iterator = admins.iterator(); 362 UserDO firstAdmin = (UserDO) iterator.next(); 363 userNameReturn = firstAdmin.getName(); 364 } 365 } catch (Exception e) { 366 persistenceSession.cancel(); 367 throw new SystemException(e); 368 } finally { 369 persistenceSession.close(); 370 } 371 372 return userNameReturn; 373 } 374 protected void onAmendUserName(final SecuritySession securitySession, 375 final PersistenceSession persistenceSession, 376 final UserDO user, 377 final String oldUserName) 378 throws SystemException { 379 if (isDemoVersion()) { 380 return; 381 } 382 GroupDO group = (GroupDO) persistenceManager.findInstance(persistenceSession, 385 "addressBookGroupsInGroupByName", 386 new Object [] { GroupConstants.ADDRESS_BOOK_PRIVATE, oldUserName }); 387 group.setName(user.getName()); 388 persistenceManager.amend(persistenceSession, group); 389 390 group = (GroupDO) persistenceManager.findInstance(persistenceSession, 391 "addressBookGroupsInGroupByName", 392 new Object [] { GroupConstants.USER_GROUP_PRIVATE, oldUserName }); 393 group.setName(user.getName()); 394 persistenceManager.amend(persistenceSession, group); 395 super.onAmendUserName(securitySession, 396 persistenceSession, user, oldUserName); 397 } 398 } 399 | Popular Tags |