Coverage Report - org.apache.turbine.om.security.DefaultUserImpl
 
Classes in this File Line Coverage Branch Coverage Complexity
DefaultUserImpl
50%
61/121
28%
8/28
1,385
 
 1  
 package org.apache.turbine.om.security;
 2  
 
 3  
 /*
 4  
  * Licensed to the Apache Software Foundation (ASF) under one
 5  
  * or more contributor license agreements.  See the NOTICE file
 6  
  * distributed with this work for additional information
 7  
  * regarding copyright ownership.  The ASF licenses this file
 8  
  * to you under the Apache License, Version 2.0 (the
 9  
  * "License"); you may not use this file except in compliance
 10  
  * with the License.  You may obtain a copy of the License at
 11  
  *
 12  
  *   http://www.apache.org/licenses/LICENSE-2.0
 13  
  *
 14  
  * Unless required by applicable law or agreed to in writing,
 15  
  * software distributed under the License is distributed on an
 16  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 17  
  * KIND, either express or implied.  See the License for the
 18  
  * specific language governing permissions and limitations
 19  
  * under the License.
 20  
  */
 21  
 
 22  
 import java.io.ByteArrayOutputStream;
 23  
 import java.io.PrintWriter;
 24  
 import java.util.Date;
 25  
 import java.util.HashMap;
 26  
 import java.util.Map;
 27  
 import java.util.Set;
 28  
 
 29  
 import javax.servlet.http.HttpSessionBindingEvent;
 30  
 
 31  
 import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
 32  
 import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
 33  
 import org.apache.turbine.services.security.TurbineSecurity;
 34  
 import org.apache.turbine.util.ObjectUtils;
 35  
 
 36  
 /**
 37  
  * This is the Default user implementation. It is a wrapper around
 38  
  * a TurbineUser object
 39  
  *
 40  
  * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
 41  
  * @version $Id: TorqueUser.java 1199856 2011-11-09 17:06:04Z tv $
 42  
  */
 43  
 
 44  
 public class DefaultUserImpl implements User
 45  
 {
 46  
     /** Serial version */
 47  
     private static final long serialVersionUID = -1866504873085624111L;
 48  
 
 49  
     /** The date on which the user last accessed the application. */
 50  8
     private Date lastAccessDate = null;
 51  
 
 52  
     /** This is data that will survive a servlet engine restart. */
 53  8
     private Map<String, Object> permStorage = null;
 54  
 
 55  
     /** This is data that will not survive a servlet engine restart. */
 56  8
     private Map<String, Object> tempStorage = null;
 57  
 
 58  
     /** The Fulcrum user instance to delegate to */
 59  8
     private TurbineUser userDelegate = null;
 60  
 
 61  
     /**
 62  
      * Constructor
 63  
      *
 64  
      * @param user the user object to wrap
 65  
      */
 66  
     public DefaultUserImpl(TurbineUser user)
 67  
     {
 68  8
         super();
 69  8
         this.userDelegate = user;
 70  8
         setCreateDate(new Date());
 71  8
         tempStorage = new HashMap<String, Object>(10);
 72  8
         setHasLoggedIn(Boolean.FALSE);
 73  8
     }
 74  
 
 75  
     /**
 76  
      * Implement this method if you wish to be notified when the User
 77  
      * has been Bound to the session.
 78  
      *
 79  
      * @param hsbe Indication of value/session binding.
 80  
      */
 81  
     @Override
 82  
     public void valueBound(HttpSessionBindingEvent hsbe)
 83  
     {
 84  
         // Currently we have no need for this method.
 85  0
     }
 86  
 
 87  
     /**
 88  
      * Implement this method if you wish to be notified when the User
 89  
      * has been Unbound from the session.
 90  
      *
 91  
      * @param hsbe Indication of value/session unbinding.
 92  
      */
 93  
     @Override
 94  
     public void valueUnbound(HttpSessionBindingEvent hsbe)
 95  
     {
 96  
         try
 97  
         {
 98  0
             if (hasLoggedIn())
 99  
             {
 100  0
                 TurbineSecurity.saveOnSessionUnbind(this);
 101  
             }
 102  
         }
 103  0
         catch (Exception e)
 104  
         {
 105  
             //Log.error("TorqueUser.valueUnbound(): " + e.getMessage(), e);
 106  
 
 107  
             // To prevent messages being lost in case the logging system
 108  
             // goes away before sessions get unbound on servlet container
 109  
             // shutdown, print the stacktrace to the container's console.
 110  0
             ByteArrayOutputStream ostr = new ByteArrayOutputStream();
 111  0
             e.printStackTrace(new PrintWriter(ostr, true));
 112  0
             String stackTrace = ostr.toString();
 113  0
             System.out.println(stackTrace);
 114  0
         }
 115  0
     }
 116  
 
 117  
     /**
 118  
      * Get the Name of the SecurityEntity.
 119  
      *
 120  
      * @return The Name of the SecurityEntity.
 121  
      */
 122  
     @Override
 123  
     public String getName()
 124  
     {
 125  24
         return userDelegate.getName();
 126  
     }
 127  
 
 128  
     /**
 129  
      * Sets the Name of the SecurityEntity.
 130  
      *
 131  
      * @param name
 132  
      *            Name of the SecurityEntity.
 133  
      */
 134  
     @Override
 135  
     public void setName(String name)
 136  
     {
 137  5
         userDelegate.setName(name);
 138  5
     }
 139  
 
 140  
     /**
 141  
      * Get the Id of the SecurityEntity.
 142  
      *
 143  
      * @return The Id of the SecurityEntity.
 144  
      */
 145  
     @Override
 146  
     public Object getId()
 147  
     {
 148  3
         return userDelegate.getId();
 149  
     }
 150  
 
 151  
     /**
 152  
      * Sets the Id of the SecurityEntity.
 153  
      *
 154  
      * @param id
 155  
      *            The new Id of the SecurityEntity
 156  
      */
 157  
     @Override
 158  
     public void setId(Object id)
 159  
     {
 160  1
         userDelegate.setId(id);
 161  1
     }
 162  
 
 163  
     /**
 164  
      * Returns the user's password. This method should not be used by
 165  
      * the application directly, because it's meaning depends upon
 166  
      * the implementation of UserManager that manages this particular
 167  
      * user object. Some implementations will use this attribute for
 168  
      * storing a password encrypted in some way, other will not use
 169  
      * it at all, when user entered password is presented to some external
 170  
      * authority (like NT domain controller) to validate it.
 171  
      * See also {@link org.apache.turbine.services.security.UserManager#authenticate(User,String)}.
 172  
      *
 173  
      * @return A String with the password for the user.
 174  
      */
 175  
     @Override
 176  
     public String getPassword()
 177  
     {
 178  2
         return userDelegate.getPassword();
 179  
     }
 180  
 
 181  
     /**
 182  
      * Set password. Application should not use this method
 183  
      * directly, see {@link #getPassword()}.
 184  
      * See also {@link org.apache.turbine.services.security.UserManager#changePassword(User,String,String)}.
 185  
      *
 186  
      * @param password The new password.
 187  
      */
 188  
     @Override
 189  
     public void setPassword(String password)
 190  
     {
 191  1
         userDelegate.setPassword(password);
 192  1
     }
 193  
 
 194  
     /**
 195  
      * Returns the first name for this user.
 196  
      *
 197  
      * @return A String with the user's first name.
 198  
      */
 199  
 
 200  
     @Override
 201  
     public String getFirstName()
 202  
     {
 203  0
         return userDelegate.getFirstName();
 204  
     }
 205  
 
 206  
     /**
 207  
      * Sets the first name for this user.
 208  
      *
 209  
      * @param firstName User's first name.
 210  
      */
 211  
     @Override
 212  
     public void setFirstName(String firstName)
 213  
     {
 214  0
         userDelegate.setFirstName(firstName);
 215  0
     }
 216  
 
 217  
     /**
 218  
      * Returns the last name for this user.
 219  
      *
 220  
      * @return A String with the user's last name.
 221  
      */
 222  
     @Override
 223  
     public String getLastName()
 224  
     {
 225  0
         return userDelegate.getLastName();
 226  
     }
 227  
 
 228  
     /**
 229  
      * Sets the last name for this user.
 230  
      *
 231  
      * @param lastName User's last name.
 232  
      */
 233  
     @Override
 234  
     public void setLastName(String lastName)
 235  
     {
 236  0
         userDelegate.setLastName(lastName);
 237  0
     }
 238  
 
 239  
     /**
 240  
      * Returns the email address for this user.
 241  
      *
 242  
      * @return A String with the user's email address.
 243  
      */
 244  
     @Override
 245  
     public String getEmail()
 246  
     {
 247  0
         return userDelegate.getEmail();
 248  
     }
 249  
 
 250  
     /**
 251  
      * Sets the email address.
 252  
      *
 253  
      * @param address The email address.
 254  
      */
 255  
     @Override
 256  
     public void setEmail(String address)
 257  
     {
 258  0
         userDelegate.setEmail(address);
 259  0
     }
 260  
 
 261  
     /**
 262  
      * Returns the value of the objectdata for this user.
 263  
      * Objectdata is a storage area used
 264  
      * to store the permanent storage table from the User
 265  
      * object.
 266  
      *
 267  
      * @return The bytes in the objectdata for this user
 268  
      */
 269  
     @Override
 270  
     public byte[] getObjectdata()
 271  
     {
 272  9
         return userDelegate.getObjectdata();
 273  
     }
 274  
 
 275  
     /**
 276  
      * Sets the value of the objectdata for the user
 277  
      *
 278  
      * @param objectdata The new permanent storage for the user
 279  
      */
 280  
     @Override
 281  
     public void setObjectdata(byte[] objectdata)
 282  
     {
 283  0
         userDelegate.setObjectdata(objectdata);
 284  0
     }
 285  
 
 286  
     /**
 287  
      * Get the User/Group/Role set associated with this entity
 288  
      *
 289  
      * @return a set of User/Group/Role relations
 290  
      */
 291  
     @Override
 292  
     public <T extends TurbineUserGroupRole> Set<T> getUserGroupRoleSet()
 293  
     {
 294  1
         return userDelegate.getUserGroupRoleSet();
 295  
     }
 296  
 
 297  
     /**
 298  
      * Set the User/Group/Role set associated with this entity
 299  
      *
 300  
      * @param userGroupRoleSet
 301  
      *            a set of User/Group/Role relations
 302  
      */
 303  
     @Override
 304  
     public <T extends TurbineUserGroupRole> void setUserGroupRoleSet(Set<T> userGroupRoleSet)
 305  
     {
 306  0
         userDelegate.setUserGroupRoleSet(userGroupRoleSet);
 307  0
     }
 308  
 
 309  
     /**
 310  
      * Add a User/Group/Role relation to this entity
 311  
      *
 312  
      * @param userGroupRole
 313  
      *            a User/Group/Role relation to add
 314  
      */
 315  
     @Override
 316  
     public void addUserGroupRole(TurbineUserGroupRole userGroupRole)
 317  
     {
 318  0
         userDelegate.addUserGroupRole(userGroupRole);
 319  0
     }
 320  
 
 321  
     /**
 322  
      * Remove a User/Group/Role relation from this entity
 323  
      *
 324  
      * @param userGroupRole
 325  
      *            a User/Group/Role relation to remove
 326  
      */
 327  
     @Override
 328  
     public void removeUserGroupRole(TurbineUserGroupRole userGroupRole)
 329  
     {
 330  0
         userDelegate.removeUserGroupRole(userGroupRole);
 331  0
     }
 332  
 
 333  
     /**
 334  
      * Gets the access counter for a user from perm storage.
 335  
      *
 336  
      * @return The access counter for the user.
 337  
      */
 338  
     @Override
 339  
     public int getAccessCounter()
 340  
     {
 341  
         try
 342  
         {
 343  1
             return ((Integer) getPerm(User.ACCESS_COUNTER)).intValue();
 344  
         }
 345  1
         catch (Exception e)
 346  
         {
 347  1
             return 0;
 348  
         }
 349  
     }
 350  
 
 351  
     /**
 352  
      * Gets the access counter for a user during a session.
 353  
      *
 354  
      * @return The access counter for the user for the session.
 355  
      */
 356  
     @Override
 357  
     public int getAccessCounterForSession()
 358  
     {
 359  
         try
 360  
         {
 361  1
             return ((Integer) getTemp(User.SESSION_ACCESS_COUNTER)).intValue();
 362  
         }
 363  1
         catch (Exception e)
 364  
         {
 365  1
             return 0;
 366  
         }
 367  
     }
 368  
 
 369  
     /**
 370  
      * Increments the permanent hit counter for the user.
 371  
      */
 372  
     @Override
 373  
     public void incrementAccessCounter()
 374  
     {
 375  
         // Ugh. Race city, here I come...
 376  1
         setAccessCounter(getAccessCounter() + 1);
 377  1
     }
 378  
 
 379  
     /**
 380  
      * Increments the session hit counter for the user.
 381  
      */
 382  
     @Override
 383  
     public void incrementAccessCounterForSession()
 384  
     {
 385  1
         setAccessCounterForSession(getAccessCounterForSession() + 1);
 386  1
     }
 387  
 
 388  
     /**
 389  
      * Sets the access counter for a user, saved in perm storage.
 390  
      *
 391  
      * @param cnt The new count.
 392  
      */
 393  
     @Override
 394  
     public void setAccessCounter(int cnt)
 395  
     {
 396  1
         setPerm(User.ACCESS_COUNTER, Integer.valueOf(cnt));
 397  1
     }
 398  
 
 399  
     /**
 400  
      * Sets the session access counter for a user, saved in temp
 401  
      * storage.
 402  
      *
 403  
      * @param cnt The new count.
 404  
      */
 405  
     @Override
 406  
     public void setAccessCounterForSession(int cnt)
 407  
     {
 408  1
         setTemp(User.SESSION_ACCESS_COUNTER, Integer.valueOf(cnt));
 409  1
     }
 410  
 
 411  
     /**
 412  
      * Gets the last access date for this User.  This is the last time
 413  
      * that the user object was referenced.
 414  
      *
 415  
      * @return A Java Date with the last access date for the user.
 416  
      */
 417  
     @Override
 418  
     public java.util.Date getLastAccessDate()
 419  
     {
 420  0
         if (lastAccessDate == null)
 421  
         {
 422  0
             setLastAccessDate();
 423  
         }
 424  0
         return lastAccessDate;
 425  
     }
 426  
 
 427  
     /**
 428  
      * Sets the last access date for this User. This is the last time
 429  
      * that the user object was referenced.
 430  
      */
 431  
     @Override
 432  
     public void setLastAccessDate()
 433  
     {
 434  1
         lastAccessDate = new java.util.Date();
 435  1
     }
 436  
 
 437  
     /**
 438  
      * Returns the permanent storage. This is implemented
 439  
      * as a Map
 440  
      *
 441  
      * @return A Map.
 442  
      */
 443  
     @Override
 444  
     public Map<String, Object> getPermStorage()
 445  
     {
 446  11
         if (permStorage == null)
 447  
         {
 448  8
             byte [] objectdata = getObjectdata();
 449  
 
 450  8
             if (objectdata != null)
 451  
             {
 452  0
                 permStorage = ObjectUtils.deserialize(objectdata);
 453  
             }
 454  
 
 455  8
             if (permStorage == null)
 456  
             {
 457  8
                 permStorage = new HashMap<String, Object>();
 458  
             }
 459  
         }
 460  
 
 461  11
         return permStorage;
 462  
     }
 463  
 
 464  
     /**
 465  
      * This should only be used in the case where we want to make the
 466  
      * data persistent.
 467  
      *
 468  
      * @param permStorage A Map.
 469  
      */
 470  
     @Override
 471  
     public void setPermStorage(Map<String, Object> permStorage)
 472  
     {
 473  0
         if (permStorage != null)
 474  
         {
 475  0
             this.permStorage = permStorage;
 476  
         }
 477  0
     }
 478  
 
 479  
     /**
 480  
      * Returns the temporary storage. This is implemented
 481  
      * as a Map
 482  
      *
 483  
      * @return A Map.
 484  
      */
 485  
     @Override
 486  
     public Map<String, Object> getTempStorage()
 487  
     {
 488  24
         if (tempStorage == null)
 489  
         {
 490  0
             tempStorage = new HashMap<String, Object>();
 491  
         }
 492  24
         return tempStorage;
 493  
     }
 494  
 
 495  
     /**
 496  
      * This should only be used in the case where we want to save the
 497  
      * data to the database.
 498  
      *
 499  
      * @param tempStorage A Map.
 500  
      */
 501  
     @Override
 502  
     public void setTempStorage(Map<String, Object> tempStorage)
 503  
     {
 504  0
         if (tempStorage != null)
 505  
         {
 506  0
             this.tempStorage = tempStorage;
 507  
         }
 508  0
     }
 509  
 
 510  
     /**
 511  
      * Get an object from permanent storage.
 512  
      *
 513  
      * @param name The object's name.
 514  
      * @return An Object with the given name.
 515  
      */
 516  
     @Override
 517  
     public Object getPerm(String name)
 518  
     {
 519  1
         return getPermStorage().get(name);
 520  
     }
 521  
 
 522  
     /**
 523  
      * Get an object from permanent storage; return default if value
 524  
      * is null.
 525  
      *
 526  
      * @param name The object's name.
 527  
      * @param def A default value to return.
 528  
      * @return An Object with the given name.
 529  
      */
 530  
     @Override
 531  
     public Object getPerm(String name, Object def)
 532  
     {
 533  
         try
 534  
         {
 535  0
             Object val = getPermStorage().get(name);
 536  0
             return (val == null ? def : val);
 537  
         }
 538  0
         catch (Exception e)
 539  
         {
 540  0
             return def;
 541  
         }
 542  
     }
 543  
 
 544  
     /**
 545  
      * Put an object into permanent storage.
 546  
      *
 547  
      * @param name The object's name.
 548  
      * @param value The object.
 549  
      */
 550  
     @Override
 551  
     public void setPerm(String name, Object value)
 552  
     {
 553  10
         getPermStorage().put(name, value);
 554  10
     }
 555  
 
 556  
     /**
 557  
      * Get an object from temporary storage.
 558  
      *
 559  
      * @param name The object's name.
 560  
      * @return An Object with the given name.
 561  
      */
 562  
     @Override
 563  
     public Object getTemp(String name)
 564  
     {
 565  10
         return getTempStorage().get(name);
 566  
     }
 567  
 
 568  
     /**
 569  
      * Get an object from temporary storage; return default if value
 570  
      * is null.
 571  
      *
 572  
      * @param name The object's name.
 573  
      * @param def A default value to return.
 574  
      * @return An Object with the given name.
 575  
      */
 576  
     @Override
 577  
     public Object getTemp(String name, Object def)
 578  
     {
 579  
         Object val;
 580  
         try
 581  
         {
 582  0
             val = getTempStorage().get(name);
 583  0
             if (val == null)
 584  
             {
 585  0
                 val = def;
 586  
             }
 587  
         }
 588  0
         catch (Exception e)
 589  
         {
 590  0
             val = def;
 591  0
         }
 592  0
         return val;
 593  
     }
 594  
 
 595  
     /**
 596  
      * Put an object into temporary storage.
 597  
      *
 598  
      * @param name The object's name.
 599  
      * @param value The object.
 600  
      */
 601  
     @Override
 602  
     public void setTemp(String name, Object value)
 603  
     {
 604  14
         getTempStorage().put(name, value);
 605  14
     }
 606  
 
 607  
     /**
 608  
      * Remove an object from temporary storage and return the object.
 609  
      *
 610  
      * @param name The name of the object to remove.
 611  
      * @return An Object.
 612  
      */
 613  
     @Override
 614  
     public Object removeTemp(String name)
 615  
     {
 616  0
         return getTempStorage().remove(name);
 617  
     }
 618  
 
 619  
     /**
 620  
      * Returns the confirm value of the user
 621  
      *
 622  
      * @return The confirm value of the user
 623  
      */
 624  
     @Override
 625  
     public String getConfirmed()
 626  
     {
 627  0
         return (String) getPerm(User.CONFIRM_VALUE);
 628  
     }
 629  
 
 630  
     /**
 631  
      * Sets the new confirm value of the user
 632  
      *
 633  
      * @param confirm The new confirm value of the user
 634  
      */
 635  
     @Override
 636  
     public void setConfirmed(String confirm)
 637  
     {
 638  0
         setPerm(User.CONFIRM_VALUE, confirm);
 639  0
     }
 640  
 
 641  
     /**
 642  
      * Returns the creation date of the user
 643  
      *
 644  
      * @return The creation date of the user
 645  
      */
 646  
     @Override
 647  
     public java.util.Date getCreateDate()
 648  
     {
 649  0
         return (java.util.Date)getPerm(CREATE_DATE, new java.util.Date());
 650  
     }
 651  
 
 652  
     /**
 653  
      * Sets the new creation date of the user
 654  
      *
 655  
      * @param createDate The new creation date of the user
 656  
      */
 657  
     @Override
 658  
     public void setCreateDate(java.util.Date createDate)
 659  
     {
 660  8
         setPerm(CREATE_DATE, createDate);
 661  8
     }
 662  
 
 663  
     /**
 664  
      * Returns the date of the last login of the user
 665  
      *
 666  
      * @return The date of the last login of the user
 667  
      */
 668  
     @Override
 669  
     public java.util.Date getLastLogin()
 670  
     {
 671  0
         return (java.util.Date) getPerm(User.LAST_LOGIN);
 672  
     }
 673  
 
 674  
     /**
 675  
      * Sets the new date of the last login of the user
 676  
      *
 677  
      * @param lastLogin The new the date of the last login of the user
 678  
      */
 679  
     @Override
 680  
     public void setLastLogin(java.util.Date lastLogin)
 681  
     {
 682  1
         setPerm(User.LAST_LOGIN, lastLogin);
 683  1
     }
 684  
 
 685  
     /**
 686  
      * The user is considered logged in if they have not timed out.
 687  
      *
 688  
      * @return Whether the user has logged in.
 689  
      */
 690  
     @Override
 691  
     public boolean hasLoggedIn()
 692  
     {
 693  9
         Boolean loggedIn = (Boolean) getTemp(User.HAS_LOGGED_IN);
 694  9
         return (loggedIn != null && loggedIn.booleanValue());
 695  
     }
 696  
 
 697  
     /**
 698  
      * This sets whether or not someone has logged in.  hasLoggedIn()
 699  
      * returns this value.
 700  
      *
 701  
      * @param value Whether someone has logged in or not.
 702  
      */
 703  
     @Override
 704  
     public void setHasLoggedIn(Boolean value)
 705  
     {
 706  13
         setTemp(User.HAS_LOGGED_IN, value);
 707  13
     }
 708  
 
 709  
     /**
 710  
      * This method reports whether or not the user has been confirmed
 711  
      * in the system by checking the User.CONFIRM_VALUE
 712  
      * column in the users record to see if it is equal to
 713  
      * User.CONFIRM_DATA.
 714  
      *
 715  
      * @return True if the user has been confirmed.
 716  
      */
 717  
     @Override
 718  
     public boolean isConfirmed()
 719  
     {
 720  0
         String value = getConfirmed();
 721  0
         return (value != null && value.equals(User.CONFIRM_DATA));
 722  
     }
 723  
 
 724  
     /**
 725  
      * Updates the last login date in the database.
 726  
      *
 727  
      * @exception Exception A generic exception.
 728  
      */
 729  
     @Override
 730  
     public void updateLastLogin()
 731  
         throws Exception
 732  
     {
 733  1
         setLastLogin(new java.util.Date());
 734  1
     }
 735  
 
 736  
     /**
 737  
      * Get the delegated user
 738  
      *
 739  
      * @return the userDelegate
 740  
      */
 741  
     public TurbineUser getUserDelegate()
 742  
     {
 743  0
         return userDelegate;
 744  
     }
 745  
 
 746  
     /**
 747  
      * Set the delegated user
 748  
      *
 749  
      * @param userDelegate the userDelegate to set
 750  
      */
 751  
     public void setUserDelegate(TurbineUser userDelegate)
 752  
     {
 753  0
         this.userDelegate = userDelegate;
 754  0
     }
 755  
 }