Revision 5:0df24c3112cc

View differences:

src/main/java/my/com/upass/Config.java
1

  
2 1
package my.com.upass;
3 2

  
4
import java.io.FileInputStream;
5
import java.net.URL;
6
import java.net.URLDecoder;
3
import java.io.IOException;
4
import java.io.InputStream;
7 5
import java.util.Properties;
8 6

  
9 7
import org.apache.log4j.Logger;
10 8

  
11
public class Config
12
{
13
	private static final Logger		logger		= Logger.getLogger (Config.class);
14
	private static final Properties	props		= new Properties ();
15
	private static Config			instance	= null;
16
	
17
//	private static String			CONFIG		= "upass.cfg";
18
	private static String			CONFIG		= "upassMin.properties";
9
public class Config {
19 10

  
20
	public Config ()
21
	{
22
		try
23
		{
24
			// Load config file from classes directory
25
			URL url = this.getClass ().getClassLoader ().getResource (CONFIG); 
26
			String processedUrl = URLDecoder.decode (url.getFile (), "UTF-8");
27
			FileInputStream in = new FileInputStream (processedUrl);
28
			props.load (in);
11
	private static final Logger LOGGER = Logger.getLogger(Config.class);
12
	private static final Properties props = new Properties();
13
	private static Config instance = null;
29 14

  
30
			in.close ();
31
		}
32
		catch (Exception e)
33
		{
34
			logger.error ("Exception(1) " + getClass ().getName () + ":" + e.getMessage ());
15
	// private static String CONFIG = "upass.cfg";
16
	private final static String CONFIG = "upassMin.properties";
17

  
18
	private Config() {
19
		InputStream propsStream = Config.class.getClassLoader()
20
				.getResourceAsStream(CONFIG);
21
		try {
22
			props.load(propsStream);
23

  
24
		} catch (Exception e) {
25
			LOGGER.error(e.toString(), e);
26

  
27
		} finally {
28
			try {
29
				propsStream.close();
30

  
31
			} catch (IOException e) {
32
				LOGGER.error(e.toString(), e);
33
			}
35 34
		}
36 35
	}
37 36

  
38
	public void setConfig (String configFile)
39
	{
40
		CONFIG = configFile;
41
	}
42

  
43
	public void initInstance ()
44
	{
45
		if (instance == null)
46
		{
47
			instance = new Config ();
48
		}
49
		return;
50
	}
51

  
52
	public static Config getInstance ()
53
	{
54
		if (instance == null)
55
		{
56
			instance = new Config ();
37
	public static Config getInstance() {
38
		if (instance == null) {
39
			instance = new Config();
57 40
		}
58 41
		return instance;
59 42
	}
60 43

  
61
	public Properties getConfig ()
62
	{
44
	public Properties getConfig() {
63 45
		return props;
64 46
	}
65 47

  
48
	public String getProperty(String key) {
49
		return props.getProperty(key);
50
	}
51

  
52
	public Object get(String key) throws NullPointerException {
53
		return props.get(key);
54
	}
66 55
}
src/main/java/my/com/upass/MinimalUPassController.java
23 23
		}
24 24

  
25 25
		MinimalDbOperations dbo = new MinimalDbOperations();
26
		MinimalUserBean MinimalUserBean = new MinimalUserBean();
27
		MinimalUserBean = dbo.getUserFromStore(userAlias);
28
		if (MinimalUserBean == null) {
26
		MinimalUserBean userBean = new MinimalUserBean();
27
		userBean = dbo.getUserFromStore(userAlias);
28
		if (userBean == null) {
29 29
			dbo.close();
30 30
			return MinimalConstants.ERR_USERALIAS_NOT_FOUND;
31 31
		}
32 32

  
33 33
		// verify user state, must be active (not inactive|locked|deleted)
34
		switch (MinimalUserBean.getUstate()) {
34
		switch (userBean.getUstate()) {
35 35
		case (MinimalConstants.UID_STATE_ACTIVE):
36 36
			break;
37 37
		case (MinimalConstants.UID_STATE_TMP_LOCKED):
38 38
			Date now = new Date();
39
			if (MinimalUserBean.getUdateLockedTo().after(now)) {
39
			if (userBean.getUdateLockedTo().after(now)) {
40 40
				dbo.close();
41 41
				return MinimalConstants.ERR_INVALID_STATE;
42 42
			}
......
47 47
		}
48 48

  
49 49
		// verify user type
50
		if (chkUserType && MinimalUserBean.getUserType() != userType) {
50
		if (chkUserType && userBean.getUserType() != userType) {
51 51
			dbo.close();
52 52
			return MinimalConstants.ERR_APP_SERV_NOT_PERMITTED;
53 53
		}
54 54

  
55 55
		// verify user password
56
		PasswordController pc = new PasswordController(MinimalUserBean);
56
		PasswordController pc = new PasswordController(userBean);
57 57
		int rc = pc.VerifyPassword(password);
58
		MinimalUserBean = pc.getUpdatedObject();
58
		userBean = pc.getUpdatedObject();
59 59

  
60 60
		// suspend if exceeded max retries
61 61
		if (rc == MinimalConstants.ERR_EXCEED_MAX_TRIES &&
62
				(MinimalUserBean.getUserType() != MinimalConstants.UTYPE_STATE_USER)) {
62
				(userBean.getUserType() != MinimalConstants.UTYPE_STATE_USER)) {
63 63

  
64 64
			Calendar expiryDate = Calendar.getInstance();
65 65
			expiryDate.add(Calendar.MINUTE, +SUPERVISOR_ID_SUSPEND);
66 66

  
67
			MinimalUserBean.setUstate(MinimalConstants.UID_STATE_TMP_LOCKED);
68
			MinimalUserBean.setPerrorCount(_MAX_ERROR - 1);
69
			MinimalUserBean.setUdateLockedFrom((new Date()));
70
			MinimalUserBean.setUdateLockedTo(expiryDate.getTime());
71
			MinimalUserBean.setUdateLastLocked((new Date()));
67
			userBean.setUstate(MinimalConstants.UID_STATE_TMP_LOCKED);
68
			userBean.setPerrorCount(_MAX_ERROR - 1);
69
			userBean.setUdateLockedFrom((new Date()));
70
			userBean.setUdateLockedTo(expiryDate.getTime());
71
			userBean.setUdateLastLocked((new Date()));
72 72
		}
73 73

  
74 74
		// Debug info:
75 75
		logger.debug("RC........." + rc + "\n" +
76
				".use......." + MinimalUserBean.getPuseCount() + "\n" +
77
				".err......." + MinimalUserBean.getPerrorCount() + "\n" +
78
				".hist......" + MinimalUserBean.getPhistoryList() + "\n" +
76
				".use......." + userBean.getPuseCount() + "\n" +
77
				".err......." + userBean.getPerrorCount() + "\n" +
78
				".hist......" + userBean.getPhistoryList() + "\n" +
79 79
				".last......" +
80
				new String(MinimalConstants.defaultDateFormat.format(MinimalUserBean.getPdateLastUsed())));
80
				new String(MinimalConstants.defaultDateFormat.format(userBean.getPdateLastUsed())));
81 81
		// debug info:
82 82

  
83 83
		// update database
84
		boolean lrc = dbo.updateUserToStore(MinimalUserBean);
84
		boolean lrc = dbo.updateUserToStore(userBean);
85 85
		dbo.close();
86 86
		if (!lrc) {
87 87
			rc = MinimalConstants.ERR_SYSTEM_NOT_READY;
src/main/java/my/com/upass/db/MinimalDbOperations.java
8 8
import java.sql.ResultSet;
9 9
import java.sql.SQLException;
10 10
import java.util.Date;
11
import java.util.Properties;
12 11

  
13 12
import my.com.upass.Config;
14 13
import my.com.upass.MinimalConstants;
......
40 39
		String use_jndi = "N";
41 40

  
42 41
		Config cfg = Config.getInstance();
43
		Properties cfgData = cfg.getConfig();
44 42
		try {
45
			use_jndi = cfgData.get("DB_USE_JNDI").toString(); // Y/N
43
			use_jndi = cfg.get("DB_USE_JNDI").toString(); // Y/N
44

  
46 45
		} catch (Exception e) {
47
			logger.error("ERR: Property entry not found..");
46
			logger.error(e.toString(), e);
48 47
		}
49 48

  
50 49
		// if (use_jndi.equals("Y")) {
......
66 65
		String password = null;
67 66

  
68 67
		try {
69
			driver = cfgData.get("DB_DRIVER").toString(); // "oracle.jdbc.driver.OracleDriver";
70
			url = cfgData.get("DB_URL").toString(); // "jdbc:oracle:thin:@127.0.0.1:1521:XE";
71
			username = cfgData.get("DB_USERNAME").toString(); // "am01";
72
			password = cfgData.get("DB_PASSWORD").toString(); // "am01";
68
			driver = cfg.get("DB_DRIVER").toString(); // "oracle.jdbc.driver.OracleDriver";
69
			url = cfg.get("DB_URL").toString(); // "jdbc:oracle:thin:@127.0.0.1:1521:XE";
70
			username = cfg.get("DB_USERNAME").toString(); // "am01";
71
			password = cfg.get("DB_PASSWORD").toString(); // "am01";
72

  
73 73
		} catch (Exception e) {
74
			logger.error("ERR: Property entry not found..");
75
			return null;
74
			logger.error(e.toString(), e);
76 75
		}
77 76

  
78 77
		Class.forName(driver); // load Oracle driver
......
343 342
	}
344 343

  
345 344
	public long getSqlServerSeqID() {
346
	
345

  
347 346
		// setup the unique ID
348 347
		BigDecimal nextValue = new BigDecimal(0);
349 348
		CallableStatement cstmt = null;
......
361 360
			try {
362 361
				cstmt.close();
363 362
			} catch (SQLException ex) {
364
				logger.error (getFullTrace (ex));
363
				logger.error(getFullTrace(ex));
365 364
			}
366 365
		}
367
		return nextValue.longValue ();
366
		return nextValue.longValue();
368 367
	}
369 368

  
370 369
	/**
371 370
	 * 
372 371
	 */
373 372
	public boolean insertUserToStore(MinimalUserBean ub) {
374
			boolean rc = false;
375
			int nRow = 0;
376
			
377
			long nextVal= getSqlServerSeqID();
378
	
379
			String sqlStmt1 = "INSERT INTO tb_am_usermas (m_user_alias, m_user_id) VALUES (?, ?)";
380
			
381
			//TODO: use buff string.. later
382
	//		String sqlStmt2 = "INSERT ALL " +
383
	//			"INTO tb_am_user (U_USER_ID, U_USER_ALIAS, U_USER_TYPE, U_USER_DESC, U_USER_STATE," +
384
	//			"P_PASSWD_CIPHERTEXT, P_DATE_EXPIRED, P_PASSWD_HIST) VALUES (?, ?, ?, ?, ?, ?, ?, ?) " +
385
	//			"INTO tb_am_tac (T_USER_ID) VALUES (?) SELECT * FROM dual";
386
			String sqlStmt2 = "INSERT " +
387
			"INTO tb_am_user (U_USER_ID, U_USER_ALIAS, U_USER_TYPE, U_USER_DESC, U_USER_STATE," +
388
			"P_PASSWD_CIPHERTEXT, P_DATE_EXPIRED, P_PASSWD_HIST, U_DATE_CREATED, U_USE_COUNT, P_PASSWD_STATE, P_DATE_GENERATED, P_USE_COUNT, P_ERROR_COUNT, P_EXPIRED_STATUS) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
389
			
390
			String sqlStmt3 = "INSERT INTO tb_am_tac (T_USER_ID, T_TAC_STATE, T_DATE_GENERATED, T_USE_COUNT, T_ERROR_COUNT) VALUES (?, ?, ?, ?, ?)";
391
			
392
			// insert into DB
393
			PreparedStatement pstmt = null;
394
			try {
395
				pstmt = this.conn.prepareStatement(sqlStmt1);
396
				pstmt.setString(1, ub.getUserAlias());
397
				pstmt.setLong(2, nextVal);
398
				
373
		boolean rc = false;
374
		int nRow = 0;
375

  
376
		long nextVal = getSqlServerSeqID();
377

  
378
		String sqlStmt1 = "INSERT INTO tb_am_usermas (m_user_alias, m_user_id) VALUES (?, ?)";
379

  
380
		// TODO: use buff string.. later
381
		// String sqlStmt2 = "INSERT ALL " +
382
		// "INTO tb_am_user (U_USER_ID, U_USER_ALIAS, U_USER_TYPE, U_USER_DESC, U_USER_STATE," +
383
		// "P_PASSWD_CIPHERTEXT, P_DATE_EXPIRED, P_PASSWD_HIST) VALUES (?, ?, ?, ?, ?, ?, ?, ?) " +
384
		// "INTO tb_am_tac (T_USER_ID) VALUES (?) SELECT * FROM dual";
385
		String sqlStmt2 = "INSERT "
386
				+
387
				"INTO tb_am_user (U_USER_ID, U_USER_ALIAS, U_USER_TYPE, U_USER_DESC, U_USER_STATE,"
388
				+
389
				"P_PASSWD_CIPHERTEXT, P_DATE_EXPIRED, P_PASSWD_HIST, U_DATE_CREATED, U_USE_COUNT, P_PASSWD_STATE, P_DATE_GENERATED, P_USE_COUNT, P_ERROR_COUNT, P_EXPIRED_STATUS) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
390

  
391
		String sqlStmt3 = "INSERT INTO tb_am_tac (T_USER_ID, T_TAC_STATE, T_DATE_GENERATED, T_USE_COUNT, T_ERROR_COUNT) VALUES (?, ?, ?, ?, ?)";
392

  
393
		// insert into DB
394
		PreparedStatement pstmt = null;
395
		try {
396
			pstmt = this.conn.prepareStatement(sqlStmt1);
397
			pstmt.setString(1, ub.getUserAlias());
398
			pstmt.setLong(2, nextVal);
399

  
400
			nRow = executeSQLUpdate(pstmt);
401
			// // System.out.println(nRow + " Row inserted to table");
402

  
403
			if (nRow < 1) {
404
				logger.info("ERR: no row inserted into master table!");
405
				rc = false;
406
			} else {
407
				pstmt = this.conn.prepareStatement(sqlStmt2);
408
				pstmt.setLong(1, nextVal);
409
				pstmt.setString(2, ub.getUserAlias());
410
				pstmt.setInt(3, ub.getUserType());
411
				pstmt.setString(4, ub.getDescription());
412
				pstmt.setInt(5, ub.getUstate());
413
				pstmt.setString(6, ub.getPcipherText());
414
				pstmt.setTimestamp(7, convertSqlDate(ub.getPdateExpired()));
415
				pstmt.setString(8, ub.getPhistoryList());
416
				pstmt.setTimestamp(9, convertSqlDate(new Date()));
417
				pstmt.setInt(10, 0);
418
				pstmt.setInt(11, 0);
419
				pstmt.setTimestamp(12, convertSqlDate(new Date()));
420
				pstmt.setInt(13, 0);
421
				pstmt.setInt(14, 0);
422
				pstmt.setInt(15, 1);
423

  
399 424
				nRow = executeSQLUpdate(pstmt);
400
				//// System.out.println(nRow + " Row inserted to table");
401
				
425

  
426
				logger.info(nRow + " Row inserted to table");
427

  
428
				pstmt = this.conn.prepareStatement(sqlStmt3);
429
				pstmt.setLong(1, nextVal);
430
				pstmt.setLong(2, 0);
431
				pstmt.setTimestamp(3, convertSqlDate(new Date()));
432
				pstmt.setInt(4, 0);
433
				pstmt.setInt(5, 0);
434
				nRow = executeSQLUpdate(pstmt);
435

  
436
				logger.info(nRow + " Row inserted to table");
437

  
402 438
				if (nRow < 1) {
403
					logger.info("ERR: no row inserted into master table!");
439
					logger.info("ERR: no row inserted into user table!");
440
					//
441
					// rollback
442
					//
443
					try {
444
						this.conn.rollback();
445
						logger.info("INFO:1 insertUserToStore :: rollback.");
446
					} catch (Exception rbe) {
447
						logger.error("EXC:insertUserToStore :: rollback failed!");
448
					}
449
					// rollback completed
404 450
					rc = false;
405 451
				} else {
406
					pstmt = this.conn.prepareStatement(sqlStmt2);
407
					pstmt.setLong(1, nextVal);
408
					pstmt.setString(2, ub.getUserAlias());
409
					pstmt.setInt(3,ub.getUserType());
410
					pstmt.setString(4, ub.getDescription());
411
					pstmt.setInt(5,ub.getUstate());
412
					pstmt.setString(6, ub.getPcipherText());
413
					pstmt.setTimestamp(7, convertSqlDate(ub.getPdateExpired()) );
414
					pstmt.setString(8, ub.getPhistoryList());
415
					pstmt.setTimestamp(9, convertSqlDate(new Date()));
416
					pstmt.setInt(10, 0);
417
					pstmt.setInt(11, 0);
418
					pstmt.setTimestamp(12, convertSqlDate(new Date()));
419
					pstmt.setInt(13, 0);
420
					pstmt.setInt(14, 0);
421
					pstmt.setInt(15, 1);
422
					
423
					nRow = executeSQLUpdate(pstmt);
424
					
425
					logger.info(nRow + " Row inserted to table");
426
					
427
					pstmt = this.conn.prepareStatement(sqlStmt3);
428
					pstmt.setLong(1, nextVal);
429
					pstmt.setLong(2, 0);
430
					pstmt.setTimestamp (3, convertSqlDate(new Date()));
431
					pstmt.setInt(4, 0);
432
					pstmt.setInt(5, 0);
433
					nRow = executeSQLUpdate(pstmt);
434
					
435
					logger.info(nRow + " Row inserted to table");
436
					
437
					if (nRow < 1) {
438
						logger.info("ERR: no row inserted into user table!");
439
						//
440
						// rollback
441
						//
442
						try { 
443
							this.conn.rollback();
444
							logger.info("INFO:1 insertUserToStore :: rollback.");
445
						} catch(Exception rbe) {
446
							logger.error("EXC:insertUserToStore :: rollback failed!");
447
						}
448
						// rollback completed
449
						rc = false;
450
					} else {
451
						////System.out.println("GOOD: perf db commit!");
452
						this.conn.commit();
453
						rc = true;
454
					}
452
					// //System.out.println("GOOD: perf db commit!");
453
					this.conn.commit();
454
					rc = true;
455 455
				}
456
				
457
				} catch (Exception e) {
458
					logger.error(getFullTrace(e));
459
					logger.error("EXC:1 insertUserToStore");
460
					rc = false;
461
				} finally { // close database resources
462
					  try {
463
					       pstmt.close();
464
					       //this.conn.close();
465
					  } catch (Exception e) {
466
						  logger.error("EXC:Final insertUserToStore");
467
						  logger.error(getFullTrace(e));
468
					  }
469
				}//finally--
470
				
471
			return rc;
472
		}
456
			}
457

  
458
		} catch (Exception e) {
459
			logger.error(getFullTrace(e));
460
			logger.error("EXC:1 insertUserToStore");
461
			rc = false;
462
		} finally { // close database resources
463
			try {
464
				pstmt.close();
465
				// this.conn.close();
466
			} catch (Exception e) {
467
				logger.error("EXC:Final insertUserToStore");
468
				logger.error(getFullTrace(e));
469
			}
470
		}// finally--
471

  
472
		return rc;
473
	}
473 474

  
474 475
	public static java.sql.Timestamp getCurrentSqlDate() {
475 476
		java.util.Date today = new java.util.Date();
src/main/java/my/com/upass/spassword/PasswordController.java
80 80

  
81 81
	private void getSystemProperties() {
82 82
		Config cfg = Config.getInstance();
83
		Properties cfgData = cfg.getConfig();
84 83
		try {
85
			_MAX_ERROR = Integer.parseInt(cfgData.get("PASSWORD_MAX_ERROR").toString());
86
			_MAX_PASSWD_REUSED = Integer.parseInt(cfgData.get("PASSWORD_GENERAION").toString());
87
			_EXPIRY_DAY = Integer.parseInt(cfgData.get("PASSWORD_EXPIRY_DAY").toString());
88
			_MIN_LENGTH = Integer.parseInt(cfgData.get("PASSWORD_MIN_LENGTH").toString());
89
			_COMPLEXITY = Integer.parseInt(cfgData.get("PASSWORD_COMPLEXITY").toString());
90
			_PASSWORD_PATTERN = cfgData.get("PASSWORD_PATTERN").toString();
91
			_USERNAME_PATTERN = cfgData.get("USERNAME_PATTERN").toString();
92
			_PASSWORD_ACCEPT_PATTERN = cfgData.get("PASSWORD_ACCEPT_PATTERN").toString();
84
			_MAX_ERROR = Integer.parseInt(cfg.get("PASSWORD_MAX_ERROR").toString());
85
			_MAX_PASSWD_REUSED = Integer.parseInt(cfg.get("PASSWORD_GENERAION").toString());
86
			_EXPIRY_DAY = Integer.parseInt(cfg.get("PASSWORD_EXPIRY_DAY").toString());
87
			_MIN_LENGTH = Integer.parseInt(cfg.get("PASSWORD_MIN_LENGTH").toString());
88
			_COMPLEXITY = Integer.parseInt(cfg.get("PASSWORD_COMPLEXITY").toString());
89
			_PASSWORD_PATTERN = cfg.get("PASSWORD_PATTERN").toString();
90
			_USERNAME_PATTERN = cfg.get("USERNAME_PATTERN").toString();
91
			_PASSWORD_ACCEPT_PATTERN = cfg.get("PASSWORD_ACCEPT_PATTERN").toString();
93 92
		} catch (Exception e) {
94 93
			logger.error("ERR: Property entry not found..");
95 94
		}

Also available in: Unified diff