Ejemplo n.º 1
0
        public async Task GenerateTokenByIdExistingToken()
        {
            const string password    = "******";
            const string email       = "*****@*****.**";
            const string deviceId    = "mydevice";
            const string tokenString = "randomtokenstring12345";
            AuthToken    token;
            UserToken    existingToken;

            using (var context = new QuizContext(ManagerTestHelper.Options))
            {
                var sut = ManagerTestHelper.GetAuthManager(context);

                var user = await ManagerTestHelper.AddUserAsync(context, 1, email, password);

                await ManagerTestHelper.AddAuthTokenAsync(context, user.Id, deviceId, tokenString, true);

                await context.SaveChangesAsync();

                token = await sut.GenerateTokenAsync(user.Id, deviceId);

                existingToken = await context.UserTokens.FindAsync(user.Id, deviceId);
            }

            Assert.AreNotEqual(tokenString, existingToken.Token);
            Assert.AreEqual(token.Token, existingToken.Token);
        }
Ejemplo n.º 2
0
        public async Task VerifyAccessTokenUserIsVerified()
        {
            const string password    = "******";
            const string email       = "*****@*****.**";
            const string deviceId    = "mydevice";
            const string tokenString = "randomtokenstring12345";
            AuthToken    token;
            User         user;

            using (var context = new QuizContext(ManagerTestHelper.Options))
            {
                var sut = ManagerTestHelper.GetAuthManager(context);

                user = await ManagerTestHelper.AddUserAsync(context, 1, email, password);

                await ManagerTestHelper.AddAuthTokenAsync(context, user.Id, deviceId, tokenString, true);

                await context.SaveChangesAsync();

                token = await sut.VerifyAccessToken(tokenString);
            }

            Assert.AreEqual(tokenString, token.Token);
            Assert.AreEqual(user.Id, token.UserId);
            Assert.IsTrue(token.IsVerified);
        }
Ejemplo n.º 3
0
        public async Task GenerateTokenPasswordMatches()
        {
            const string password = "******";
            const string email    = "*****@*****.**";
            AuthToken    token;
            User         user;

            using (var context = new QuizContext(ManagerTestHelper.Options))
            {
                var sut = ManagerTestHelper.GetAuthManager(context);

                await ManagerTestHelper.AddUserAsync(context, 0);

                user = await ManagerTestHelper.AddUserAsync(context, 1, email, password);

                await ManagerTestHelper.AddUserAsync(context, 2);

                await context.SaveChangesAsync();

                token = await sut.GenerateTokenAsync(new TokenRequest
                {
                    DeviceId = "deviceId",
                    Email    = email,
                    Password = password
                });
            }

            Assert.IsNotNull(token);
            Assert.AreEqual(token.UserId, user.Id);
        }
Ejemplo n.º 4
0
        public async Task UpdateUserInvalidUser()
        {
            bool         result;
            const string password      = "******";
            const string email         = "*****@*****.**";
            const string newFirstName  = "newName";
            const string newLastName   = "newLastName";
            const string newPictureUrl = "newUrl";

            using (var context = new QuizContext(ManagerTestHelper.Options))
            {
                var sut = ManagerTestHelper.GetUserManager(context, Mock.Of <IAuthManager>());

                await ManagerTestHelper.AddUserAsync(context, 0);

                var user = await ManagerTestHelper.AddUserAsync(context, 1, email, password, false);

                await context.SaveChangesAsync();

                result = await sut.UpdateUserAsync(user.Id + 1, new Models.TransferObjects.User
                {
                    DeviceId   = "device",
                    FirstName  = newFirstName,
                    LastName   = newLastName,
                    Email      = email,
                    PictureUrl = newPictureUrl,
                    Password   = "******"
                });
            }

            Assert.IsFalse(result);
        }
Ejemplo n.º 5
0
        public async Task DeleteUser()
        {
            bool         result;
            const string password = "******";
            const string email    = "*****@*****.**";

            Models.DbModels.User deletedUser;

            using (var context = new QuizContext(ManagerTestHelper.Options))
            {
                var sut = ManagerTestHelper.GetUserManager(context, Mock.Of <IAuthManager>());

                await ManagerTestHelper.AddUserAsync(context, 0);

                var user = await ManagerTestHelper.AddUserAsync(context, 1, email, password, false);

                await ManagerTestHelper.AddUserAsync(context, 2);

                await context.SaveChangesAsync();

                result = await sut.DeleteUserAsync(user.Id);

                deletedUser = await context.Users.FindAsync(user.Id);
            }

            Assert.IsTrue(result);
            Assert.IsNull(deletedUser);
        }
Ejemplo n.º 6
0
        public async Task UpdatePasswordWithTokenWrongType()
        {
            bool         result;
            const string password    = "******";
            const string email       = "*****@*****.**";
            const string newPassword = "******";
            const string tokenString = "token";

            Models.DbModels.User updatedUser;

            using (var context = new QuizContext(ManagerTestHelper.Options))
            {
                var sut = ManagerTestHelper.GetUserManager(context, Mock.Of <IAuthManager>());

                await ManagerTestHelper.AddUserAsync(context, 0);

                var user = await ManagerTestHelper.AddUserAsync(context, 1, email, password, false);

                await ManagerTestHelper.AddUserAsync(context, 2);

                await ManagerTestHelper.AddOneTimeTokenAsync(context, email, OneTimeTokenType.AccountVerification, tokenString, true);

                await context.SaveChangesAsync();

                result = await sut.UpdatePassword(tokenString, newPassword);

                updatedUser = await context.Users.FindAsync(user.Id);
            }

            Assert.IsFalse(result);
            Assert.IsTrue(AuthenticationHelper.CompareByteArrays(AuthenticationHelper.EncryptPassword(password), updatedUser.PasswordHash));
        }
Ejemplo n.º 7
0
        public async Task UpdatePasswordInvalidPassword()
        {
            bool         result;
            const string password    = "******";
            const string email       = "*****@*****.**";
            const string newPassword = "******";

            Models.DbModels.User updatedUser;

            using (var context = new QuizContext(ManagerTestHelper.Options))
            {
                var sut = ManagerTestHelper.GetUserManager(context, Mock.Of <IAuthManager>());

                await ManagerTestHelper.AddUserAsync(context, 0);

                var user = await ManagerTestHelper.AddUserAsync(context, 1, email, password, true);

                await ManagerTestHelper.AddUserAsync(context, 2);

                await context.SaveChangesAsync();

                result = await sut.UpdatePassword(user.Id, newPassword);

                updatedUser = await context.Users.FindAsync(user.Id);
            }

            Assert.IsFalse(result);
            Assert.IsTrue(AuthenticationHelper.CompareByteArrays(AuthenticationHelper.EncryptPassword(password), updatedUser.PasswordHash));
        }
Ejemplo n.º 8
0
        public async Task VerifyAccount()
        {
            AuthToken    result;
            const string password    = "******";
            const string email       = "*****@*****.**";
            const string tokenString = "token";
            OneTimeToken token;

            Models.DbModels.User user;
            Models.DbModels.User updatedUser;

            using (var context = new QuizContext(ManagerTestHelper.Options))
            {
                var authManager = new Mock <IAuthManager>();
                authManager
                .Setup(c => c.GenerateTokenAsync(It.IsAny <int>(), It.IsAny <string>()))
                .Returns((int u, string d) => Task.FromResult(new AuthToken
                {
                    UserId = u
                }));
                var sut = ManagerTestHelper.GetUserManager(context, authManager.Object);

                await ManagerTestHelper.AddUserAsync(context, 0);

                user = await ManagerTestHelper.AddUserAsync(context, 1, email, password, false);

                await ManagerTestHelper.AddUserAsync(context, 2);

                await ManagerTestHelper.AddOneTimeTokenAsync(context, email, OneTimeTokenType.AccountVerification, tokenString, true);

                await context.SaveChangesAsync();

                result = await sut.VerifyAccount(new OneTimeTokenRequest
                {
                    Token    = tokenString,
                    DeviceId = "device"
                });

                token = await context.OneTimeTokens.FirstOrDefaultAsync(t => t.Email == email && t.TokenType == (byte)OneTimeTokenType.AccountVerification);

                updatedUser = await context.Users.FindAsync(user.Id);
            }

            Assert.AreEqual(result.UserId, user.Id);
            Assert.IsNull(token);
            Assert.IsTrue(updatedUser.IsVerified);
        }
Ejemplo n.º 9
0
        public async Task GenerateTokenByIdNoUser()
        {
            const string password = "******";
            const string email    = "*****@*****.**";
            const string deviceId = "mydevice";
            AuthToken    token;

            using (var context = new QuizContext(ManagerTestHelper.Options))
            {
                var sut = ManagerTestHelper.GetAuthManager(context);

                var user = await ManagerTestHelper.AddUserAsync(context, 1, email, password);

                await context.SaveChangesAsync();

                token = await sut.GenerateTokenAsync(user.Id + 1, deviceId); // +1 to simply specify a different user.
            }

            Assert.IsNull(token);
        }
Ejemplo n.º 10
0
        public async Task DeleteUserNotFound()
        {
            bool         result;
            const string password = "******";
            const string email    = "*****@*****.**";

            using (var context = new QuizContext(ManagerTestHelper.Options))
            {
                var sut = ManagerTestHelper.GetUserManager(context, Mock.Of <IAuthManager>());

                await ManagerTestHelper.AddUserAsync(context, 0);

                var user = await ManagerTestHelper.AddUserAsync(context, 1, email, password, false);

                await context.SaveChangesAsync();

                result = await sut.DeleteUserAsync(user.Id + 1);
            }

            Assert.IsFalse(result);
        }
Ejemplo n.º 11
0
        private async Task <UserToken> GetAccessTokenInternal(bool isValid)
        {
            const string password    = "******";
            const string email       = "*****@*****.**";
            const string deviceId    = "mydevice";
            const string tokenString = "randomtokenstring12345";
            UserToken    token;

            using (var context = new QuizContext(ManagerTestHelper.Options))
            {
                var sut = ManagerTestHelper.GetAuthManager(context);

                var user = await ManagerTestHelper.AddUserAsync(context, 1, email, password);

                await ManagerTestHelper.AddAuthTokenAsync(context, user.Id, deviceId, tokenString, isValid);

                await context.SaveChangesAsync();

                token = await sut.GetAccessToken(tokenString);
            }

            return(token);
        }
Ejemplo n.º 12
0
        public async Task VerifyAccessTokenTokenNotFound()
        {
            const string password    = "******";
            const string email       = "*****@*****.**";
            const string deviceId    = "mydevice";
            const string tokenString = "randomtokenstring12345";
            AuthToken    token;

            using (var context = new QuizContext(ManagerTestHelper.Options))
            {
                var sut = ManagerTestHelper.GetAuthManager(context);

                var user = await ManagerTestHelper.AddUserAsync(context, 1, email, password);

                await ManagerTestHelper.AddAuthTokenAsync(context, user.Id, deviceId, tokenString + "somesuffix", true);

                await context.SaveChangesAsync();

                token = await sut.VerifyAccessToken(tokenString);
            }

            Assert.IsNull(token);
        }
Ejemplo n.º 13
0
        public async Task DeleteAccessTokenFalse()
        {
            const string password       = "******";
            const string email          = "*****@*****.**";
            const string deviceId       = "mydevice";
            const string tokenString    = "randomtokenstring12345";
            const bool   isUserVerified = false;
            bool         result;

            using (var context = new QuizContext(ManagerTestHelper.Options))
            {
                var sut = ManagerTestHelper.GetAuthManager(context);

                var user = await ManagerTestHelper.AddUserAsync(context, 1, email, password, isUserVerified);

                await ManagerTestHelper.AddAuthTokenAsync(context, user.Id, deviceId, tokenString, true);

                await context.SaveChangesAsync();

                result = await sut.DeleteAccessToken("someothertoken");
            }

            Assert.IsFalse(result);
        }
Ejemplo n.º 14
0
        public async Task UpdatePasswordWithToken()
        {
            bool         result;
            const string password    = "******";
            const string email       = "*****@*****.**";
            const string newPassword = "******";
            const string tokenString = "token";

            Models.DbModels.User updatedUser;
            OneTimeToken         deletedToken;

            using (var context = new QuizContext(ManagerTestHelper.Options))
            {
                var sut = ManagerTestHelper.GetUserManager(context, Mock.Of <IAuthManager>());

                await ManagerTestHelper.AddUserAsync(context, 0);

                var user = await ManagerTestHelper.AddUserAsync(context, 1, email, password, false);

                await ManagerTestHelper.AddUserAsync(context, 2);

                await ManagerTestHelper.AddOneTimeTokenAsync(context, email, OneTimeTokenType.ForgotPassword, tokenString, true);

                await context.SaveChangesAsync();

                result = await sut.UpdatePassword(tokenString, newPassword);

                updatedUser = await context.Users.FindAsync(user.Id);

                deletedToken = await context.OneTimeTokens.FirstOrDefaultAsync(t => t.Email == email && t.Token == tokenString);
            }

            Assert.IsTrue(result);
            Assert.IsTrue(AuthenticationHelper.CompareByteArrays(AuthenticationHelper.EncryptPassword(newPassword), updatedUser.PasswordHash));
            Assert.IsNull(deletedToken);
        }