Пример #1
0
        public bool ValidateCode(string code, IMultiFactorSettings mfa)
        {
            var otps = this.ToTotp(mfa);
            var otp  = new OtpGenerator(otps);

            return(otp.GenerateWindow().Contains(code));
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        public bool ValidateRecoveryCode(string code, IMultiFactorSettings mfa)
        {
            var otps = this.ToHotp(mfa);
            var otp  = new OtpGenerator(otps);

            return(otp.Generate(offset: mfa.RecoveryTripCount) == code);
        }
Пример #4
0
        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));
        }
Пример #5
0
        public void DeleteOtpGenerators(OtpGenerator OtpGenerators)
        {
            if (OtpGenerators == null)
            {
                throw new ArgumentNullException(nameof(OtpGenerators));
            }

            _context.OtpGenerator.Remove(OtpGenerators);
        }
Пример #6
0
        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);
        }
Пример #11
0
        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);
                }
            }
        }
Пример #12
0
        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);
            }
        }
Пример #13
0
        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);
        }
Пример #15
0
 public int Remaining()
 {
     return(OtpGenerator.Remaining(1001));
 }
Пример #16
0
 public bool Verify(string otp)
 {
     return(OtpGenerator.Verify(otp, 1001));
 }
Пример #17
0
 public void UpdateOtpGenerators(OtpGenerator OtpGenerators)
 {
     //Nothing
 }
Пример #18
0
 public string Create()
 {
     return(OtpGenerator.Create(1001));
 }