Statistics
| Branch: | Revision:

m2u-upass-core / src / my / com / upass / services / VerifyStaticPasswordService.java @ 0:02300db8682b

History | View | Annotate | Download (5.16 KB)

1
/**
2
 * Copyright (c) 2010 Penril Datability (M) Sdn Bhd All rights reserved.
3
 *
4
 * This software is copyrighted. Under the copyright laws, this software
5
 * may not be copied, in whole or in part, without prior written consent
6
 * of Penril Datability (M) Sdn Bhd or its assignees. This software is
7
 * provided under the terms of a license between Penril Datability (M)
8
 * Sdn Bhd and the recipient, and its use is subject to the terms of that
9
 * license.
10
 */
11

    
12
package my.com.upass.services;
13

    
14
import java.util.Calendar;
15
import java.util.Date;
16

    
17
import my.com.upass.ConfigBean;
18
import my.com.upass.Constants;
19
import my.com.upass.UPassControllerV2;
20
import my.com.upass.UPassParameters;
21
import my.com.upass.dao.DAOFactoryProvider;
22
import my.com.upass.dao.UserDAO;
23
import my.com.upass.factory.UPassFactory;
24
import my.com.upass.pojo.UserBean;
25
import my.com.upass.spassword.PasswordController;
26

    
27
/**
28
 * PROGRAMMER: Danniell
29
 * CHANGE-NO:
30
 * TASK-NO:
31
 * DATE CREATED: Dec 28, 2011
32
 * TAG AS:
33
 * REASON(S):
34
 * MODIFICATION:
35
 */
36

    
37
/**
38
 * <Class description>
39
 */
40
public class VerifyStaticPasswordService
41
{
42
        private UPassControllerV2 upc;
43
        
44
        public VerifyStaticPasswordService(UPassControllerV2 upc)
45
        {
46
                this.upc = upc;
47
        }
48
        
49
        /**
50
         * Verify password validity only
51
         * @param userAlias
52
         * @param password
53
         * @param chkUserType
54
         * @param userType
55
         * @return
56
         */
57
        public int verifyStaticPassword (String userAlias, String password,
58
                        boolean chkUserType, int userType)
59
        {
60
                return verifyUserCredetial(userAlias, password, chkUserType, userType, false);
61
        }
62
        
63
        /**
64
         * Verify user dormant period and password validity
65
         * @param userAlias
66
         * @param password
67
         * @param chkUserType
68
         * @param userType
69
         * @return
70
         */
71
        public int login(String userAlias, String password,
72
                        boolean chkUserType, int userType) {
73
                return verifyUserCredetial(userAlias, password, chkUserType, userType, true);
74
        }
75
        
76
        /**
77
         * This method will do dormant verification before verify password.
78
         * The logic is duplicated from verifyStaticPassword.
79
         * @param userAlias
80
         * @param password
81
         * @param chkUserType
82
         * @param userType
83
         * @return
84
         */
85
        public int verifyUserCredetial(String userAlias, String password,
86
                        boolean chkUserType, int userType, boolean dormantCheck) {
87
                
88
                int rc = Constants.ERR_SYSTEM_NOT_READY;
89

    
90
                if (userAlias == null || password == null)
91
                {
92
                        return Constants.ERR_INVALID_INPUT;
93
                }
94

    
95
                try
96
                {
97
                        UserDAO userDao = DAOFactoryProvider.getDAOFactory ().getUserDAO ();
98
                        UserBean userBean = userDao.getUserFromStore (userAlias);
99

    
100
                        if (userBean == null)
101
                        {
102
                                return Constants.ERR_USERALIAS_NOT_FOUND;
103
                        }
104

    
105
                        // verify user state, must be active (not inactive|locked|deleted)
106
                        switch (userBean.getUstate ())
107
                        {
108
                                case (Constants.UID_STATE_ACTIVE):
109
                                        break;
110
                                case (Constants.UID_STATE_TMP_LOCKED):
111
                                        Date now = new Date ();
112
                                        if (userBean.getUdateLockedTo ().after (now))
113
                                        {
114
                                                return Constants.ERR_INVALID_STATE;
115
                                        }
116
                                        break;
117
                                default:
118
                                        return Constants.ERR_INVALID_STATE;
119
                        }
120

    
121
                        // verify user type
122
                        if (chkUserType && userBean.getUserType () != userType)
123
                        {
124
                                return Constants.ERR_APP_SERV_NOT_PERMITTED;
125
                        }
126

    
127

    
128
                        PasswordController pc = (PasswordController)UPassFactory.getPasswordController (
129
                                        userBean, upc.getConfigurationsMap ());
130
                        ConfigBean configBean = pc.getConfigBean ();
131
                        
132
                        userBean = (UserBean) pc.getUpdatedObject ();
133
                        
134
                        //verify user dormant period
135
                        if ( userBean.getPdateLastUsed() != null && dormantCheck && pc.isUserDormant()) {
136
                                rc = Constants.ERR_USER_DORMANT; 
137
                                
138
                                Calendar deactivateDate = Calendar.getInstance();
139
                                deactivateDate.add(Calendar.DATE,+configBean.getUserDeactivatePeriod());
140
                                
141
                                userBean.setUstate (Constants.UID_STATE_TMP_LOCKED);
142
                                userBean.setUdateLockedFrom ((new Date ()));
143
                                userBean.setUdateLockedTo ((deactivateDate.getTime()));
144
                                userBean.setUdateLastLocked ((new Date ()));
145
                        } else {
146
                                // verify user password
147
                                rc = pc.VerifyPassword (password);
148
                                
149
                                // suspend if exceeded max retries
150
                                if (rc == Constants.ERR_EXCEED_MAX_TRIES
151
                                                && (userBean.getUserType () != Constants.UTYPE_STATE_USER))
152
                                {
153
                                        Calendar expiryDate = Calendar.getInstance ();
154
                                        expiryDate.add (Calendar.MINUTE,
155
                                                        UPassParameters.SUPERVISOR_ID_SUSPEND);
156
        
157
//                                        Map<String, String> parametersMap = upc.getConfigurationsMap ()
158
//                                                        .get (userBean.getUcustomerType ());
159
//                                        UPassParameters._MAX_ERROR = Integer
160
//                                                        .parseInt (parametersMap.get (
161
//                                                                        "PASSWORD_MAX_ERROR").toString ());
162
        
163
                                        userBean.setUstate (Constants.UID_STATE_TMP_LOCKED);
164
                                        userBean.setPerrorCount (configBean.getPasswordMaxTryError() - 1);
165
                                        userBean.setUdateLockedFrom ((new Date ()));
166
                                        userBean.setUdateLockedTo (expiryDate.getTime ());
167
                                        userBean.setUdateLastLocked ((new Date ()));
168
                                }
169
                        }
170

    
171
                        // update database
172
                        boolean lrc = userDao.updateUserToStore (userBean);
173

    
174
                        if (!lrc)
175
                        {
176
                                rc = Constants.ERR_SYSTEM_NOT_READY;
177
                        }
178
                }
179
                catch (Exception e)
180
                {
181
                        e.printStackTrace ();
182
                        return Constants.ERR_SYSTEM_NOT_READY;
183
                }
184
                return rc;        
185
                
186
        }
187
}