in ktor-features/ktor-auth/jvm/src/io/ktor/auth/OAuth1a.kt [191:253]
public fun createObtainRequestTokenHeader(
callback: String,
consumerKey: String,
nonce: String,
timestamp: LocalDateTime = LocalDateTime.now()
): HttpAuthHeader.Parameterized = HttpAuthHeader.Parameterized(
authScheme = AuthScheme.OAuth,
parameters = mapOf(
HttpAuthHeader.Parameters.OAuthCallback to callback,
HttpAuthHeader.Parameters.OAuthConsumerKey to consumerKey,
HttpAuthHeader.Parameters.OAuthNonce to nonce,
HttpAuthHeader.Parameters.OAuthSignatureMethod to "HMAC-SHA1",
HttpAuthHeader.Parameters.OAuthTimestamp to timestamp.toEpochSecond(ZoneOffset.UTC).toString(),
HttpAuthHeader.Parameters.OAuthVersion to "1.0"
)
)
/**
* Create an HTTP auth header for OAuth1a upgrade token request
*/
@KtorExperimentalAPI
public fun createUpgradeRequestTokenHeader(
consumerKey: String,
token: String,
nonce: String,
timestamp: LocalDateTime = LocalDateTime.now()
): HttpAuthHeader.Parameterized = HttpAuthHeader.Parameterized(
authScheme = AuthScheme.OAuth,
parameters = mapOf(
HttpAuthHeader.Parameters.OAuthConsumerKey to consumerKey,
HttpAuthHeader.Parameters.OAuthToken to token,
HttpAuthHeader.Parameters.OAuthNonce to nonce,
HttpAuthHeader.Parameters.OAuthSignatureMethod to "HMAC-SHA1",
HttpAuthHeader.Parameters.OAuthTimestamp to timestamp.toEpochSecond(ZoneOffset.UTC).toString(),
HttpAuthHeader.Parameters.OAuthVersion to "1.0"
)
)
/**
* Sign an HTTP auth header
*/
@KtorExperimentalAPI
public fun HttpAuthHeader.Parameterized.sign(
method: HttpMethod,
baseUrl: String,
key: String,
parameters: List<Pair<String, String>>
): HttpAuthHeader.Parameterized = withParameter(
HttpAuthHeader.Parameters.OAuthSignature,
signatureBaseString(this, method, baseUrl, parameters.toHeaderParamsList()).hmacSha1(key)
)
/**
* Build an OAuth1a signature base string as per RFC
*/
@KtorExperimentalAPI
public fun signatureBaseString(
header: HttpAuthHeader.Parameterized,
method: HttpMethod,
baseUrl: String,
parameters: List<HeaderValueParam>
): String = listOf(method.value.toUpperCasePreservingASCIIRules(), baseUrl, parametersString(header.parameters + parameters))
.joinToString("&") { it.encodeURLParameter() }