Changeset 284:8f09442c1968


Ignore:
Timestamp:
09/04/11 17:59:23 (5 months ago)
Author:
xeraph
Branch:
default
Convert:
svn:7c3792e6-d75b-4784-96a6-b298f655ee64/trunk@2718
Message:

added auto-lock by successive login failures

Location:
kraken-dom/src/main/java/org/krakenapps/dom
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • kraken-dom/src/main/java/org/krakenapps/dom/api/impl/AdminApiImpl.java

    r282 r284  
    2828import org.krakenapps.dom.api.AdminApi; 
    2929import org.krakenapps.dom.api.UserExtensionProvider; 
     30import org.krakenapps.dom.exception.AdminLockedException; 
    3031import org.krakenapps.dom.exception.CannotRemoveRequestingAdminException; 
    3132import org.krakenapps.dom.exception.InvalidPasswordException; 
     
    3839import org.krakenapps.jpa.handler.JpaConfig; 
    3940import org.krakenapps.jpa.handler.Transactional; 
     41import org.slf4j.Logger; 
     42import org.slf4j.LoggerFactory; 
    4043 
    4144@Component(name = "dom-admin-api") 
     
    4346@JpaConfig(factory = "dom") 
    4447public class AdminApiImpl extends AbstractApi<Admin> implements AdminApi, UserExtensionProvider { 
     48        private final Logger logger = LoggerFactory.getLogger(AdminApiImpl.class.getName()); 
     49 
    4550        @Requires 
    4651        private ThreadLocalEntityManagerService entityManagerService; 
     
    5156        } 
    5257 
    53         @Transactional 
    5458        @Override 
    5559        public Admin login(String nick, String hash, String nonce) throws AdminNotFoundException, InvalidPasswordException { 
    56                 EntityManager em = entityManagerService.getEntityManager(); 
     60                Admin admin = getAdmin(nick, hash, nonce); 
     61 
     62                if (hash.equals(Sha1.hash(admin.getUser().getPassword() + nonce)) == false) { 
     63                        updateLoginFailures(admin); 
     64                        throw new InvalidPasswordException(); 
     65                } 
     66 
     67                return admin; 
     68        } 
     69 
     70        @Transactional 
     71        private void updateLoginFailures(Admin admin) { 
     72                EntityManager em = entityManagerService.getEntityManager(); 
     73                admin = em.find(Admin.class, admin.getId()); 
     74                admin.setLoginFailures(admin.getLoginFailures() + 1); 
     75                logger.debug("kraken dom: login [{}] login failures [{}]", admin.getUser().getName(), admin.getLoginFailures()); 
     76 
     77                if (admin.isUseLoginLock() && admin.getLoginFailures() >= admin.getLoginLockCount()) 
     78                        admin.setEnabled(false); 
     79 
     80                em.merge(admin); 
     81        } 
     82 
     83        @Transactional 
     84        private Admin getAdmin(String nick, String hash, String nonce) { 
    5785                try { 
     86                        EntityManager em = entityManagerService.getEntityManager(); 
    5887                        Admin admin = (Admin) em.createQuery("SELECT a FROM Admin a LEFT JOIN a.user u WHERE u.loginName = ?") 
    5988                                        .setParameter(1, nick).getSingleResult(); 
    60  
    61                         if (hash.equals(Sha1.hash(admin.getUser().getPassword() + nonce)) == false) 
    62                                 throw new InvalidPasswordException(); 
     89                        if (!admin.isEnabled()) 
     90                                throw new AdminLockedException(); 
    6391 
    6492                        admin.setLastLoginDateTime(new Date()); 
     
    215243                        admin.setIdleTimeout(targetAdmin.getIdleTimeout()); 
    216244                        admin.setLoginLockCount(targetAdmin.getLoginLockCount()); 
    217                          
    218                         if (!admin.isEnabled() && targetAdmin.isEnabled())  
     245 
     246                        if (!admin.isEnabled() && targetAdmin.isEnabled()) 
    219247                                admin.setLoginFailures(0); 
    220                                  
     248 
    221249                        admin.setEnabled(targetAdmin.isEnabled()); 
    222                          
     250 
    223251                        em.merge(admin); 
    224252 
  • kraken-dom/src/main/java/org/krakenapps/dom/msgbus/LoginPlugin.java

    r183 r284  
    5353 
    5454        @AllowGuestAccess 
    55         @Transactional 
    5655        @MsgbusMethod 
    5756        public void login(Request req, Response resp) throws AdminNotFoundException, InvalidPasswordException { 
Note: See TracChangeset for help on using the changeset viewer.