feat: HttpRequestからSignature Baseを生成する処理を簡単にするやつを追加

This commit is contained in:
usbharu 2024-09-25 14:10:16 +09:00
parent cc55006fea
commit 2b71e2f10b
Signed by: usbharu
GPG Key ID: 95CBCF7046307B77
6 changed files with 59 additions and 0 deletions

View File

@ -11,6 +11,11 @@ class SignatureBaseBuilder {
return signatureBase
}
fun component(component: Component): SignatureBaseBuilder {
signatureBase.addComponent(component)
return this
}
fun method(method: String): SignatureBaseBuilder {
signatureBase.addComponent(DerivedComponent(DerivedComponentConstants.METHOD, "", method))
return this

View File

@ -0,0 +1,14 @@
package dev.usbharu.httpsignature.utils
import dev.usbharu.httpsignature.common.Component
import dev.usbharu.httpsignature.common.HttpRequest
abstract class AbstractHttpRequestComponentExtractor(protected val fieldProcessor: FieldProcessor) :
HttpRequestComponentExtractor {
override fun extract(name: String, request: HttpRequest): List<Component> {
val extractValue = extractValue(name, request)
return fieldProcessor.process(name, extractValue)
}
abstract fun extractValue(name: String, request: HttpRequest): List<String>
}

View File

@ -0,0 +1,3 @@
package dev.usbharu.httpsignature.utils
data class CoveredComponent(val fieldName: String, val componentParameterType: String)

View File

@ -0,0 +1,7 @@
package dev.usbharu.httpsignature.utils
import dev.usbharu.httpsignature.common.Component
fun interface FieldProcessor {
fun process(name: String, value: List<String>): List<Component>
}

View File

@ -0,0 +1,8 @@
package dev.usbharu.httpsignature.utils
import dev.usbharu.httpsignature.common.Component
import dev.usbharu.httpsignature.common.HttpRequest
interface HttpRequestComponentExtractor {
fun extract(name: String, request: HttpRequest): List<Component>
}

View File

@ -0,0 +1,22 @@
package dev.usbharu.httpsignature.utils
import dev.usbharu.httpsignature.common.HttpRequest
import dev.usbharu.httpsignature.common.SignatureBaseBuilder
class HttpRequestSignatureBaseUtils {
private val fieldProcessorMap = mutableMapOf<String, HttpRequestComponentExtractor>()
fun from(httpRequest: HttpRequest, coveredComponents: List<CoveredComponent>): SignatureBaseBuilder {
val builder = SignatureBaseBuilder()
coveredComponents
.flatMap {
val extractor = (fieldProcessorMap[it.componentParameterType]
?: throw IllegalArgumentException("HttpRequestComponentExtractor ${it.componentParameterType} not found."))
extractor.extract(it.fieldName, httpRequest)
}.forEach {
builder.component(it)
}
return builder
}
}