diff --git a/backend/pom.xml b/backend/pom.xml index 7dcbff00a7cdb7c9164d2b4a7728def31b47edde..cb9e582c8ae9c838220e3cd4c70edb71f361f64b 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -38,8 +38,6 @@ <groupId>jakarta.persistence</groupId> <artifactId>jakarta.persistence-api</artifactId> </dependency> - - <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> @@ -55,6 +53,10 @@ <artifactId>maven-model</artifactId> <version>${maven-model.version}</version> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-security</artifactId> + </dependency> </dependencies> <build> diff --git a/backend/src/main/java/hu/pazmany/UserService.java b/backend/src/main/java/hu/pazmany/UserService.java index ee97f97743f673ef89194c63c0ffb31056c8b1e3..71adee586ec5f945d0dc8b6e5b796e199456bda5 100644 --- a/backend/src/main/java/hu/pazmany/UserService.java +++ b/backend/src/main/java/hu/pazmany/UserService.java @@ -1,19 +1,21 @@ package hu.pazmany; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; @Service public class UserService { private final UserRepository userRepository; + private final BCryptPasswordEncoder passwordEncoder; - public UserService(UserRepository userRepository) { + public UserService(UserRepository userRepository, BCryptPasswordEncoder passwordEncoder) { this.userRepository = userRepository; + this.passwordEncoder = passwordEncoder; } public String authenticate(String username, String password) { User user = userRepository.findByUsername(username); - if (user != null && user.getPassword().equals(password)) { + if (user != null && passwordEncoder.matches(password, user.getPassword())) { return user.getFullName(); } return "Helytelen felhasználónév vagy jelszó!"; @@ -23,7 +25,7 @@ public class UserService { User user = new User(); user.setFullName(fullName); user.setUsername(username); - user.setPassword(password); + user.setPassword(passwordEncoder.encode(password)); userRepository.save(user); } } diff --git a/backend/src/main/java/hu/pazmany/config/SecurityConfig.java b/backend/src/main/java/hu/pazmany/config/SecurityConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..2705a86f05bc8ddabd45c1df95cfef84a8c71241 --- /dev/null +++ b/backend/src/main/java/hu/pazmany/config/SecurityConfig.java @@ -0,0 +1,12 @@ +package hu.pazmany.config; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +@Configuration +public class SecurityConfig { + @Bean + public BCryptPasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } +} diff --git a/backend/src/test/java/hu/pazmany/DocumentRepositoryTests.java b/backend/src/test/java/hu/pazmany/DocumentRepositoryTests.java index 7a289136f6e2cc159c4f2a01feb92b06990836cf..c5ccb07a46305963fa40a47fbd18d4758bc8fb61 100644 --- a/backend/src/test/java/hu/pazmany/DocumentRepositoryTests.java +++ b/backend/src/test/java/hu/pazmany/DocumentRepositoryTests.java @@ -23,16 +23,23 @@ public class DocumentRepositoryTests { @Test public void testFindAllByUser() { + // Create a new User User user = new User(); user.setUsername("testUser"); user.setPassword("testPassword"); + + // Save the User userRepository.save(user); + // Create a new Subject Subject subject = new Subject(); subject.setSubjectId("testId"); subject.setName("testName"); + + // Save the Subject subjectRepository.save(subject); + // Create and save Documents int n = 4; for (int i = 0; i < n; i++) { Document document = new Document(); @@ -43,9 +50,13 @@ public class DocumentRepositoryTests { documentRepository.save(document); } + // Retrieve all Documents by User List<Document> documents = documentRepository.findAllByUser(user); + // Assert that the retrieved Documents has the correct size assertThat(documents).hasSize(n); + + // Assert that the retrieved Documents are all from the same User for (int i = 0; i < n; i++) { assertThat(documents.get(i).getUser().getUsername()).isEqualTo(user.getUsername()); } @@ -53,16 +64,23 @@ public class DocumentRepositoryTests { @Test public void testFindAllBySubject() { + // Create a new Subject Subject subject = new Subject(); subject.setSubjectId("testId"); subject.setName("testName"); + + // Save the Subject subjectRepository.save(subject); + // Create a new User User user = new User(); user.setUsername("testUser"); user.setPassword("testPassword"); + + // Save the User userRepository.save(user); + // Create and save Documents int n = 4; for (int i = 0; i < n; i++) { Document document = new Document(); @@ -73,9 +91,13 @@ public class DocumentRepositoryTests { documentRepository.save(document); } + // Retrieve all Documents by Subject List<Document> documents = documentRepository.findAllBySubject(subject); + // Assert that the retrieved Documents has the correct size assertThat(documents).hasSize(n); + + // Assert that the retrieved Documents are all from the same Subject for (int i = 0; i < n; i++) { assertThat(documents.get(i).getSubject().getSubjectId()).isEqualTo(subject.getSubjectId()); } @@ -83,25 +105,36 @@ public class DocumentRepositoryTests { @Test public void testFindById() { + // Create a new Subject Subject subject = new Subject(); subject.setSubjectId("testId"); subject.setName("testName"); + + // Save the Subject subjectRepository.save(subject); + // Create a new User User user = new User(); user.setUsername("testUser"); user.setPassword("testPassword"); + + // Save the User userRepository.save(user); + // Create the Document Document document = new Document(); document.setUser(user); document.setSubject(subject); document.setTitle("testTitle"); document.setFilepath("testFilepath"); + + // Save the Document documentRepository.save(document); + // Retrieve the Document Document found = documentRepository.findById(document.getId()).get(); + // Assert that the retrieved Document is the same as the one we saved assertThat(found.getTitle()).isEqualTo(document.getTitle()); } } \ No newline at end of file diff --git a/backend/src/test/java/hu/pazmany/SubjectRepositoryTests.java b/backend/src/test/java/hu/pazmany/SubjectRepositoryTests.java index 6b327b48e4d78ce069c64614c69597a7443f9551..050074387b037501b80f65aacddf20b85a03c190 100644 --- a/backend/src/test/java/hu/pazmany/SubjectRepositoryTests.java +++ b/backend/src/test/java/hu/pazmany/SubjectRepositoryTests.java @@ -17,24 +17,33 @@ public class SubjectRepositoryTests { @Test public void testFindBySubjectId() { + // Create a new Subject Subject subject = new Subject(); subject.setSubjectId("testId"); subject.setName("testName"); + + // Save the Subject subjectRepository.save(subject); + // Retrieve the Subject Subject found = subjectRepository.findBySubjectId(subject.getSubjectId()); + // Assert that the retrieved Subject is the same as the one we saved // Ids have to be compared, as the objects differ, even if their data does not assertThat(found.getSubjectId()).isEqualTo(subject.getSubjectId()); } @Test public void testFindAll() { + // Create a new Subject Subject subject = new Subject(); subject.setSubjectId("testId"); subject.setName("testName"); + + // Save the Subject subjectRepository.save(subject); + // Create and save more Subjects int n = 4; for (int i = 0; i < n; i++) { Subject tempSubject = new Subject(); @@ -43,10 +52,13 @@ public class SubjectRepositoryTests { subjectRepository.save(tempSubject); } + // Retrieve all Subjects List<Subject> subjects = subjectRepository.findAll(); + // Assert that the retrieved Subjects has the correct size assertThat(subjects).hasSize(n+1); + // Assert that the retrieved Subjects contain the one we saved assertThat(subjects.get(0).getSubjectId()).isEqualTo(subject.getSubjectId()); } } \ No newline at end of file diff --git a/backend/src/test/java/hu/pazmany/UserServiceTests.java b/backend/src/test/java/hu/pazmany/UserServiceTests.java new file mode 100644 index 0000000000000000000000000000000000000000..d13c1f73f0acab229ef25e6655891b0e3e06f9bd --- /dev/null +++ b/backend/src/test/java/hu/pazmany/UserServiceTests.java @@ -0,0 +1,49 @@ +package hu.pazmany; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.test.annotation.DirtiesContext; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +public class UserServiceTests { + + @Autowired + private UserService userService; + + @Autowired + private UserRepository userRepository; + + @Autowired + private BCryptPasswordEncoder passwordEncoder; + + @Test + public void testRegister() { + // Register a new user + userService.register("Test User", "testUser", "testPassword"); + + // Retrieve the user + User user = userRepository.findByUsername("testUser"); + + // Assert that the user was saved and the password was encrypted + assertThat(user).isNotNull(); + assertThat(user.getUsername()).isEqualTo("testUser"); + assertThat(passwordEncoder.matches("testPassword", user.getPassword())).isTrue(); + } + + @Test + public void testAuthenticate() { + // Register a new user + userService.register("Test User", "testUser", "testPassword"); + + // Authenticate the user + String fullName = userService.authenticate("testUser", "testPassword"); + + // Assert that the user was authenticated successfully + assertThat(fullName).isEqualTo("Test User"); + } +} \ No newline at end of file