예제 #1
0
        public HttpResponseMessage RegisterUser(UserRegisterModel model)
        {
            var responseMsg = this.ExceptionHandler(
                () =>
            {
                var context = new AutoMorgueContext();

                UserDataPersister.ValidateUsername(model.Username);
                UserDataPersister.ValidateNickname(model.DisplayName);
                UserDataPersister.ValidateAuthCode(model.AuthCode);

                var usernameToLower    = model.Username.ToLower();
                var displayNameToLower = model.DisplayName.ToLower();

                var users = context.Users;
                var user  = users.FirstOrDefault(usr => usr.Username == usernameToLower || usr.DisplayName.ToLower() == displayNameToLower);

                var role = context.Roles.FirstOrDefault(r => r.Name == "user");
                if (role == null)
                {
                    role = new Role
                    {
                        Name = "user"
                    };
                }

                if (user != null)
                {
                    throw new InvalidOperationException("Invalid Username or Password");
                }

                var newUser = new User
                {
                    Username    = usernameToLower,
                    DisplayName = model.DisplayName,
                    AuthCode    = model.AuthCode,
                    Role        = role
                };

                var userInDb = context.Users.Add(newUser);
                context.SaveChanges();

                userInDb.SessionKey = UserDataPersister.GenerateSessionKey(userInDb.Id);
                context.SaveChanges();

                var loggedModel = new UserLoggedModel
                {
                    DisplayName = userInDb.DisplayName,
                    SessionKey  = userInDb.SessionKey
                };

                var response = this.Request.CreateResponse(HttpStatusCode.Created, loggedModel);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = userInDb.Id }));

                return(response);
            });

            return(responseMsg);
        }
예제 #2
0
        public HttpResponseMessage LoginUser(UserLoginModel model)
        {
            var responseMsg = this.ExceptionHandler(
                () =>
            {
                var context = new AutoMorgueContext();

                UserDataPersister.ValidateUsername(model.Username);
                UserDataPersister.ValidateAuthCode(model.AuthCode);

                var usernameToLower = model.Username.ToLower();

                var users = context.Users;
                var user  = users.FirstOrDefault(
                    usr => usr.Username == usernameToLower && usr.AuthCode == model.AuthCode);

                if (user == null)
                {
                    throw new InvalidOperationException("Invalid Username or Password");
                }

                user.SessionKey = UserDataPersister.GenerateSessionKey(user.Id);
                context.SaveChanges();

                var loggedModel = new UserLoggedModel
                {
                    DisplayName = user.DisplayName,
                    SessionKey  = user.SessionKey
                };

                var response = this.Request.CreateResponse(HttpStatusCode.Created, loggedModel);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = user.Id }));

                return(response);
            });

            return(responseMsg);
        }