コード例 #1
0
        public void CheckLoginBlocades(int userId)
        {
            LoginBlocade loginBlocade = dbContext.GetActiveBlocadeByUserId(userId);
            string       ip           = "";

            try
            {
                ip = Request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
            }
            catch { }

            if (loginBlocade == null)
            {
                loginBlocade =
                    dbContext
                    .GetActiveBlocadeByIp(ip);

                if (loginBlocade != null)
                {
                    throw new LoginBlocadeException(
                              "This IP address is blocked until " +
                              loginBlocade.BlockUntil +
                              ". Failed attemps: " +
                              loginBlocade.FailCount);
                }
            }
            else
            {
                throw new LoginBlocadeException(
                          "This user is blocked until " +
                          loginBlocade.BlockUntil +
                          ". Failed attemps: " +
                          loginBlocade.FailCount);
            }
        }
コード例 #2
0
        public int SaveIpBlocade(LoginBlocade loginBlocade)
        {
            string sqlQuery = "Insert Into LoginBlocade " +
                              "(IpAddress, FailCount, BlockUntil) " +
                              "Values(@IpAddress, @FailCount, @BlockUntil)";

            return(db.Execute(sqlQuery, loginBlocade));
        }
コード例 #3
0
        public int SaveUserBlocade(LoginBlocade loginBlocade)
        {
            string sqlQuery = "Insert Into LoginBlocade " +
                              "(UserId, FailCount, BlockUntil) " +
                              "Values(@UserId, @FailCount, @BlockUntil)";

            return(db.Execute(sqlQuery, loginBlocade));
        }
コード例 #4
0
        public int UpdateIpBlocade(LoginBlocade loginBlocade)
        {
            string sqlQuery = "Update LoginBlocade " +
                              $"set FailCount = {loginBlocade.FailCount}, " +
                              $"BlockUntil =  '{loginBlocade.BlockUntil:yyyy-MM-dd HH:mm:ss.fff}' " +
                              $"where IpAddress = '{loginBlocade.IpAddress}'";

            return(db.Execute(sqlQuery));
        }
コード例 #5
0
        public int DeleteIpBlocadeIfExists(string ipAddress)
        {
            LoginBlocade loginBlocade = dbContext.GetBlocadeByIp(ipAddress);

            if (loginBlocade == null)
            {
                return(0);
            }
            else
            {
                return(dbContext.DeleteIpBlocade(ipAddress));
            }
        }
コード例 #6
0
        public void TestCreateOrUpdateIpBlocade_ReturnsExpectedBlocadeObject_WhenIpIsPassed()
        {
            string ipToTest = "1.1.1.1";

            LoginBlocade blocadeMock = new LoginBlocade()
            {
                Id         = 1,
                UserId     = 1,
                IpAddress  = ipToTest,
                FailCount  = 3,
                BlockUntil = LoginHelper.TruncateDateTime(DateTime.Now).AddSeconds(10)
            };

            LoginBlocade expectedBlocade = new LoginBlocade()
            {
                Id         = 1,
                UserId     = 1,
                IpAddress  = ipToTest,
                FailCount  = 4,
                BlockUntil = LoginHelper.TruncateDateTime(DateTime.Now).AddSeconds(60)
            };

            Mock <IDbContext> mockDbContext = new Mock <IDbContext>();

            mockDbContext
            .Setup(m => m.GetBlocadeByIp(ipToTest))
            .Returns(blocadeMock);

            mockDbContext
            .Setup(m => m.SaveIpBlocade(It.IsAny <LoginBlocade>()))
            .Returns(0);

            mockDbContext
            .Setup(m => m.UpdateIpBlocade(It.IsAny <LoginBlocade>()))
            .Returns(0);

            LoginHelper loginHelper = new LoginHelper(mockDbContext.Object);

            var expected = JsonConvert.SerializeObject(expectedBlocade);
            var actual   = JsonConvert.SerializeObject(loginHelper.CreateOrUpdateLoginIpBlocade(ipToTest, TimeInterval.Minutes));

            Assert.Equal(expected, actual);
        }
コード例 #7
0
        protected LoginBlocade UpdateBlocadeParams(LoginBlocade loginBlocade, TimeInterval interval = TimeInterval.Seconds)
        {
            loginBlocade.FailCount += 1;

            if (loginBlocade.FailCount == 2)
            {
                loginBlocade.BlockUntil = TruncateDateTime(DateTime.Now).AddSeconds(5);
            }
            else if (loginBlocade.FailCount == 3)
            {
                loginBlocade.BlockUntil = TruncateDateTime(DateTime.Now).AddSeconds(10);
            }
            else if (loginBlocade.FailCount > 3)
            {
                loginBlocade.BlockUntil = TruncateDateTime(DateTime.Now).AddSeconds(60);
            }

            return(loginBlocade);
        }
コード例 #8
0
        public LoginBlocade CreateOrUpdateLoginIpBlocade(string ipAddress, TimeInterval interval = TimeInterval.Seconds)
        {
            LoginBlocade loginBlocade = dbContext.GetBlocadeByIp(ipAddress);

            if (loginBlocade == null)
            {
                loginBlocade = new LoginBlocade()
                {
                    IpAddress  = ipAddress,
                    FailCount  = 1,
                    BlockUntil = TruncateDateTime(DateTime.Now)
                };

                dbContext.SaveIpBlocade(loginBlocade);
            }
            else
            {
                loginBlocade = UpdateBlocadeParams(loginBlocade, interval);

                dbContext.UpdateIpBlocade(loginBlocade);
            }

            return(loginBlocade);
        }
コード例 #9
0
        public LoginBlocade CreateOrUpdateLoginUserIdBlocade(int userId, TimeInterval interval = TimeInterval.Seconds)
        {
            LoginBlocade loginBlocade = dbContext.GetBlocadeByUserId(userId);

            if (loginBlocade == null)
            {
                loginBlocade = new LoginBlocade()
                {
                    UserId     = userId,
                    FailCount  = 1,
                    BlockUntil = TruncateDateTime(DateTime.Now)
                };

                dbContext.SaveUserBlocade(loginBlocade);
            }
            else
            {
                loginBlocade = UpdateBlocadeParams(loginBlocade, interval);

                dbContext.UpdateUserBlocade(loginBlocade);
            }

            return(loginBlocade);
        }