44 */
55package aws.smithy.kotlin.runtime.auth.awssigning
66
7+ import aws.smithy.kotlin.runtime.ExperimentalApi
78import aws.smithy.kotlin.runtime.http.Headers
89import aws.smithy.kotlin.runtime.http.request.HttpRequest
10+ import aws.smithy.kotlin.runtime.telemetry.TelemetryProvider
911import aws.smithy.kotlin.runtime.telemetry.logging.logger
1012import aws.smithy.kotlin.runtime.time.TimestampFormat
1113import kotlin.coroutines.coroutineContext
1214
1315/* * The default implementation of [AwsSigner] */
1416public val DefaultAwsSigner : AwsSigner = DefaultAwsSignerImpl ()
1517
18+ /* * Creates a customized instance of [AwsSigner] */
19+ @Suppress(" ktlint:standard:function-naming" )
20+ public fun DefaultAwsSigner (block : DefaultAwsSignerBuilder .() -> Unit ): AwsSigner =
21+ DefaultAwsSignerBuilder ().apply (block).build()
22+
23+ /* * A builder class for creating instances of [AwsSigner] using the default implementation */
24+ public class DefaultAwsSignerBuilder {
25+ public var telemetryProvider: TelemetryProvider ? = null
26+
27+ public fun build (): AwsSigner = DefaultAwsSignerImpl (
28+ telemetryProvider = telemetryProvider,
29+ )
30+ }
31+
32+ @OptIn(ExperimentalApi ::class )
1633internal class DefaultAwsSignerImpl (
1734 private val canonicalizer : Canonicalizer = Canonicalizer .Default ,
1835 private val signatureCalculator : SignatureCalculator = SignatureCalculator .Default ,
1936 private val requestMutator : RequestMutator = RequestMutator .Default ,
37+ private val telemetryProvider : TelemetryProvider ? = null ,
2038) : AwsSigner {
2139 override suspend fun sign (request : HttpRequest , config : AwsSigningConfig ): AwsSigningResult <HttpRequest > {
22- val logger = coroutineContext.logger<DefaultAwsSignerImpl >()
40+ val logger = telemetryProvider?.loggerProvider?.getOrCreateLogger(" DefaultAwsSigner" )
41+ ? : coroutineContext.logger<DefaultAwsSignerImpl >()
2342
2443 // TODO: implement SigV4a
2544 if (config.algorithm != AwsSigningAlgorithm .SIGV4 ) {
@@ -52,7 +71,8 @@ internal class DefaultAwsSignerImpl(
5271 prevSignature : ByteArray ,
5372 config : AwsSigningConfig ,
5473 ): AwsSigningResult <Unit > {
55- val logger = coroutineContext.logger<DefaultAwsSignerImpl >()
74+ val logger = telemetryProvider?.loggerProvider?.getOrCreateLogger(" DefaultAwsSigner" )
75+ ? : coroutineContext.logger<DefaultAwsSignerImpl >()
5676
5777 val stringToSign = signatureCalculator.chunkStringToSign(chunkBody, prevSignature, config)
5878 logger.trace { " Chunk string to sign:\n $stringToSign " }
@@ -70,7 +90,8 @@ internal class DefaultAwsSignerImpl(
7090 prevSignature : ByteArray ,
7191 config : AwsSigningConfig ,
7292 ): AwsSigningResult <Unit > {
73- val logger = coroutineContext.logger<DefaultAwsSignerImpl >()
93+ val logger = telemetryProvider?.loggerProvider?.getOrCreateLogger(" DefaultAwsSigner" )
94+ ? : coroutineContext.logger<DefaultAwsSignerImpl >()
7495
7596 // FIXME - can we share canonicalization code more than we are..., also this reduce is inefficient.
7697 // canonicalize the headers
0 commit comments