Exemplo n.º 1
0
        public HttpResponseMessage RegisterUser(UserRegisterModel model)
        {
            var responseMsg = this.ExceptionHandler(
                () =>
                {
                    var context = new ForumContext();

                    using (context)
                    {
                        UserDataPersister.ValidateUsername(model.Username);
                        UserDataPersister.ValidateNickname(model.Nickname);
                        UserDataPersister.ValidateAuthCode(model.AuthCode);

                        var usernameToLower = model.Username.ToLower();
                        var nicknameToLower = model.Nickname.ToLower();

                        var user = context.Users.FirstOrDefault(
                            usr => usr.Username == usernameToLower || usr.Nickname.ToLower() == nicknameToLower);

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

                        var newUser = new User
                        {
                            Username = usernameToLower,
                            Nickname = model.Nickname,
                            AuthCode = model.AuthCode
                        };

                        context.Users.Add(newUser);
                        context.SaveChanges();

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


                        var loggedModel = new LoggedUserModel
                        {
                            Nickname = newUser.Nickname,
                            SessionKey = newUser.SessionKey
                        };

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

                        return response;
                    }
                });

            return responseMsg;
        }
        public HttpResponseMessage RegisterUser(UserModel model)
        {
            var registerResponse = this.PerformOperationAndHandleExceptions(() =>
                {
                    this.ValidateUsername(model.Username);
                    this.ValidateNickname(model.Nickname);
                    this.ValidateAuthCode(model.AuthCode);
                    var usernameToLower = model.Username.ToLower();
                    var nicknameToLower = model.Nickname.ToLower();
                    var user = repository.All()
                        .FirstOrDefault(usr => usr.Username == usernameToLower || usr.Nickname == nicknameToLower);
                    if (user != null)
                    {
                        throw new InvalidOperationException("User allready exist");
                    }

                    user = new User()
                        {
                            Username = usernameToLower,
                            Nickname = model.Nickname,
                            AuthCode = model.AuthCode,
                        };

                    repository.Add(user);
                    user.SessionKey = this.GenerateSessionKey(user.UserId);
                    repository.Update(user.UserId, user);

                    var userModel = new LoggedUserModel()
                        {
                            Nickname = user.Nickname,
                            SessionKey = user.SessionKey
                        };

                    var response = this.Request.CreateResponse(HttpStatusCode.Created, userModel);
                    return response;
                });
            return registerResponse;
        }
        public HttpResponseMessage LoginUser(UserModel model)
        {
            var baseResponse = this.PerformOperationAndHandleExceptions(() =>
            {
                this.ValidateUsername(model.Username);
                this.ValidateAuthCode(model.AuthCode);
                var usernameToLower = model.Username.ToLower();
                var user = repository.All()
                    .FirstOrDefault(usr => usr.Username == usernameToLower && usr.AuthCode == model.AuthCode);

                if (user == null)
                {
                    throw new InvalidOperationException("Username is not exist!");
                }

                if (user.SessionKey == null)
                {
                    user.SessionKey = this.GenerateSessionKey(user.UserId);
                    repository.Update(user.UserId, user);
                }

                var userModel = new LoggedUserModel()
                {
                    Nickname = user.Nickname,
                    SessionKey = user.SessionKey
                };

                var response = this.Request.CreateResponse(HttpStatusCode.Created, userModel);
                return response;
            });
            return baseResponse;
        }
Exemplo n.º 4
0
        public HttpResponseMessage LoginUser(UserLoginModel model)
        {
            var responseMsg = this.ExceptionHandler(
                () =>
                {
                    var context = new ForumContext();

                    using (context)
                    {
                        UserDataPersister.ValidateUsername(model.Username);
                        UserDataPersister.ValidateAuthCode(model.AuthCode);

                        var usernameToLower = model.Username.ToLower();

                        var user = context.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 LoggedUserModel
                        {
                            Nickname = user.Nickname,
                            SessionKey = user.SessionKey
                        };

                        var response = this.Request.CreateResponse(HttpStatusCode.Created, loggedModel);

                        return response;
                    }
                });

            return responseMsg;
        }
Exemplo n.º 5
0
        public void LogoutUser(
             [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey)
        {
            this.ExceptionHandler(
            () =>
            {
                var context = new ForumContext();

                using (context)
                {
                    var user = context.Users.FirstOrDefault(
                        usr => usr.SessionKey == sessionKey);

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

                    user.SessionKey = null;
                    context.SaveChanges();

                    var loggedModel = new LoggedUserModel
                    {
                        Nickname = user.Nickname,
                        SessionKey = user.SessionKey
                    };

                    var response = this.Request.CreateResponse(HttpStatusCode.Created, loggedModel);

                    return response;
                }
            });
        }
Exemplo n.º 6
0
        public HttpResponseMessage PostLoginUser(UserModel model)
        {
            var responceMsg = this.PerformOperationAndHandleExceptions(() =>
            {
                var context = new ForumDbContext();
                using (context)
                {
                    this.ValidateUsername(model.Username);
                    this.ValidateAuthCode(model.AuthCode);

                    var usernameToLower = model.Username.ToLower();
                    var authCode = model.AuthCode;

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

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

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

                    var loggedModel = new LoggedUserModel()
                    {
                        SessionKey = user.SessionKey,
                        Nickname = user.Nickname
                    };

                    var responce = this.Request.CreateResponse(HttpStatusCode.OK, loggedModel);

                    return responce;

                }
            });

            return responceMsg;
        }
Exemplo n.º 7
0
        public HttpResponseMessage PutLogoutUser(LoggedUserModel model)
        {
            var responceMsg = this.PerformOperationAndHandleExceptions(() =>
            {
                var context = new ForumDbContext();
                using (context)
                {
                    var sessionKey = model.SessionKey;

                    var user = context.Users.FirstOrDefault(usr =>
            usr.SessionKey == sessionKey);

                    if (user == null)
                    {
                        throw new InvalidOperationException("Something went terribly wrong");
                    }

                    user.SessionKey = null;
                    context.SaveChanges();

                    var responce = this.Request.CreateResponse(HttpStatusCode.NoContent);

                    return responce;

                }
            });

            return responceMsg;
        }
Exemplo n.º 8
0
        public HttpResponseMessage PostRegisterUser(UserModel model)
        {
            var responceMsg = this.PerformOperationAndHandleExceptions(() =>
                {

                    var context = new ForumDbContext();
                    using (context)
                    {
                        this.ValidateUsername(model.Username);
                        this.ValidateNickname(model.Nickname);
                        this.ValidateAuthCode(model.AuthCode);

                        var usernameToLower = model.Username.ToLower();
                        var nicknameToLower = model.Nickname.ToLower();

                        var user = context.Users.FirstOrDefault(usr =>
            usr.Username == usernameToLower || usr.Nickname.ToLower() == nicknameToLower);

                        if (user != null)
                        {
                            throw new InvalidOperationException("User Exists");
                        }

                        user = new User()
                        {
                            Username = usernameToLower,
                            Nickname = model.Nickname,
                            AuthCode = model.AuthCode
                        };

                        context.Users.Add(user);
                        context.SaveChanges();

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

                        var loggedModel = new LoggedUserModel()
                        {
                            SessionKey = user.SessionKey,
                            Nickname = user.Nickname
                        };

                        var responce = this.Request.CreateResponse(HttpStatusCode.Created, loggedModel);

                        return responce;

                    }
                });

            return responceMsg;
        }