From 2b71e2f10b7fcac12a1c678360a528bec5a646f4 Mon Sep 17 00:00:00 2001 From: usbharu <i@usbharu.dev> Date: Wed, 25 Sep 2024 14:10:16 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20HttpRequest=E3=81=8B=E3=82=89Signature?= =?UTF-8?q?=20Base=E3=82=92=E7=94=9F=E6=88=90=E3=81=99=E3=82=8B=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=82=92=E7=B0=A1=E5=8D=98=E3=81=AB=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=84=E3=81=A4=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/SignatureBaseBuilder.kt | 5 +++++ .../AbstractHttpRequestComponentExtractor.kt | 14 ++++++++++++ .../httpsignature/utils/CoveredComponent.kt | 3 +++ .../httpsignature/utils/FieldProcessor.kt | 7 ++++++ .../utils/HttpRequestComponentExtractor.kt | 8 +++++++ .../utils/HttpRequestSignatureBaseUtils.kt | 22 +++++++++++++++++++ 6 files changed, 59 insertions(+) create mode 100644 src/main/kotlin/dev/usbharu/httpsignature/utils/AbstractHttpRequestComponentExtractor.kt create mode 100644 src/main/kotlin/dev/usbharu/httpsignature/utils/CoveredComponent.kt create mode 100644 src/main/kotlin/dev/usbharu/httpsignature/utils/FieldProcessor.kt create mode 100644 src/main/kotlin/dev/usbharu/httpsignature/utils/HttpRequestComponentExtractor.kt create mode 100644 src/main/kotlin/dev/usbharu/httpsignature/utils/HttpRequestSignatureBaseUtils.kt diff --git a/src/main/kotlin/dev/usbharu/httpsignature/common/SignatureBaseBuilder.kt b/src/main/kotlin/dev/usbharu/httpsignature/common/SignatureBaseBuilder.kt index 6111e52..b7a45b2 100644 --- a/src/main/kotlin/dev/usbharu/httpsignature/common/SignatureBaseBuilder.kt +++ b/src/main/kotlin/dev/usbharu/httpsignature/common/SignatureBaseBuilder.kt @@ -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 diff --git a/src/main/kotlin/dev/usbharu/httpsignature/utils/AbstractHttpRequestComponentExtractor.kt b/src/main/kotlin/dev/usbharu/httpsignature/utils/AbstractHttpRequestComponentExtractor.kt new file mode 100644 index 0000000..cac3a22 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/utils/AbstractHttpRequestComponentExtractor.kt @@ -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> +} \ No newline at end of file diff --git a/src/main/kotlin/dev/usbharu/httpsignature/utils/CoveredComponent.kt b/src/main/kotlin/dev/usbharu/httpsignature/utils/CoveredComponent.kt new file mode 100644 index 0000000..9b74249 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/utils/CoveredComponent.kt @@ -0,0 +1,3 @@ +package dev.usbharu.httpsignature.utils + +data class CoveredComponent(val fieldName: String, val componentParameterType: String) diff --git a/src/main/kotlin/dev/usbharu/httpsignature/utils/FieldProcessor.kt b/src/main/kotlin/dev/usbharu/httpsignature/utils/FieldProcessor.kt new file mode 100644 index 0000000..74eedbf --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/utils/FieldProcessor.kt @@ -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> +} \ No newline at end of file diff --git a/src/main/kotlin/dev/usbharu/httpsignature/utils/HttpRequestComponentExtractor.kt b/src/main/kotlin/dev/usbharu/httpsignature/utils/HttpRequestComponentExtractor.kt new file mode 100644 index 0000000..886eddb --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/utils/HttpRequestComponentExtractor.kt @@ -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> +} \ No newline at end of file diff --git a/src/main/kotlin/dev/usbharu/httpsignature/utils/HttpRequestSignatureBaseUtils.kt b/src/main/kotlin/dev/usbharu/httpsignature/utils/HttpRequestSignatureBaseUtils.kt new file mode 100644 index 0000000..dd4bbe7 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/utils/HttpRequestSignatureBaseUtils.kt @@ -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 + } +} \ No newline at end of file