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): SignatureBaseBuilder { + fun header(headerName: String, headerValues: List): 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