43 lines
1.3 KiB
Kotlin
43 lines
1.3 KiB
Kotlin
package space.luminic.budgerapp.services
|
|
|
|
import kotlinx.coroutines.reactor.awaitSingle
|
|
import org.springframework.cache.annotation.CacheEvict
|
|
import org.springframework.stereotype.Service
|
|
import reactor.core.publisher.Mono
|
|
import space.luminic.budgerapp.models.Token
|
|
import space.luminic.budgerapp.models.TokenStatus
|
|
import space.luminic.budgerapp.repos.TokenRepo
|
|
import java.time.LocalDateTime
|
|
|
|
@Service
|
|
class TokenService(private val tokenRepository: TokenRepo) {
|
|
|
|
@CacheEvict("tokens", allEntries = true)
|
|
suspend fun saveToken(token: String, username: String, expiresAt: LocalDateTime): Token {
|
|
val newToken = Token(
|
|
token = token,
|
|
username = username,
|
|
issuedAt = LocalDateTime.now(),
|
|
expiresAt = expiresAt
|
|
)
|
|
return tokenRepository.save(newToken).awaitSingle()
|
|
}
|
|
|
|
fun getToken(token: String): Mono<Token> {
|
|
return tokenRepository.findByToken(token)
|
|
}
|
|
|
|
|
|
fun revokeToken(token: String) {
|
|
val tokenDetail =
|
|
tokenRepository.findByToken(token).block()!!
|
|
val updatedToken = tokenDetail.copy(status = TokenStatus.REVOKED)
|
|
tokenRepository.save(updatedToken).block()
|
|
}
|
|
|
|
|
|
@CacheEvict("tokens", allEntries = true)
|
|
fun deleteExpiredTokens() {
|
|
tokenRepository.deleteByExpiresAtBefore(LocalDateTime.now())
|
|
}
|
|
} |