From c15cb74b7335829b8a77b86f5ce4193856507626 Mon Sep 17 00:00:00 2001 From: usbharu <i@usbharu.dev> Date: Tue, 24 Sep 2024 11:27:23 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20StructuredField=E3=82=92=E6=89=B1?= =?UTF-8?q?=E3=81=88=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../httpsignature/v2/SignatureBaseBuilder.kt | 20 +++++++++++++++++-- .../v2/StructuredFieldComponent.kt | 12 +++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/dev/usbharu/httpsignature/v2/StructuredFieldComponent.kt diff --git a/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureBaseBuilder.kt b/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureBaseBuilder.kt index db1c9a5..6c2c385 100644 --- a/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureBaseBuilder.kt +++ b/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureBaseBuilder.kt @@ -1,5 +1,6 @@ package dev.usbharu.httpsignature.v2 +import org.greenbytes.http.sfv.Parser import java.net.http.HttpRequest import kotlin.jvm.optionals.getOrNull @@ -56,15 +57,30 @@ class SignatureBaseBuilder { return this } - fun header(headerName:String,headerValues:List<String>): SignatureBaseBuilder { + fun header(headerName: String, headerValues: List<String>): SignatureBaseBuilder { signatureBase.addComponent(HttpMessageComponent(headerName, headerValues)) return this } - fun header(headerName: String,headerValue:String): SignatureBaseBuilder { + fun header(headerName: String, headerValue: String): SignatureBaseBuilder { return header(headerName, listOf(headerValue)) } + fun structuredFieldItem(fieldName: String, fieldValue: String): SignatureBaseBuilder { + signatureBase.addComponent(StructuredFieldComponent(fieldName, Parser(fieldValue).parseItem())) + return this + } + + fun structuredFieldList(fieldName: String, fieldValue: String): SignatureBaseBuilder { + signatureBase.addComponent(StructuredFieldComponent(fieldName, Parser(fieldValue).parseList())) + return this + } + + fun structuredFieldDictionary(fieldName: String, fieldValue: String): SignatureBaseBuilder { + signatureBase.addComponent(StructuredFieldComponent(fieldName, Parser(fieldValue).parseDictionary())) + return this + } + companion object { fun fromHttpRequest(httpRequest: HttpRequest): SignatureBaseBuilder { val signatureBaseBuilder = SignatureBaseBuilder() diff --git a/src/main/kotlin/dev/usbharu/httpsignature/v2/StructuredFieldComponent.kt b/src/main/kotlin/dev/usbharu/httpsignature/v2/StructuredFieldComponent.kt new file mode 100644 index 0000000..9efc9a7 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/v2/StructuredFieldComponent.kt @@ -0,0 +1,12 @@ +package dev.usbharu.httpsignature.v2 + +import org.greenbytes.http.sfv.Type + +class StructuredFieldComponent(val name: String, val structuredField: Type<*>) : Component { + override val componentName: String + get() = name + override val componentParameter: String + get() = "sf" + override val componentValue: String + get() = structuredField.serialize() +} \ No newline at end of file