Statistics
| Branch: | Revision:

m2u-upass-core / src / my / com / upass / UPassControllerV2.java @ 48:b166cea64cf2

History | View | Annotate | Download (44 KB)

1
/**
2
 * Copyright (M) 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
package my.com.upass;
12

    
13
import java.text.ParseException;
14
import java.text.SimpleDateFormat;
15
import java.util.ArrayList;
16
import java.util.Date;
17
import java.util.HashMap;
18
import java.util.List;
19

    
20
import my.com.upass.factory.UPassFactory;
21
import my.com.upass.maybank.entities.IbccUser;
22
import my.com.upass.maybank.entities.Im2uUser;
23
import my.com.upass.maybank.entities.M2uUser;
24
import my.com.upass.maybank.entities.StockUser;
25
import my.com.upass.maybank.entities.TicketingUser;
26
import my.com.upass.pojo.ClientApp;
27
import my.com.upass.pojo.MinimalUserBean;
28
import my.com.upass.pojo.UserAppAccess;
29
import my.com.upass.services.ActivateUserService;
30
import my.com.upass.services.AppAccessMgtService.MultipleAppAccessesFound;
31
import my.com.upass.services.AssignTokenService;
32
import my.com.upass.services.CheckPasswordReusedService;
33
import my.com.upass.services.DeleteTokenService;
34
import my.com.upass.services.DeleteUserService;
35
import my.com.upass.services.DisableTacService;
36
import my.com.upass.services.DisableTokenService;
37
import my.com.upass.services.GenerateSecurityCodeService;
38
import my.com.upass.services.GenerateTacService;
39
import my.com.upass.services.LoadTokenService;
40
import my.com.upass.services.LockUserService;
41
import my.com.upass.services.QueryInfoService;
42
import my.com.upass.services.ResetTacService;
43
import my.com.upass.services.ResetTokenService;
44
import my.com.upass.services.SynchronizeTokenService;
45
import my.com.upass.services.VerifyPasswordComplexityService;
46
import my.com.upass.services.VerifySecurityCodeService;
47
import my.com.upass.services.VerifyTacService;
48
import my.com.upass.services.VerifyTokenService;
49
import my.com.upass.spassword.PasswordController;
50

    
51
import org.hibernate.Session;
52

    
53
/**
54
 * PROGRAMMER: Danniell
55
 * CHANGE-NO:
56
 * TASK-NO:
57
 * DATE CREATED: Oct 8, 2011
58
 * TAG AS:
59
 * REASON(S):
60
 * MODIFICATION:
61
 */
62

    
63
/**
64
 * Data Access Object version of UPASS Controller
65
 */
66
/**
67
 * @author Enson
68
 * 
69
 */
70
public class UPassControllerV2 extends MinimalUPassControllerV2
71
{
72
        private CheckPasswordReusedService checkPasswordReusedService = new CheckPasswordReusedService(this);
73
        private GenerateTacService generateTacService = new GenerateTacService(this);
74
        private VerifyTacService verifyTacService = new VerifyTacService(this);
75
        private ResetTacService resetTacService = new ResetTacService(this);
76
        private GenerateSecurityCodeService generateSecurityCodeService = new GenerateSecurityCodeService(this);
77
        private VerifySecurityCodeService verifySecurityCodeService = new VerifySecurityCodeService(this);
78
        private DisableTacService disableTacService = new DisableTacService(this);
79
        private ActivateUserService activateUserService = new ActivateUserService();
80
        private QueryInfoService queryInfoService = new QueryInfoService();
81
        private LockUserService lockUserService = new LockUserService();
82
        private VerifyTokenService verifyTokenService = new VerifyTokenService();
83
        private LoadTokenService loadTokenService = new LoadTokenService();
84
        private ResetTokenService resetTokenService = new ResetTokenService();
85
        private DeleteTokenService deleteTokenService = new DeleteTokenService();
86
        private AssignTokenService assignTokenService = new AssignTokenService();
87
        private DisableTokenService disableTokenService = new DisableTokenService();
88
        private SynchronizeTokenService synchronizeTokenService = new SynchronizeTokenService();
89
        private VerifyPasswordComplexityService verifyPasswordComplexityService = new VerifyPasswordComplexityService(this);
90
        private DeleteUserService deleteUserService = new DeleteUserService();
91

    
92
        // ////////////////////////////////////////////////////////////////////////////////////////
93
        // Static Password Methods
94
        // /////////////////////////////////////////////////////////////////////////////////////////
95
        /**
96
         * This method verify static password generated using SP_ChangeStaticPassword()
97
         * and also check for user dormant status
98
         * 
99
         * @param userAlias
100
         * @param password
101
         * @return ERR_code defined in the Constants.<br/>
102
         *         ERR_SUCCESS<br/>
103
         *         ERR_SYSTEM_NOT_READY<br/>
104
         *         ERR_USERALIAS_NOT_FOUND <br/>
105
         *         ERR_INVALID_STATE - user not active or temporary suspended.<br/>
106
         *         ERR_APP_SERV_NOT_PERMITTED - for operation not allowed for the user type.<br/>
107
         *         ERR_EXCEED_MAX_TRIES - used ModifyUser to reset password.<br/>
108
         *         ERR_INVALID_CREDENTIAL<br/>
109
         *         ERR_PASSWD_EXPIRED - password is valid but expired, suggest to change new password.<br/>
110
         */
111
        public int SP_Login(String userAlias, String password)
112
        {
113
                int rc = verifyStaticPasswordService.login(userAlias, password, false, 0);
114
                logger.info("SP_Login - user alias: [" + userAlias + "] Return: " + rc);
115
                return rc;
116
        }
117

    
118
        public int SP_ForceChangeStaticPassword(String userAlias, String newPassword, String oldPassword)
119
        {
120
                int rc = changeStaticPasswordService.changeStaticPassword(userAlias, newPassword, oldPassword, false);
121
                logger.info("SP_ChangeStaticPassword - user alias: [" + userAlias + "] Return: " + rc);
122
                return rc;
123
        }
124

    
125
        /**
126
         * 
127
         * @param userAlias
128
         * @param hashedPassword
129
         *            This password is expected to be in clear text during migration period,
130
         *            but a hash value of password in SHA-256 afterwards.
131
         * @return the return code
132
         */
133
        public int UA_CheckPasswordReused(String userAlias, String hashedPassword) {
134
                int rc = checkPasswordReusedService.checkPasswordReused(userAlias, hashedPassword);
135
                logger.info("UA_CheckPasswordReused - user alias: [" + userAlias + "] Return: " + rc);
136
                return rc;
137
        }
138

    
139
        // /////////////////////////////////////////////////////////////////////////////////////////
140
        // TAC Methods ...
141
        // /////////////////////////////////////////////////////////////////////////////////////////
142

    
143
        /**
144
         * This method to Generate 6-digit TAC.
145
         * 
146
         * @param userAlias
147
         * @param appId
148
         *            TODO
149
         * @return 6-digit TAC or Error code with prefix *** <br/>
150
         *         ***98 ERR_SYSTEM_NOT_READY<br/>
151
         *         ***6 ERR_USERALIAS_NOT_FOUND<br/>
152
         *         ***12 ERR_TAC_ALREADY_EXIST - Repeated request within allowed period<br/>
153
         */
154
        public String GenerateTAC(String userAlias, int appId) {
155

    
156
                String tac = generateTacService.generateTAC(userAlias, null, null, appId);
157
                logger.info(userAlias + " Return=" + tac.substring(2));
158
                return tac;
159
        }
160

    
161
        /**
162
         * This method to Generate 6-digit TAC with SessionID verification.
163
         * 
164
         * @param userAlias
165
         * @param sessionID
166
         *            16-Characters SessionID
167
         * @param appId
168
         *            TODO
169
         * @return 6-digit TAC or Error code with prefix *** <br/>
170
         *         ***98 ERR_SYSTEM_NOT_READY<br/>
171
         *         ***6 ERR_USERALIAS_NOT_FOUND<br/>
172
         *         ***12 ERR_TAC_ALREADY_EXIST - Repeated request within allowed period<br/>
173
         */
174
        public String GenerateTAC(String userAlias, String sessionID, int appId) {
175

    
176
                String tac = generateTacService.generateTAC(userAlias, sessionID, null, appId);
177
                logger.info(userAlias + " SessionID=" + sessionID + " Return=" + tac.substring(2));
178
                return tac;
179
        }
180

    
181
        /**
182
         * This method to Generate 6-digit TAC with SessionID verification.
183
         * 
184
         * @param userAlias
185
         * @param sessionID
186
         *            16-Characters SessionID
187
         * @param nonce
188
         *            Additional nonce value
189
         * @param appId
190
         *            TODO
191
         * @return 6-digit TAC or Error code with prefix *** <br/>
192
         *         ***98 ERR_SYSTEM_NOT_READY<br/>
193
         *         ***6 ERR_USERALIAS_NOT_FOUND<br/>
194
         *         ***12 ERR_TAC_ALREADY_EXIST - Repeated request within allowed period<br/>
195
         */
196
        public String GenerateTAC(String userAlias, String sessionID, String nonce, int appId) {
197

    
198
                String tac = generateTacService.generateTAC(userAlias, sessionID, nonce, appId);
199
                logger.info(userAlias + " SessionID=" + sessionID + " Return=" + tac.substring(2));
200
                return tac;
201
        }
202

    
203
        /**
204
         * This method to verify 6-digit TAC generated by GenerateTAC()
205
         * 
206
         * @param userAlias
207
         * @param inTac
208
         *            User inputs TAC
209
         * @param appId
210
         *            TODO
211
         * @return ERR_code defined in the Constants<br/>
212
         *         ERR_SUCCESS<br/>
213
         *         ERR_SYSTEM_NOT_READY<br/>
214
         *         ERR_USERALIAS_NOT_FOUND<br/>
215
         *         ERR_INVALID_STATE - Verify method call before generation; TAC disabled.<br/>
216
         *         ERR_EXCEED_MAX_TRIES<br/>
217
         *         ERR_INVALID_CREDENTIAL<br/>
218
         *         ERR_PASSWD_EXPIRED - TAC expired.<br/>
219
         */
220
        public int VerifyTAC(String userAlias, String inTac, int appId) {
221

    
222
                int rc = verifyTacService.verifyTAC(userAlias, inTac, null, appId);
223
                logger.info("VerifyTAC - user alias: [" + userAlias + "] Return: " + rc);
224
                return rc;
225
        }
226

    
227
        /**
228
         * This method to verify 6-digit TAC generated by GenerateTAC() with SessionID verification
229
         * 
230
         * @param userAlias
231
         * @param inTac
232
         *            User inputs TAC
233
         * @param sessionID
234
         *            16-Characters SessionID
235
         * @param appId
236
         *            TODO
237
         * @return ERR_code defined in the Constants<br/>
238
         *         ERR_SUCCESS<br/>
239
         *         ERR_SYSTEM_NOT_READY<br/>
240
         *         ERR_USERALIAS_NOT_FOUND<br/>
241
         *         ERR_INVALID_STATE - Verify method call before generation; TAC disabled.<br/>
242
         *         ERR_EXCEED_MAX_TRIES<br/>
243
         *         ERR_INVALID_CREDENTIAL<br/>
244
         *         ERR_PASSWD_EXPIRED - TAC expired.<br/>
245
         *         ERR_INVALID_SESSION<br/>
246
         */
247
        public int VerifyTAC(String userAlias, String inTac, String sessionID, int appId) {
248

    
249
                return VerifyTAC(userAlias, inTac, sessionID, null, appId);
250
        }
251

    
252
        /**
253
         * This method to verify 6-digit TAC generated by GenerateTAC() with SessionID verification
254
         * 
255
         * @param userAlias
256
         * @param inTac
257
         *            User inputs TAC
258
         * @param sessionID
259
         *            16-Characters SessionID
260
         * @param nonce
261
         *            Additional nonce value
262
         * @param appId
263
         *            TODO
264
         * @return ERR_code defined in the Constants<br/>
265
         *         ERR_SUCCESS<br/>
266
         *         ERR_SYSTEM_NOT_READY<br/>
267
         *         ERR_USERALIAS_NOT_FOUND<br/>
268
         *         ERR_INVALID_STATE - Verify method call before generation; TAC disabled.<br/>
269
         *         ERR_EXCEED_MAX_TRIES<br/>
270
         *         ERR_INVALID_CREDENTIAL<br/>
271
         *         ERR_PASSWD_EXPIRED - TAC expired.<br/>
272
         *         ERR_INVALID_SESSION<br/>
273
         */
274
        public int VerifyTAC(String userAlias, String inTac, String sessionID, String nonce, int appId) {
275

    
276
                int rc = verifyTacService.verifyTAC(userAlias, inTac, sessionID, nonce, appId);
277
                logger.info("VerifyTAC - user alias: [" + userAlias + "] SessID: [" + sessionID + "] Return: " + rc);
278
                return rc;
279
        }
280

    
281
        /**
282
         * This method is to reset Error Count to Zero and set state to PASSWD_STATUS_ENABLE
283
         * 
284
         * @param adminUserAlias
285
         * @param adminUserPassword
286
         * @param userAlias
287
         * @return ERR_code defined in the Constants<br/>
288
         *         ERR_SUCCESS<br/>
289
         *         ERR_SYSTEM_NOT_READY<br/>
290
         *         ERR_USERALIAS_NOT_FOUND <br/>
291
         *         ERR_INVALID_STATE - admin not active or temporary suspended.<br/>
292
         *         ERR_APP_SERV_NOT_PERMITTED - for operation not allowed for the user type.<br/>
293
         *         ERR_EXCEED_MAX_TRIES<br/>
294
         *         ERR_INVALID_CREDENTIAL<br/>
295
         *         ERR_UNKNOWN<br/>
296
         */
297
        public int ResetTAC(String adminUserAlias, String adminUserPassword, String userAlias) {
298

    
299
                int rc = verifyStaticPasswordService.verifyStaticPassword(
300
                                adminUserAlias, adminUserPassword, true, Constants.UTYPE_STATE_ADMIN);
301

    
302
                if (rc != Constants.ERR_SUCCESS) {
303
                        return rc;
304
                }
305
                rc = resetTacService.resetTAC(userAlias);
306
                logger.info("ResetTAC - user alias: [" + userAlias + "] Return: " + rc);
307
                return rc;
308
        }
309

    
310
        /**
311
         * This method is to set state to PASSWD_STATUS_DISABLE
312
         * 
313
         * @param adminUserAlias
314
         * @param adminUserPassword
315
         * @param userAlias
316
         * @return ERR_code defined in the Constants<br/>
317
         *         ERR_SUCCESS<br/>
318
         *         ERR_SYSTEM_NOT_READY<br/>
319
         *         ERR_USERALIAS_NOT_FOUND <br/>
320
         *         ERR_INVALID_STATE - admin not active or temporary suspended.<br/>
321
         *         ERR_APP_SERV_NOT_PERMITTED - for operation not allowed for the user type.<br/>
322
         *         ERR_EXCEED_MAX_TRIES<br/>
323
         *         ERR_INVALID_CREDENTIAL<br/>
324
         *         ERR_UNKNOWN<br/>
325
         */
326
        public int DisableTAC(String adminUserAlias, String adminUserPassword, String userAlias) {
327

    
328
                int rc = verifyStaticPasswordService.verifyStaticPassword(
329
                                adminUserAlias, adminUserPassword, true, Constants.UTYPE_STATE_ADMIN);
330

    
331
                if (rc != Constants.ERR_SUCCESS) {
332
                        return rc;
333
                }
334
                rc = disableTacService.disableTAC(userAlias);
335
                logger.info("DisableTAC - user alias: [" + userAlias + "] Return: " + rc);
336
                return rc;
337
        }
338

    
339
        // /////////////////////////////////////////////////////////////////////////////////////////
340
        // User Administration methods.
341
        // /////////////////////////////////////////////////////////////////////////////////////////
342

    
343
        /**
344
         * This method to modify admin users to the system
345
         * 
346
         * @param rootAlias
347
         * @param rootHashedPassword
348
         * @param adminUserAlias
349
         * @param adminDesc
350
         *            - can be null - Null denotes no description will be modified.
351
         * @param adminHashedPassword
352
         *            - can be null - Null denotes no password will be modified.
353
         * @return ERR_code defined in the Constants.<br/>
354
         *         ERR_SUCCESS<br/>
355
         *         ERR_SYSTEM_NOT_READY<br/>
356
         *         ERR_USERALIAS_NOT_FOUND <br/>
357
         *         ERR_INVALID_STATE - root not active or temporary suspended.<br/>
358
         *         ERR_APP_SERV_NOT_PERMITTED - for operation not allowed for the user type.<br/>
359
         *         ERR_EXCEED_MAX_TRIES<br/>
360
         *         ERR_INVALID_CREDENTIAL<br/>
361
         *         ERR_INVALID_INPUT - internal error.<br/>
362
         *         ERR_USERALIAS_NOT_FOUND<br/>
363
         *         ERR_REUSED_PASSWD - the password entered was used previously.<br/>
364
         *         ERR_PASSWD_WEAK - the password entered is too weak.<br/>
365
         *         ERR_INVALID_USERALIAS - User alias does not match with defined pattern <br/>
366
         *         ERR_PASSWORD_SAMEAS_USERALIAS - password is same is user name error <br/>
367
         */
368
        public int AD_ModifyUser(String rootAlias, String rootHashedPassword,
369
                        String adminUserAlias, String adminDesc, String adminHashedPassword)
370
        {
371
                // check if password is similar to user alias
372
                if (rootAlias.equalsIgnoreCase(rootHashedPassword)) {
373
                        return Constants.ERR_PASSWORD_SAMEAS_USERALIAS;
374
                }
375

    
376
                int rc = verifyStaticPasswordService.verifyStaticPassword(
377
                                rootAlias, rootHashedPassword, true, Constants.UTYPE_STATE_ROOT);
378

    
379
                if (rc != Constants.ERR_SUCCESS)
380
                {
381
                        return rc;
382
                }
383

    
384
                rc = modifyUserService.modifyUser(adminUserAlias,
385
                                Constants.UTYPE_STATE_ADMIN, adminDesc, adminHashedPassword,
386
                                Constants.UID_STATE_ACTIVE);
387

    
388
                logger.info("AD_ModifyUser - admin user alias: [" + adminUserAlias + "] Return: " + rc);
389

    
390
                return rc;
391
        }
392

    
393
        /**
394
         * This method to change online users state to ACTIVE status.
395
         * 
396
         * @param adminUserAlias
397
         * @param adminUserPassword
398
         * @param userAlias
399
         * @return ERR_code defined in the Constants.<br/>
400
         *         ERR_SUCCESS<br/>
401
         *         ERR_SYSTEM_NOT_READY<br/>
402
         *         ERR_USERALIAS_NOT_FOUND <br/>
403
         *         ERR_INVALID_STATE - admin not active or temporary suspended.<br/>
404
         *         ERR_APP_SERV_NOT_PERMITTED - for operation not allowed for the user type.<br/>
405
         *         ERR_EXCEED_MAX_TRIES<br/>
406
         *         ERR_INVALID_CREDENTIAL<br/>
407
         *         ERR_USERALIAS_NOT_FOUND<br/>
408
         *         ERR_UNKNOWN <br/>
409
         */
410
        public int UA_ActivateUser(String adminUserAlias, String adminUserPassword, String userAlias)
411
        {
412
                int rc = verifyStaticPasswordService.verifyStaticPassword(
413
                                adminUserAlias, adminUserPassword, true,
414
                                Constants.UTYPE_STATE_ADMIN);
415

    
416
                if (rc != Constants.ERR_SUCCESS)
417
                {
418
                        return rc;
419
                }
420

    
421
                rc = activateUserService.activateUser(userAlias);
422

    
423
                logger.info("UA_ActivateUser - user alias: [" + userAlias
424
                                + "] Return: " + rc);
425

    
426
                return rc;
427
        }
428

    
429
        /**
430
         * This method to change admin users state to ACTIVE status.
431
         * 
432
         * @param rootAlias
433
         * @param rootPassword
434
         * @param adminUserAlias
435
         * @return ERR_code defined in the Constants.<br/>
436
         *         ERR_SUCCESS<br/>
437
         *         ERR_SYSTEM_NOT_READY<br/>
438
         *         ERR_USERALIAS_NOT_FOUND <br/>
439
         *         ERR_INVALID_STATE - root not active or temporary suspended.<br/>
440
         *         ERR_APP_SERV_NOT_PERMITTED - for operation not allowed for the user type.<br/>
441
         *         ERR_EXCEED_MAX_TRIES<br/>
442
         *         ERR_INVALID_CREDENTIAL<br/>
443
         *         ERR_USERALIAS_NOT_FOUND<br/>
444
         *         ERR_UNKNOWN<br/>
445
         */
446
        public int AD_ActivateUser(String rootAlias, String rootPassword,
447
                        String adminUserAlias)
448
        {
449
                int rc = verifyStaticPasswordService.verifyStaticPassword(
450
                                rootAlias, rootPassword, true, Constants.UTYPE_STATE_ROOT);
451

    
452
                if (rc != Constants.ERR_SUCCESS)
453
                {
454
                        return rc;
455
                }
456

    
457
                rc = activateUserService.activateUser(adminUserAlias);
458

    
459
                logger.info("AD_ActivateUser - admin user alias: [" + adminUserAlias
460
                                + "] Return: " + rc);
461

    
462
                return rc;
463
        }
464

    
465
        /**
466
         * This method is to check whether the user alias exist in the system.
467
         * 
468
         * @param userAlias
469
         * @return ERR_code defined in the Constants.<br/>
470
         *         ERR_SUCCESS 0 - found<br/>
471
         *         ERR_USERALIAS_NOT_FOUND 6<br/>
472
         *         ERR_SYSTEM_NOT_READY 98<br/>
473
         */
474
        public int UA_IsUserExist(String userAlias)
475
        {
476
                return queryInfoService.checkUserExistence(userAlias);
477
        }
478

    
479
        /**
480
         * This method is to get user type. Valid return is [0-root user | 1-admin user | 2-Ordinary User]
481
         * 
482
         * @param userAlias
483
         * @return <br/>
484
         *         UTYPE_STATE_ROOT = 0<br/>
485
         *         UTYPE_STATE_ADMIN = 1<br/>
486
         *         UTYPE_STATE_USER = 2<br/>
487
         *         ERR_USERALIAS_NOT_FOUND = 6<br/>
488
         *         ERR_SYSTEM_NOT_READY = 98<br/>
489
         */
490

    
491
        public int UA_GetUserType(String userAlias)
492
        {
493
                return queryInfoService.getUserType(userAlias);
494
        }
495

    
496
        /**
497
         * This method is to get attributes associated to user. Return type is HashMap<String,String>
498
         * The object keys is as below:<br/>
499
         * RC - Return Code [always present]<br/>
500
         * RT - Return Code in Text [always present]<br/>
501
         * <br/>
502
         * The following data present only with the return is ERR_SUCCESS<br/>
503
         * Type - User Type [0-Root User] [1-Admin User] [2-Ordinary User][9-SysControl]<br/>
504
         * State - User State [0-Active] [1-Temporary Locked] [2-Locked] [3-Inactive] [4-Deleted]<br/>
505
         * Description - User Description<br/>
506
         * UseCount - Number of time the record being access<br/>
507
         * DateCreated - Created date<br/>
508
         * DateLastUsed - Last access of the record<br/>
509
         * DateLastActivated - Last activation of the record<br/>
510
         * DateLastLocked - Last date the user being locked<br/>
511
         * DateLockedFrom - last date the user being locked from<br/>
512
         * DateLockedTo - last date the user being locked to<br/>
513
         * 
514
         * @param userAlias
515
         * @return HashMap
516
         */
517
        public HashMap<String, String> UA_GetUserData(String userAlias)
518
        {
519
                return queryInfoService.getUserData(userAlias);
520
        }
521

    
522
        /**
523
         * This method is to get attributes associated to password. Return type is HashMap<String,String>
524
         * The object keys is as below:<br/>
525
         * RC - Return Code [always present]<br/>
526
         * RT - Return Code in Text [always present]<br/>
527
         * <br/>
528
         * The following data present only with the return is ERR_SUCCESS<br/>
529
         * State - Password State [0-Enable] [1-Disable] [2-OneTime Use]<br/>
530
         * ExpiryStatus - Expiry Status [0-Will Expired][1-Never Expired]
531
         * UseCount - Number of time the record being access<br/>
532
         * ErrorCount - Number of time the password verified error<br/>
533
         * DateCreated - Created date<br/>
534
         * DateFirstUsed - First access of the password<br/>
535
         * DateLastUsed - Last access of the password<br/>
536
         * DatePasswdExpired - Expiry date of the password<br/>
537
         * 
538
         * @param userAlias
539
         * @return HashMap
540
         */
541
        public HashMap<String, String> QueryPassword(String userAlias)
542
        {
543
                return queryInfoService.queryPassword(userAlias);
544
        }
545

    
546
        /**
547
         * This method is to get attributes associated to TAC. Return type is HashMap<String,String>
548
         * The object keys is as below:<br/>
549
         * RC - Return Code [always present]<br/>
550
         * RT - Return Code in Text [always present]<br/>
551
         * <br/>
552
         * The following data present only with the return is ERR_SUCCESS<br/>
553
         * State - User State [0-Enable] [1-Disable]<br/>
554
         * UseCount - Number of time the record being access<br/>
555
         * ErrorCount - Number of time the TAC verified error<br/>
556
         * DateCreated - TAC Created date<br/>
557
         * DateFirstUsed - First access of the TAC<br/>
558
         * DateLastUsed - Last access of the TAC<br/>
559
         * 
560
         * @param userAlias
561
         * @param appId
562
         *            TODO
563
         * @return HashMap
564
         */
565
        public HashMap<String, String> QueryTAC(String userAlias, int appId)
566
        {
567
                return queryInfoService.queryTAC(userAlias, appId);
568
        }
569

    
570
        /**
571
         * This method is to change online user state to LOCKED status.
572
         * 
573
         * @param adminUserAlias
574
         * @param adminUserPassword
575
         * @param userAlias
576
         * @return ERR_code defined in the Constants.<br/>
577
         *         ERR_SUCCESS<br/>
578
         *         ERR_SYSTEM_NOT_READY<br/>
579
         *         ERR_USERALIAS_NOT_FOUND <br/>
580
         *         ERR_INVALID_STATE - admin not active or temporary suspended.<br/>
581
         *         ERR_APP_SERV_NOT_PERMITTED - for operation not allowed for the user type.<br/>
582
         *         ERR_EXCEED_MAX_TRIES<br/>
583
         *         ERR_INVALID_CREDENTIAL<br/>
584
         *         ERR_UNKNOWN<br/>
585
         */
586
        public int UA_LockUser(String adminUserAlias, String adminUserPassword,
587
                        String userAlias)
588
        {
589
                int rc = verifyStaticPasswordService.verifyStaticPassword(
590
                                adminUserAlias, adminUserPassword, true,
591
                                Constants.UTYPE_STATE_ADMIN);
592

    
593
                if (rc != Constants.ERR_SUCCESS)
594
                {
595
                        return rc;
596
                }
597

    
598
                rc = lockUserService.lockUser(userAlias);
599

    
600
                logger.info("UA_LockUser - user alias: [" + userAlias + "] Return:"
601
                                + rc);
602

    
603
                return rc;
604
        }
605

    
606
        /**
607
         * This method is to change admin user state to LOCKED status.
608
         * 
609
         * @param rootAlias
610
         * @param rootPassword
611
         * @param adminUserAlias
612
         * @return ERR_code defined in the Constants.<br/>
613
         *         ERR_SUCCESS<br/>
614
         *         ERR_SYSTEM_NOT_READY<br/>
615
         *         ERR_USERALIAS_NOT_FOUND <br/>
616
         *         ERR_INVALID_STATE - root not active or temporary suspended.<br/>
617
         *         ERR_APP_SERV_NOT_PERMITTED - for operation not allowed for the user type.<br/>
618
         *         ERR_EXCEED_MAX_TRIES<br/>
619
         *         ERR_INVALID_CREDENTIAL<br/>
620
         *         ERR_UNKNOWN<br/>
621
         */
622
        public int AD_LockUser(String rootAlias, String rootPassword,
623
                        String adminUserAlias)
624
        {
625
                int rc = verifyStaticPasswordService.verifyStaticPassword(
626
                                rootAlias, rootPassword, true, Constants.UTYPE_STATE_ROOT);
627

    
628
                if (rc != Constants.ERR_SUCCESS)
629
                {
630
                        return rc;
631
                }
632

    
633
                rc = lockUserService.lockUser(adminUserAlias);
634

    
635
                logger.info("AD_LockUser - admin user alias: [" + adminUserAlias
636
                                + "] Return: " + rc);
637

    
638
                return rc;
639
        }
640

    
641
        /**
642
         * This method is to suspend online user from when for how many Minutes
643
         * 
644
         * @param adminUserAlias
645
         * @param adminUserPassword
646
         * @param userAlias
647
         * @param fromDate
648
         *            - from when
649
         * @param nMinutes
650
         *            - Suspend for how many minutes
651
         * @return ERR_code defined in the Constants.<br/>
652
         *         ERR_SUCCESS<br/>
653
         *         ERR_SYSTEM_NOT_READY<br/>
654
         *         ERR_USERALIAS_NOT_FOUND <br/>
655
         *         ERR_INVALID_STATE - admin not active or temporary suspended.<br/>
656
         *         ERR_APP_SERV_NOT_PERMITTED - for operation not allowed for the user type.<br/>
657
         *         ERR_EXCEED_MAX_TRIES<br/>
658
         *         ERR_INVALID_CREDENTIAL<br/>
659
         *         ERR_UNKNOWN<br/>
660
         */
661
        public int UA_SuspendUser(String adminUserAlias, String adminUserPassword,
662
                        String userAlias, String strFromDate, int nMinutes)
663
        {
664
                Date fromDate = StringToDate(strFromDate);
665
                int rc = verifyStaticPasswordService.verifyStaticPassword(
666
                                adminUserAlias, adminUserPassword, true,
667
                                Constants.UTYPE_STATE_ADMIN);
668

    
669
                if (rc != Constants.ERR_SUCCESS)
670
                {
671
                        return rc;
672
                }
673

    
674
                rc = lockUserService.lockUser(userAlias,
675
                                Constants.UID_STATE_TMP_LOCKED, fromDate, nMinutes);
676

    
677
                logger.info("UA_SuspendUser - admin user alias: [" + adminUserAlias
678
                                + "] user alias: [" + userAlias + "] From: [" + fromDate
679
                                + " for " + nMinutes + "min] Return: " + rc);
680

    
681
                return rc;
682
        }
683

    
684
        /**
685
         * This method is to suspend admin user from when for how many Minutes
686
         * 
687
         * @param rootAlias
688
         * @param rootPassword
689
         * @param adminUserAlias
690
         * @param fromDate
691
         *            - from when
692
         * @param nMinutes
693
         *            - Suspend for how many Minutes
694
         * @return ERR_code defined in the Constants.<br/>
695
         *         ERR_SUCCESS<br/>
696
         *         ERR_SYSTEM_NOT_READY<br/>
697
         *         ERR_USERALIAS_NOT_FOUND <br/>
698
         *         ERR_INVALID_STATE - root not active or temporary suspended.<br/>
699
         *         ERR_APP_SERV_NOT_PERMITTED - for operation not allowed for the user type.<br/>
700
         *         ERR_EXCEED_MAX_TRIES<br/>
701
         *         ERR_INVALID_CREDENTIAL<br/>
702
         *         ERR_UNKNOWN<br/>
703
         */
704
        public int AD_SuspendUser(String rootAlias, String rootPassword,
705
                        String adminUserAlias, String strFromDate, int nMinutes)
706
        {
707
                Date fromDate = StringToDate(strFromDate);
708
                int rc = verifyStaticPasswordService.verifyStaticPassword(
709
                                rootAlias, rootPassword, true, Constants.UTYPE_STATE_ROOT);
710

    
711
                if (rc != Constants.ERR_SUCCESS)
712
                {
713
                        return rc;
714
                }
715

    
716
                rc = lockUserService.lockUser(adminUserAlias,
717
                                Constants.UID_STATE_TMP_LOCKED, fromDate, nMinutes);
718

    
719
                logger.info("AD_SuspendUser - admin user alias: [" + adminUserAlias
720
                                + "] Return: " + rc);
721

    
722
                return rc;
723
        }
724

    
725
        /**
726
         * This method is to concate existing user alias to allow re use user after deleted.
727
         * 
728
         * @param rootAlias
729
         * @param rootPassword
730
         * @param adminUserAlias
731
         * @param fromDate
732
         *            - from when
733
         * @param nMinutes
734
         *            - Suspend for how many Minutes
735
         * @return ERR_code defined in the Constants.<br/>
736
         *         ERR_SUCCESS<br/>
737
         *         ERR_SYSTEM_NOT_READY<br/>
738
         *         ERR_USERALIAS_NOT_FOUND <br/>
739
         *         ERR_INVALID_STATE - root not active or temporary suspended.<br/>
740
         *         ERR_APP_SERV_NOT_PERMITTED - for operation not allowed for the user type.<br/>
741
         *         ERR_EXCEED_MAX_TRIES<br/>
742
         *         ERR_INVALID_CREDENTIAL<br/>
743
         *         ERR_UNKNOWN<br/>
744
         */
745
        public int UA_DeleteUser(String adminUserAlias, String adminUserPassword, String userAlias) {
746

    
747
                int rc = verifyStaticPasswordService.verifyStaticPassword(
748
                                adminUserAlias, adminUserPassword, true,
749
                                Constants.UTYPE_STATE_ADMIN);
750

    
751
                if (rc != Constants.ERR_SUCCESS) {
752
                        return rc;
753
                }
754
                rc = deleteUserService.deleteUser(userAlias, null);
755
                logger.info("UA_DeleteUser - admin user alias: [" + userAlias + "] Return: " + rc);
756
                return rc;
757
        }
758

    
759
        /**
760
         * Because of the ability to choose the target app,
761
         * this method is meant for USS only.
762
         * 
763
         * @see #deleteUserWithTheProfile(String, String, String, Session)
764
         */
765
        public int deleteUserWithTheProfile(
766
                        String adminUsername, String adminPassword,
767
                        String username, int targetAppId, Session txSession)
768
                        throws UPassException {
769

    
770
                int rc;
771
                try {
772
                        AccessCheckResult checkResult = checkAppAccess(adminUsername, adminPassword, txSession);
773

    
774
                        if (!checkResult.hasUPassAdminAccess())
775
                                rc = MinimalConstants.ERR_APP_SERV_NOT_PERMITTED;
776

    
777
                        else {
778
                                boolean revoked = appAccessMgtService.revokeAppAccessForUser(username, targetAppId, txSession);
779
                                rc = revoked ?
780
                                                deleteUserService.deleteUser(username, targetAppId, txSession)
781
                                                : MinimalConstants.ERR_SYSTEM_NOT_READY;
782
                        }
783
                } catch (MultipleAppAccessesFound e) {
784
                        rc = MinimalConstants.ERR_APP_SERV_NOT_PERMITTED;
785
                        e.printStackTrace();
786
                }
787
                logger.info("deleteUser - user alias: [" + username + "] Return: " + rc);
788
                return rc;
789
        }
790

    
791
        /**
792
         * This methods identifies the target app using <code>appAccessId</code>,
793
         * hence meant for {@link ClientApp}s
794
         * 
795
         * @see #deleteUserWithTheProfile(String, String, String, int, Session)
796
         */
797
        public int deleteUserWithTheProfile(
798
                        String appAccessId, String hashedSecretKey,
799
                        String username, Session txSession)
800
                        throws UPassException {
801

    
802
                int rc;
803
                try {
804
                        AccessCheckResult checkResult = checkAppAccess(appAccessId, hashedSecretKey, txSession);
805

    
806
                        final Integer targetAppId = checkResult.invokerAppId;
807
                        if (targetAppId == null) {
808
                                rc = MinimalConstants.ERR_APP_SERV_NOT_PERMITTED;
809

    
810
                        } else {
811
                                boolean revoked = appAccessMgtService.revokeAppAccessForUser(username, targetAppId, txSession);
812
                                rc = revoked ?
813
                                                deleteUserService.deleteUser(username, targetAppId, txSession)
814
                                                : MinimalConstants.ERR_SYSTEM_NOT_READY;
815
                        }
816
                } catch (MultipleAppAccessesFound e) {
817
                        rc = MinimalConstants.ERR_APP_SERV_NOT_PERMITTED;
818
                        e.printStackTrace();
819
                }
820
                logger.info("deleteUser - user alias: [" + username + "] Return: " + rc);
821
                return rc;
822
        }
823

    
824
        // ///////////////////////////////////////////////////////////////////////////////
825
        // token area
826
        // ///////////////////////////////////////////////////////////////////////////////
827

    
828
        /**
829
         * This method is to verify token password
830
         * 
831
         * @param userAlias
832
         * @param inPassword
833
         * @return ERR_code defined in the Constants<br/>
834
         *         ERR_SUCCESS<br/>
835
         *         ERR_SYSTEM_NOT_READY<br/>
836
         *         ERR_USERALIAS_NOT_FOUND<br/>
837
         *         ERR_INVALID_STATE<br/>
838
         *         ERR_EXCEED_MAX_TRIES<br/>
839
         *         ERR_INVALID_CREDENTIAL<br/>
840
         *         ERR_PASSWD_EXPIRED<br/>
841
         *         ERR_REUSED_PASSWD<br/>
842
         */
843
        public int VerifyToken(String userAlias, String inPassword)
844
        {
845
                int rc = verifyTokenService.verifyToken(userAlias, inPassword);
846

    
847
                logger.info("VerifyToken - user alias: [" + userAlias + "] Return: "
848
                                + rc);
849

    
850
                return rc;
851
        }
852

    
853
        /**
854
         * This method is to reset user token <br/>
855
         * 
856
         * @param adminUserAlias
857
         * @param adminUserPassword
858
         * @param userAlias
859
         * @return ERR_code defined in the Constants<br/>
860
         *         ERR_SUCCESS<br/>
861
         *         ERR_SYSTEM_NOT_READY<br/>
862
         *         ERR_USERALIAS_NOT_FOUND<br/>
863
         *         ERR_INVALID_STATE<br/>
864
         *         ERR_EXCEED_MAX_TRIES<br/>
865
         *         ERR_INVALID_CREDENTIAL<br/>
866
         */
867
        public int ResetToken(String adminUserAlias, String adminUserPassword,
868
                        String userAlias)
869
        {
870
                int rc = verifyStaticPasswordService.verifyStaticPassword(
871
                                adminUserAlias, adminUserPassword, true,
872
                                Constants.UTYPE_STATE_ADMIN);
873

    
874
                if (rc != Constants.ERR_SUCCESS)
875
                {
876
                        return rc;
877
                }
878

    
879
                rc = resetTokenService.resetToken(userAlias);
880
                logger.info("ResetToken - user alias: [" + userAlias + "] Return: "
881
                                + rc);
882
                return rc;
883
        }
884

    
885
        /**
886
         * This method is to query token information, Return type is HashMap<String,String>
887
         * RC - Return Code [always present]<br/>
888
         * RT - Return Code in Text [always present]<br/>
889
         * <br/>
890
         * The following data present only with the return is ERR_SUCCESS<br/>
891
         * SerailNo - The serial number of token<br/>
892
         * State - Token State, [0-UNASSIGNED], [1-ASSIGNED], [2-DISABLE], [3-LOCKED], [4-DELETED]<br/>
893
         * UseCount - number of time of password authentication <br/>
894
         * ErrorCount - number of time error encountered of password authentication<br/>
895
         * DateAssigned - date of assignment to user<br/>
896
         * DateFirstUsed - date of 1st time use<br/>
897
         * DateLastUsed - date of last time used<br/>
898
         * BatchID - the ID used for loading the token into data store<br/>
899
         * <br/>
900
         * 
901
         * Data retrieved from token BLOB<br/>
902
         * TOKEN_MODEL<br/>
903
         * USE_COUNT<br/>
904
         * ERROR_COUNT<br/>
905
         * LAST_TIME_USED<br/>
906
         * CODE_WORD<br/>
907
         * TRIPLE_DES<br/>
908
         * MAX_INPUT_FIELDS<br/>
909
         * RESPONSE_LENGTH<br/>
910
         * RESPONSE_TYPE<br/>
911
         * RESPONSE_CHECKSUM<br/>
912
         * TIME_STEP_USED<br/>
913
         * 
914
         * @param userAlias
915
         * @return HashMap
916
         */
917
        public HashMap<String, String> QueryToken(String userAlias)
918
        {
919
                return queryInfoService.queryToken(userAlias);
920
        }
921

    
922
        public int DeleteTokenFromStore(String adminUserAlias,
923
                        String adminUserPassword, String serialNumber)
924
        {
925
                int rc = verifyStaticPasswordService.verifyStaticPassword(
926
                                adminUserAlias, adminUserPassword, true,
927
                                Constants.UTYPE_STATE_ADMIN);
928

    
929
                if (rc != Constants.ERR_SUCCESS)
930
                {
931
                        return rc;
932
                }
933

    
934
                rc = deleteTokenService.deleteTokenFromStore(serialNumber);
935
                logger.info("DeleteTokenFromStore - serial number: [" + serialNumber
936
                                + "] Return: " + rc);
937
                return rc;
938
        }
939

    
940
        /**
941
         * This method is to assign token to user<br/>
942
         * 
943
         * @param serialNumber
944
         * @param userAlias
945
         * @return ERR_code defined in the Constants<br/>
946
         *         ERR_SUCCESS<br/>
947
         *         ERR_SYSTEM_NOT_READY<br/>
948
         *         ERR_USERALIAS_NOT_FOUND<br/>
949
         *         ERR_INVALID_STATE<br/>
950
         */
951
        public int AssignTokenToUser(String adminUserAlias,
952
                        String adminUserPassword, String serialNumber, String userAlias)
953
        {
954
                int rc = verifyStaticPasswordService.verifyStaticPassword(
955
                                adminUserAlias, adminUserPassword, true,
956
                                Constants.UTYPE_STATE_ADMIN);
957

    
958
                if (rc != Constants.ERR_SUCCESS)
959
                {
960
                        return rc;
961
                }
962

    
963
                rc = assignTokenService.assignToken(serialNumber, userAlias,
964
                                Constants.TKN_STATE_ASSIGNED);
965

    
966
                logger.info("AssignTokenToUser - serial number: [" + serialNumber
967
                                + "] user alias: [" + userAlias + "] Return: " + rc);
968

    
969
                return rc;
970
        }
971

    
972
        /**
973
         * This method is to return Token to store; Reset the Token.<br/>
974
         * The token is ready to re-assign to other user.<br/>
975
         * 
976
         * @param adminUserAlias
977
         * @param adminUserPassword
978
         * @param userAlias
979
         * @return ERR_code defined in the Constants<br/>
980
         *         ERR_SUCCESS<br/>
981
         *         ERR_SYSTEM_NOT_READY<br/>
982
         *         ERR_USERALIAS_NOT_FOUND<br/>
983
         *         ERR_INVALID_STATE<br/>
984
         */
985
        public int UnassignTokenFromUser(String adminUserAlias,
986
                        String adminUserPassword, String userAlias)
987
        {
988
                int rc = verifyStaticPasswordService.verifyStaticPassword(
989
                                adminUserAlias, adminUserPassword, true,
990
                                Constants.UTYPE_STATE_ADMIN);
991

    
992
                if (rc != Constants.ERR_SUCCESS)
993
                {
994
                        return rc;
995
                }
996

    
997
                rc = assignTokenService.assignToken(null, userAlias,
998
                                Constants.TKN_STATE_UNASSIGNED);
999

    
1000
                logger.info("UnassignTokenFromUser - user alias: [" + userAlias
1001
                                + "] Return: " + rc);
1002

    
1003
                return rc;
1004
        }
1005

    
1006
        /**
1007
         * This method is to disable the token<br/>
1008
         * 
1009
         * @param adminUserAlias
1010
         * @param adminUserPassword
1011
         * @param userAlias
1012
         * @return ERR_code defined in the Constants<br/>
1013
         *         ERR_SUCCESS<br/>
1014
         *         ERR_SYSTEM_NOT_READY<br/>
1015
         *         ERR_USERALIAS_NOT_FOUND<br/>
1016
         *         ERR_INVALID_STATE<br/>
1017
         */
1018
        public int DisableToken(String adminUserAlias, String adminUserPassword,
1019
                        String userAlias)
1020
        {
1021
                int rc = verifyStaticPasswordService.verifyStaticPassword(
1022
                                adminUserAlias, adminUserPassword, true,
1023
                                Constants.UTYPE_STATE_ADMIN);
1024

    
1025
                if (rc != Constants.ERR_SUCCESS)
1026
                {
1027
                        return rc;
1028
                }
1029

    
1030
                rc = disableTokenService.disableToken(userAlias, true);
1031

    
1032
                logger.info("DisableToken - user alias: [" + userAlias + "] Return: "
1033
                                + rc);
1034

    
1035
                return rc;
1036
        }
1037

    
1038
        /**
1039
         * This method is to enable to token<br/>
1040
         * 
1041
         * @param adminUserAlias
1042
         * @param adminUserPassword
1043
         * @param userAlias
1044
         * @return ERR_code defined in the Constants<br/>
1045
         *         ERR_SUCCESS<br/>
1046
         *         ERR_SYSTEM_NOT_READY<br/>
1047
         *         ERR_USERALIAS_NOT_FOUND<br/>
1048
         *         ERR_INVALID_STATE<br/>
1049
         */
1050
        public int EnableToken(String adminUserAlias, String adminUserPassword,
1051
                        String userAlias)
1052
        {
1053
                int rc = verifyStaticPasswordService.verifyStaticPassword(
1054
                                adminUserAlias, adminUserPassword, true,
1055
                                Constants.UTYPE_STATE_ADMIN);
1056

    
1057
                if (rc != Constants.ERR_SUCCESS)
1058
                {
1059
                        return rc;
1060
                }
1061

    
1062
                rc = disableTokenService.disableToken(userAlias, false);
1063

    
1064
                logger.info("EnableToken - user alias: [" + userAlias + "] Return: "
1065
                                + rc);
1066

    
1067
                return rc;
1068
        }
1069

    
1070
        /**
1071
         * This method is to load token from DPX or PSKC file to UPass data store
1072
         * Refer to System Console for additional information.
1073
         * 
1074
         * @param adminUserAlias
1075
         * @param adminUserPassword
1076
         * @param requiredField1
1077
         *            = fileName
1078
         * @param requiredField2
1079
         *            = importKey/ passsphrase / fileName
1080
         * @param requiredField3
1081
         *            = batchId/ null
1082
         * @return rc (response code)
1083
         * @throws Exception
1084
         */
1085
        public int LoadToken(String adminUserAlias, String adminUserPassword,
1086
                        String requiredField1, String requiredField2, String requiredField3) throws Exception
1087
        {
1088
                int rc = Constants.ERR_SYSTEM_NOT_READY;
1089

    
1090
                rc = LoadTokenWithStats(adminUserAlias, adminUserPassword,
1091
                                requiredField1, requiredField2, requiredField3).getResponseCode();
1092

    
1093
                return rc;
1094
        }
1095

    
1096
        /**
1097
         * This method override the existing LoadToken to generate load token statistic
1098
         * 
1099
         * @param adminUserAlias
1100
         * @param adminUserPassword
1101
         * @param requiredField1
1102
         *            = fileName
1103
         * @param requiredField2
1104
         *            = importKey/ passsphrase / fileName
1105
         * @param requiredField3
1106
         *            = batchId/ null
1107
         * @return LoadTokenBean
1108
         * @throws Exception
1109
         */
1110
        public LoadTokenBean LoadTokenWithStats(String adminUserAlias, String adminUserPassword,
1111
                        String requiredField1, String requiredField2, String requiredField3) throws Exception {
1112
                LoadTokenBean loadTokenBean = new LoadTokenBean();
1113

    
1114
                // verify supervisor password
1115
                int rc = verifyStaticPasswordService.verifyStaticPassword(
1116
                                adminUserAlias, adminUserPassword, true,
1117
                                Constants.UTYPE_STATE_ADMIN);
1118

    
1119
                rc = 0;
1120

    
1121
                if (rc != Constants.ERR_SUCCESS) {
1122
                        loadTokenBean.setResponseCode(rc);
1123

    
1124
                } else {
1125
                        loadTokenBean = loadTokenService.loadToken(requiredField1, requiredField2, requiredField3,
1126
                                        UPassFactory.getTokenMode());
1127
                }
1128

    
1129
                return loadTokenBean;
1130
        }
1131

    
1132
        /**
1133
         * This method override the existing LoadToken to generate load token statistic
1134
         * 
1135
         * @param adminUserAlias
1136
         * @param adminUserPassword
1137
         * @param requiredField1
1138
         *            = userAlias
1139
         * @param requiredField2
1140
         *            = Otp 1
1141
         * @param requiredField3
1142
         *            = Otp 2
1143
         * @return LoadTokenBean
1144
         * @throws Exception
1145
         */
1146
        public int SynchronizeToken(String adminUserAlias, String adminUserPassword,
1147
                        String userAlias, String otp1, String otp2) {
1148

    
1149
                // verify supervisor password
1150
                int rc = verifyStaticPasswordService.verifyStaticPassword(
1151
                                adminUserAlias, adminUserPassword, true,
1152
                                Constants.UTYPE_STATE_ADMIN);
1153

    
1154
                if (rc != Constants.ERR_SUCCESS)
1155
                {
1156
                        return rc;
1157
                }
1158

    
1159
                rc = synchronizeTokenService.syncToken(userAlias, otp1, otp2);
1160

    
1161
                logger.info("SyncToken - useralias: [" + userAlias
1162
                                + "] first OTP: [" + otp1 + "] Second OTP: [" + otp2 + "] Return: " + rc);
1163
                return rc;
1164

    
1165
        }
1166

    
1167
        /**
1168
         * This method is to get Specified token vendor name in Token Controller
1169
         * 
1170
         * @return token Vendor name
1171
         */
1172
        public String getTokenVendor() {
1173

    
1174
                return queryInfoService.getTokenVendor();
1175

    
1176
        }
1177

    
1178
        // ///////////////////////////////////////////////////////////////////////////////
1179
        // token area end
1180
        // ///////////////////////////////////////////////////////////////////////////////
1181

    
1182
        private Date StringToDate(String dateString)
1183
        {
1184
                String DATE_FORMAT = "yyyyMMddHHmmss";
1185
                SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT);
1186
                Date parsedDate = new Date();
1187

    
1188
                try
1189
                {
1190
                        parsedDate = format.parse(dateString);
1191
                } catch (ParseException pe)
1192
                {
1193
                        logger.info("ERROR: Cannot parse date in String " + dateString);
1194
                }
1195

    
1196
                return parsedDate;
1197
        }
1198

    
1199
        // ///////////////////////////////////////////////////////////////////////////////
1200
        // Security code area
1201
        // ///////////////////////////////////////////////////////////////////////////////
1202

    
1203
        public String GenerateSecurityCode(String identifier)
1204
        {
1205
                String sRc = generateSecurityCodeService
1206
                                .generateSecurityCode(identifier);
1207

    
1208
                logger.info(identifier + " Return=" + sRc.substring(2));
1209

    
1210
                return sRc;
1211
        }
1212

    
1213
        public int VerifySecurityCode(String identifier, String securityCode)
1214
        {
1215
                int rc = verifySecurityCodeService.verifySecurityCode(
1216
                                identifier, securityCode);
1217

    
1218
                logger.info("VerifySecurityCode - identifier: [" + identifier
1219
                                + "] Return: " + rc);
1220

    
1221
                return rc;
1222
        }
1223

    
1224
        public int VerifyPasswordComplexity(String password, int applicationId) {
1225
                int rc = verifyPasswordComplexityService.verifyPasswordComplexity(password, applicationId);
1226

    
1227
                logger.info("VerifyPasswordComplexity: - password[" + password + "] Return: " + rc);
1228

    
1229
                return rc;
1230
        }
1231

    
1232
        /**
1233
         * This method to add admin users to the system
1234
         * 
1235
         * @param rootAlias
1236
         * @param rootHashedPassword
1237
         * @param adminUserAlias
1238
         * @param adminDesc
1239
         * @param adminHashedPassword
1240
         * @return ERR_code defined in the MinimalConstants<br/>
1241
         *         ERR_SUCCESS<br/>
1242
         *         ERR_SYSTEM_NOT_READY<br/>
1243
         *         ERR_USERALIAS_NOT_FOUND <br/>
1244
         *         ERR_INVALID_STATE - root not active or temporary suspended.<br/>
1245
         *         ERR_APP_SERV_NOT_PERMITTED - for operation not allowed for the user type.<br/>
1246
         *         ERR_EXCEED_MAX_TRIES<br/>
1247
         *         ERR_INVALID_CREDENTIAL<br/>
1248
         *         ERR_INVALID_INPUT - internal error.<br/>
1249
         *         ERR_ALREADY_EXIST<br/>
1250
         *         ERR_INVALID_USERALIAS - User alias does not match with defined pattern <br/>
1251
         *         ERR_PASSWORD_SAMEAS_USERALIAS - password is same is user name error <br/>
1252
         */
1253
        public int AD_AddUser(
1254
                        String rootAlias, String rootHashedPassword,
1255
                        String adminUserAlias, String adminDesc, String adminHashedPassword) {
1256

    
1257
                // check if password is similar to user alias
1258
                if (rootAlias.equalsIgnoreCase(rootHashedPassword)) {
1259
                        return MinimalConstants.ERR_PASSWORD_SAMEAS_USERALIAS;
1260
                }
1261
                int rc = verifyStaticPasswordService.verifyStaticPassword(
1262
                                rootAlias, rootHashedPassword, true, MinimalConstants.UTYPE_STATE_ROOT);
1263

    
1264
                if (rc != MinimalConstants.ERR_SUCCESS) {
1265
                        return rc;
1266
                }
1267
                rc = createUserService.addUser(adminUserAlias,
1268
                                MinimalConstants.UTYPE_STATE_ADMIN, adminDesc, adminHashedPassword,
1269
                                MinimalConstants.UID_STATE_ACTIVE, MinimalConstants.SYSTEM_ID);
1270

    
1271
                logger.info("AD_AddUser - admin user alias: [" + adminUserAlias + "] Return: " + rc);
1272

    
1273
                return rc;
1274
        }
1275

    
1276
        public static void main(String[] args) throws Exception {
1277

    
1278
                final UPassControllerV2 controller = new UPassControllerV2();
1279

    
1280
                final String adminUsername = "UpassAdmin";
1281
                final String adminPassword = "password";
1282
                final String adminHashedPassword = PasswordController.sha256(adminPassword);
1283
                final String username = "test-user-777";
1284
                final String userPassword = "Passw0rd";
1285
                final String userHashedPassword = PasswordController.sha256(userPassword);
1286
                MinimalUserBean user = new MinimalUserBean();
1287
                user.setUsername(username);
1288
                user.setHashedPassword(userHashedPassword);
1289

    
1290
                int addResult = controller.addUser(
1291
                                adminUsername, adminHashedPassword,
1292
                                user, UserAppAccess.TYPE_USER, ClientApp.APP_ID_M2U, null, true);
1293

    
1294
                System.out.println("addResult: " + addResult);
1295

    
1296
                M2uUser m2uProfile = new M2uUser();
1297
                m2uProfile.setMinUser(user);
1298
                m2uProfile.setPan1("testPan1-777");
1299
                int updateResult = controller.updateProfileShallowly(adminUsername, adminPassword, m2uProfile, null);
1300

    
1301
                System.out.println("updateResult: " + updateResult);
1302

    
1303
                int verifyResult = controller.verifyStaticPassword_withAppChecked(
1304
                                adminUsername, adminPassword,
1305
                                username, userHashedPassword);
1306

    
1307
                System.out.println("verifyResult: " + verifyResult);
1308

    
1309
                List examples = new ArrayList(5);
1310
                examples.add(new M2uUser());
1311
                examples.add(new StockUser());
1312
                examples.add(new TicketingUser());
1313
                examples.add(new IbccUser());
1314
                examples.add(new Im2uUser());
1315
                List listResult = controller.listProfilesByExamples(
1316
                                adminUsername, adminPassword,
1317
                                examples, null, null);
1318

    
1319
                System.out.println("listResult: " + listResult);
1320

    
1321
                Integer deleteResult = controller.deleteUserWithTheProfile(
1322
                                adminUsername, adminPassword,
1323
                                username, ClientApp.APP_ID_M2U, null);
1324

    
1325
                System.out.println("deleteResult: " + deleteResult);
1326
        }
1327
}