MV
02/01/2025, 4:17 PMMV
02/01/2025, 4:20 PMinternal val someClient = HttpClient(CIO) {
expectSuccess = true
install(ContentNegotiation) {
json(Json {
ignoreUnknownKeys = true
})
}
install(HttpRequestRetry) {
retryOnServerErrors(maxRetries = 5)
retryIf(5) { _, response -> // RATE LIMITING
response.status.value == 429
}
exponentialDelay()
}
install(Auth) {
bearer {
this.loadTokens {
bearerToken
}
// Configure bearer authentication
refreshTokens {
bearerToken =
getAccessToken(client) {
markAsRefreshTokenRequest()
// Tried this but header is still sent
// headers {
// remove(HttpHeaders.Authorization)
// }
}
bearerToken
}
sendWithoutRequest { _ ->
true
}
}
}
install(Logging) {
level = LogLevel.HEADERS
}
}
private suspend fun getAccessToken(
client: HttpClient,
f: HttpRequestBuilder.() -> Unit = { }
): BearerTokens {
println("Getting access token")
val tokenInfo: TokenInfo = client.submitForm(
url = "<https://example.com/identity/token>",
formParameters = parameters {
append("grant_type", "client_credentials")
append("scope", "get")
append("client_id", "clietnId")
append("client_secret", "clientSecret")
},
block = f
).body<TokenInfo>()
return BearerTokens(tokenInfo.accessToken, tokenInfo.refreshToken)
}
MV
02/01/2025, 6:43 PMinstall(Auth) {
bearer {
loadTokens {
getAccessToken(tokenClient)
}
refreshTokens {
getAccessToken(tokenClient) {
markAsRefreshTokenRequest()
}
}
sendWithoutRequest { _ ->
true
}
}
}
}
Aleksei Tirman [JB]
02/03/2025, 8:04 AM