Skip to content

Commit

Permalink
encoder library added
Browse files Browse the repository at this point in the history
  • Loading branch information
Muryginds committed Jan 25, 2024
1 parent 357799b commit e2ed01f
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 4 deletions.
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ dependencies {

testCompileOnly 'org.projectlombok:lombok:1.18.30'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.30'

implementation group: 'com.password4j', name: 'password4j', version: '1.7.3'
}

test {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,27 @@
package ru.ylab.repository;

import ru.ylab.entity.User;
import ru.ylab.repository.UserRepository;
import ru.ylab.security.Password4jPasswordEncoder;
import ru.ylab.security.PasswordEncoder;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

public class InMemoryUserRepository implements UserRepository {
private static final PasswordEncoder passwordEncoder = new Password4jPasswordEncoder();
private static final Map<Long, User> USERS = init();

private static Map<Long, User> init() {
User admin = User.builder()
.name("admin")
.password("password")
.password(passwordEncoder.encode("admin"))
.isAdmin(true)
.build();
User testUser = User.builder()
.name("testUser")
.password("password2")
.password(passwordEncoder.encode("testUser"))
.build();
Map<Long, User> map = new HashMap<>();
map.put(admin.getId(), admin);
Expand Down
21 changes: 21 additions & 0 deletions src/main/java/ru/ylab/security/Password4jPasswordEncoder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package ru.ylab.security;

import com.password4j.Password;

public class Password4jPasswordEncoder implements PasswordEncoder {
private static final String SECRET_KEY = "superSecret";

@Override
public String encode(String password) {
return Password
.hash(password)
.addSalt(SECRET_KEY)
.withArgon2()
.getResult();
}

@Override
public boolean verify(String password, String hash) {
return Password.check(password, hash).addSalt(SECRET_KEY).withArgon2();
}
}
7 changes: 7 additions & 0 deletions src/main/java/ru/ylab/security/PasswordEncoder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ru.ylab.security;

public interface PasswordEncoder {
String encode(String password);

boolean verify(String password, String hash);
}
8 changes: 6 additions & 2 deletions src/main/java/ru/ylab/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,20 @@
import ru.ylab.dto.UserAuthenticationRequestDTO;
import ru.ylab.dto.UserRegistrationRequestDTO;
import ru.ylab.repository.UserRepository;
import ru.ylab.security.PasswordEncoder;

@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
@Getter
private User currentUser;

public User registerUser(UserRegistrationRequestDTO requestDTO) {
if (!checkUsernameExists(requestDTO.name())) {
User user = User.builder()
.name(requestDTO.name())
.password(requestDTO.password())
.password(passwordEncoder.encode(requestDTO.password()))
.build();
userRepository.save(user);
return user;
Expand All @@ -27,7 +31,7 @@ public User registerUser(UserRegistrationRequestDTO requestDTO) {
public User authenticate(UserAuthenticationRequestDTO requestDTO) {
var user = userRepository.getUserByName(requestDTO.name())
.orElseThrow(UserAuthenticationException::new);
if (!user.getPassword().equals(requestDTO.password())) {
if (!passwordEncoder.verify(requestDTO.password(), user.getPassword())) {
throw new UserAuthenticationException();
}
return user;
Expand Down

0 comments on commit e2ed01f

Please sign in to comment.