From 79a5a044883cee44a04c01ad290f9fb85c034e68 Mon Sep 17 00:00:00 2001 From: Dmitry Isaenko Date: Fri, 2 May 2025 18:25:32 +0300 Subject: [PATCH] Move to java 21 and refactor accordingly --- pom.xml | 3 ++- .../marinesco/ShinyApplicationRunner.java | 8 +++---- src/main/java/ru/redrise/marinesco/User.java | 4 ++-- .../ru/redrise/marinesco/UserGenerified.java | 10 ++++----- .../redrise/marinesco/UserSettingsForm.java | 8 +++---- .../Validators/LoginOccupiedConstraint.java | 2 +- .../Validators/LoginOccupiedValidator.java | 3 --- .../marinesco/library/InpxScanner.java | 21 +++++++------------ .../redrise/marinesco/library/RepackZip.java | 2 +- .../settings/GenreSettingsController.java | 7 ++----- .../library/settings/GenresUpload.java | 15 +++++++------ .../library/web/AuthorController.java | 9 ++++---- .../marinesco/library/web/BookController.java | 3 ++- .../library/web/SearchController.java | 12 +++++------ .../security/AthorityByIdConverter.java | 2 +- .../security/ManageUsersController.java | 6 +++--- .../security/RegistrationController.java | 14 ++++++------- .../redrise/marinesco/security/UserRole.java | 12 ++++------- .../security/UserSettingsController.java | 17 +++++---------- .../settings/SettingsController.java | 4 ++-- .../marinesco/web/RoleByIdConverter.java | 2 +- .../resources/templates/user_settings.html | 6 +++--- 22 files changed, 74 insertions(+), 96 deletions(-) diff --git a/pom.xml b/pom.xml index d545cdf..6f48003 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ marinesco Home library - 17 + 21 @@ -84,6 +84,7 @@ org.postgresql postgresql + 42.7.2 runtime diff --git a/src/main/java/ru/redrise/marinesco/ShinyApplicationRunner.java b/src/main/java/ru/redrise/marinesco/ShinyApplicationRunner.java index eb6cf00..4739bc4 100644 --- a/src/main/java/ru/redrise/marinesco/ShinyApplicationRunner.java +++ b/src/main/java/ru/redrise/marinesco/ShinyApplicationRunner.java @@ -18,9 +18,9 @@ import ru.redrise.marinesco.settings.ApplicationSettings; @Slf4j @Configuration public class ShinyApplicationRunner { - private UserRepository users; - private RolesRepository roles; - private ApplicationSettings settings; + private final UserRepository users; + private final RolesRepository roles; + private final ApplicationSettings settings; public ShinyApplicationRunner(UserRepository users, RolesRepository roles, ApplicationSettings settings) { this.users = users; @@ -57,7 +57,7 @@ public class ShinyApplicationRunner { List adminRoleOnlyAthority = roles.findByType(UserRole.Type.ADMIN); - if (login == null || login.size() == 0 || password == null || password.size() == 0) { + if (login == null || login.isEmpty() || password == null || password.isEmpty()) { log.warn("No administrator credentials provided, using defaults:\n * Login: root\n * Password: root\n Expected: --admin_login LOGIN --admin_password PASSWORD "); // TODO: Move into properties i18n var adminUser = new User("root", encoder.encode("root"), "SuperAdmin", adminRoleOnlyAthority); users.save(adminUser); diff --git a/src/main/java/ru/redrise/marinesco/User.java b/src/main/java/ru/redrise/marinesco/User.java index 704e50f..815a0c9 100644 --- a/src/main/java/ru/redrise/marinesco/User.java +++ b/src/main/java/ru/redrise/marinesco/User.java @@ -74,8 +74,8 @@ public class User implements UserDetails{ } public boolean isAdmin(){ - for (UserRole athority : authorities){ - if (athority.getAuthority().equals("ROLE_ADMIN")) + for (UserRole authority : authorities){ + if (authority.getAuthority().equals("ROLE_ADMIN")) return true; } return false; diff --git a/src/main/java/ru/redrise/marinesco/UserGenerified.java b/src/main/java/ru/redrise/marinesco/UserGenerified.java index d3be26d..f9c8fc2 100644 --- a/src/main/java/ru/redrise/marinesco/UserGenerified.java +++ b/src/main/java/ru/redrise/marinesco/UserGenerified.java @@ -17,17 +17,17 @@ public class UserGenerified { private String name; private String displayName; - private List athorities; - private List athoritiesLost; + private List authorities; + private List authoritiesLost; private String password; public UserGenerified(User user, List allRolesList){ this.id = user.getId(); this.name = user.getUsername(); this.displayName = user.getDisplayname(); - this.athorities = user.getAuthorities(); - this.athoritiesLost = allRolesList.stream() - .filter(element -> !athorities.contains(element)) + this.authorities = user.getAuthorities(); + this.authoritiesLost = allRolesList.stream() + .filter(element -> !authorities.contains(element)) .collect(Collectors.toList()); } } \ No newline at end of file diff --git a/src/main/java/ru/redrise/marinesco/UserSettingsForm.java b/src/main/java/ru/redrise/marinesco/UserSettingsForm.java index 0e76648..c726774 100644 --- a/src/main/java/ru/redrise/marinesco/UserSettingsForm.java +++ b/src/main/java/ru/redrise/marinesco/UserSettingsForm.java @@ -2,6 +2,7 @@ package ru.redrise.marinesco; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; import lombok.Data; @Data @@ -10,14 +11,11 @@ public class UserSettingsForm { @NotNull @NotEmpty(message = "Display name could not be blank") public String displayname; + @Pattern(regexp = "^[a-zA-Z0-9!#+\"\\-<>%^&*$@]{8,32}$|^$", + message = "Password must be at least 8 characters long. Should not exceed 32 characters") public String newPassword; public boolean isNewPasswordSet(){ return ! newPassword.isBlank(); } - - public boolean isNewPasswordValid(){ - final int newPasswordLength = newPassword.length(); - return newPasswordLength > 8 && newPasswordLength < 32; - } } diff --git a/src/main/java/ru/redrise/marinesco/Validators/LoginOccupiedConstraint.java b/src/main/java/ru/redrise/marinesco/Validators/LoginOccupiedConstraint.java index e06157b..58effce 100644 --- a/src/main/java/ru/redrise/marinesco/Validators/LoginOccupiedConstraint.java +++ b/src/main/java/ru/redrise/marinesco/Validators/LoginOccupiedConstraint.java @@ -14,7 +14,7 @@ import jakarta.validation.Payload; @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface LoginOccupiedConstraint { - String message() default "Login already taken. Please use anohter one."; + String message() default "Login already taken. Please use another one"; Class[] groups() default {}; Class[] payload() default {}; } diff --git a/src/main/java/ru/redrise/marinesco/Validators/LoginOccupiedValidator.java b/src/main/java/ru/redrise/marinesco/Validators/LoginOccupiedValidator.java index 547dbf9..7882e3e 100644 --- a/src/main/java/ru/redrise/marinesco/Validators/LoginOccupiedValidator.java +++ b/src/main/java/ru/redrise/marinesco/Validators/LoginOccupiedValidator.java @@ -12,9 +12,6 @@ public class LoginOccupiedValidator implements ConstraintValidator file.getName().endsWith(".inpx")) .findFirst() .get(); diff --git a/src/main/java/ru/redrise/marinesco/library/RepackZip.java b/src/main/java/ru/redrise/marinesco/library/RepackZip.java index 88cdede..b937820 100644 --- a/src/main/java/ru/redrise/marinesco/library/RepackZip.java +++ b/src/main/java/ru/redrise/marinesco/library/RepackZip.java @@ -86,7 +86,7 @@ public class RepackZip { } } catch (Exception e) { - log.error("{}", e); + log.error(e.toString()); } log.info("Complete: {}", container.getName()); } diff --git a/src/main/java/ru/redrise/marinesco/library/settings/GenreSettingsController.java b/src/main/java/ru/redrise/marinesco/library/settings/GenreSettingsController.java index ebf7107..dcd2c3e 100644 --- a/src/main/java/ru/redrise/marinesco/library/settings/GenreSettingsController.java +++ b/src/main/java/ru/redrise/marinesco/library/settings/GenreSettingsController.java @@ -47,17 +47,14 @@ public class GenreSettingsController { genreRepository.findAll() .iterator() - .forEachRemaining(element -> genres.add(element)); + .forEachRemaining(genres::add); return new GenresHolder(genres); } @PostMapping public String getGenresUpdated(@ModelAttribute GenresHolder genreHolder) { - - for (Genre genre : genreHolder.getGenres()) - genreRepository.save(genre); - + genreHolder.getGenres().forEach(genreRepository::save); return "genres_settings"; } diff --git a/src/main/java/ru/redrise/marinesco/library/settings/GenresUpload.java b/src/main/java/ru/redrise/marinesco/library/settings/GenresUpload.java index bfd001a..ef27450 100644 --- a/src/main/java/ru/redrise/marinesco/library/settings/GenresUpload.java +++ b/src/main/java/ru/redrise/marinesco/library/settings/GenresUpload.java @@ -14,16 +14,15 @@ import ru.redrise.marinesco.library.Genre; @Slf4j public class GenresUpload { - public static String upload(Resource resouce, long fileSize, GenreRepository repository) { - try (BufferedReader reader = new BufferedReader(new InputStreamReader(resouce.getInputStream()))){ + public static String upload(Resource resource, long fileSize, GenreRepository repository) { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(resource.getInputStream()))){ if (fileSize == 0) throw new Exception("empty file"); - String line; - - List genres = new ArrayList<>(); + String line; + List genres = new ArrayList<>(); while ((line = reader.readLine()) != null) { - String arr[] = line.split(":::"); + String[] arr = line.split(":::"); if (arr.length != 2) throw new Exception("Malformed file"); @@ -33,10 +32,10 @@ public class GenresUpload { repository.saveAll(genres); } catch (Exception e) { - log.debug("{}", e); + log.debug(e.toString()); return "Upload failed: " + e.getMessage(); } - return "Successfully uploaded: " + resouce.getFilename(); + return "Successfully uploaded: " + resource.getFilename(); } } diff --git a/src/main/java/ru/redrise/marinesco/library/web/AuthorController.java b/src/main/java/ru/redrise/marinesco/library/web/AuthorController.java index e99a9b5..296c5b9 100644 --- a/src/main/java/ru/redrise/marinesco/library/web/AuthorController.java +++ b/src/main/java/ru/redrise/marinesco/library/web/AuthorController.java @@ -1,6 +1,7 @@ package ru.redrise.marinesco.library.web; import java.util.Collections; +import java.util.Comparator; import java.util.List; import org.springframework.stereotype.Controller; @@ -16,7 +17,7 @@ import ru.redrise.marinesco.library.Book; @Controller @RequestMapping("/author") public class AuthorController { - private AuthorRepository authorRepository; + private final AuthorRepository authorRepository; public AuthorController(AuthorRepository authorRepository){ this.authorRepository = authorRepository; @@ -33,10 +34,10 @@ public class AuthorController { List books = author.getBooks(); - Collections.sort(books, (a, b) -> a.getSeries().compareTo(b.getSeries())); + books.sort(Comparator.comparing(Book::getSeries)); - model.addAttribute("author", author); - model.addAttribute("books", books); + model.addAttribute("author", author) + .addAttribute("books", books); return "author"; } diff --git a/src/main/java/ru/redrise/marinesco/library/web/BookController.java b/src/main/java/ru/redrise/marinesco/library/web/BookController.java index 9885d21..0958dbf 100644 --- a/src/main/java/ru/redrise/marinesco/library/web/BookController.java +++ b/src/main/java/ru/redrise/marinesco/library/web/BookController.java @@ -12,7 +12,7 @@ import ru.redrise.marinesco.library.Book; @Controller @RequestMapping("/book") public class BookController { - private BookRepository bookRepository; + private final BookRepository bookRepository; public BookController(BookRepository bookRepository){ this.bookRepository = bookRepository; @@ -25,6 +25,7 @@ public class BookController { model.addAttribute("Error", "Not found"); return "book"; } + model.addAttribute("book", book); return "book"; } diff --git a/src/main/java/ru/redrise/marinesco/library/web/SearchController.java b/src/main/java/ru/redrise/marinesco/library/web/SearchController.java index 0991d43..6a7565c 100644 --- a/src/main/java/ru/redrise/marinesco/library/web/SearchController.java +++ b/src/main/java/ru/redrise/marinesco/library/web/SearchController.java @@ -19,8 +19,8 @@ import ru.redrise.marinesco.library.Book; @RequestMapping("/search") public class SearchController { - private BookRepository inpEntryRepository; - private AuthorRepository authorRepository; + private final BookRepository inpEntryRepository; + private final AuthorRepository authorRepository; public SearchController(BookRepository bookRepository, AuthorRepository authorRepository){ this.inpEntryRepository = bookRepository; @@ -34,7 +34,7 @@ public class SearchController { @RequestParam(value = "author", required = false) Boolean author, Model model) { - if (search.trim().equals("")) + if (search.trim().isEmpty()) return "search"; model.addAttribute("searchPattern", search); @@ -46,21 +46,21 @@ public class SearchController { if (title != null){ List books = inpEntryRepository.findByTitleContainingIgnoreCase(search); - if (books.size() != 0) + if (!books.isEmpty()) model.addAttribute("books", books); model.addAttribute("isTitle", true); } if (series != null){ List bookSeries = inpEntryRepository.findBySeriesContainingIgnoreCase(search); - if (bookSeries.size() != 0) + if (!bookSeries.isEmpty()) model.addAttribute("series", bookSeries); model.addAttribute("isSeries", true); } if (author != null){ List authors = authorRepository.findByAuthorNameContainingIgnoreCase(search); - if (authors.size() != 0) + if (!authors.isEmpty()) model.addAttribute("authors", authors); model.addAttribute("isAuthor", true); } diff --git a/src/main/java/ru/redrise/marinesco/security/AthorityByIdConverter.java b/src/main/java/ru/redrise/marinesco/security/AthorityByIdConverter.java index 98bd758..6f23ade 100644 --- a/src/main/java/ru/redrise/marinesco/security/AthorityByIdConverter.java +++ b/src/main/java/ru/redrise/marinesco/security/AthorityByIdConverter.java @@ -8,7 +8,7 @@ import ru.redrise.marinesco.data.RolesRepository; @Component public class AthorityByIdConverter implements Converter{ - private RolesRepository rolesRepo; + private final RolesRepository rolesRepo; public AthorityByIdConverter(RolesRepository rolesRepo){ this.rolesRepo = rolesRepo; diff --git a/src/main/java/ru/redrise/marinesco/security/ManageUsersController.java b/src/main/java/ru/redrise/marinesco/security/ManageUsersController.java index a109bb1..8bd39a3 100644 --- a/src/main/java/ru/redrise/marinesco/security/ManageUsersController.java +++ b/src/main/java/ru/redrise/marinesco/security/ManageUsersController.java @@ -40,7 +40,7 @@ public class ManageUsersController { } @ModelAttribute(name = "userGenerified") - public UserGenerified taco() { + public UserGenerified createUserGenerified() { return new UserGenerified(); } @@ -92,7 +92,7 @@ public class ManageUsersController { if (user == null) return "redirect:/settings/manage_users"; - user.setAuthorities(userGenerified.getAthorities()); + user.setAuthorities(userGenerified.getAuthorities()); user.setDisplayname(userGenerified.getDisplayName()); String password = userGenerified.getPassword().trim(); if (! password.trim().isEmpty()) @@ -114,7 +114,7 @@ public class ManageUsersController { } User user = userRepository.save(form.toUser(passwordEncoder)); - log.info("Added user {} {} {}", user.getId(), user.getUsername(), user.getDisplayname(), + log.info("Added user {} {} {} {}", user.getId(), user.getUsername(), user.getDisplayname(), user.getAuthorities().get(0)); // Reloads page therefore new records appears return "redirect:/settings/manage_users"; diff --git a/src/main/java/ru/redrise/marinesco/security/RegistrationController.java b/src/main/java/ru/redrise/marinesco/security/RegistrationController.java index 75578c6..51c370c 100644 --- a/src/main/java/ru/redrise/marinesco/security/RegistrationController.java +++ b/src/main/java/ru/redrise/marinesco/security/RegistrationController.java @@ -21,12 +21,12 @@ import ru.redrise.marinesco.settings.ApplicationSettings; @Controller @RequestMapping("/register") public class RegistrationController { - private UserRepository userRepo; - private RolesRepository rolesRepo; - private PasswordEncoder passwordEncoder; - private HttpServletRequest request; + private final UserRepository userRepo; + private final RolesRepository rolesRepo; + private final PasswordEncoder passwordEncoder; + private final HttpServletRequest request; - private ApplicationSettings applicationSettings; + private final ApplicationSettings applicationSettings; public RegistrationController(UserRepository userRepo, RolesRepository rolesRepo, @@ -54,10 +54,10 @@ public class RegistrationController { @PostMapping public String postMethodName(@Valid RegistrationForm form, Errors errors, Model model) { - if (!applicationSettings.isRegistrationAllowed()) + if (! applicationSettings.isRegistrationAllowed()) return "redirect:/"; if (form.isPasswordsNotEqual()) { - model.addAttribute("passwordsMismatch", "Passwords must be the same."); + model.addAttribute("passwordsMismatch", "Passwords must be the same"); return "registration"; } if (userRepo.findByUsername(form.getUsername()) != null){ diff --git a/src/main/java/ru/redrise/marinesco/security/UserRole.java b/src/main/java/ru/redrise/marinesco/security/UserRole.java index 40e9f18..b9232f7 100644 --- a/src/main/java/ru/redrise/marinesco/security/UserRole.java +++ b/src/main/java/ru/redrise/marinesco/security/UserRole.java @@ -29,14 +29,10 @@ public class UserRole implements GrantedAuthority{ if (type == null) throw new UnsupportedOperationException("Unimplemented method 'getAuthority'"); - switch (type) { - case USER: - return "ROLE_USER"; - case ADMIN: - return "ROLE_ADMIN"; - default: - throw new UnsupportedOperationException("Unimplemented method 'getAuthority'"); - } + return switch (type) { + case USER -> "ROLE_USER"; + case ADMIN -> "ROLE_ADMIN"; + }; } public enum Type{ diff --git a/src/main/java/ru/redrise/marinesco/security/UserSettingsController.java b/src/main/java/ru/redrise/marinesco/security/UserSettingsController.java index f946069..e8bcb31 100644 --- a/src/main/java/ru/redrise/marinesco/security/UserSettingsController.java +++ b/src/main/java/ru/redrise/marinesco/security/UserSettingsController.java @@ -60,19 +60,12 @@ public class UserSettingsController { Model model){ if (errors.hasErrors()) return "user_settings"; - if (! user.getDisplayname().equals(userSettingsForm.getDisplayname())) - user.setDisplayname(userSettingsForm.getDisplayname()); - if (userSettingsForm.isNewPasswordSet()){ - if (userSettingsForm.isNewPasswordValid()){ - user.setPassword(passwordEncoder.encode(userSettingsForm.getNewPassword())); - } - else{ - model.addAttribute("password_incorrect", "Password must be at least 8 characters long. Should not exceed 32 characters."); - return "user_settings"; - } - } - log.info("{} {}", userSettingsForm.getDisplayname(), userSettingsForm.getNewPassword()); + user.setDisplayname(userSettingsForm.getDisplayname()); + + if (userSettingsForm.isNewPasswordSet()) + user.setPassword(passwordEncoder.encode(userSettingsForm.getNewPassword())); + userRepo.save(user); return "redirect:/profile/settings"; diff --git a/src/main/java/ru/redrise/marinesco/settings/SettingsController.java b/src/main/java/ru/redrise/marinesco/settings/SettingsController.java index 23fc993..cfcb303 100644 --- a/src/main/java/ru/redrise/marinesco/settings/SettingsController.java +++ b/src/main/java/ru/redrise/marinesco/settings/SettingsController.java @@ -18,8 +18,8 @@ import ru.redrise.marinesco.library.RepackZip; public class SettingsController { private ApplicationSettings applicationSettings; - private InpxScanner inpxScanner; - private RepackZip repackZip; + private final InpxScanner inpxScanner; + private final RepackZip repackZip; public SettingsController(ApplicationSettings applicationSettings, InpxScanner inpxScanner, diff --git a/src/main/java/ru/redrise/marinesco/web/RoleByIdConverter.java b/src/main/java/ru/redrise/marinesco/web/RoleByIdConverter.java index ad05d56..6685185 100644 --- a/src/main/java/ru/redrise/marinesco/web/RoleByIdConverter.java +++ b/src/main/java/ru/redrise/marinesco/web/RoleByIdConverter.java @@ -9,7 +9,7 @@ import ru.redrise.marinesco.security.UserRole; @Component public class RoleByIdConverter implements Converter{ - private RolesRepository rolesRepository; + private final RolesRepository rolesRepository; public RoleByIdConverter(RolesRepository rolesRepository){ this.rolesRepository = rolesRepository; diff --git a/src/main/resources/templates/user_settings.html b/src/main/resources/templates/user_settings.html index cf7bd9c..e0c1b79 100644 --- a/src/main/resources/templates/user_settings.html +++ b/src/main/resources/templates/user_settings.html @@ -22,10 +22,10 @@
- false + Error
- +