Esempio n. 1
0
                public void WhenCalled_SetsLastModified()
                {
                    var lockout = new TimedLockout("key", lastModified: DateTimeOffset.UtcNow);

                    var model = new TimedLockoutModel(lockout);

                    Assert.Equal(lockout.LastModified, model.LastModified);
                }
Esempio n. 2
0
                public void WhenCalled_SetsValue()
                {
                    var  data           = new TimedLockout("key", new UtcDateTime(DateTimeOffset.UtcNow));
                    byte failedAttempts = 5;

                    data.FailedAccessAttempts = failedAttempts;

                    Assert.Equal(failedAttempts, data.FailedAccessAttempts);
                }
Esempio n. 3
0
        public TimedLockoutModel(TimedLockout lockout) : this()
        {
            Guard.Null(nameof(lockout), lockout);

            this.Key                  = lockout.Key;
            this.LastModified         = lockout.LastModified;
            this.FailedAccessAttempts = lockout.FailedAccessAttempts;
            this.Expiration           = lockout.Expiration;
        }
Esempio n. 4
0
                public void WhenCalled_SetsKey()
                {
                    var lockout = new TimedLockout("key",
                                                   lastModified: new UtcDateTime(DateTimeOffset.UtcNow));

                    var model = new TimedLockoutModel(lockout);

                    Assert.Equal("key", model.Key);
                }
Esempio n. 5
0
                public void WhenCalled_SetsValue()
                {
                    var data       = new TimedLockout("key", new UtcDateTime(DateTimeOffset.UtcNow));
                    var expiration = DateTimeOffset.UtcNow.AddDays(1);

                    data.Expiration = new UtcDateTime(expiration);

                    Assert.Equal(expiration, data.Expiration.ToOffset());
                }
Esempio n. 6
0
                public void WhenCalled_SetsValue()
                {
                    var data = new TimedLockout("key",
                                                new UtcDateTime(DateTimeOffset.UtcNow));
                    var lastModified = DateTimeOffset.UtcNow.AddDays(1);

                    data.LastModified = new UtcDateTime(lastModified);

                    Assert.Equal(lastModified, data.LastModified.ToOffset());
                }
Esempio n. 7
0
                public void WhenCalled_SetsExpiration()
                {
                    var lockout = new TimedLockout("key", lastModified: DateTimeOffset.UtcNow)
                    {
                        Expiration = DateTimeOffset.UtcNow
                    };

                    var model = new TimedLockoutModel(lockout);

                    Assert.Equal(lockout.Expiration, model.Expiration);
                }
Esempio n. 8
0
                public void WhenCalled_SetsFailedAccessAttempts()
                {
                    var lockout = new TimedLockout("key", lastModified: DateTimeOffset.UtcNow)
                    {
                        FailedAccessAttempts = 5
                    };

                    var model = new TimedLockoutModel(lockout);

                    Assert.Equal(5, model.FailedAccessAttempts);
                }
Esempio n. 9
0
        public TimedLockoutModel(TimedLockout lockout)
            : this()
        {
            Guard.Null(nameof(lockout), lockout);

            this.Key                  = lockout.Key;
            this.LastModified         = lockout.LastModified.ToOffset();
            this.FailedAccessAttempts = lockout.FailedAccessAttempts;

            if (!(lockout.Expiration is null))
            {
                this.Expiration = lockout.Expiration.ToOffset();
            }
        }
Esempio n. 10
0
        protected virtual async Task <bool> IsLockedOut(string key, TimeSpan lockoutLength,
                                                        byte maxFailedAccessAttempts)
        {
            Guard.NullOrWhiteSpace(nameof(key), key);
            Guard.LessThan(nameof(maxFailedAccessAttempts), maxFailedAccessAttempts,
                           minimum: (byte)2);

            var now = this.Clock.UtcNow;

            var lockout = await this.TimedLockoutStore.Retrieve(key).ConfigureAwait(false);

            if (lockout == null)
            {
                lockout = new TimedLockout(key, lastModified: now);

                await this.TimedLockoutStore.Create(lockout).ConfigureAwait(false);
            }
            else if (lockout.Expiration is null)
            {
                if (lockout.LastModified.ToOffset() <= now.ToOffset().Subtract(lockoutLength))
                {
                    lockout = new TimedLockout(key, lastModified: now);

                    await this.TimedLockoutStore.Update(lockout).ConfigureAwait(false);
                }
                else
                {
                    lockout.LastModified = now;
                    lockout.FailedAccessAttempts++;

                    if (lockout.FailedAccessAttempts >= maxFailedAccessAttempts)
                    {
                        lockout.Expiration = new UtcDateTime(
                            now.ToOffset().Add(lockoutLength));
                    }

                    await this.TimedLockoutStore.Update(lockout).ConfigureAwait(false);
                }
            }
            else if (lockout.Expiration <= now)
            {
                lockout = new TimedLockout(key, lastModified: now);

                await this.TimedLockoutStore.Update(lockout).ConfigureAwait(false);
            }

            return(!(lockout.Expiration is null) && lockout.Expiration > now);
        }
Esempio n. 11
0
                public void DefaultValue_Equals1()
                {
                    var data = new TimedLockout("key", new UtcDateTime(DateTimeOffset.UtcNow));

                    Assert.Equal(1, data.FailedAccessAttempts);
                }
Esempio n. 12
0
                public void DefaultValue_ReturnsNull()
                {
                    var data = new TimedLockout("key", new UtcDateTime(DateTimeOffset.UtcNow));

                    Assert.Null(data.Expiration);
                }