using API.Model; using Common.Utility; using Google.Authenticator; using System.Configuration; using System.Web; namespace API { public class GoogleAuthenticatorAPI { protected TwoFactorAuthenticator _tfa = new TwoFactorAuthenticator(); protected string _key = ReadWebConfig("2FAGoogle", ""); protected string _keyForEncDec = ReadWebConfig("keyForEncryptionDecryption", ""); public GoogleAuthenticatorModel GenerateCodeAndImageURL(string userName) { GoogleAuthenticatorModel _model = new GoogleAuthenticatorModel(); string userUniqueKeyEncrypted = EncryptDecryptUtility.Encrypt(userName + _key, _keyForEncDec); WriteSession("UserUniqueKey", userUniqueKeyEncrypted); var _googleSetupInfo = _tfa.GenerateSetupCode("JME REMIT", userName, userUniqueKeyEncrypted, 200, 200, true); _model.SetupCode = _googleSetupInfo.ManualEntryKey; _model.BarCodeImageUrl = _googleSetupInfo.QrCodeSetupImageUrl; return _model; } public GoogleAuthenticatorModel GenerateCodeAndImageURL(string userName, string userUniqueKeyEncrypted) { GoogleAuthenticatorModel _model = new GoogleAuthenticatorModel(); var _googleSetupInfo = _tfa.GenerateSetupCode("JME REMIT", userName, userUniqueKeyEncrypted, 200, 200, true); _model.SetupCode = _googleSetupInfo.ManualEntryKey; _model.BarCodeImageUrl = _googleSetupInfo.QrCodeSetupImageUrl; _model.ManualEntryKey = _googleSetupInfo.ManualEntryKey; return _model; } public DbResult Verify2FA(string otp, string userUniqueKey) { DbResult _dbRes = new DbResult(); if (string.IsNullOrEmpty(otp)) { _dbRes.SetError("1", "OTP Code can not be blank!", null); return _dbRes; } bool isValid = _tfa.ValidateTwoFactorPIN(userUniqueKey, otp); if (isValid) _dbRes.SetError("0", "Two factor authentication verified successfully!", null); else _dbRes.SetError("1", "Please enter valid OTP!", null); return _dbRes; } public static string ReadWebConfig(string key, string defValue) { return (ConfigurationSettings.AppSettings[key] ?? defValue).ToString(); } public static void WriteSession(string key, string value) { HttpContext.Current.Session[key] = value; } } }