Skip to content

Commit 72fb18d

Browse files
committed
Merge pull request 'Use argon2 for password hashing' (#47) from argon2-hashing into main
2 parents c0ffe62 + 90063e7 commit 72fb18d

File tree

8 files changed

+24
-19
lines changed

8 files changed

+24
-19
lines changed

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,11 @@
200200
<classifier>jakarta</classifier>
201201
<version>${querydsl.version}</version>
202202
</dependency>
203+
<dependency>
204+
<groupId>org.bouncycastle</groupId>
205+
<artifactId>bcpkix-jdk18on</artifactId>
206+
<version>1.76</version>
207+
</dependency>
203208

204209
</dependencies>
205210

src/main/java/org/openpodcastapi/opa/config/SecurityConfig.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
1616
import org.springframework.security.config.http.SessionCreationPolicy;
1717
import org.springframework.security.core.userdetails.UserDetailsService;
18-
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
18+
import org.springframework.security.crypto.argon2.Argon2PasswordEncoder;
1919
import org.springframework.security.oauth2.server.resource.web.authentication.BearerTokenAuthenticationFilter;
2020
import org.springframework.security.web.AuthenticationEntryPoint;
2121
import org.springframework.security.web.SecurityFilterChain;
@@ -121,8 +121,8 @@ public SecurityFilterChain webSecurity(HttpSecurity http) {
121121
///
122122
/// @return a configured password encoder
123123
@Bean
124-
public BCryptPasswordEncoder passwordEncoder() {
125-
return new BCryptPasswordEncoder();
124+
public Argon2PasswordEncoder passwordEncoder() {
125+
return Argon2PasswordEncoder.defaultsForSpringSecurity_v5_8();
126126
}
127127

128128
/// An authentication provider for password-based authentication
@@ -132,7 +132,7 @@ public BCryptPasswordEncoder passwordEncoder() {
132132
/// @return the configured authentication provider
133133
@Bean
134134
public DaoAuthenticationProvider daoAuthenticationProvider(UserDetailsService userDetailsService,
135-
BCryptPasswordEncoder passwordEncoder) {
135+
Argon2PasswordEncoder passwordEncoder) {
136136
final var provider = new DaoAuthenticationProvider(userDetailsService);
137137
provider.setPasswordEncoder(passwordEncoder);
138138
return provider;

src/main/java/org/openpodcastapi/opa/security/TokenService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import io.jsonwebtoken.security.Keys;
55
import org.openpodcastapi.opa.user.UserEntity;
66
import org.springframework.beans.factory.annotation.Value;
7-
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
7+
import org.springframework.security.crypto.argon2.Argon2PasswordEncoder;
88
import org.springframework.stereotype.Service;
99

1010
import javax.crypto.SecretKey;
@@ -18,7 +18,7 @@
1818
public class TokenService {
1919

2020
private final RefreshTokenRepository repository;
21-
private final BCryptPasswordEncoder passwordEncoder;
21+
private final Argon2PasswordEncoder passwordEncoder;
2222
// The secret string used to generate secret keys
2323
@Value("${jwt.secret}")
2424
private String secret;
@@ -35,7 +35,7 @@ public class TokenService {
3535
///
3636
/// @param repository the refresh token repository for token interaction
3737
/// @param passwordEncoder the password encoder for encoding tokens
38-
public TokenService(RefreshTokenRepository repository, BCryptPasswordEncoder passwordEncoder) {
38+
public TokenService(RefreshTokenRepository repository, Argon2PasswordEncoder passwordEncoder) {
3939
this.repository = repository;
4040
this.passwordEncoder = passwordEncoder;
4141
}

src/main/java/org/openpodcastapi/opa/user/UserService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import org.openpodcastapi.opa.pagination.CursorUtility;
77
import org.slf4j.Logger;
88
import org.springframework.dao.DataIntegrityViolationException;
9-
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
9+
import org.springframework.security.crypto.argon2.Argon2PasswordEncoder;
1010
import org.springframework.stereotype.Service;
1111
import org.springframework.transaction.annotation.Transactional;
1212

@@ -23,15 +23,15 @@ public class UserService {
2323
private final UserRepository repository;
2424
private final CursorRepository cursorRepository;
2525
private final UserMapper mapper;
26-
private final BCryptPasswordEncoder passwordEncoder;
26+
private final Argon2PasswordEncoder passwordEncoder;
2727

2828
/// Required-args constructor
2929
///
3030
/// @param repository the user repository used for user interactions
3131
/// @param cursorRepository the cursor repository used for paginated requests
3232
/// @param mapper the user mapper used to map user entities and DTOs
3333
/// @param passwordEncoder the password encoder used to handle user passwords
34-
public UserService(UserRepository repository, CursorRepository cursorRepository, UserMapper mapper, BCryptPasswordEncoder passwordEncoder) {
34+
public UserService(UserRepository repository, CursorRepository cursorRepository, UserMapper mapper, Argon2PasswordEncoder passwordEncoder) {
3535
this.repository = repository;
3636
this.cursorRepository = cursorRepository;
3737
this.mapper = mapper;

src/main/java/org/openpodcastapi/opa/util/AdminUserInitializer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import org.springframework.beans.factory.annotation.Value;
99
import org.springframework.boot.ApplicationArguments;
1010
import org.springframework.boot.ApplicationRunner;
11-
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
11+
import org.springframework.security.crypto.argon2.Argon2PasswordEncoder;
1212
import org.springframework.stereotype.Component;
1313

1414
import java.util.Set;
@@ -20,7 +20,7 @@
2020
public class AdminUserInitializer implements ApplicationRunner {
2121
private static final Logger log = getLogger(AdminUserInitializer.class);
2222
private final UserRepository userRepository;
23-
private final BCryptPasswordEncoder encoder;
23+
private final Argon2PasswordEncoder encoder;
2424
@Value("${admin.username}")
2525
private String username;
2626
@Value("${admin.password}")
@@ -32,7 +32,7 @@ public class AdminUserInitializer implements ApplicationRunner {
3232
///
3333
/// @param userRepository the user repository used for user interactions
3434
/// @param encoder the password encoder used to encrypt the admin password
35-
public AdminUserInitializer(UserRepository userRepository, BCryptPasswordEncoder encoder) {
35+
public AdminUserInitializer(UserRepository userRepository, Argon2PasswordEncoder encoder) {
3636
this.userRepository = userRepository;
3737
this.encoder = encoder;
3838
}

src/test/java/org/openpodcastapi/opa/auth/AuthApiTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.springframework.boot.test.context.SpringBootTest;
1212
import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
1313
import org.springframework.http.MediaType;
14-
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
14+
import org.springframework.security.crypto.argon2.Argon2PasswordEncoder;
1515
import org.springframework.test.context.ActiveProfiles;
1616
import org.springframework.test.web.servlet.MockMvc;
1717

@@ -34,7 +34,7 @@ class AuthApiTest {
3434
@Autowired
3535
MockMvc mockMvc;
3636
@Autowired
37-
private BCryptPasswordEncoder passwordEncoder;
37+
private Argon2PasswordEncoder passwordEncoder;
3838
@Autowired
3939
private UserRepository userRepository;
4040
@Autowired

src/test/java/org/openpodcastapi/opa/subscriptions/SubscriptionRestControllerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
1717
import org.springframework.http.MediaType;
1818
import org.springframework.restdocs.payload.JsonFieldType;
19-
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
19+
import org.springframework.security.crypto.argon2.Argon2PasswordEncoder;
2020
import org.springframework.test.context.ActiveProfiles;
2121
import org.springframework.test.web.servlet.MockMvc;
2222
import tools.jackson.databind.json.JsonMapper;
@@ -62,7 +62,7 @@ class SubscriptionRestControllerTest {
6262
private FeedRepository feedRepository;
6363

6464
@Autowired
65-
private BCryptPasswordEncoder passwordEncoder;
65+
private Argon2PasswordEncoder passwordEncoder;
6666

6767
private UserEntity mockUser;
6868

src/test/java/org/openpodcastapi/opa/user/UserRestControllerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
1010
import org.springframework.http.MediaType;
1111
import org.springframework.restdocs.payload.JsonFieldType;
12-
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
12+
import org.springframework.security.crypto.argon2.Argon2PasswordEncoder;
1313
import org.springframework.test.context.ActiveProfiles;
1414
import org.springframework.test.web.servlet.MockMvc;
1515

@@ -42,7 +42,7 @@ class UserRestControllerTest {
4242
private UserRepository userRepository;
4343

4444
@Autowired
45-
private BCryptPasswordEncoder passwordEncoder;
45+
private Argon2PasswordEncoder passwordEncoder;
4646

4747
@Autowired
4848
private UserMapper userMapper;

0 commit comments

Comments
 (0)