371 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			371 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C#
		
	
using System;
 | 
						|
using System.Linq;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Text;
 | 
						|
using System.Runtime.InteropServices;
 | 
						|
 | 
						|
namespace ITC81DB_0H.Part11_UserManager
 | 
						|
{
 | 
						|
    public partial class UserManager
 | 
						|
    {
 | 
						|
        #region Field
 | 
						|
        // fnUserMgrDebugCB
 | 
						|
        public const int USERMGR_DBG_NORMAL = 0x0001;
 | 
						|
        public const int USERMGR_DBG_THREAD = 0x0002;
 | 
						|
        public const int USERMGR_DBG_LIST = 0x0004;
 | 
						|
 | 
						|
        // fnUserMgrLoginCB
 | 
						|
        public const int USERMGR_LOGIN_STATUS_OK = 0x00;
 | 
						|
        public const int USERMGR_LOGIN_STATUS_ID_FAIL = 0x01;
 | 
						|
        public const int USERMGR_LOGIN_STATUS_PW_FAIL = 0x02;
 | 
						|
 | 
						|
        // fnUserMgrLogoutCB
 | 
						|
        public const int USERMGR_LOGOUT_STATUS_OK = 0x00;
 | 
						|
        public const int USERMGR_LOGOUT_STATUS_FAIL = 0x01;
 | 
						|
 | 
						|
        // fnUserMgrDelUserCB
 | 
						|
        //public const int USERMGR_DEL_STATUS_OK = 0x00;
 | 
						|
        //public const int USERMGR_DEL_STATUS_NOK = 0x01;
 | 
						|
 | 
						|
        // lock_status
 | 
						|
        public const int USERMGR_LOCK_STATUS_NONE = 0x00;
 | 
						|
        public const int USERMGR_LOCK_STATUS_EXPIRE = 0x01;
 | 
						|
 | 
						|
        public const int USERMGR_ID_MIN_LENGTH = 6;
 | 
						|
        public const int UERRMGR_ID_MAX_LENGTH = 20;
 | 
						|
 | 
						|
        public const int USERMGR_PW_MIN_LENGTH = 6;
 | 
						|
        public const int USERMGR_PW_MAX_LENGTH = 20;
 | 
						|
 | 
						|
        public const int MAX_USER_ID_LENGTH = 32;
 | 
						|
        public const int MAX_USER_PW_LEGNTH = 32;
 | 
						|
        public const int MAX_USER_HISTORY_PW_COUNT = 3;
 | 
						|
 | 
						|
        public const int INVALID_VALUE = -1;
 | 
						|
        public const int USERMGR_USER_ADMINISTRATOR = 1;
 | 
						|
        public const int USERMGR_USER_NORMAL = 0;
 | 
						|
 | 
						|
        public const int EXPIRE_PERIOD_PASSWORD_NOT_SUPPORT = 0;
 | 
						|
        public const int MAX_EXPIRE_PERIOD_PASSWORD = 90;
 | 
						|
        public const int DEFAULT_PASSWORD_EXPIRE_PERIOD = 90;		// Days		password change	
 | 
						|
 | 
						|
        public const int EXPIRE_PERIOD_ACCOUNT_NOT_SUPPORT = 0;
 | 
						|
        public const int MAX_EXPIRE_PERIOD_ACCOUNT = 180;
 | 
						|
        public const int DEFAULT_ACCOUNT_LOCK_PERIOD = 180;		// Days		login 
 | 
						|
 | 
						|
        public const int MAX_LOGIN_AUTO_TIMEOUT = 90;
 | 
						|
        public const int DEFAULT_LOGIN_WARNING_TIMEOUT_SEC = 60;		// 60 sec	during login, auto logout warning time
 | 
						|
        public const int DEFAULT_LOGIN_AUTO_TIMEOUT_MIN = 30;		// 30 min	during login, auto logout timeout  
 | 
						|
 | 
						|
        public const int USER_MENU_ID_MAX = 30;                     // MenuID_t buffer Size
 | 
						|
 | 
						|
        public const int MAX_ACTIVE_LEVEL = 10;                     // menu active level
 | 
						|
        public const int INVALID_ACTIVE_LEVEL = 0;
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Enum E_user_mgr_status
 | 
						|
        public enum E_user_mgr_status
 | 
						|
        {
 | 
						|
            USER_MGR_STATUS_OK = 0x00,
 | 
						|
 | 
						|
            // error status
 | 
						|
            USER_MGR_STATUS_ID_NOT_FOUND,			// not found the user id 
 | 
						|
            USER_MGR_STATUS_ID_DUPLICATE,			// duplicate on id
 | 
						|
            USER_MGR_STATUS_ID_LENGTH_UNDER,		// under the minimum length of id
 | 
						|
            USER_MGR_STATUS_ID_LENGTH_OVER,			// over  the maximum length of id 
 | 
						|
            USER_MGR_STATUS_ID_CONT_LETTER,			// continue characters or duplicate characters of id
 | 
						|
            USER_MGR_STATUS_ID_INVALID_CHAR,		// include the invalid character on id
 | 
						|
            USER_MGR_STATUS_ID_ACCOUNT_LOCK,
 | 
						|
 | 
						|
            USER_MGR_STATUS_PW_DUPLICATE_HISTORY,	// duplicate on password history
 | 
						|
            USER_MGR_STATUS_PW_LENGTH_UNDER,		// under the minimum length of password
 | 
						|
            USER_MGR_STATUS_PW_LENGTH_OVER,			// over  the maximum length of password 
 | 
						|
            USER_MGR_STATUS_PW_CONT_LETTER,			// continue characters or duplicate characters of password
 | 
						|
            USER_MGR_STATUS_PW_INVALID_CHAR,		// include the invalid character on password
 | 
						|
            USER_MGR_STATUS_PW_EACH_MIN_CHAR,		// not include minimum characters on password
 | 
						|
            USER_MGR_STATUS_PW_NOT_SAME,			// password error
 | 
						|
            USER_MGR_STATUS_PW_PASSWORD_LOCK,
 | 
						|
 | 
						|
            USER_MGR_STATUS_OTHER_OVER_PASSWORD_PERIOD,	// over maximum password expire period (days)
 | 
						|
            USER_MGR_STATUS_OTHER_OVER_ACCOUNT_PERIOD,	// over maximum account expire period (days)
 | 
						|
            USER_MGR_STATUS_OTHER_OVER_LOGIN_TIMEOUT,	// over maximum auto logout time (minute)
 | 
						|
 | 
						|
            USER_MGR_STATUS_MAX,
 | 
						|
        }; 
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Enum E_user_mgr_menu_id
 | 
						|
        public enum E_user_mgr_menu_id
 | 
						|
        {
 | 
						|
            USER_MENU_ID_RESERVE_0 = 0x00,
 | 
						|
            USER_MENU_ID_RESERVE_1,
 | 
						|
            USER_MENU_ID_RESERVE_2,
 | 
						|
            USER_MENU_ID_RESERVE_3,
 | 
						|
            USER_MENU_ID_RESERVE_4,
 | 
						|
 | 
						|
            USER_MENU_ID_RESERVE_5,
 | 
						|
            USER_MENU_ID_RESERVE_6,
 | 
						|
            USER_MENU_ID_RESERVE_7,
 | 
						|
            USER_MENU_ID_RESERVE_8,
 | 
						|
            USER_MENU_ID_RESERVE_9,
 | 
						|
 | 
						|
            USER_MENU_ID_RESERVE_10,
 | 
						|
            USER_MENU_ID_RESERVE_11,
 | 
						|
            USER_MENU_ID_RESERVE_12,
 | 
						|
            USER_MENU_ID_RESERVE_13,
 | 
						|
            USER_MENU_ID_RESERVE_14,
 | 
						|
 | 
						|
            USER_MENU_ID_RESERVE_15,
 | 
						|
            USER_MENU_ID_RESERVE_16,
 | 
						|
            USER_MENU_ID_RESERVE_17,
 | 
						|
            USER_MENU_ID_RESERVE_18,
 | 
						|
            USER_MENU_ID_RESERVE_19,
 | 
						|
 | 
						|
            USER_MENU_ID_RESERVE_20,
 | 
						|
            USER_MENU_ID_RESERVE_21,
 | 
						|
            USER_MENU_ID_RESERVE_22,
 | 
						|
            USER_MENU_ID_RESERVE_23,
 | 
						|
            USER_MENU_ID_RESERVE_24,
 | 
						|
 | 
						|
            USER_MENU_ID_RESERVE_25,
 | 
						|
            USER_MENU_ID_RESERVE_26,
 | 
						|
            USER_MENU_ID_RESERVE_27,
 | 
						|
            USER_MENU_ID_RESERVE_28,
 | 
						|
            USER_MENU_ID_RESERVE_29,
 | 
						|
            USER_MENU_ID_MAX,
 | 
						|
        };
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Struct MenuID_t
 | 
						|
        [StructLayout(LayoutKind.Sequential)]
 | 
						|
        public struct MenuID_t
 | 
						|
        {
 | 
						|
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)E_user_mgr_menu_id.USER_MENU_ID_MAX)]
 | 
						|
            public bool[] fMenu;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Struct DateTime_t
 | 
						|
        [StructLayout(LayoutKind.Sequential)]
 | 
						|
        public struct DateTime_t
 | 
						|
        {
 | 
						|
            [MarshalAs(UnmanagedType.U2)]
 | 
						|
            public UInt16 year;
 | 
						|
            [MarshalAs(UnmanagedType.U1)]
 | 
						|
            public byte month;
 | 
						|
            [MarshalAs(UnmanagedType.U1)]
 | 
						|
            public byte day;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.U1)]
 | 
						|
            public byte hour;
 | 
						|
            [MarshalAs(UnmanagedType.U1)]
 | 
						|
            public byte minute;
 | 
						|
            [MarshalAs(UnmanagedType.U1)]
 | 
						|
            public byte second;
 | 
						|
            [MarshalAs(UnmanagedType.U1)]
 | 
						|
            public byte reserved;
 | 
						|
 | 
						|
            public static int Size
 | 
						|
            {
 | 
						|
                get { return (int)(sizeof(UInt16) + 6); }
 | 
						|
            }
 | 
						|
 | 
						|
            public void SetDate(UInt16 year, byte month, byte day)
 | 
						|
            {
 | 
						|
                this.year = year;
 | 
						|
                this.month = month;
 | 
						|
                this.day = day;
 | 
						|
            }
 | 
						|
 | 
						|
            public void SetTime(byte hour, byte minute, byte second)
 | 
						|
            {
 | 
						|
                this.hour = hour;
 | 
						|
                this.minute = minute;
 | 
						|
                this.second = second;
 | 
						|
            }
 | 
						|
 | 
						|
            public string GetDateTime()
 | 
						|
            {
 | 
						|
                string dateTime;
 | 
						|
 | 
						|
                dateTime = string.Format("{0:D4}{1:D2}{2:D2}{3:D2}{4:D2}{5:D2}", year, month, day, hour, minute, second);
 | 
						|
 | 
						|
                return dateTime;
 | 
						|
            }
 | 
						|
        } 
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Struct UserMgr_user_info_t
 | 
						|
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
 | 
						|
        public struct UserMgr_user_info_t
 | 
						|
        {
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public Int32 status;					// user_new_add_status_e
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
 | 
						|
            public string user_id;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_PW_LEGNTH)]
 | 
						|
            public string user_pw;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public Int32 fadmin;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public Int32 expire_period_pw;                // password lock
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public Int32 expire_period_account;			// account lock
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public Int32 flock_status_account;			// user ID (account) lock	
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public Int32 flock_status_password;			// password lock			(need to change password)
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.Struct)]
 | 
						|
            public DateTime_t register_date;			// date/time when the user password was registered or changed
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.Struct)]
 | 
						|
            public DateTime_t login_date;				// date/time when the user was login   
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.Struct)]
 | 
						|
            public DateTime_t expire_register_date;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.Struct)]
 | 
						|
            public DateTime_t expire_account_date;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.Struct)]
 | 
						|
            public MenuID_t menuID;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public Int32 active_level;
 | 
						|
        } 
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Struct UserMgr_user_modify_t
 | 
						|
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
 | 
						|
        public struct UserMgr_user_modify_t
 | 
						|
        {
 | 
						|
            public int status;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
 | 
						|
            public string user_id;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Struct UserMgr_user_del_t
 | 
						|
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
 | 
						|
        public struct UserMgr_user_del_t
 | 
						|
        {
 | 
						|
            public int status;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
 | 
						|
            public string user_id;
 | 
						|
        } 
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Struct UserMgr_login_timeout_t
 | 
						|
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
 | 
						|
        public struct UserMgr_login_timeout_t
 | 
						|
        {
 | 
						|
            public int remainder_time;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
 | 
						|
            public string user_id;
 | 
						|
        } 
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Struct UserMgr_user_add_t
 | 
						|
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
 | 
						|
        public struct UserMgr_user_add_t
 | 
						|
        {
 | 
						|
            public int status;
 | 
						|
            public int flock_status_account;
 | 
						|
            public int flock_status_password;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
 | 
						|
            public string user_id;
 | 
						|
        } 
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Struct UserMgr_user_lock_t
 | 
						|
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
 | 
						|
        public struct UserMgr_user_lock_t
 | 
						|
        {
 | 
						|
            public int flock_status_account;
 | 
						|
            public int flock_status_password;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
 | 
						|
            public string user_id;
 | 
						|
        } 
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Struct UserMgr_user_list_t
 | 
						|
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
 | 
						|
        public struct UserMgr_user_list_t
 | 
						|
        {
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public int status;					// user_new_add_status_e
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public int total_count;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public int index;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
 | 
						|
            public string user_id;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_PW_LEGNTH)]
 | 
						|
            public string user_pw;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public Int32 fadmin;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public Int32 expire_period_pw;                // password lock
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public Int32 expire_period_account;			// account lock
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public Int32 flock_status_account;			// user ID (account) lock	
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public Int32 flock_status_password;			// password lock			(need to change password)
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.Struct)]
 | 
						|
            public DateTime_t register_date;			// date/time when the user password was registered or changed
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.Struct)]
 | 
						|
            public DateTime_t login_date;				// date/time when the user was login  
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.Struct)]
 | 
						|
            public DateTime_t expire_register_date;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.Struct)]
 | 
						|
            public DateTime_t expire_account_date;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public Int32 active_level;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.Struct)]
 | 
						|
            public MenuID_t menuID;
 | 
						|
        } 
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Struct UserMgr_user_list_name_t
 | 
						|
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
 | 
						|
        public struct UserMgr_user_list_name_t
 | 
						|
        {
 | 
						|
            public int total_count;
 | 
						|
            public int index;
 | 
						|
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
 | 
						|
            public string user_id;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 |