public void SaveUserTest()
        {
            var sut  = new UserPersister();
            var user = new User {
                Email    = "*****@*****.**", FirstName = "Louis",
                LastName = "Salin", Password = "******"
            };

            sut.Save(user);

            using (var connection = new SqliteConnection("URI=file:Users.db3"))
            {
                var query = "SELECT * FROM Users WHERE Email='*****@*****.**';";

                using (var cmd = connection.CreateCommand())
                {
                    connection.Open();
                    cmd.CommandText = query;

                    using (var reader = cmd.ExecuteReader())
                    {
                        reader.Read();

                        reader["FirstName"].ShouldEqual("Louis");
                        reader["LastName"].ShouldEqual("Salin");
                        reader["Email"].ShouldEqual("*****@*****.**");
                        reader["Password"].ShouldEqual("pass123");

                        reader.Close();
                    }

                    connection.Close();
                }
            }
        }
        public void Users_can_be_persisted_and_retrieved()
        {
            //Arrange
            var sutProvider  = new DataProvider <User>(_config, User.ToDomainConverter);
            var columns      = sutProvider.LoadAllColumns();
            var sutPersister = new UserPersister(columns, _config);

            //Act
            ErrorMessage error;
            var          persistResult = sutPersister.TryPersist(ref TestData.Users.NewMeJulie, out error);

            //Assert
            Assert.IsTrue(persistResult);
            Assert.IsNull(error);

            //The new row id is assigned to ref of the object
            Assert.IsNotNull(TestData.Users.MeJulie.UserId);
            Assert.IsInstanceOf <int>(TestData.Users.MeJulie.UserId);

            var readResult = sutProvider.LoadAll().First();

            Assert.AreEqual(TestData.Users.MeJulie.Email, readResult.Email);
            Assert.AreEqual(TestData.Users.MeJulie.Username, readResult.Username);
            Assert.AreEqual(TestData.Users.MeJulie.FirstName, readResult.FirstName);
            Assert.AreEqual(TestData.Users.MeJulie.LastName, readResult.LastName);

            Assert.AreNotEqual(TestData.Users.MeJulie.Password, readResult.Password);
            Assert.AreEqual(_encrypter.Encrypt(TestData.Users.MeJulie.Password), readResult.Password);
            Assert.AreEqual(TestData.Users.MeJulie.Password, _encrypter.Decrypt(readResult.Password));
        }
예제 #3
0
        private DataManager()
        {
            // TODO [CKP] inicijalizuj perzistere
            userPersister     = new UserPersister();
            addressPersister  = new AddressPersister();
            vehiclePersister  = new VehiclePersister();
            locationPersister = new LocationPersister();
            driverPersister   = new DriverPersister();
            farePersister     = new FarePersister();
            commentPersister  = new CommentPersister();

            cache.Add(EntityType.USER, userPersister.Collection);
            cache.Add(EntityType.ADDRESS, addressPersister.Collection);
            cache.Add(EntityType.VEHICLE, vehiclePersister.Collection);
            cache.Add(EntityType.LOCATION, locationPersister.Collection);
            cache.Add(EntityType.DRIVER, driverPersister.Collection);
            cache.Add(EntityType.COMMENT, commentPersister.Collection);
            cache.Add(EntityType.FARE, farePersister.Collection);

            persisterMap.Add((userPersister as IPersister).PersisterType, userPersister as IPersister);
            persisterMap.Add((addressPersister as IPersister).PersisterType, addressPersister as IPersister);
            persisterMap.Add((vehiclePersister as IPersister).PersisterType, vehiclePersister as IPersister);
            persisterMap.Add((locationPersister as IPersister).PersisterType, locationPersister as IPersister);
            persisterMap.Add((driverPersister as IPersister).PersisterType, driverPersister as IPersister);
            persisterMap.Add((commentPersister as IPersister).PersisterType, commentPersister as IPersister);
            persisterMap.Add((farePersister as IPersister).PersisterType, farePersister as IPersister);
        }
예제 #4
0
        public HttpResponseMessage RegisterUser(RegisterUserModel model)
        {
            return(this.ExecuteOperationAndHandleExceptions(() =>
            {
                var context = new GameContext();
                var dbUser = UserPersister.GetUserByUsernameAndDisplayName(model.Username, model.Nickname, context);
                if (dbUser != null)
                {
                    throw new InvalidOperationException("This user already exists in the database");
                }

                dbUser = new User()
                {
                    Username = model.Username.ToLower(),
                    Nickname = model.Nickname,
                    AuthCode = model.AuthCode,
                    Role = context.Roles.Where(r => r.Name == "user").FirstOrDefault()
                };
                context.Users.Add(dbUser);
                dbUser.SessionKey = UserPersister.GenerateSessionKey(dbUser.Id);

                context.SaveChanges();

                var responseModel = new UserResponseModel()
                {
                    Nickname = dbUser.Nickname,
                    SesionKey = dbUser.SessionKey
                };

                var response = this.Request.CreateResponse(HttpStatusCode.Created, responseModel);
                return response;
            }));
        }
예제 #5
0
        public HttpResponseMessage UserDetails(
            [ValueProvider(typeof(HeaderValueProviderFactory <string>))]
            string sessionKey)
        {
            return(this.ExecuteOperationAndHandleExceptions(() =>
            {
                var context = new GameContext();
                var user = UserPersister.GetUserBySessionKey(sessionKey, context);

                var model = new UserDetails
                {
                    Nickname = user.Nickname,
                    Username = user.Username,
                    Heroes = (
                        from h in user.Heroes
                        select new ViewHeroModel
                    {
                        Id = h.Id,
                        Name = h.Name
                    }),
                    Avatar = user.Avatar
                };

                var response = this.Request.CreateResponse(HttpStatusCode.OK, model);
                return response;
            }));
        }
        private bool PersistUser(out ErrorMessage error, ref User persistedUser)
        {
            var provider  = new DataProvider <User>(_config, User.ToDomainConverter);
            var columns   = provider.LoadAllColumns();
            var persister = new UserPersister(columns, _config);

            return(persister.TryPersist(ref persistedUser, out error));
        }
예제 #7
0
        public HttpResponseMessage LogoutUser(
            [ValueProvider(typeof(HeaderValueProviderFactory <string>))]
            string sessionKey)
        {
            return(this.ExecuteOperationAndHandleExceptions(() =>
            {
                var context = new GameContext();
                var user = UserPersister.GetUserBySessionKey(sessionKey, context);
                user.SessionKey = null;
                context.SaveChanges();

                var response = this.Request.CreateResponse(HttpStatusCode.NoContent);
                return response;
            }));
        }
예제 #8
0
        public HttpResponseMessage UploadAvatar()
        {
            return(this.ExecuteOperationAndHandleExceptions(() =>
            {
                var httpRequest = HttpContext.Current.Request;

                var context = new GameContext();
                var dbUser = UserPersister.GetUserByUsernameAndDisplayName(httpRequest.Form["username"], httpRequest.Form["nickname"], context);
                if (dbUser == null)
                {
                    throw new InvalidOperationException("This user already exists in the database");
                }


                if (httpRequest.Files.Count > 0)
                {
                    foreach (string file in httpRequest.Files)
                    {
                        var postedFile = httpRequest.Files[file];

                        var configuration = new AccountConfiguration("djlwcsyiz", "781383948985498", "Vh5BQmeTxvSKvTGTg-wRDYKqPz4");

                        var uploader = new Uploader(configuration);
                        string publicId = Path.GetFileNameWithoutExtension(postedFile.FileName);
                        var uploadResult = uploader.Upload(new UploadInformation(postedFile.FileName, postedFile.InputStream)
                        {
                            PublicId = publicId,
                            Format = postedFile.FileName.Substring(postedFile.FileName.Length - 3),
                        });

                        dbUser.Avatar = uploadResult.Url;
                    }
                }

                context.SaveChanges();

                var response = this.Request.CreateResponse(HttpStatusCode.NoContent);
                return response;
            }));
        }
예제 #9
0
        public HttpResponseMessage LoginUser(LoginUserModel model)
        {
            return(this.ExecuteOperationAndHandleExceptions(() =>
            {
                if (model == null)
                {
                    throw new FormatException("invalid username and/or password");
                }

                UserPersister.ValidateLoginUser(model);

                var context = new GameContext();

                var user = context.Users.FirstOrDefault(u => u.Username == model.Username.ToLower() &&
                                                        u.AuthCode == model.AuthCode);

                if (user == null)
                {
                    throw new InvalidOperationException("Invalid username or password");
                }

                if (user.SessionKey == null)
                {
                    user.SessionKey = UserPersister.GenerateSessionKey(user.Id);
                    context.SaveChanges();
                }

                var responseModel = new UserResponseModel()
                {
                    Nickname = user.Nickname,
                    SesionKey = user.SessionKey
                };

                var response = this.Request.CreateResponse(HttpStatusCode.OK, responseModel);
                return response;
            }));
        }