Skip to content

Commit b7d2bb0

Browse files
committed
Implement Argon2Password Encoder to login/register
1 parent 4a9341f commit b7d2bb0

File tree

4 files changed

+28
-3
lines changed

4 files changed

+28
-3
lines changed

build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ dependencies {
9292
implementation("io.jsonwebtoken:jjwt-impl:0.11.2")
9393
implementation("io.jsonwebtoken:jjwt-jackson:0.11.2")
9494

95+
// Argon2 Related
96+
implementation("org.bouncycastle:bcprov-jdk15on:1.64")
97+
9598
// Spring Annotation Processor
9699
compileOnly("org.springframework.boot:spring-boot-configuration-processor")
97100

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.mptsix.todaydiary.security
2+
3+
import org.springframework.security.crypto.argon2.Argon2PasswordEncoder
4+
import org.springframework.stereotype.Service
5+
6+
@Service
7+
class PasswordEncryptorService {
8+
private val argon2PasswordEncoder: Argon2PasswordEncoder = Argon2PasswordEncoder(
9+
16, 32, 1, 4096, 5
10+
)
11+
12+
fun encodePlainText(plainInput: String): String {
13+
return argon2PasswordEncoder.encode(plainInput)
14+
}
15+
16+
fun isMatching(plainInput: String, encodedPassword: String): Boolean {
17+
return argon2PasswordEncoder.matches(plainInput, encodedPassword)
18+
}
19+
}

src/main/kotlin/com/mptsix/todaydiary/service/UserService.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.mptsix.todaydiary.error.exception.ConflictException
1313
import com.mptsix.todaydiary.error.exception.ForbiddenException
1414
import com.mptsix.todaydiary.error.exception.NotFoundException
1515
import com.mptsix.todaydiary.security.JWTTokenProvider
16+
import com.mptsix.todaydiary.security.PasswordEncryptorService
1617
import org.bson.BsonBinarySubType
1718
import org.bson.types.Binary
1819
import org.slf4j.Logger
@@ -24,7 +25,8 @@ import kotlin.streams.toList
2425
@Service
2526
class UserService(
2627
private val userRepository: UserRepository,
27-
private val jwtTokenProvider: JWTTokenProvider
28+
private val jwtTokenProvider: JWTTokenProvider,
29+
private val passwordEncryptorService: PasswordEncryptorService
2830
) {
2931
// Logger
3032
private val logger: Logger = LoggerFactory.getLogger(this::class.java)
@@ -61,7 +63,7 @@ class UserService(
6163
}
6264

6365
// Register
64-
val registeredUser: User = userRepository.addUser(userRegisterRequest.toUser())
66+
val registeredUser: User = userRepository.addUser(userRegisterRequest.toUser().apply {userPassword = passwordEncryptorService.encodePlainText(userRegisterRequest.userPassword)})
6567
return UserRegisterResponse(
6668
registeredId = registeredUser.userId
6769
)
@@ -73,7 +75,7 @@ class UserService(
7375
throw NotFoundException("Cannot find userid: ${loginRequest.userId}")
7476
}
7577
val user: User = userRepository.findByUserId(loginRequest.userId)
76-
if (user.userPassword != loginRequest.userPassword) {
78+
if (!passwordEncryptorService.isMatching(loginRequest.userPassword, user.userPassword)) {
7779
logger.error("Username is correct, but user password is not found!")
7880
throw ForbiddenException("Username is correct, but user password is not correct!")
7981
}

src/test/kotlin/com/mptsix/todaydiary/service/UserServiceTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ internal class UserServiceTest {
175175
runCatching {
176176
userService.loginUser(loginRequest)
177177
}.onFailure {
178+
println(it.stackTraceToString())
178179
fail("We registered user, but login failed?")
179180
}.onSuccess {
180181
assertThat(it.userToken).isNotEqualTo("")

0 commit comments

Comments
 (0)