mirror of
https://github.com/revanced/revanced-api.git
synced 2025-04-29 22:24:31 +02:00
50 lines
1.5 KiB
Kotlin
50 lines
1.5 KiB
Kotlin
package app.revanced.api.configuration.services
|
|
|
|
import com.auth0.jwt.JWT
|
|
import com.auth0.jwt.algorithms.Algorithm
|
|
import io.ktor.server.application.*
|
|
import io.ktor.server.auth.*
|
|
import io.ktor.server.auth.jwt.*
|
|
import java.util.*
|
|
import kotlin.text.HexFormat
|
|
import kotlin.time.Duration.Companion.minutes
|
|
|
|
internal class AuthService private constructor(
|
|
private val issuer: String,
|
|
private val validityInMin: Int,
|
|
private val jwtSecret: String,
|
|
private val authSHA256Digest: ByteArray,
|
|
) {
|
|
@OptIn(ExperimentalStdlibApi::class)
|
|
constructor(issuer: String, validityInMin: Int, jwtSecret: String, authSHA256DigestString: String) : this(
|
|
issuer,
|
|
validityInMin,
|
|
jwtSecret,
|
|
authSHA256DigestString.hexToByteArray(HexFormat.Default),
|
|
)
|
|
|
|
val configureSecurity: Application.() -> Unit = {
|
|
install(Authentication) {
|
|
jwt("jwt") {
|
|
realm = "ReVanced"
|
|
|
|
verifier(JWT.require(Algorithm.HMAC256(jwtSecret)).withIssuer(issuer).build())
|
|
}
|
|
|
|
digest("auth-digest") {
|
|
realm = "ReVanced"
|
|
algorithmName = "SHA-256"
|
|
|
|
digestProvider { _, _ ->
|
|
authSHA256Digest
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
fun newToken(): String = JWT.create()
|
|
.withIssuer(issuer)
|
|
.withExpiresAt(Date(System.currentTimeMillis() + validityInMin.minutes.inWholeMilliseconds))
|
|
.sign(Algorithm.HMAC256(jwtSecret))
|
|
}
|