public bool ValidateCode(string code, IMultiFactorSettings mfa) { var otps = this.ToTotp(mfa); var otp = new OtpGenerator(otps); return(otp.GenerateWindow().Contains(code)); }
public void OtpGenerator_GeneratesCharsAToZ() { var otpGenerator = new OtpGenerator(); var genSet = new HashSet <char>(); while (genSet.Count < MAX_DIFF_CHARS_COUNT) { foreach (char c in otpGenerator.Generate(BATCH_SIZE)) { if (!AllowedChars.Contains(c)) { Assert.Fail("Generated disallowed char: {0}", c); } genSet.Add(c); } } if (genSet.Count > MAX_DIFF_CHARS_COUNT) { Assert.Fail("Generated too many diff characters: gen {0} vs max {0}", genSet.Count, MAX_DIFF_CHARS_COUNT); } foreach (char c in AllowedChars) { if (!genSet.Contains(c)) { Assert.Fail("{0} was not generated", c); } } }
public bool ValidateRecoveryCode(string code, IMultiFactorSettings mfa) { var otps = this.ToHotp(mfa); var otp = new OtpGenerator(otps); return(otp.Generate(offset: mfa.RecoveryTripCount) == code); }
public void TestOtp(string uri, int ref1, int ref2, int offset) { var otpuri = new Uri(uri); var otp = OtpGenerator.ParseUri(otpuri); Assert.AreEqual(ref1, otp.GenerateRaw()); Assert.AreEqual(ref2, otp.GenerateRaw(offset - 1)); }
public void DeleteOtpGenerators(OtpGenerator OtpGenerators) { if (OtpGenerators == null) { throw new ArgumentNullException(nameof(OtpGenerators)); } _context.OtpGenerator.Remove(OtpGenerators); }
public void CreateOtpGenerators(OtpGenerator OtpGenerators) { if (OtpGenerators == null) { throw new ArgumentNullException(nameof(OtpGenerators)); } _context.OtpGenerator.Add(OtpGenerators); }
public void OtpGenerator_ValidUserIdAndDate_SuccessfullyGeneratedOtp(string userId, DateTime date, string expected) { // Arrange IOtpGenerator otpGenerator = new OtpGenerator(); // Act var result = otpGenerator.GenerateOtp(userId, date); // Assert Assert.Equal(expected, result); }
public void OtpGenerator_ValidUserIdAndDate_SuccessfullyCheckedRemainingSeconds(string userId, DateTime date, long expected) { // Arrange IOtpGenerator otpGenerator = new OtpGenerator(); var otp = otpGenerator.GenerateOtp(userId, date); // Act var result = otpGenerator.GetOtpRemainingSeconds(userId, otp); // Assert Assert.Equal(expected, result); }
public void OtpGenerator_ValidUserIdAndInvalidDate_GenerateEmptyOtp() { // Arrange IOtpGenerator otpGenerator = new OtpGenerator(); var userId = "1233445"; var date = new DateTime(1969, 1, 1); // Act var result = otpGenerator.GenerateOtp(userId, date); // Assert Assert.Equal(string.Empty, result); }
public void OtpGenerator_ValidUserIdAndDateUtcNow_RemainingSecondsGreaterThanZeroAndSmallerOrEqualThanThirty() { // Arrange IOtpGenerator otpGenerator = new OtpGenerator(); var userId = "1233445"; var date = DateTime.UtcNow; var otp = otpGenerator.GenerateOtp(userId, date); // Act var result = otpGenerator.GetOtpRemainingSeconds(userId, otp); // Assert Assert.True(result > 0 && result <= 30); }
public IEnumerable <string> GenerateRecoveryCodes(IMultiFactorSettings mfa) { var recs = this.ToHotp(mfa); var otp = new OtpGenerator(recs); for (var i = 0; i < 10; i++) { var code = otp.Generate(groupSize: 4); if (i >= mfa.RecoveryTripCount) { yield return(code); } } }
public HttpStatusCode ComparePasswords([FromBody] JObject json) { if (json == null) { return(HttpStatusCode.NoContent); } using (var context = new OtpContext(configuration)) { var userSecret = context.AspNetUsers.Where(u => u.Id.Equals(json["userId"].ToString())).First(); var generator = new OtpGenerator(userSecret.Secret, 30, 10, 6, new HmacSha256()); if (generator.GenerateCode().Equals(json["otp"].ToString())) { return(HttpStatusCode.OK); } return(HttpStatusCode.Forbidden); } }
public static void Main(string[] args) { Console.WriteLine("Enter URI to parse:"); var suri = Console.ReadLine(); var uri = new Uri(suri); var otp = OtpGenerator.ParseUri(uri); while (true) { Console.WriteLine("New window:"); foreach (var code in otp.GenerateWindow(groupSize: 3)) { Console.WriteLine(code); } if (Console.ReadKey(true).KeyChar == 'q') { return; } } }
async Task <ServiceResponse <string> > IAccountService.LoginCompany(LoginCompanyEmailDto loginDto) { CompanyUser user = await _context.CompanyUsers.FirstOrDefaultAsync(a => a.email == loginDto.email); ServiceResponse <string> response = new ServiceResponse <string>(); if (user == null) { response.Success = false; response.Message = "The user does not exist"; return(response); } CompanyUserOtp otp = await _context.CompanyUserOtps.FirstOrDefaultAsync(a => a.email == loginDto.email); string otpCode = new OtpGenerator().generate(); if (otp == null) { otp = new CompanyUserOtp(user.companyUserId, DateTime.Now.ToString(), user.email, otpCode, 0, false); await _context.CompanyUserOtps.AddAsync(otp); } else { if (DateTime.Now.Subtract(DateTime.Parse(otp.logInTime)).TotalMinutes > 30) { otp.isExpired = true; } if (!otp.isExpired) { if (otp.otpAttemptCount > 4) { response.Success = false; response.Message = "The user account is locked"; return(response); } response.Data = "We have already sent an OTP to your email"; return(response); } else { if (otp.otpAttemptCount > 4) { response.Success = false; response.Message = "The user account is locked"; return(response); } else { otp.otp = otpCode; otp.logInTime = DateTime.Now.ToString(); otp.otpAttemptCount = 0; _context.CompanyUserOtps.Update(otp); } } } var smtpClient = new SmtpClient("mailauth.comp.nus.edu.sg") { Port = 587, DeliveryMethod = SmtpDeliveryMethod.Network, Credentials = new NetworkCredential("iconnect", "c0nn3ct+c0mpan4"), EnableSsl = true, Timeout = 20000 }; await _context.SaveChangesAsync(); string message = "Your One Time Password is: " + otpCode; smtpClient.Send("*****@*****.**", loginDto.email, "One Time Password", message); response.Data = "You have been sent an email with your otp"; return(response); }
public int Remaining() { return(OtpGenerator.Remaining(1001)); }
public bool Verify(string otp) { return(OtpGenerator.Verify(otp, 1001)); }
public void UpdateOtpGenerators(OtpGenerator OtpGenerators) { //Nothing }
public string Create() { return(OtpGenerator.Create(1001)); }