feat: RFC9421への対応を開始

SignatureBaseの生成をするために必要なものを作成
This commit is contained in:
usbharu 2024-09-23 12:44:26 +09:00
parent d2fad0bfff
commit 940e82f279
Signed by: usbharu
GPG Key ID: 95CBCF7046307B77
5 changed files with 58 additions and 1 deletions

View File

@ -4,7 +4,7 @@ plugins {
}
group = "dev.usbharu"
version = "1.0.0"
version = "2.0.0-SNAPSHOT"
repositories {
mavenCentral()

View File

@ -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
}

View File

@ -0,0 +1,6 @@
package dev.usbharu.httpsignature.v2
enum class SignatureAlgorithm(val value: String) {
;
}

View File

@ -0,0 +1,30 @@
package dev.usbharu.httpsignature.v2
class SignatureBase() {
private val list = mutableMapOf<String, Component>()
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
}
}

View File

@ -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?,
)