29 lines
988 B
Kotlin
29 lines
988 B
Kotlin
package be.simplenotes.domain.security
|
|
|
|
import be.simplenotes.config.JwtConfig
|
|
import be.simplenotes.types.LoggedInUser
|
|
import com.auth0.jwt.JWT
|
|
import com.auth0.jwt.JWTVerifier
|
|
import com.auth0.jwt.algorithms.Algorithm
|
|
import java.util.*
|
|
import java.util.concurrent.TimeUnit
|
|
import javax.inject.Singleton
|
|
|
|
internal const val userIdField = "i"
|
|
internal const val usernameField = "u"
|
|
|
|
@Singleton
|
|
class SimpleJwt(jwtConfig: JwtConfig) {
|
|
private val validityInMs = TimeUnit.MILLISECONDS.convert(jwtConfig.validity, jwtConfig.timeUnit)
|
|
private val algorithm = Algorithm.HMAC256(jwtConfig.secret)
|
|
|
|
val verifier: JWTVerifier = JWT.require(algorithm).build()
|
|
fun sign(loggedInUser: LoggedInUser): String = JWT.create()
|
|
.withClaim(userIdField, loggedInUser.userId)
|
|
.withClaim(usernameField, loggedInUser.username)
|
|
.withExpiresAt(getExpiration())
|
|
.sign(algorithm)
|
|
|
|
private fun getExpiration() = Date(System.currentTimeMillis() + validityInMs)
|
|
}
|