diff --git a/build.gradle.kts b/build.gradle.kts index 657a87b..81d9d2f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } group = "dev.usbharu" -version = "1.0.0" +version = "2.0.0-SNAPSHOT" repositories { mavenCentral() diff --git a/src/main/kotlin/dev/usbharu/httpsignature/v2/Component.kt b/src/main/kotlin/dev/usbharu/httpsignature/v2/Component.kt new file mode 100644 index 0000000..72eb09c --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/v2/Component.kt @@ -0,0 +1,9 @@ +package dev.usbharu.httpsignature.v2 + +interface Component { + val componentName: String + val componentIdentifier: String + get() = "\"$componentName\":$componentParameter" + val componentParameter: String + val componentValue: String +} diff --git a/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureAlgorithm.kt b/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureAlgorithm.kt new file mode 100644 index 0000000..e88cb82 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureAlgorithm.kt @@ -0,0 +1,6 @@ +package dev.usbharu.httpsignature.v2 + +enum class SignatureAlgorithm(val value: String) { + ; + +} \ No newline at end of file diff --git a/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureBase.kt b/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureBase.kt new file mode 100644 index 0000000..66fe13f --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureBase.kt @@ -0,0 +1,30 @@ +package dev.usbharu.httpsignature.v2 + +class SignatureBase() { + + private val list = mutableMapOf() + + fun addComponent(component: Component) { + if (list[component.componentIdentifier] != null) { + throw IllegalArgumentException("Component with identifier ${component.componentIdentifier} already exists.") + } + list[component.componentIdentifier] = component + } + + fun generateSignatureBase(signatureParameter: SignatureParameter): String { + val signatureBase = + list.values.joinToString(postfix = "\n") { component -> "${component.componentIdentifier}: ${component.componentValue}\n" } + + val signatureParams = listOfNotNull( + list.keys.joinToString(" ", "(", ")"), + signatureParameter.algorithm?.let { algorithm -> "alg=\"${algorithm.value}\"" }, + signatureParameter.keyId?.let { keyId -> "keyid=\"$keyId\"" }, + signatureParameter.created?.let { created -> "created=$created" }, + signatureParameter.expires?.let { expires -> "expires=$expires" }, + signatureParameter.nonce?.let { nonce -> "nonce=\"$nonce\"" }, + signatureParameter.tag?.let { tag -> "tag=\"$tag\"" }, + ).joinToString(";", prefix = "\"@signature-params\": ") + + return signatureBase + signatureParams + } +} diff --git a/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureParameter.kt b/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureParameter.kt new file mode 100644 index 0000000..fb6d7d7 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureParameter.kt @@ -0,0 +1,12 @@ +package dev.usbharu.httpsignature.v2 + +import java.time.Instant + +data class SignatureParameter( + val algorithm: SignatureAlgorithm?, + val keyId: String?, + val created: Instant?, + val expires: Instant?, + val nonce: String?, + val tag: String?, +)