add JwtService
This commit is contained in:
25
src/main/kotlin/ltd/hlaeja/service/JwtService.kt
Normal file
25
src/main/kotlin/ltd/hlaeja/service/JwtService.kt
Normal file
@@ -0,0 +1,25 @@
|
||||
package ltd.hlaeja.service
|
||||
|
||||
import io.jsonwebtoken.Jwts
|
||||
import java.security.interfaces.RSAPrivateKey
|
||||
import java.util.UUID
|
||||
import ltd.hlaeja.property.JwtProperty
|
||||
import ltd.hlaeja.util.PrivateKeyProvider
|
||||
import org.springframework.stereotype.Service
|
||||
|
||||
@Service
|
||||
class JwtService(
|
||||
jwtProperty: JwtProperty,
|
||||
) {
|
||||
|
||||
private var privateKey: RSAPrivateKey = PrivateKeyProvider.load(jwtProperty.privateKey)
|
||||
|
||||
suspend fun makeIdentity(device: UUID): String {
|
||||
return Jwts.builder()
|
||||
.claims()
|
||||
.add("device", device)
|
||||
.and()
|
||||
.signWith(privateKey)
|
||||
.compact()
|
||||
}
|
||||
}
|
||||
31
src/test/kotlin/ltd/hlaeja/service/JwtServiceTest.kt
Normal file
31
src/test/kotlin/ltd/hlaeja/service/JwtServiceTest.kt
Normal file
@@ -0,0 +1,31 @@
|
||||
package ltd.hlaeja.service
|
||||
|
||||
import java.util.UUID
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import ltd.hlaeja.property.JwtProperty
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class JwtServiceTest {
|
||||
|
||||
val property: JwtProperty = JwtProperty("keys/valid-private-key.pem")
|
||||
lateinit var service: JwtService
|
||||
|
||||
@BeforeEach
|
||||
fun setUp() {
|
||||
service = JwtService(property)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should generate a JWT successfully with a valid private key`() = runTest {
|
||||
// given
|
||||
val deviceId = UUID.fromString("00000000-0000-0000-0000-000000000000")
|
||||
|
||||
// when
|
||||
val jwt = service.makeIdentity(deviceId)
|
||||
|
||||
// then
|
||||
assertThat(jwt).contains("eyJkZXZpY2UiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user