From 60b64054098c938345b22c78d2be5e54f9cc8fd2 Mon Sep 17 00:00:00 2001 From: zangsu Date: Wed, 4 Sep 2024 17:12:10 +0900 Subject: [PATCH 01/12] =?UTF-8?q?feat:=20=EB=9E=9C=EB=8D=A4=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20Salt=20=EA=B0=92=EC=9D=84=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../codezap/secure/RandomSaltGenerator.java | 18 +++++++++++++ .../java/codezap/secure/SaltGenerator.java | 5 ++++ .../codezap/secure/SaltGeneratorTest.java | 25 +++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 backend/src/main/java/codezap/secure/RandomSaltGenerator.java create mode 100644 backend/src/main/java/codezap/secure/SaltGenerator.java create mode 100644 backend/src/test/java/codezap/secure/SaltGeneratorTest.java diff --git a/backend/src/main/java/codezap/secure/RandomSaltGenerator.java b/backend/src/main/java/codezap/secure/RandomSaltGenerator.java new file mode 100644 index 000000000..7f4f9db88 --- /dev/null +++ b/backend/src/main/java/codezap/secure/RandomSaltGenerator.java @@ -0,0 +1,18 @@ +package codezap.secure; + +import java.security.SecureRandom; +import java.util.Base64; + +import org.springframework.stereotype.Component; + +@Component +public class RandomSaltGenerator implements SaltGenerator { + + @Override + public String getSalt() { + SecureRandom byteGenerator = new SecureRandom(); + byte[] saltByte = new byte[32]; + byteGenerator.nextBytes(saltByte); + return Base64.getEncoder().encodeToString(saltByte); + } +} diff --git a/backend/src/main/java/codezap/secure/SaltGenerator.java b/backend/src/main/java/codezap/secure/SaltGenerator.java new file mode 100644 index 000000000..de2929d25 --- /dev/null +++ b/backend/src/main/java/codezap/secure/SaltGenerator.java @@ -0,0 +1,5 @@ +package codezap.secure; + +public interface SaltGenerator { + String getSalt(); +} diff --git a/backend/src/test/java/codezap/secure/SaltGeneratorTest.java b/backend/src/test/java/codezap/secure/SaltGeneratorTest.java new file mode 100644 index 000000000..f6bfb5f26 --- /dev/null +++ b/backend/src/test/java/codezap/secure/SaltGeneratorTest.java @@ -0,0 +1,25 @@ +package codezap.secure; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.HashSet; +import java.util.Set; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class SaltGeneratorTest { + + SaltGenerator saltGenerator = new RandomSaltGenerator(); + + @Test + @DisplayName("1,000,000번의 난수 생성에서 난수 충돌이 발생하지 않는다.") + void test() { + Set salts = new HashSet<>(); + for (int i = 0; i < 1_000_000; i++) { + salts.add(saltGenerator.getSalt()); + } + + assertThat(salts).hasSize(1_000_000); + } +} From cbdafe7966037fd4b067d4b9c0852afc7c9c4f9f Mon Sep 17 00:00:00 2001 From: zangsu Date: Wed, 4 Sep 2024 17:21:40 +0900 Subject: [PATCH 02/12] =?UTF-8?q?feat:=20Member=20=EC=97=90=20salt=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80=20-=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EA=B0=80=20=EB=8F=8C=EC=95=84=EA=B0=88=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/java/codezap/member/domain/Member.java | 7 +++++-- .../main/java/codezap/member/service/MemberService.java | 4 +++- backend/src/test/java/codezap/fixture/MemberFixture.java | 6 ++++-- .../test/java/codezap/member/fixture/MemberFixture.java | 6 ++++-- .../codezap/member/repository/FakeMemberRepository.java | 3 ++- .../java/codezap/member/service/MemberServiceTest.java | 5 ++++- .../template/controller/TemplateControllerTest.java | 6 +++++- .../template/repository/TemplateRepositoryFindAllTest.java | 4 ++-- 8 files changed, 29 insertions(+), 12 deletions(-) diff --git a/backend/src/main/java/codezap/member/domain/Member.java b/backend/src/main/java/codezap/member/domain/Member.java index 331bdd10b..b8db790fb 100644 --- a/backend/src/main/java/codezap/member/domain/Member.java +++ b/backend/src/main/java/codezap/member/domain/Member.java @@ -30,8 +30,11 @@ public class Member extends BaseTimeEntity { @Column(nullable = false) private String password; - public Member(String name, String password) { - this(null, name, password); + @Column(nullable = false) + private String salt; + + public Member(String name, String password, String salt) { + this(null, name, password, salt); } public boolean matchPassword(String password) { diff --git a/backend/src/main/java/codezap/member/service/MemberService.java b/backend/src/main/java/codezap/member/service/MemberService.java index ff2426b8f..ba93b12eb 100644 --- a/backend/src/main/java/codezap/member/service/MemberService.java +++ b/backend/src/main/java/codezap/member/service/MemberService.java @@ -13,6 +13,7 @@ import codezap.member.dto.request.SignupRequest; import codezap.member.dto.response.FindMemberResponse; import codezap.member.repository.MemberRepository; +import codezap.secure.SaltGenerator; import lombok.RequiredArgsConstructor; @Service @@ -21,10 +22,11 @@ public class MemberService { private final MemberRepository memberRepository; private final CategoryRepository categoryRepository; + private final SaltGenerator saltGenerator; public Long signup(SignupRequest request) { assertUniqueName(request.name()); - Member member = memberRepository.save(new Member(request.name(), request.password())); + Member member = memberRepository.save(new Member(request.name(), request.password(), saltGenerator.getSalt())); categoryRepository.save(Category.createDefaultCategory(member)); return member.getId(); } diff --git a/backend/src/test/java/codezap/fixture/MemberFixture.java b/backend/src/test/java/codezap/fixture/MemberFixture.java index 00b65f804..c4a11198a 100644 --- a/backend/src/test/java/codezap/fixture/MemberFixture.java +++ b/backend/src/test/java/codezap/fixture/MemberFixture.java @@ -7,7 +7,8 @@ public static Member getFirstMember() { return new Member( 1L, "몰리", - "password1234" + "password1234", + "salt1" ); } @@ -15,7 +16,8 @@ public static Member getSecondMember() { return new Member( 2L, "몰리2", - "password1234" + "password1234", + "salt2" ); } } diff --git a/backend/src/test/java/codezap/member/fixture/MemberFixture.java b/backend/src/test/java/codezap/member/fixture/MemberFixture.java index b8d4b9d37..6ecbe488c 100644 --- a/backend/src/test/java/codezap/member/fixture/MemberFixture.java +++ b/backend/src/test/java/codezap/member/fixture/MemberFixture.java @@ -8,14 +8,16 @@ public static Member memberFixture() { return new Member( 1L, "몰리", - "password1234" + "password1234", + "salt" ); } public static Member createFixture(String name) { return new Member( name, - "password1234" + "password1234", + "salt" ); } } diff --git a/backend/src/test/java/codezap/member/repository/FakeMemberRepository.java b/backend/src/test/java/codezap/member/repository/FakeMemberRepository.java index f6600efaa..bb0223955 100644 --- a/backend/src/test/java/codezap/member/repository/FakeMemberRepository.java +++ b/backend/src/test/java/codezap/member/repository/FakeMemberRepository.java @@ -56,7 +56,8 @@ public Member save(Member entity) { var saved = new Member( getOrGenerateId(entity), entity.getPassword(), - entity.getName() + entity.getName(), + entity.getSalt() ); members.removeIf(member -> Objects.equals(member.getId(), entity.getId())); members.add(saved); diff --git a/backend/src/test/java/codezap/member/service/MemberServiceTest.java b/backend/src/test/java/codezap/member/service/MemberServiceTest.java index ba55ce591..1b84a1247 100644 --- a/backend/src/test/java/codezap/member/service/MemberServiceTest.java +++ b/backend/src/test/java/codezap/member/service/MemberServiceTest.java @@ -19,12 +19,15 @@ import codezap.member.fixture.MemberFixture; import codezap.member.repository.FakeMemberRepository; import codezap.member.repository.MemberRepository; +import codezap.secure.RandomSaltGenerator; +import codezap.secure.SaltGenerator; public class MemberServiceTest { private final MemberRepository memberRepository = new FakeMemberRepository(); private final CategoryRepository categoryRepository = new FakeCategoryRepository(); - private final MemberService memberService = new MemberService(memberRepository, categoryRepository); + private final SaltGenerator saltGenerator = new RandomSaltGenerator(); + private final MemberService memberService = new MemberService(memberRepository, categoryRepository, saltGenerator); @Nested @DisplayName("회원가입 테스트") diff --git a/backend/src/test/java/codezap/template/controller/TemplateControllerTest.java b/backend/src/test/java/codezap/template/controller/TemplateControllerTest.java index 448b90e53..bf7007ed4 100644 --- a/backend/src/test/java/codezap/template/controller/TemplateControllerTest.java +++ b/backend/src/test/java/codezap/template/controller/TemplateControllerTest.java @@ -40,6 +40,8 @@ import codezap.member.repository.FakeMemberRepository; import codezap.member.repository.MemberRepository; import codezap.member.service.MemberService; +import codezap.secure.RandomSaltGenerator; +import codezap.secure.SaltGenerator; import codezap.tag.service.TemplateTagService; import codezap.template.dto.request.CreateSourceCodeRequest; import codezap.template.dto.request.CreateTemplateRequest; @@ -69,6 +71,8 @@ class TemplateControllerTest { private final MemberRepository memberRepository = new FakeMemberRepository( List.of(MemberFixture.getFirstMember(), MemberFixture.getSecondMember()) ); + + private final SaltGenerator saltGenerator = new RandomSaltGenerator(); private final TemplateService templateService = new TemplateService(templateRepository); private final CategoryService categoryService = new CategoryService(categoryRepository); @@ -91,7 +95,7 @@ class TemplateControllerTest { private final MemberTemplateApplicationService memberTemplateApplicationService = new MemberTemplateApplicationService( - new MemberService(memberRepository, categoryRepository), + new MemberService(memberRepository, categoryRepository, saltGenerator), categoryTemplateApplicationService, templateApplicationService ); diff --git a/backend/src/test/java/codezap/template/repository/TemplateRepositoryFindAllTest.java b/backend/src/test/java/codezap/template/repository/TemplateRepositoryFindAllTest.java index cc6f2d906..2cb136779 100644 --- a/backend/src/test/java/codezap/template/repository/TemplateRepositoryFindAllTest.java +++ b/backend/src/test/java/codezap/template/repository/TemplateRepositoryFindAllTest.java @@ -44,8 +44,8 @@ class TemplateRepositoryFindAllTest { @BeforeEach void setUp() { - member1 = memberRepository.save(new Member("user1@test.com", "pp")); - member2 = memberRepository.save(new Member("user2@test.com", "pp")); + member1 = memberRepository.save(new Member("user1@test.com", "pp", "salt1")); + member2 = memberRepository.save(new Member("user2@test.com", "pp", "salt2")); category1 = categoryRepository.save(new Category("Category 1", member1)); category2 = categoryRepository.save(new Category("Category 2", member1)); From 512a34a6e3eb9e466d7052eb0875cfa8c7f65b16 Mon Sep 17 00:00:00 2001 From: zangsu Date: Wed, 4 Sep 2024 17:21:56 +0900 Subject: [PATCH 03/12] =?UTF-8?q?test:=20=EB=82=9C=EC=88=98=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=AC=B4=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/test/java/codezap/secure/SaltGeneratorTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/src/test/java/codezap/secure/SaltGeneratorTest.java b/backend/src/test/java/codezap/secure/SaltGeneratorTest.java index f6bfb5f26..91f624c4b 100644 --- a/backend/src/test/java/codezap/secure/SaltGeneratorTest.java +++ b/backend/src/test/java/codezap/secure/SaltGeneratorTest.java @@ -5,6 +5,7 @@ import java.util.HashSet; import java.util.Set; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -14,6 +15,7 @@ class SaltGeneratorTest { @Test @DisplayName("1,000,000번의 난수 생성에서 난수 충돌이 발생하지 않는다.") + @Disabled void test() { Set salts = new HashSet<>(); for (int i = 0; i < 1_000_000; i++) { From 4959ec813d39381d34cd2d5d1bbbdeea579f3d7a Mon Sep 17 00:00:00 2001 From: zangsu Date: Wed, 4 Sep 2024 17:35:45 +0900 Subject: [PATCH 04/12] =?UTF-8?q?refactor:=20Member.salt=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20?= =?UTF-8?q?flyway=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/resources/db/migration/V2__add_salt.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 backend/src/main/resources/db/migration/V2__add_salt.sql diff --git a/backend/src/main/resources/db/migration/V2__add_salt.sql b/backend/src/main/resources/db/migration/V2__add_salt.sql new file mode 100644 index 000000000..a783c9bd4 --- /dev/null +++ b/backend/src/main/resources/db/migration/V2__add_salt.sql @@ -0,0 +1 @@ +ALTER TABLE member ADD COLUMN salt VARCHAR(255); From 36c3698b5f42091efa0fe9e9a4b5846addff9012 Mon Sep 17 00:00:00 2001 From: zangsu Date: Wed, 4 Sep 2024 17:12:10 +0900 Subject: [PATCH 05/12] =?UTF-8?q?test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=9E=98=EB=AA=BB=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EB=90=98=EA=B3=A0=20=EC=9E=88=EB=8A=94=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=9E=90=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../codezap/tag/repository/TemplateTagJpaRepositoryTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/test/java/codezap/tag/repository/TemplateTagJpaRepositoryTest.java b/backend/src/test/java/codezap/tag/repository/TemplateTagJpaRepositoryTest.java index 0148c561d..43d2dde8d 100644 --- a/backend/src/test/java/codezap/tag/repository/TemplateTagJpaRepositoryTest.java +++ b/backend/src/test/java/codezap/tag/repository/TemplateTagJpaRepositoryTest.java @@ -38,8 +38,8 @@ class TemplateTagJpaRepositoryTest { @BeforeEach void setUp() { - member1 = memberRepository.save(new Member("user1@test.com", "pp")); - member2 = memberRepository.save(new Member("user2@test.com", "pp")); + member1 = memberRepository.save(new Member("user1@test.com", "pp", "salt1")); + member2 = memberRepository.save(new Member("user2@test.com", "pp", "salt2")); category1 = categoryRepository.save(new Category("Category 1", member1)); category2 = categoryRepository.save(new Category("Category 2", member1)); From c8205d3e958943bebc50cf016803e21e916e9109 Mon Sep 17 00:00:00 2001 From: zangsu Date: Wed, 4 Sep 2024 18:37:03 +0900 Subject: [PATCH 06/12] =?UTF-8?q?feat:=20SHA-256=20=EC=95=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=EC=A6=98=EC=9C=BC=EB=A1=9C=20=EC=95=94=ED=98=B8?= =?UTF-8?q?=ED=99=94=20=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../codezap/secure/PasswordEncryptor.java | 5 ++ .../codezap/secure/SHA2PasswordEncryptor.java | 31 +++++++++++ .../secure/SHA2PasswordEncryptorTest.java | 55 +++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 backend/src/main/java/codezap/secure/PasswordEncryptor.java create mode 100644 backend/src/main/java/codezap/secure/SHA2PasswordEncryptor.java create mode 100644 backend/src/test/java/codezap/secure/SHA2PasswordEncryptorTest.java diff --git a/backend/src/main/java/codezap/secure/PasswordEncryptor.java b/backend/src/main/java/codezap/secure/PasswordEncryptor.java new file mode 100644 index 000000000..0dd1d5f8e --- /dev/null +++ b/backend/src/main/java/codezap/secure/PasswordEncryptor.java @@ -0,0 +1,5 @@ +package codezap.secure; + +public interface PasswordEncryptor { + String encrypt(String plainPassword, String salt); +} diff --git a/backend/src/main/java/codezap/secure/SHA2PasswordEncryptor.java b/backend/src/main/java/codezap/secure/SHA2PasswordEncryptor.java new file mode 100644 index 000000000..de121b5d0 --- /dev/null +++ b/backend/src/main/java/codezap/secure/SHA2PasswordEncryptor.java @@ -0,0 +1,31 @@ +package codezap.secure; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Base64; + +import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; +import org.springframework.stereotype.Component; + +import codezap.global.exception.CodeZapException; + +@Component +public class SHA2PasswordEncryptor implements PasswordEncryptor { + private final MessageDigest digest; + + public SHA2PasswordEncryptor() { + try { + digest = MessageDigest.getInstance("SHA-256"); + } catch (NoSuchAlgorithmException e) { + throw new CodeZapException(HttpStatus.INTERNAL_SERVER_ERROR, "암호화 알고리즘이 잘못 명시되었습니다."); + } + } + + @Override + public String encrypt(String plainPassword, String salt) { + String passwordWithSalt = plainPassword + salt; + byte[] encryptByte = digest.digest(passwordWithSalt.getBytes()); + return Base64.getEncoder().encodeToString(encryptByte); + } +} diff --git a/backend/src/test/java/codezap/secure/SHA2PasswordEncryptorTest.java b/backend/src/test/java/codezap/secure/SHA2PasswordEncryptorTest.java new file mode 100644 index 000000000..93bc8c6e2 --- /dev/null +++ b/backend/src/test/java/codezap/secure/SHA2PasswordEncryptorTest.java @@ -0,0 +1,55 @@ +package codezap.secure; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class SHA2PasswordEncryptorTest { + + private final PasswordEncryptor passwordEncryptor = new SHA2PasswordEncryptor(); + + @Test + @DisplayName("성공 : 동일한 평문으로 여러번 암호화를 해도 똑같은 암호가 나온다.") + void encryptTest() { + //given + String password = "password"; + String salt = "salt"; + + //when + String firstCipherText = passwordEncryptor.encrypt(password, salt); + String secondCipherText = passwordEncryptor.encrypt(password, salt); + + //then + assertThat(firstCipherText).isEqualTo(secondCipherText); + } + + @Test + @DisplayName("성공 : 동일한 평문, 다른 salt 값을 사용하면 다른 암호문이 나온다.") + void encryptTestWithDifferentSalt() { + //given + String password = "password"; + + //when + String firstCipherText = passwordEncryptor.encrypt(password, "salt"); + String secondCipherText = passwordEncryptor.encrypt(password, "otherSalt"); + + //then + assertThat(firstCipherText).isNotEqualTo(secondCipherText); + } + + @Test + @DisplayName("성공 : 동일한 salt 값, 다른 평문을 사용하면 다른 암호문이 나온다.") + void encryptTestWithDifferentPassword() { + //given + String salt = "salt"; + + //when + String firstCipherText = passwordEncryptor.encrypt("password1", salt); + String secondCipherText = passwordEncryptor.encrypt("password2", salt); + + //then + assertThat(firstCipherText).isNotEqualTo(secondCipherText); + } +} From 766763594ee894660ff2a51773969a62c1ee3063 Mon Sep 17 00:00:00 2001 From: zangsu Date: Thu, 5 Sep 2024 11:09:50 +0900 Subject: [PATCH 07/12] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85,=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=8B=9C=20?= =?UTF-8?q?=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8=EB=A5=BC=20=EC=95=94?= =?UTF-8?q?=ED=98=B8=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/codezap/auth/service/AuthService.java | 6 +++++- .../java/codezap/member/service/MemberService.java | 6 +++++- .../java/codezap/auth/service/AuthServiceTest.java | 7 +++++-- .../java/codezap/member/fixture/MemberFixture.java | 11 ++++++++++- .../member/repository/FakeMemberRepository.java | 2 +- .../codezap/member/service/MemberServiceTest.java | 5 ++++- .../template/controller/TemplateControllerTest.java | 5 ++++- 7 files changed, 34 insertions(+), 8 deletions(-) diff --git a/backend/src/main/java/codezap/auth/service/AuthService.java b/backend/src/main/java/codezap/auth/service/AuthService.java index 122dab813..f0fc381c2 100644 --- a/backend/src/main/java/codezap/auth/service/AuthService.java +++ b/backend/src/main/java/codezap/auth/service/AuthService.java @@ -10,6 +10,7 @@ import codezap.global.exception.CodeZapException; import codezap.member.domain.Member; import codezap.member.repository.MemberRepository; +import codezap.secure.PasswordEncryptor; import lombok.RequiredArgsConstructor; @Service @@ -18,6 +19,7 @@ public class AuthService { private final CredentialProvider credentialProvider; private final MemberRepository memberRepository; + private final PasswordEncryptor passwordEncryptor; public LoginAndCredentialDto login(LoginRequest loginRequest) { Member member = getVerifiedMember(loginRequest.name(), loginRequest.password()); @@ -32,7 +34,9 @@ private Member getVerifiedMember(String name, String password) { } private void validateCorrectPassword(Member member, String password) { - if (!member.matchPassword(password)) { + String salt = member.getSalt(); + String encryptedPassword = passwordEncryptor.encrypt(password, salt); + if (!member.matchPassword(encryptedPassword)) { throw new CodeZapException(HttpStatus.UNAUTHORIZED, "로그인에 실패하였습니다. 아이디 또는 비밀번호를 확인해주세요."); } } diff --git a/backend/src/main/java/codezap/member/service/MemberService.java b/backend/src/main/java/codezap/member/service/MemberService.java index ba93b12eb..c21a9bdbc 100644 --- a/backend/src/main/java/codezap/member/service/MemberService.java +++ b/backend/src/main/java/codezap/member/service/MemberService.java @@ -13,6 +13,7 @@ import codezap.member.dto.request.SignupRequest; import codezap.member.dto.response.FindMemberResponse; import codezap.member.repository.MemberRepository; +import codezap.secure.PasswordEncryptor; import codezap.secure.SaltGenerator; import lombok.RequiredArgsConstructor; @@ -23,10 +24,13 @@ public class MemberService { private final MemberRepository memberRepository; private final CategoryRepository categoryRepository; private final SaltGenerator saltGenerator; + private final PasswordEncryptor passwordEncryptor; public Long signup(SignupRequest request) { assertUniqueName(request.name()); - Member member = memberRepository.save(new Member(request.name(), request.password(), saltGenerator.getSalt())); + String salt = saltGenerator.getSalt(); + String encryptedPassword = passwordEncryptor.encrypt(request.password(), salt); + Member member = memberRepository.save(new Member(request.name(), encryptedPassword, salt)); categoryRepository.save(Category.createDefaultCategory(member)); return member.getId(); } diff --git a/backend/src/test/java/codezap/auth/service/AuthServiceTest.java b/backend/src/test/java/codezap/auth/service/AuthServiceTest.java index 32a6ebfd2..9dd9bd949 100644 --- a/backend/src/test/java/codezap/auth/service/AuthServiceTest.java +++ b/backend/src/test/java/codezap/auth/service/AuthServiceTest.java @@ -22,11 +22,14 @@ import codezap.member.fixture.MemberFixture; import codezap.member.repository.FakeMemberRepository; import codezap.member.repository.MemberRepository; +import codezap.secure.PasswordEncryptor; +import codezap.secure.SHA2PasswordEncryptor; public class AuthServiceTest { private final MemberRepository memberRepository = new FakeMemberRepository(); + private final PasswordEncryptor passwordEncryptor = new SHA2PasswordEncryptor(); private final CredentialProvider credentialProvider = new BasicAuthCredentialProvider(memberRepository); - private final AuthService authService = new AuthService(credentialProvider, memberRepository); + private final AuthService authService = new AuthService(credentialProvider, memberRepository, passwordEncryptor); @Nested @DisplayName("로그인 테스트") @@ -36,7 +39,7 @@ class LoginTest { @DisplayName("로그인 성공") void login() { Member member = memberRepository.save(MemberFixture.memberFixture()); - LoginRequest loginRequest = new LoginRequest(member.getName(), member.getPassword()); + LoginRequest loginRequest = new LoginRequest(member.getName(), MemberFixture.getFixturePlainPassword()); LoginAndCredentialDto loginAndCredentialDto = authService.login(loginRequest); diff --git a/backend/src/test/java/codezap/member/fixture/MemberFixture.java b/backend/src/test/java/codezap/member/fixture/MemberFixture.java index 6ecbe488c..8c48034d3 100644 --- a/backend/src/test/java/codezap/member/fixture/MemberFixture.java +++ b/backend/src/test/java/codezap/member/fixture/MemberFixture.java @@ -1,18 +1,27 @@ package codezap.member.fixture; import codezap.member.domain.Member; +import codezap.secure.PasswordEncryptor; +import codezap.secure.SHA2PasswordEncryptor; public class MemberFixture { + private static final PasswordEncryptor passwordEncryptor = new SHA2PasswordEncryptor(); + public static Member memberFixture() { + String encrypted = passwordEncryptor.encrypt(getFixturePlainPassword(), "salt"); return new Member( 1L, "몰리", - "password1234", + encrypted, "salt" ); } + public static String getFixturePlainPassword() { + return "password1234"; + } + public static Member createFixture(String name) { return new Member( name, diff --git a/backend/src/test/java/codezap/member/repository/FakeMemberRepository.java b/backend/src/test/java/codezap/member/repository/FakeMemberRepository.java index bb0223955..2ef607fa2 100644 --- a/backend/src/test/java/codezap/member/repository/FakeMemberRepository.java +++ b/backend/src/test/java/codezap/member/repository/FakeMemberRepository.java @@ -55,8 +55,8 @@ public boolean existsByName(String name) { public Member save(Member entity) { var saved = new Member( getOrGenerateId(entity), - entity.getPassword(), entity.getName(), + entity.getPassword(), entity.getSalt() ); members.removeIf(member -> Objects.equals(member.getId(), entity.getId())); diff --git a/backend/src/test/java/codezap/member/service/MemberServiceTest.java b/backend/src/test/java/codezap/member/service/MemberServiceTest.java index 1b84a1247..379fe77e5 100644 --- a/backend/src/test/java/codezap/member/service/MemberServiceTest.java +++ b/backend/src/test/java/codezap/member/service/MemberServiceTest.java @@ -19,7 +19,9 @@ import codezap.member.fixture.MemberFixture; import codezap.member.repository.FakeMemberRepository; import codezap.member.repository.MemberRepository; +import codezap.secure.PasswordEncryptor; import codezap.secure.RandomSaltGenerator; +import codezap.secure.SHA2PasswordEncryptor; import codezap.secure.SaltGenerator; public class MemberServiceTest { @@ -27,7 +29,8 @@ public class MemberServiceTest { private final MemberRepository memberRepository = new FakeMemberRepository(); private final CategoryRepository categoryRepository = new FakeCategoryRepository(); private final SaltGenerator saltGenerator = new RandomSaltGenerator(); - private final MemberService memberService = new MemberService(memberRepository, categoryRepository, saltGenerator); + private final PasswordEncryptor passwordEncryptor = new SHA2PasswordEncryptor(); + private final MemberService memberService = new MemberService(memberRepository, categoryRepository, saltGenerator, passwordEncryptor); @Nested @DisplayName("회원가입 테스트") diff --git a/backend/src/test/java/codezap/template/controller/TemplateControllerTest.java b/backend/src/test/java/codezap/template/controller/TemplateControllerTest.java index bf7007ed4..76a0f1622 100644 --- a/backend/src/test/java/codezap/template/controller/TemplateControllerTest.java +++ b/backend/src/test/java/codezap/template/controller/TemplateControllerTest.java @@ -40,7 +40,9 @@ import codezap.member.repository.FakeMemberRepository; import codezap.member.repository.MemberRepository; import codezap.member.service.MemberService; +import codezap.secure.PasswordEncryptor; import codezap.secure.RandomSaltGenerator; +import codezap.secure.SHA2PasswordEncryptor; import codezap.secure.SaltGenerator; import codezap.tag.service.TemplateTagService; import codezap.template.dto.request.CreateSourceCodeRequest; @@ -73,6 +75,7 @@ class TemplateControllerTest { ); private final SaltGenerator saltGenerator = new RandomSaltGenerator(); + private final PasswordEncryptor passwordEncryptor = new SHA2PasswordEncryptor(); private final TemplateService templateService = new TemplateService(templateRepository); private final CategoryService categoryService = new CategoryService(categoryRepository); @@ -95,7 +98,7 @@ class TemplateControllerTest { private final MemberTemplateApplicationService memberTemplateApplicationService = new MemberTemplateApplicationService( - new MemberService(memberRepository, categoryRepository, saltGenerator), + new MemberService(memberRepository, categoryRepository, saltGenerator, passwordEncryptor), categoryTemplateApplicationService, templateApplicationService ); From 4f1944ade695e0cff2f5164b5e491316d7315488 Mon Sep 17 00:00:00 2001 From: zangsu Date: Thu, 5 Sep 2024 11:22:49 +0900 Subject: [PATCH 08/12] =?UTF-8?q?test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=9D=B4=EB=A6=84=EC=9D=84=20?= =?UTF-8?q?=EC=A7=81=EA=B4=80=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/test/java/codezap/secure/SaltGeneratorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/test/java/codezap/secure/SaltGeneratorTest.java b/backend/src/test/java/codezap/secure/SaltGeneratorTest.java index 91f624c4b..9d84c8c7e 100644 --- a/backend/src/test/java/codezap/secure/SaltGeneratorTest.java +++ b/backend/src/test/java/codezap/secure/SaltGeneratorTest.java @@ -9,7 +9,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -class SaltGeneratorTest { +class RandomSaltGeneratorTest { SaltGenerator saltGenerator = new RandomSaltGenerator(); From 33185a11b297717af9c8f6eb6d518543b12c0079 Mon Sep 17 00:00:00 2001 From: zangsu Date: Thu, 5 Sep 2024 11:24:40 +0900 Subject: [PATCH 09/12] =?UTF-8?q?test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=9D=B4=EB=A6=84=EC=9D=84=20?= =?UTF-8?q?=EC=A7=81=EA=B4=80=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/test/java/codezap/secure/SaltGeneratorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/test/java/codezap/secure/SaltGeneratorTest.java b/backend/src/test/java/codezap/secure/SaltGeneratorTest.java index 9d84c8c7e..ac6efee51 100644 --- a/backend/src/test/java/codezap/secure/SaltGeneratorTest.java +++ b/backend/src/test/java/codezap/secure/SaltGeneratorTest.java @@ -16,7 +16,7 @@ class RandomSaltGeneratorTest { @Test @DisplayName("1,000,000번의 난수 생성에서 난수 충돌이 발생하지 않는다.") @Disabled - void test() { + void randomGeneratorCollisionTest() { Set salts = new HashSet<>(); for (int i = 0; i < 1_000_000; i++) { salts.add(saltGenerator.getSalt()); From 83f87d49574364fd97a73230dbcd16a4f9e15f81 Mon Sep 17 00:00:00 2001 From: zangsu Date: Thu, 5 Sep 2024 11:28:18 +0900 Subject: [PATCH 10/12] =?UTF-8?q?refactor:=20SaltGenerator=20=EB=A5=BC=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=ED=98=95=20=EC=9D=B8=ED=84=B0=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=EB=A1=9C=20=EB=AA=85=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/java/codezap/secure/SaltGenerator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/main/java/codezap/secure/SaltGenerator.java b/backend/src/main/java/codezap/secure/SaltGenerator.java index de2929d25..4124ede87 100644 --- a/backend/src/main/java/codezap/secure/SaltGenerator.java +++ b/backend/src/main/java/codezap/secure/SaltGenerator.java @@ -1,5 +1,6 @@ package codezap.secure; +@FunctionalInterface public interface SaltGenerator { String getSalt(); } From 2dbb961f60e4ce496d2c802f9691d24965060473 Mon Sep 17 00:00:00 2001 From: zangsu Date: Thu, 5 Sep 2024 13:27:32 +0900 Subject: [PATCH 11/12] =?UTF-8?q?refactor:=20SaltGenerator=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EB=AA=85=EC=9D=84=20=EC=A7=81=EA=B4=80?= =?UTF-8?q?=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/java/codezap/member/service/MemberService.java | 2 +- backend/src/main/java/codezap/secure/RandomSaltGenerator.java | 2 +- backend/src/main/java/codezap/secure/SaltGenerator.java | 2 +- .../{SaltGeneratorTest.java => RandomSaltGeneratorTest.java} | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename backend/src/test/java/codezap/secure/{SaltGeneratorTest.java => RandomSaltGeneratorTest.java} (93%) diff --git a/backend/src/main/java/codezap/member/service/MemberService.java b/backend/src/main/java/codezap/member/service/MemberService.java index c21a9bdbc..5330a01df 100644 --- a/backend/src/main/java/codezap/member/service/MemberService.java +++ b/backend/src/main/java/codezap/member/service/MemberService.java @@ -28,7 +28,7 @@ public class MemberService { public Long signup(SignupRequest request) { assertUniqueName(request.name()); - String salt = saltGenerator.getSalt(); + String salt = saltGenerator.generate(); String encryptedPassword = passwordEncryptor.encrypt(request.password(), salt); Member member = memberRepository.save(new Member(request.name(), encryptedPassword, salt)); categoryRepository.save(Category.createDefaultCategory(member)); diff --git a/backend/src/main/java/codezap/secure/RandomSaltGenerator.java b/backend/src/main/java/codezap/secure/RandomSaltGenerator.java index 7f4f9db88..56785e107 100644 --- a/backend/src/main/java/codezap/secure/RandomSaltGenerator.java +++ b/backend/src/main/java/codezap/secure/RandomSaltGenerator.java @@ -9,7 +9,7 @@ public class RandomSaltGenerator implements SaltGenerator { @Override - public String getSalt() { + public String generate() { SecureRandom byteGenerator = new SecureRandom(); byte[] saltByte = new byte[32]; byteGenerator.nextBytes(saltByte); diff --git a/backend/src/main/java/codezap/secure/SaltGenerator.java b/backend/src/main/java/codezap/secure/SaltGenerator.java index 4124ede87..c93520414 100644 --- a/backend/src/main/java/codezap/secure/SaltGenerator.java +++ b/backend/src/main/java/codezap/secure/SaltGenerator.java @@ -2,5 +2,5 @@ @FunctionalInterface public interface SaltGenerator { - String getSalt(); + String generate(); } diff --git a/backend/src/test/java/codezap/secure/SaltGeneratorTest.java b/backend/src/test/java/codezap/secure/RandomSaltGeneratorTest.java similarity index 93% rename from backend/src/test/java/codezap/secure/SaltGeneratorTest.java rename to backend/src/test/java/codezap/secure/RandomSaltGeneratorTest.java index ac6efee51..686e6f2e1 100644 --- a/backend/src/test/java/codezap/secure/SaltGeneratorTest.java +++ b/backend/src/test/java/codezap/secure/RandomSaltGeneratorTest.java @@ -19,7 +19,7 @@ class RandomSaltGeneratorTest { void randomGeneratorCollisionTest() { Set salts = new HashSet<>(); for (int i = 0; i < 1_000_000; i++) { - salts.add(saltGenerator.getSalt()); + salts.add(saltGenerator.generate()); } assertThat(salts).hasSize(1_000_000); From 9ae483250d265cdc9ba19ebabad7d5cb9e39dc40 Mon Sep 17 00:00:00 2001 From: zangsu Date: Thu, 5 Sep 2024 13:48:05 +0900 Subject: [PATCH 12/12] =?UTF-8?q?refactor:=20secure=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=EB=A5=BC=20auth=20=EC=95=84=EB=9E=98=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99=20=ED=9B=84=20encryption=20=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{secure => auth/encryption}/PasswordEncryptor.java | 2 +- .../{secure => auth/encryption}/RandomSaltGenerator.java | 2 +- .../encryption}/SHA2PasswordEncryptor.java | 3 +-- .../{secure => auth/encryption}/SaltGenerator.java | 2 +- .../src/main/java/codezap/auth/service/AuthService.java | 2 +- .../main/java/codezap/member/service/MemberService.java | 4 ++-- .../encryption}/RandomSaltGeneratorTest.java | 2 +- .../encryption}/SHA2PasswordEncryptorTest.java | 3 +-- .../test/java/codezap/auth/service/AuthServiceTest.java | 4 ++-- .../test/java/codezap/member/fixture/MemberFixture.java | 4 ++-- .../java/codezap/member/service/MemberServiceTest.java | 8 ++++---- .../template/controller/TemplateControllerTest.java | 8 ++++---- 12 files changed, 21 insertions(+), 23 deletions(-) rename backend/src/main/java/codezap/{secure => auth/encryption}/PasswordEncryptor.java (74%) rename backend/src/main/java/codezap/{secure => auth/encryption}/RandomSaltGenerator.java (92%) rename backend/src/main/java/codezap/{secure => auth/encryption}/SHA2PasswordEncryptor.java (93%) rename backend/src/main/java/codezap/{secure => auth/encryption}/SaltGenerator.java (70%) rename backend/src/test/java/codezap/{secure => auth/encryption}/RandomSaltGeneratorTest.java (95%) rename backend/src/test/java/codezap/{secure => auth/encryption}/SHA2PasswordEncryptorTest.java (95%) diff --git a/backend/src/main/java/codezap/secure/PasswordEncryptor.java b/backend/src/main/java/codezap/auth/encryption/PasswordEncryptor.java similarity index 74% rename from backend/src/main/java/codezap/secure/PasswordEncryptor.java rename to backend/src/main/java/codezap/auth/encryption/PasswordEncryptor.java index 0dd1d5f8e..34b64d11a 100644 --- a/backend/src/main/java/codezap/secure/PasswordEncryptor.java +++ b/backend/src/main/java/codezap/auth/encryption/PasswordEncryptor.java @@ -1,4 +1,4 @@ -package codezap.secure; +package codezap.auth.encryption; public interface PasswordEncryptor { String encrypt(String plainPassword, String salt); diff --git a/backend/src/main/java/codezap/secure/RandomSaltGenerator.java b/backend/src/main/java/codezap/auth/encryption/RandomSaltGenerator.java similarity index 92% rename from backend/src/main/java/codezap/secure/RandomSaltGenerator.java rename to backend/src/main/java/codezap/auth/encryption/RandomSaltGenerator.java index 56785e107..a81884d30 100644 --- a/backend/src/main/java/codezap/secure/RandomSaltGenerator.java +++ b/backend/src/main/java/codezap/auth/encryption/RandomSaltGenerator.java @@ -1,4 +1,4 @@ -package codezap.secure; +package codezap.auth.encryption; import java.security.SecureRandom; import java.util.Base64; diff --git a/backend/src/main/java/codezap/secure/SHA2PasswordEncryptor.java b/backend/src/main/java/codezap/auth/encryption/SHA2PasswordEncryptor.java similarity index 93% rename from backend/src/main/java/codezap/secure/SHA2PasswordEncryptor.java rename to backend/src/main/java/codezap/auth/encryption/SHA2PasswordEncryptor.java index de121b5d0..bd93d2069 100644 --- a/backend/src/main/java/codezap/secure/SHA2PasswordEncryptor.java +++ b/backend/src/main/java/codezap/auth/encryption/SHA2PasswordEncryptor.java @@ -1,11 +1,10 @@ -package codezap.secure; +package codezap.auth.encryption; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Base64; import org.springframework.http.HttpStatus; -import org.springframework.http.HttpStatusCode; import org.springframework.stereotype.Component; import codezap.global.exception.CodeZapException; diff --git a/backend/src/main/java/codezap/secure/SaltGenerator.java b/backend/src/main/java/codezap/auth/encryption/SaltGenerator.java similarity index 70% rename from backend/src/main/java/codezap/secure/SaltGenerator.java rename to backend/src/main/java/codezap/auth/encryption/SaltGenerator.java index c93520414..f6d5eabd8 100644 --- a/backend/src/main/java/codezap/secure/SaltGenerator.java +++ b/backend/src/main/java/codezap/auth/encryption/SaltGenerator.java @@ -1,4 +1,4 @@ -package codezap.secure; +package codezap.auth.encryption; @FunctionalInterface public interface SaltGenerator { diff --git a/backend/src/main/java/codezap/auth/service/AuthService.java b/backend/src/main/java/codezap/auth/service/AuthService.java index f0fc381c2..f45be414d 100644 --- a/backend/src/main/java/codezap/auth/service/AuthService.java +++ b/backend/src/main/java/codezap/auth/service/AuthService.java @@ -10,7 +10,7 @@ import codezap.global.exception.CodeZapException; import codezap.member.domain.Member; import codezap.member.repository.MemberRepository; -import codezap.secure.PasswordEncryptor; +import codezap.auth.encryption.PasswordEncryptor; import lombok.RequiredArgsConstructor; @Service diff --git a/backend/src/main/java/codezap/member/service/MemberService.java b/backend/src/main/java/codezap/member/service/MemberService.java index 5330a01df..e2da246a2 100644 --- a/backend/src/main/java/codezap/member/service/MemberService.java +++ b/backend/src/main/java/codezap/member/service/MemberService.java @@ -13,8 +13,8 @@ import codezap.member.dto.request.SignupRequest; import codezap.member.dto.response.FindMemberResponse; import codezap.member.repository.MemberRepository; -import codezap.secure.PasswordEncryptor; -import codezap.secure.SaltGenerator; +import codezap.auth.encryption.PasswordEncryptor; +import codezap.auth.encryption.SaltGenerator; import lombok.RequiredArgsConstructor; @Service diff --git a/backend/src/test/java/codezap/secure/RandomSaltGeneratorTest.java b/backend/src/test/java/codezap/auth/encryption/RandomSaltGeneratorTest.java similarity index 95% rename from backend/src/test/java/codezap/secure/RandomSaltGeneratorTest.java rename to backend/src/test/java/codezap/auth/encryption/RandomSaltGeneratorTest.java index 686e6f2e1..434aa2f99 100644 --- a/backend/src/test/java/codezap/secure/RandomSaltGeneratorTest.java +++ b/backend/src/test/java/codezap/auth/encryption/RandomSaltGeneratorTest.java @@ -1,4 +1,4 @@ -package codezap.secure; +package codezap.auth.encryption; import static org.assertj.core.api.Assertions.assertThat; diff --git a/backend/src/test/java/codezap/secure/SHA2PasswordEncryptorTest.java b/backend/src/test/java/codezap/auth/encryption/SHA2PasswordEncryptorTest.java similarity index 95% rename from backend/src/test/java/codezap/secure/SHA2PasswordEncryptorTest.java rename to backend/src/test/java/codezap/auth/encryption/SHA2PasswordEncryptorTest.java index 93bc8c6e2..bcdb3f9ae 100644 --- a/backend/src/test/java/codezap/secure/SHA2PasswordEncryptorTest.java +++ b/backend/src/test/java/codezap/auth/encryption/SHA2PasswordEncryptorTest.java @@ -1,7 +1,6 @@ -package codezap.secure; +package codezap.auth.encryption; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/backend/src/test/java/codezap/auth/service/AuthServiceTest.java b/backend/src/test/java/codezap/auth/service/AuthServiceTest.java index 9dd9bd949..d4f1ec4f1 100644 --- a/backend/src/test/java/codezap/auth/service/AuthServiceTest.java +++ b/backend/src/test/java/codezap/auth/service/AuthServiceTest.java @@ -22,8 +22,8 @@ import codezap.member.fixture.MemberFixture; import codezap.member.repository.FakeMemberRepository; import codezap.member.repository.MemberRepository; -import codezap.secure.PasswordEncryptor; -import codezap.secure.SHA2PasswordEncryptor; +import codezap.auth.encryption.PasswordEncryptor; +import codezap.auth.encryption.SHA2PasswordEncryptor; public class AuthServiceTest { private final MemberRepository memberRepository = new FakeMemberRepository(); diff --git a/backend/src/test/java/codezap/member/fixture/MemberFixture.java b/backend/src/test/java/codezap/member/fixture/MemberFixture.java index 8c48034d3..c44d7d03d 100644 --- a/backend/src/test/java/codezap/member/fixture/MemberFixture.java +++ b/backend/src/test/java/codezap/member/fixture/MemberFixture.java @@ -1,8 +1,8 @@ package codezap.member.fixture; import codezap.member.domain.Member; -import codezap.secure.PasswordEncryptor; -import codezap.secure.SHA2PasswordEncryptor; +import codezap.auth.encryption.PasswordEncryptor; +import codezap.auth.encryption.SHA2PasswordEncryptor; public class MemberFixture { diff --git a/backend/src/test/java/codezap/member/service/MemberServiceTest.java b/backend/src/test/java/codezap/member/service/MemberServiceTest.java index 379fe77e5..e0e5a08b6 100644 --- a/backend/src/test/java/codezap/member/service/MemberServiceTest.java +++ b/backend/src/test/java/codezap/member/service/MemberServiceTest.java @@ -19,10 +19,10 @@ import codezap.member.fixture.MemberFixture; import codezap.member.repository.FakeMemberRepository; import codezap.member.repository.MemberRepository; -import codezap.secure.PasswordEncryptor; -import codezap.secure.RandomSaltGenerator; -import codezap.secure.SHA2PasswordEncryptor; -import codezap.secure.SaltGenerator; +import codezap.auth.encryption.PasswordEncryptor; +import codezap.auth.encryption.RandomSaltGenerator; +import codezap.auth.encryption.SHA2PasswordEncryptor; +import codezap.auth.encryption.SaltGenerator; public class MemberServiceTest { diff --git a/backend/src/test/java/codezap/template/controller/TemplateControllerTest.java b/backend/src/test/java/codezap/template/controller/TemplateControllerTest.java index 76a0f1622..333d21f4d 100644 --- a/backend/src/test/java/codezap/template/controller/TemplateControllerTest.java +++ b/backend/src/test/java/codezap/template/controller/TemplateControllerTest.java @@ -40,10 +40,10 @@ import codezap.member.repository.FakeMemberRepository; import codezap.member.repository.MemberRepository; import codezap.member.service.MemberService; -import codezap.secure.PasswordEncryptor; -import codezap.secure.RandomSaltGenerator; -import codezap.secure.SHA2PasswordEncryptor; -import codezap.secure.SaltGenerator; +import codezap.auth.encryption.PasswordEncryptor; +import codezap.auth.encryption.RandomSaltGenerator; +import codezap.auth.encryption.SHA2PasswordEncryptor; +import codezap.auth.encryption.SaltGenerator; import codezap.tag.service.TemplateTagService; import codezap.template.dto.request.CreateSourceCodeRequest; import codezap.template.dto.request.CreateTemplateRequest;