public HttpResponseMessage PostRegisterUser(UserModel model) { var responseMsg = this.PerformOperationAndHandleExceptions( () => { var context = new BloggingSystemContext(); using (context) { this.ValidateUsername(model.Username); this.ValidateNickname(model.DisplayName); this.ValidateAuthCode(model.AuthCode); var usernameToLower = model.Username.ToLower(); var nicknameToLower = model.DisplayName.ToLower(); var user = context.Users.FirstOrDefault( usr => usr.Username == usernameToLower || usr.DisplayName.ToLower() == nicknameToLower); if (user != null) { throw new InvalidOperationException("User exists"); } user = new User() { Username = usernameToLower, DisplayName = model.DisplayName, AuthCode = model.AuthCode }; context.Users.Add(user); context.SaveChanges(); user.SessionKey = this.GenerateSessionKey(user.Id); context.SaveChanges(); var loggedModel = new UserLoggedModel() { DisplayName = user.DisplayName, SessionKey = user.SessionKey }; var response = this.Request.CreateResponse(HttpStatusCode.Created, loggedModel); return(response); } }); return(responseMsg); }
public HttpResponseMessage Comment(int postId, [FromBody] CommentModel model, [ValueProvider(typeof(HeaderValueProviderFactory <string>))] string sessionKey) { var responseMsg = this.PerformOperationAndHandleExceptions(() => { var context = new BloggingSystemContext(); Post foundPost = context.Posts.Where(x => x.Id == postId).FirstOrDefault(); User foundUser = context.Users.Where(x => x.Id == foundPost.User.Id).FirstOrDefault(); if (foundPost == null) { throw new ArgumentException("No post was found"); } if (foundUser == null) { throw new ArgumentException("No user was found"); } Comment newComment = new Comment() { Text = model.Text, CommentDate = DateTime.Now }; foundUser.Comments.Add(newComment); foundPost.Comments.Add(newComment); context.SaveChanges(); string result = null; return(Request.CreateResponse(HttpStatusCode.OK, result)); }); return(responseMsg); }
public HttpResponseMessage PutLogoutUser( [ValueProvider(typeof(HeaderValueProviderFactory <string>))] string sessionKey) { var responseMsg = this.PerformOperationAndHandleExceptions( () => { var context = new BloggingSystemContext(); using (context) { if (sessionKey == null) { throw new ArgumentNullException("You do not have session"); } var user = context.Users.FirstOrDefault( usr => usr.SessionKey == sessionKey); if (user == null) { throw new InvalidOperationException("Your session is expired"); } user.SessionKey = null; context.SaveChanges(); var response = this.Request.CreateResponse(HttpStatusCode.OK); return(response); } }); return(responseMsg); }
public HttpResponseMessage PutComment(int postId, PostModel model, [ValueProvider(typeof(HeaderValueProviderFactory <string>))] string sessionKey) { var responseMsg = this.PerformOperationAndHandleExceptions( () => { var context = new BloggingSystemContext(); using (context) { if (sessionKey == null) { throw new ArgumentNullException("You dont have session"); } var user = context.Users.FirstOrDefault( usr => usr.SessionKey == sessionKey); if (user == null) { throw new InvalidOperationException("Your session is expired"); } if (model.Text == null) { throw new ArgumentNullException("You dont have text"); } if (postId <= 0) { throw new ArgumentOutOfRangeException("Incorrect request"); } var post = context.Posts.FirstOrDefault(p => p.Id == postId); if (post == null) { throw new ArgumentNullException("No post found"); } var comment = new Comment() { Text = model.Text, Author = user, PostDate = DateTime.Now }; post.Comments.Add(comment); context.SaveChanges(); var response = this.Request.CreateResponse(HttpStatusCode.OK); return(response); } }); return(responseMsg); }
public HttpResponseMessage LoginUser(UserDto value) { BloggingSystemContext context = null; try { context = new BloggingSystemContext(); this.ValidateUserIdentifier( value.Username, "Username", MinUsernameLength, MaxUsernameLength, ValidUsernameCharacters); this.ValidateAuthCode(value.AuthCode); var user = context.Users.FirstOrDefault( u => u.Username == value.Username && u.AuthCode == value.AuthCode); if (user == null) { throw new InvalidOperationException("Invalid username or password."); } if (user.SessionKey == null || user.SessionKey.Length != SessionKeyLength) { user.SessionKey = this.GenerateSessionKey(user.Id); context.SaveChanges(); } var loggedUserDto = new LoggedUserDto() { DisplayName = user.DisplayName, SessionKey = user.SessionKey }; var response = Request.CreateResponse(HttpStatusCode.Accepted, loggedUserDto); return(response); } catch (Exception ex) { var errorResponse = Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message); throw new HttpResponseException(errorResponse); } finally { if (context != null) { context.Dispose(); } } }
public HttpResponseMessage CreateComment(int postId, [FromBody] CommentDto value) { try { var sessionKey = ApiControllerHelper.GetHeaderValue(Request.Headers, "X-SessionKey"); if (sessionKey == null) { throw new ArgumentNullException("No session key provided in the request header!"); } Validate(value.Text, "text"); var context = new BloggingSystemContext(); using (context) { var user = context.Users.FirstOrDefault(u => u.SessionKey == sessionKey); if (user == null) { throw new ArgumentException("Users must be logged in to leave comments!"); } var post = context.Posts.FirstOrDefault(p => p.Id == postId); if (post == null) { throw new ArgumentException("Invalid post id: " + postId); } var newComment = new Comment() { Text = value.Text, PostDate = DateTime.Now, Author = user, Post = post }; context.Comments.Add(newComment); context.SaveChanges(); var response = Request.CreateResponse(HttpStatusCode.OK); return(response); } } catch (Exception ex) { var errorResponse = Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message); throw new HttpResponseException(errorResponse); } }
public HttpResponseMessage LogoutUser() { BloggingSystemContext context = null; try { string sessionKey = ApiControllerHelper.GetHeaderValue(Request.Headers, "X-SessionKey"); if (sessionKey == null) { throw new ArgumentNullException("No session key provided in the request header!"); } context = new BloggingSystemContext(); var user = context.Users.FirstOrDefault(u => u.SessionKey == sessionKey); if (user.SessionKey == null) { throw new ArgumentNullException("User is already logged out!"); } user.SessionKey = null; context.SaveChanges(); var response = Request.CreateResponse(HttpStatusCode.OK); return(response); } catch (Exception ex) { var errorResponse = Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message); throw new HttpResponseException(errorResponse); } finally { if (context != null) { context.Dispose(); } } }
public HttpResponseMessage PostLoginUser(UserModel model) { var responseMsg = this.PerformOperationAndHandleExceptions( () => { var context = new BloggingSystemContext(); using (context) { this.ValidateUsername(model.Username); var username = model.Username.ToLower(); var user = context.Users.FirstOrDefault( usr => usr.Username == username && usr.Password == model.AuthCode); if (user == null) { throw new InvalidOperationException( "Username or password is incorrect"); } if (user.SessionKey == null) { user.SessionKey = this.GenerateSessionKey(user.Id); context.SaveChanges(); } var loggedUser = new LoggedUserModel() { DisplayName = user.DisplayName, SessionKey = user.SessionKey }; var response = this.Request.CreateResponse(HttpStatusCode.Created, loggedUser); return(response); } }); return(responseMsg); }
public HttpResponseMessage PutLogoutUser( [ValueProvider(typeof(HeaderValueProviderFactory <string>))] string sessionKey) { var response = this.PerformOperation(() => { var context = new BloggingSystemContext(); using (context) { var user = context.Users.Where(u => u.SessionKey == sessionKey).FirstOrDefault(); if (user == null) { throw new InvalidOperationException("The user is not valid"); } user.SessionKey = null; context.SaveChanges(); } }); return(response); }
public HttpResponseMessage RegisterUser(UserDto value) { BloggingSystemContext context = null; try { context = new BloggingSystemContext(); this.ValidateUserIdentifier( value.Username, "Username", MinUsernameLength, MaxUsernameLength, ValidUsernameCharacters); this.ValidateUserIdentifier( value.DisplayName, "Display name", MinDisplayNameLength, MaxDisplayNameLength, ValidDisplayNameCharacters); this.ValidateAuthCode(value.AuthCode); var user = context.Users.FirstOrDefault( u => u.Username == value.Username || u.DisplayName == value.DisplayName); if (user != null) { throw new InvalidOperationException("User already exists."); } user = new User() { Username = value.Username, DisplayName = value.DisplayName, AuthCode = value.AuthCode }; context.Users.Add(user); context.SaveChanges(); user.SessionKey = this.GenerateSessionKey(user.Id); context.SaveChanges(); var loggedUserDto = new LoggedUserDto() { DisplayName = user.DisplayName, SessionKey = user.SessionKey }; var response = Request.CreateResponse(HttpStatusCode.Created, loggedUserDto); return(response); } catch (Exception ex) { var errorResponse = Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message); throw new HttpResponseException(errorResponse); } finally { if (context != null) { context.Dispose(); } } }
/* * { "title": "NEW POST", * "tags": ["post"], * "text": "this is just a test post" } */ public HttpResponseMessage PostAdd(PostModel model, [ValueProvider(typeof(HeaderValueProviderFactory <string>))] string sessionKey) { var responseMsg = this.PerformOperationAndHandleExceptions( () => { var context = new BloggingSystemContext(); using (context) { if (sessionKey == null) { throw new ArgumentNullException("You dont have session"); } var user = context.Users.FirstOrDefault( usr => usr.SessionKey == sessionKey); if (user == null) { throw new InvalidOperationException("Your session is expired"); } if (model.Title == null) { throw new ArgumentNullException("You dont have title"); } if (model.Text == null) { throw new ArgumentNullException("You dont have text"); } var post = new Post() { Title = model.Title, Text = model.Text, Author = user, PostDate = DateTime.Now }; string[] tagsTile = model.Title.Split(new char[] { ' ' }); for (int i = 0; i < tagsTile.Length; i++) { var tagEnt = new Tag() { Name = tagsTile[i].ToLower() }; var tag = context.Tags.FirstOrDefault(t => t.Name == tagEnt.Name); if (tag == null) { post.Tags.Add(tagEnt); } else { post.Tags.Add(tag); } } if (model.Tags != null) { foreach (var tag in model.Tags) { var tagEnt = new Tag() { Name = tag.ToLower() }; var tagTitle = context.Tags.FirstOrDefault(t => t.Name == tagEnt.Name); if (tagTitle == null) { post.Tags.Add(tagEnt); } else { post.Tags.Add(tagTitle); } } } context.Posts.Add(post); context.SaveChanges(); var createdPost = new CreatedPostModel() { Id = post.Id, Title = post.Title }; var response = this.Request.CreateResponse(HttpStatusCode.Created, createdPost); return(response); } }); return(responseMsg); }
public HttpResponseMessage CreatePost(CreatePostDto value) { try { var sessionKey = ApiControllerHelper.GetHeaderValue(Request.Headers, "X-SessionKey"); if (sessionKey == null) { throw new ArgumentNullException("No session key provided in the request header!"); } Validate(value.Title, "title"); Validate(value.Text, "text"); var context = new BloggingSystemContext(); using (context) { var user = context.Users.FirstOrDefault(u => u.SessionKey == sessionKey); if (user == null) { throw new ArgumentException("Users must be logged in to create posts!"); } var newPost = new Post() { Title = value.Title, Text = value.Text, PostDate = DateTime.Now, Author = user }; string[] tagsFromTitle = value.Title.Split( new char[] { ' ', ',', '.', ';', '!', '?', ':' }, StringSplitOptions.RemoveEmptyEntries); List <string> tagsToCheck = new List <string>(); foreach (var tagFromTitle in tagsFromTitle) { tagsToCheck.Add(tagFromTitle); } if (value.Tags != null) { foreach (string tagName in value.Tags) { tagsToCheck.Add(tagName); } } foreach (string tagName in tagsToCheck) { var matchingTag = context.Tags.FirstOrDefault(t => string.Compare(t.Name, tagName, true) == 0); if (matchingTag == null) { // tag not found, insert it in the database matchingTag = new Tag { Name = tagName.ToLower() }; context.Tags.Add(matchingTag); context.SaveChanges(); } newPost.Tags.Add(matchingTag); } context.Posts.Add(newPost); context.SaveChanges(); var createdPostDto = new CreatePostDto() { Id = newPost.Id, Title = newPost.Title, Tags = newPost.Tags.Select(t => t.Name), Text = newPost.Text }; var response = Request.CreateResponse(HttpStatusCode.Created, createdPostDto); return(response); } } catch (Exception ex) { var errorResponse = Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message); throw new HttpResponseException(errorResponse); } }
public HttpResponseMessage CreatePost([FromBody] PostModel model, [ValueProvider(typeof(HeaderValueProviderFactory <string>))] string sessionKey) { var responseMsg = this.PerformOperationAndHandleExceptions(() => { var context = new BloggingSystemContext(); var user = context.Users .Where(usr => usr.SessionKey == sessionKey) .FirstOrDefault(); if (user == null) { throw new InvalidOperationException("The user is not logged in"); } var newPost = new Post() { Title = model.Title, Text = model.Text, PostDate = DateTime.Now, User = user, }; var titleSplited = model.Title.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); foreach (var tagName in titleSplited) { Tag addedTag = new Tag() { Name = tagName.ToLower() }; context.Tags.Add(addedTag); newPost.Tags.Add(addedTag); } if (model.Tags != null) { foreach (var post in model.Tags) { Tag addedTag = new Tag() { Name = post.ToLower() }; context.Tags.Add(addedTag); newPost.Tags.Add(addedTag); } } // var filteredTags = FilterTags(possibleTags, context); context.Posts.Add(newPost); context.SaveChanges(); var response = this.Request.CreateResponse(HttpStatusCode.Created, new PostCreatedModel { Id = newPost.Id, Title = model.Title }); return(response); }); return(responseMsg); }