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
|
|
}
|
|
}
|