using Shared.Common;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace Shared.Phone.UserCenter
{
public class HdlCheckLogic
{
#region ■ 变量声明___________________________
///
/// 个人中心的检测逻辑
///
private static HdlCheckLogic m_Current = null;
///
/// 个人中心的检测逻辑
///
public static HdlCheckLogic Current
{
get
{
if (m_Current == null)
{
m_Current = new HdlCheckLogic();
}
return m_Current;
}
}
#endregion
#region ■ 各种正确检测_______________________
///
/// 判断是否包含大写字母
///
/// true, if contain upper was checked, false otherwise.
/// Value.
public bool CheckContainUpper(string value)
{
Regex reg = new Regex("[A-Z]+");
return reg.IsMatch(value);
}
///
/// 判断是否包含小写字母
///
/// true, if contain lower was checked, false otherwise.
/// Value.
public bool CheckContainLower(string value)
{
Regex reg = new Regex("[a-z]+");
return reg.IsMatch(value);
}
///
/// 判断是否包含数字
///
/// true, if contain lower was checked, false otherwise.
/// Value.
public bool CheckContainNum(string value)
{
Regex reg = new Regex("[0-9]+");
return reg.IsMatch(value);
}
///
/// 判断是否包含符号
///
/// true, if contain lower was checked, false otherwise.
/// Value.
public bool CheckContainSymbol(string value)
{
Regex reg = new Regex("([^a-z0-9A-Z])+");
return reg.IsMatch(value);
}
///
/// 检测邮箱是否合法
///
///
///
public bool CheckEmail(string email)
{
Regex reg = new Regex(CommonPage.EmailRegexStr);
return reg.IsMatch(email);
}
///
/// 检测手机号是否合法
///
/// 手机号
/// 地区代码
///
public bool CheckPhoneNumber(string phoneNumber, string areaCode)
{
//校验外国手机号
if (areaCode != "86")
{
Regex reg = new Regex(CommonPage.PhoneForForeignRegexStr);
return reg.IsMatch(phoneNumber);
}
//校验国内手机号
if (phoneNumber.Length > 11)
{
return false;
}
else if (phoneNumber.Length == 11)
{
Regex reg = new Regex(CommonPage.PhoneRegexStr);
return reg.IsMatch(phoneNumber);
}
else
{
//正则表达式判断是否数字
Regex reg = new Regex("^[0-9]*$");
return reg.IsMatch(phoneNumber);
}
}
#endregion
#region ■ 检测网关共通错误状态码_____________
///
/// 检测网关返回的共通错误状态码(返回null则代表没有错误),支持状态码为
/// 1:网关无法解析命令数据。
/// 2:协调器正在升级或备份/恢复数据
/// 3:操作设备/组/场景不存在
/// 4:其他错误
/// 5:数据传输错误(在某次客户端向网关发送数据的过程中,网关在合理时间范围内接收客户端数据不完整导致该错误发生。如客户端向网关一次发送100个字节的数据,但网关等待接收了一秒只接收了80个字节。发生该错误,网关将主动关闭客户端连接)
///
/// 网关返回的resultData,里面有【errorResponData】这个东西的那种对象
///
public string CheckCommonErrorCode(object resultData)
{
if (resultData == null)
{
return null;
}
Type myType = resultData.GetType();
object errorObj = myType.InvokeMember("errorResponData", System.Reflection.BindingFlags.GetField, null, resultData, null);
if (errorObj == null)
{
return null;
}
Type type = errorObj.GetType();
var code = type.InvokeMember("Error", System.Reflection.BindingFlags.GetField, null, errorObj, null);
int errorCode = Convert.ToInt32(code);
return CheckCommonErrorCode(errorCode);
}
///
/// 检测网关返回的共通错误状态码(返回null则代表没有错误),支持状态码为
/// 1:网关无法解析命令数据。
/// 2:协调器正在升级或备份/恢复数据
/// 3:操作设备/组/场景不存在
/// 4:其他错误
/// 5:数据传输错误(在某次客户端向网关发送数据的过程中,网关在合理时间范围内接收客户端数据不完整导致该错误发生。如客户端向网关一次发送100个字节的数据,但网关等待接收了一秒只接收了80个字节。发生该错误,网关将主动关闭客户端连接)
///
/// 错误代码
///
public string CheckCommonErrorCode(int errorCode)
{
if (errorCode == 1)
{
//网关无法解析命令数据
return Language.StringByID(R.MyInternationalizationString.uGatewayCannotResolveCommand);
}
else if (errorCode == 2)
{
//协调器正在升级或备份或恢复数据中
string msg = Language.StringByID(R.MyInternationalizationString.uCoordinatorIsUpOrBackupOrRecovering);
}
else if (errorCode == 3)
{
//目标设备不存在
string msg = Language.StringByID(R.MyInternationalizationString.uTargetDeviceIsNotExsit);
}
else if (errorCode == 4)
{
//出现未知错误,请稍后再试
string msg = Language.StringByID(R.MyInternationalizationString.uUnKnowErrorAndResetAgain);
}
else if (errorCode == 5)
{
//数据传输错误,请稍后再试
string msg = Language.StringByID(R.MyInternationalizationString.uDataTransmissionFailAndResetAgain);
}
return null;
}
#endregion
#region ■ 检测账号是否已经退出_______________
///
/// 检测账号是否已经退出 true:已经退出 false:没有退出
///
///
public bool IsAccountLoginOut()
{
return Config.Instance.HomeId == string.Empty;
}
#endregion
#region ■ 二次安全验证_______________________
///
/// 执行二次安全验证(三种验证的标题使用默认值:Touch ID验证,密码验证,手势验证)
///
/// 如果设置有验证方式,并且验证成功后才会调用的回调函数,不然不会调用这个东西
/// 如果完全没有设置有验证方式,才会调用的回调函数,不然不会调用这个东西(取消输入不会调用这个东西)
public void CheckSecondarySecurity(Action SuccessAction, Action NotSettionAction = null)
{
CheckSecondarySecurity(
Language.StringByID(R.MyInternationalizationString.uTouchIDCheck),
Language.StringByID(R.MyInternationalizationString.uPasswordAuthentication),
Language.StringByID(R.MyInternationalizationString.uGestureAuthentication),
SuccessAction, NotSettionAction);
}
///
/// 执行二次安全验证
///
/// Touch ID验证的显示文本
/// 密码验证的显示文本
/// 手势验证的显示文本
/// 如果设置有验证方式,并且验证成功后才会调用的回调函数,不然不会调用这个东西
/// 如果完全没有设置有验证方式,才会调用的回调函数,不然不会调用这个东西(取消输入不会调用这个东西)
public void CheckSecondarySecurity(string i_TouchText, string i_PasswordText, string i_GestureText, Action SuccessAction, Action NotSettionAction = null)
{
//先把这个东西置空
TouchIDUtils.Instance.OnHDLTouchIDStateBackEvent = null;
TouchIDUtils.TouchIDSupperType type = TouchIDUtils.getTouchIDSupperType();
if (type == TouchIDUtils.TouchIDSupperType.TouchID && UserCenterResourse.AccountOption.FingerprintAuthentication == true)
{
//Touch ID验证
TouchIDUtils.Instance.OnHDLTouchIDStateBackEvent += (sender2, e2) =>
{
if (e2 == TouchIDUtils.TouchIDState.Success)
{
//TouchID验证成功
SuccessAction?.Invoke();
SuccessAction = null;
TouchIDUtils.Instance.OnHDLTouchIDStateBackEvent = null;
}
else if (e2 == TouchIDUtils.TouchIDState.InputPassword)
{
//密码验证
if (string.IsNullOrEmpty(UserCenterResourse.AccountOption.PswAuthentication) == false)
{
var form = new PswSecondarySecurityForm();
form.AddForm(i_TouchText, i_PasswordText, i_GestureText, SuccessAction);
}
//手势验证
else if (string.IsNullOrEmpty(UserCenterResourse.AccountOption.GestureAuthentication) == false)
{
var form = new PswGestureSecirityForm();
form.AddForm(i_TouchText, i_PasswordText, i_GestureText, SuccessAction);
}
else
{
//没有设置密码验证
var alert = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.uPasswordAuthenticationNotSettion));
alert.Show();
}
}
};
TouchIDUtils.Instance.showTouchIDWithDescribe(null, null);
NotSettionAction = null;
}
else if (string.IsNullOrEmpty(UserCenterResourse.AccountOption.PswAuthentication) == false)
{
//密码验证
var form = new PswSecondarySecurityForm();
form.AddForm(i_TouchText, i_PasswordText, i_GestureText, SuccessAction);
NotSettionAction = null;
}
else if (string.IsNullOrEmpty(UserCenterResourse.AccountOption.GestureAuthentication) == false)
{
//手势验证
var form = new PswGestureSecirityForm();
form.AddForm(i_TouchText, i_PasswordText, i_GestureText, SuccessAction);
NotSettionAction = null;
}
else
{
//完全没有设置有任何验证方式
SuccessAction = null;
NotSettionAction?.Invoke();
NotSettionAction = null;
}
}
#endregion
}
}