/// <summary>
        /// VerifyCode by type generate
        /// </summary>
        /// <param name="user"></param>
        /// <param name="code"></param>
        /// <param name="typeGenerate"></param>
        /// <returns></returns>
        public static bool VerifyCodeSms(ApplicationUser user, string code, string typeGenerate)
        {
            try
            {
                var    secretSmsKey = SecretSmsKey.FromJson(user.ListSecretKeySms);
                string secret;
                switch (typeGenerate)
                {
                case Const.TypeGenerateChangePassword:
                    secret = secretSmsKey.ChangePassword;
                    break;

                case Const.TypeGenerateChangeOldPhoneNumber:
                    secret = secretSmsKey.ChangePhoneOldPhone;
                    break;

                case Const.TypeGenerateChangeNewPhoneNumber:
                    secret = secretSmsKey.ChangePhoneNewPhone;
                    break;

                case Const.TypeGenerateChangeConfirmPhoneNumber:
                    secret = secretSmsKey.ChangePhoneConfirmPhone;
                    break;

                case Const.TypeGenerateChangeTwoFactor:
                    secret = secretSmsKey.ChangeTwoFactor;
                    break;

                case Const.TypeGenerateLockAccount:
                    secret = secretSmsKey.LockAccount;
                    break;

                case Const.TypeGenerateUnlockAccount:
                    secret = secretSmsKey.UnlockAccount;
                    break;

                case Const.TypeGenerateAddPhoneNumber:
                    secret = secretSmsKey.AddPhoneNumber;
                    break;

                case Const.TypeGenerateAddLockScreen:
                    secret = secretSmsKey.AddLockScreen;
                    break;

                case Const.TypeGenerateLogin:
                    secret = secretSmsKey.Login;
                    break;

                default:
                    return(false);
                }

                if (string.IsNullOrEmpty(secret))
                {
                    return(false);
                }

                var authenticator = new TwoStepsAuthenticator.TimeAuthenticator();
                var isCheck       = authenticator.CheckCode(secret, code, user);
                return(isCheck);
            }
            catch (Exception e)
            {
                Logger.LogError("SecurityController ==>> VerifyCode: " + e.Message);
                return(false);
            }
        }
        public static async Task <string> GenerateCode(UserManager <ApplicationUser> userManager, ApplicationUser user,
                                                       string typeGenerate)
        {
            try
            {
                var secret = TwoStepsAuthenticator.Authenticator.GenerateKey();
                Console.WriteLine(secret);
                var oldJsonSecretKey = user.ListSecretKeySms;
                var secretSmsKey     = new SecretSmsKey();
                if (!string.IsNullOrEmpty(oldJsonSecretKey))
                {
                    secretSmsKey = SecretSmsKey.FromJson(user.ListSecretKeySms);
                }

                switch (typeGenerate)
                {
                case Const.TypeGenerateChangePassword:
                    secretSmsKey.ChangePassword = secret;
                    break;

                case Const.TypeGenerateChangeOldPhoneNumber:
                    secretSmsKey.ChangePhoneOldPhone = secret;
                    break;

                case Const.TypeGenerateChangeNewPhoneNumber:
                    secretSmsKey.ChangePhoneNewPhone = secret;
                    break;

                case Const.TypeGenerateChangeConfirmPhoneNumber:
                    secretSmsKey.ChangePhoneConfirmPhone = secret;
                    break;

                case Const.TypeGenerateChangeTwoFactor:
                    secretSmsKey.ChangeTwoFactor = secret;
                    break;

                case Const.TypeGenerateLockAccount:
                    secretSmsKey.LockAccount = secret;
                    break;

                case Const.TypeGenerateUnlockAccount:
                    secretSmsKey.UnlockAccount = secret;
                    break;

                case Const.TypeGenerateAddPhoneNumber:
                    secretSmsKey.AddPhoneNumber = secret;
                    break;

                case Const.TypeGenerateAddLockScreen:
                    secretSmsKey.AddLockScreen = secret;
                    break;

                case Const.TypeGenerateLogin:
                    secretSmsKey.Login = secret;
                    break;

                default:
                    return(null);
                }

                var newJsonListSecretSms = SecretSmsKey.ToJson(secretSmsKey);
                user.ListSecretKeySms = newJsonListSecretSms;
                await userManager.UpdateAsync(user);

                var authenticator = new TwoStepsAuthenticator.TimeAuthenticator();
                var code          = authenticator.GetCode(secret);
                var message       = "Vakaxa security code is: " + code;
                Console.WriteLine(message);
                return(message);
            }
            catch (Exception e)
            {
                Logger.LogError("SecurityController ==>> GenerateCode: " + e.Message);
                return(null);
            }
        }