From 816e28134b8e33e92145870e1307392975bf7f7c Mon Sep 17 00:00:00 2001 From: Mubru Date: Fri, 5 Jun 2026 20:24:40 -0300 Subject: [PATCH] refactor: Controller and Service --- .../spg/controller/PasswordController.java | 9 ++- .../spg/service/PasswordService.java | 57 ++++++++++++++----- 2 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src/main/java/github/murillosnds/spg/controller/PasswordController.java b/src/main/java/github/murillosnds/spg/controller/PasswordController.java index b69f317..91a044b 100644 --- a/src/main/java/github/murillosnds/spg/controller/PasswordController.java +++ b/src/main/java/github/murillosnds/spg/controller/PasswordController.java @@ -16,10 +16,9 @@ public PasswordController(PasswordService passwordService) { } @GetMapping("/api/password") - public PasswordResponse generatePassword(@RequestParam(defaultValue = "12") int length) { - - String password = passwordService.generatePassword(length); + public PasswordResponse generatePassword(@RequestParam(defaultValue = "12") int length) { + String password = passwordService.generatePassword(length); + return new PasswordResponse(password, length); + } - return new PasswordResponse(password, length); - } } \ No newline at end of file diff --git a/src/main/java/github/murillosnds/spg/service/PasswordService.java b/src/main/java/github/murillosnds/spg/service/PasswordService.java index 2994703..0fbffd0 100644 --- a/src/main/java/github/murillosnds/spg/service/PasswordService.java +++ b/src/main/java/github/murillosnds/spg/service/PasswordService.java @@ -1,40 +1,67 @@ package github.murillosnds.spg.service; -import org.passay.CharacterRule; import org.passay.CharacterData; +import org.passay.CharacterRule; import org.passay.EnglishCharacterData; import org.passay.PasswordGenerator; import org.springframework.stereotype.Service; + import java.util.Arrays; import java.util.List; @Service public class PasswordService { + private static final int MIN_LENGTH = 12; + private static final int MAX_LENGTH = 256; + private static final int COUNT_PER_RULE = 2; + private static final String SPECIAL_CHARACTERS = "!@#$%^&*()_+"; + + private final PasswordGenerator passwordGenerator; + + public PasswordService() { + this(new PasswordGenerator()); + } + + public PasswordService(PasswordGenerator passwordGenerator) { + this.passwordGenerator = passwordGenerator; + } + public String generatePassword(int length) { + validateLength(length); + + List rules = buildRules(); + return passwordGenerator.generatePassword(length, rules); + } - if (length < 12 || length > 256) { + private void validateLength(int length) { + if (length < MIN_LENGTH || length > MAX_LENGTH) { throw new IllegalArgumentException( - "The size must be between 12 and 256" + "The size must be between " + MIN_LENGTH + " and " + MAX_LENGTH ); } + } - PasswordGenerator gen = new PasswordGenerator(); - - CharacterRule lowercase = new CharacterRule(EnglishCharacterData.LowerCase, 2); - CharacterRule uppercase = new CharacterRule(EnglishCharacterData.UpperCase, 2); - CharacterRule digit = new CharacterRule(EnglishCharacterData.Digit, 2); + private List buildRules() { + CharacterRule lowercase = new CharacterRule(EnglishCharacterData.LowerCase, COUNT_PER_RULE); + CharacterRule uppercase = new CharacterRule(EnglishCharacterData.UpperCase, COUNT_PER_RULE); + CharacterRule digit = new CharacterRule(EnglishCharacterData.Digit, COUNT_PER_RULE); CharacterData specialChars = new CharacterData() { - public String getErrorCode() { return "ERR_SPECIAL"; } - public String getCharacters() { return "!@#$%^&*()_+"; } - }; - CharacterRule special = new CharacterRule(specialChars, 2); + @Override + public String getErrorCode() { + return "ERR_SPECIAL"; + } - List rules = Arrays.asList(lowercase, uppercase, digit, special); + @Override + public String getCharacters() { + return SPECIAL_CHARACTERS; + } + }; - return gen.generatePassword(length, rules); + CharacterRule special = new CharacterRule(specialChars, COUNT_PER_RULE); - + return Arrays.asList(lowercase, uppercase, digit, special); } } +