From 0081ab9926c486beb3033791e9e8f946b3c8b48a Mon Sep 17 00:00:00 2001 From: realtradam Date: Sun, 14 Jul 2024 23:43:35 -0400 Subject: add auth for editing and deleting posts --- .../blog/web/controllers/ArticleController.java | 39 ++++++-- .../java/com/blog/web/mappers/ArticleMapper.java | 31 ++++++ .../java/com/blog/web/security/SecurityConfig.java | 6 +- .../blog/web/services/impl/ArticleServiceImpl.java | 30 +----- ...abstract-polygonal-banner-background-vector.jpg | Bin 0 -> 1841814 bytes src/main/resources/templates/auth/login.html | 4 +- src/main/resources/templates/index.html | 110 +++------------------ src/main/resources/templates/layout.html | 30 +++--- 8 files changed, 101 insertions(+), 149 deletions(-) create mode 100644 src/main/java/com/blog/web/mappers/ArticleMapper.java create mode 100644 src/main/resources/static/abstract-polygonal-banner-background-vector.jpg diff --git a/src/main/java/com/blog/web/controllers/ArticleController.java b/src/main/java/com/blog/web/controllers/ArticleController.java index 9af5b92..d1bfcce 100644 --- a/src/main/java/com/blog/web/controllers/ArticleController.java +++ b/src/main/java/com/blog/web/controllers/ArticleController.java @@ -12,7 +12,6 @@ import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; -import java.time.LocalDateTime; import java.util.List; @Controller @@ -27,13 +26,8 @@ public class ArticleController { @GetMapping("/articles") public String listArticles(Model model) { - UserEntity user = new UserEntity(); List articles = articleService.findAllArticles(); - String username = SecurityUtil.getSessionUser(); - if(username != null) { - user = userService.findByUsername(username); - model.addAttribute("user", user); - } + UserEntity user = getLoggedInUser(); model.addAttribute("user", user); model.addAttribute("articles", articles); return "index"; @@ -43,11 +37,15 @@ public class ArticleController { public String showArticle(@PathVariable("articleId") long articleId, Model model) { ArticleDto articleDto = articleService.findArticleById(articleId); model.addAttribute("article", articleDto); + UserEntity user = getLoggedInUser(); + model.addAttribute("user", user); return "articles/show"; } @GetMapping("/articles/new") public String createArticleForm(Model model) { + UserEntity user = getLoggedInUser(); + model.addAttribute("user", user); Article article = new Article(); model.addAttribute("article", article); return "articles/new"; @@ -65,14 +63,30 @@ public class ArticleController { return "redirect:/articles"; } + private UserEntity getLoggedInUser() { + UserEntity user = new UserEntity(); + String username = SecurityUtil.getSessionUser(); + if(username != null) { + user = userService.findByUsername(username); + } + return user; + } + @GetMapping("/articles/delete/{articleId}") public String deleteArticle(@PathVariable("articleId") Long articleId) { - articleService.delete(articleId); + UserEntity user = getLoggedInUser(); + ArticleDto article = articleService.findArticleById(articleId); + UserEntity owner = article.getCreatedBy(); + if(owner.getId() == user.getId()) { + articleService.delete(articleId); + } return "redirect:/articles"; } @GetMapping("/articles/edit/{articleId}") public String editArticleForm(@PathVariable("articleId") long articleId, Model model) { + UserEntity user = getLoggedInUser(); + model.addAttribute("user", user); ArticleDto articleDto = articleService.findArticleById(articleId); model.addAttribute("article", articleDto); return "articles/edit"; @@ -92,11 +106,20 @@ public class ArticleController { @GetMapping("/articles/search") public String searchArticle(@RequestParam(value = "search") String search, Model model) { + UserEntity user = getLoggedInUser(); + model.addAttribute("user", user); List articles = articleService.searchArticles(search); model.addAttribute("articles", articles); return "index"; } + @GetMapping("/userlogin") + public String login(Model model) { + UserEntity user = getLoggedInUser(); + model.addAttribute("user", user); + return "auth/login"; + } + @GetMapping("/") public String getArticles() { return "redirect:/articles"; diff --git a/src/main/java/com/blog/web/mappers/ArticleMapper.java b/src/main/java/com/blog/web/mappers/ArticleMapper.java new file mode 100644 index 0000000..a3642da --- /dev/null +++ b/src/main/java/com/blog/web/mappers/ArticleMapper.java @@ -0,0 +1,31 @@ +package com.blog.web.mappers; + +import com.blog.web.dto.ArticleDto; +import com.blog.web.models.Article; + +public class ArticleMapper { + public static Article mapToArticle(ArticleDto articleDto) { + Article article = Article.builder() + .id(articleDto.getId()) + .title(articleDto.getTitle()) + .photoUrl(articleDto.getPhotoUrl()) + .content(articleDto.getContent()) + .createdBy(articleDto.getCreatedBy()) + .createdOn(articleDto.getCreatedOn()) + .updatedOn(articleDto.getUpdatedOn()) + .build(); + return article; + } + + public static ArticleDto mapToArticleDto(Article article) { + return ArticleDto.builder() + .id(article.getId()) + .title(article.getTitle()) + .photoUrl(article.getPhotoUrl()) + .content(article.getContent()) + .createdBy(article.getCreatedBy()) + .createdOn(article.getCreatedOn()) + .updatedOn(article.getUpdatedOn()) + .build(); + } +} diff --git a/src/main/java/com/blog/web/security/SecurityConfig.java b/src/main/java/com/blog/web/security/SecurityConfig.java index 49b3402..6b85bb3 100644 --- a/src/main/java/com/blog/web/security/SecurityConfig.java +++ b/src/main/java/com/blog/web/security/SecurityConfig.java @@ -36,12 +36,12 @@ public class SecurityConfig { .permitAll() ) .formLogin(form -> form - .loginPage("/login") + .loginPage("/userlogin") .usernameParameter("username") .passwordParameter("password") .defaultSuccessUrl("/articles") - .loginProcessingUrl("/login") - .failureUrl("/login?error=true") + .loginProcessingUrl("/userlogin") + .failureUrl("/userlogin?error=true") .permitAll() ).logout( logout -> logout diff --git a/src/main/java/com/blog/web/services/impl/ArticleServiceImpl.java b/src/main/java/com/blog/web/services/impl/ArticleServiceImpl.java index 6fdbe3f..1ddd6f0 100644 --- a/src/main/java/com/blog/web/services/impl/ArticleServiceImpl.java +++ b/src/main/java/com/blog/web/services/impl/ArticleServiceImpl.java @@ -12,6 +12,9 @@ import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; +import static com.blog.web.mappers.ArticleMapper.mapToArticle; +import static com.blog.web.mappers.ArticleMapper.mapToArticleDto; + @Service public class ArticleServiceImpl implements ArticleService { public ArticleServiceImpl(com.blog.web.repository.ArticleRepository articleRepository, com.blog.web.repository.UserRepository userRepository) { @@ -25,7 +28,7 @@ public class ArticleServiceImpl implements ArticleService { @Override public List findAllArticles() { List
articles = articleRepository.findAll(); - return articles.stream().map(this::mapToArticleDto).collect(Collectors.toList()); + return articles.stream().map((article) -> mapToArticleDto(article)).collect(Collectors.toList()); } @Override @@ -62,29 +65,4 @@ public class ArticleServiceImpl implements ArticleService { List
articles = articleRepository.searchArticles(search); return articles.stream().map(article -> mapToArticleDto(article)).collect(Collectors.toList()); } - - private Article mapToArticle(ArticleDto articleDto) { - Article article = Article.builder() - .id(articleDto.getId()) - .title(articleDto.getTitle()) - .photoUrl(articleDto.getPhotoUrl()) - .content(articleDto.getContent()) - .createdBy(articleDto.getCreatedBy()) - .createdOn(articleDto.getCreatedOn()) - .updatedOn(articleDto.getUpdatedOn()) - .build(); - return article; - } - - private ArticleDto mapToArticleDto(Article article) { - return ArticleDto.builder() - .id(article.getId()) - .title(article.getTitle()) - .photoUrl(article.getPhotoUrl()) - .content(article.getContent()) - .createdBy(article.getCreatedBy()) - .createdOn(article.getCreatedOn()) - .updatedOn(article.getUpdatedOn()) - .build(); - } } diff --git a/src/main/resources/static/abstract-polygonal-banner-background-vector.jpg b/src/main/resources/static/abstract-polygonal-banner-background-vector.jpg new file mode 100644 index 0000000..1c6746e Binary files /dev/null and b/src/main/resources/static/abstract-polygonal-banner-background-vector.jpg differ diff --git a/src/main/resources/templates/auth/login.html b/src/main/resources/templates/auth/login.html index aee1594..47bc63e 100644 --- a/src/main/resources/templates/auth/login.html +++ b/src/main/resources/templates/auth/login.html @@ -9,8 +9,8 @@
Invalid Username/Password
You have been logged out
-
-
+
+