From cc55006fea1f44b729891e85088051122605fafa Mon Sep 17 00:00:00 2001
From: usbharu <i@usbharu.dev>
Date: Wed, 25 Sep 2024 12:43:17 +0900
Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BA=92=E6=8F=9B=E6=80=A7?=
 =?UTF-8?q?=E3=82=92=E3=82=82=E3=81=9F=E3=81=9B=E3=81=AA=E3=81=8C=E3=82=89?=
 =?UTF-8?q?=E6=96=B0=E3=81=97=E3=81=84API=E3=81=AB=E5=AF=BE=E5=BF=9C?=
 =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89?=
 =?UTF-8?q?=E6=9B=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../dev/usbharu/httpsignature/common/HttpMethod.kt       | 6 +++---
 .../dev/usbharu/httpsignature/common/HttpMethodBase.kt   | 5 +++++
 .../dev/usbharu/httpsignature/common/HttpRequest.kt      | 2 +-
 .../httpsignature/sign/AbstractHttpSignatureSigner.kt    | 8 ++++----
 .../httpsignature/sign/Hs2019HttpSignatureSigner.kt      | 6 +++---
 .../usbharu/httpsignature/sign/HttpSignatureSigner.kt    | 4 ++--
 .../httpsignature/verify/Hs2019HttpSignatureVerifier.kt  | 6 +++---
 .../httpsignature/sign/Hs2019HttpSignatureSignerTest.kt  | 4 +---
 .../v2/DefaultHttpSignatureHeaderParserTest.kt           | 9 ++++++++-
 9 files changed, 30 insertions(+), 20 deletions(-)
 create mode 100644 src/main/kotlin/dev/usbharu/httpsignature/common/HttpMethodBase.kt

diff --git a/src/main/kotlin/dev/usbharu/httpsignature/common/HttpMethod.kt b/src/main/kotlin/dev/usbharu/httpsignature/common/HttpMethod.kt
index 08e9075..5f09e30 100644
--- a/src/main/kotlin/dev/usbharu/httpsignature/common/HttpMethod.kt
+++ b/src/main/kotlin/dev/usbharu/httpsignature/common/HttpMethod.kt
@@ -1,6 +1,6 @@
 package dev.usbharu.httpsignature.common
 
-enum class HttpMethod(val value: String) {
-    GET("get"),
-    POST("post")
+enum class HttpMethod(val value: String, override val methodName: String) : HttpMethodBase {
+    GET("get", "GET"),
+    POST("post", "POST")
 }
diff --git a/src/main/kotlin/dev/usbharu/httpsignature/common/HttpMethodBase.kt b/src/main/kotlin/dev/usbharu/httpsignature/common/HttpMethodBase.kt
new file mode 100644
index 0000000..29fa46c
--- /dev/null
+++ b/src/main/kotlin/dev/usbharu/httpsignature/common/HttpMethodBase.kt
@@ -0,0 +1,5 @@
+package dev.usbharu.httpsignature.common
+
+interface HttpMethodBase {
+    val methodName: String
+}
\ No newline at end of file
diff --git a/src/main/kotlin/dev/usbharu/httpsignature/common/HttpRequest.kt b/src/main/kotlin/dev/usbharu/httpsignature/common/HttpRequest.kt
index 870753a..b796b3b 100644
--- a/src/main/kotlin/dev/usbharu/httpsignature/common/HttpRequest.kt
+++ b/src/main/kotlin/dev/usbharu/httpsignature/common/HttpRequest.kt
@@ -2,4 +2,4 @@ package dev.usbharu.httpsignature.common
 
 import java.net.URL
 
-data class HttpRequest(val url: URL, val headers: HttpHeaders, val method: HttpMethod)
+data class HttpRequest(val url: URL, val headers: HttpHeaders, val method: HttpMethodBase)
diff --git a/src/main/kotlin/dev/usbharu/httpsignature/sign/AbstractHttpSignatureSigner.kt b/src/main/kotlin/dev/usbharu/httpsignature/sign/AbstractHttpSignatureSigner.kt
index a7008b7..883c4f1 100644
--- a/src/main/kotlin/dev/usbharu/httpsignature/sign/AbstractHttpSignatureSigner.kt
+++ b/src/main/kotlin/dev/usbharu/httpsignature/sign/AbstractHttpSignatureSigner.kt
@@ -1,14 +1,14 @@
 package dev.usbharu.httpsignature.sign
 
 import dev.usbharu.httpsignature.common.HttpHeaders
-import dev.usbharu.httpsignature.common.HttpMethod
+import dev.usbharu.httpsignature.common.HttpMethodBase
 import java.net.URL
 
 @Deprecated("")
 abstract class AbstractHttpSignatureSigner : HttpSignatureSigner {
     override fun buildSignString(
         url: URL,
-        method: HttpMethod,
+        method: HttpMethodBase,
         headers: HttpHeaders,
         signHeaders: List<String>
     ): String {
@@ -22,11 +22,11 @@ abstract class AbstractHttpSignatureSigner : HttpSignatureSigner {
         return result
     }
 
-    protected open fun specialHeader(fieldName: String, url: URL, method: HttpMethod): String {
+    protected open fun specialHeader(fieldName: String, url: URL, method: HttpMethodBase): String {
         if (fieldName != "(request-target)") {
             throw IllegalArgumentException(fieldName + "is unsupported type")
         }
-        return "(request-target): ${method.value.lowercase()} ${url.path}"
+        return "(request-target): ${method.methodName.lowercase()} ${url.path}"
     }
 
     // TODO: 複数ヘッダーの正規化をする
diff --git a/src/main/kotlin/dev/usbharu/httpsignature/sign/Hs2019HttpSignatureSigner.kt b/src/main/kotlin/dev/usbharu/httpsignature/sign/Hs2019HttpSignatureSigner.kt
index b80fa09..d9607a8 100644
--- a/src/main/kotlin/dev/usbharu/httpsignature/sign/Hs2019HttpSignatureSigner.kt
+++ b/src/main/kotlin/dev/usbharu/httpsignature/sign/Hs2019HttpSignatureSigner.kt
@@ -1,6 +1,6 @@
 package dev.usbharu.httpsignature.sign
 
-import dev.usbharu.httpsignature.common.HttpMethod
+import dev.usbharu.httpsignature.common.HttpMethodBase
 import dev.usbharu.httpsignature.common.HttpRequest
 import dev.usbharu.httpsignature.common.PrivateKey
 import java.net.URL
@@ -46,10 +46,10 @@ class Hs2019HttpSignatureSigner(private val expires: Long,private val salt:Int =
     }
 
     @Throws(IllegalArgumentException::class)
-    override fun specialHeader(fieldName: String, url: URL, method: HttpMethod): String {
+    override fun specialHeader(fieldName: String, url: URL, method: HttpMethodBase): String {
         return when (fieldName) {
             "(request-target)" -> {
-                "(request-target): ${method.value.lowercase()} ${url.path}"
+                "(request-target): ${method.methodName.lowercase()} ${url.path}"
             }
 
             "(created)" -> {
diff --git a/src/main/kotlin/dev/usbharu/httpsignature/sign/HttpSignatureSigner.kt b/src/main/kotlin/dev/usbharu/httpsignature/sign/HttpSignatureSigner.kt
index f1cf76a..828a09f 100644
--- a/src/main/kotlin/dev/usbharu/httpsignature/sign/HttpSignatureSigner.kt
+++ b/src/main/kotlin/dev/usbharu/httpsignature/sign/HttpSignatureSigner.kt
@@ -1,7 +1,7 @@
 package dev.usbharu.httpsignature.sign
 
 import dev.usbharu.httpsignature.common.HttpHeaders
-import dev.usbharu.httpsignature.common.HttpMethod
+import dev.usbharu.httpsignature.common.HttpMethodBase
 import dev.usbharu.httpsignature.common.HttpRequest
 import dev.usbharu.httpsignature.common.PrivateKey
 import java.net.URL
@@ -12,7 +12,7 @@ interface HttpSignatureSigner {
     fun signRaw(signString: String, privateKey: PrivateKey, signHeaders: List<String>): String
     fun buildSignString(
         url: URL,
-        method: HttpMethod,
+        method: HttpMethodBase,
         headers: HttpHeaders,
         signHeaders: List<String>
     ): String
diff --git a/src/main/kotlin/dev/usbharu/httpsignature/verify/Hs2019HttpSignatureVerifier.kt b/src/main/kotlin/dev/usbharu/httpsignature/verify/Hs2019HttpSignatureVerifier.kt
index 6019cf8..b2c1b8a 100644
--- a/src/main/kotlin/dev/usbharu/httpsignature/verify/Hs2019HttpSignatureVerifier.kt
+++ b/src/main/kotlin/dev/usbharu/httpsignature/verify/Hs2019HttpSignatureVerifier.kt
@@ -1,7 +1,7 @@
 package dev.usbharu.httpsignature.verify
 
 import dev.usbharu.httpsignature.common.HttpHeaders
-import dev.usbharu.httpsignature.common.HttpMethod
+import dev.usbharu.httpsignature.common.HttpMethodBase
 import dev.usbharu.httpsignature.common.HttpRequest
 import dev.usbharu.httpsignature.common.PublicKey
 import java.net.URL
@@ -79,7 +79,7 @@ class Hs2019HttpSignatureVerifier(
 
     private fun buildSignString(
         url: URL,
-        method: HttpMethod,
+        method: HttpMethodBase,
         headers: HttpHeaders,
         signHeaders: List<String>,
         created: Long?,
@@ -88,7 +88,7 @@ class Hs2019HttpSignatureVerifier(
         return signHeaders.joinToString("\n") {
             when (it) {
                 "(request-target)" -> {
-                    "(request-target): ${method.value.lowercase()} ${url.path}"
+                    "(request-target): ${method.methodName.lowercase()} ${url.path}"
                 }
 
                 "(created)" -> {
diff --git a/src/test/kotlin/dev/usbharu/httpsignature/sign/Hs2019HttpSignatureSignerTest.kt b/src/test/kotlin/dev/usbharu/httpsignature/sign/Hs2019HttpSignatureSignerTest.kt
index e517c4b..c8fb563 100644
--- a/src/test/kotlin/dev/usbharu/httpsignature/sign/Hs2019HttpSignatureSignerTest.kt
+++ b/src/test/kotlin/dev/usbharu/httpsignature/sign/Hs2019HttpSignatureSignerTest.kt
@@ -4,14 +4,12 @@ import dev.usbharu.httpsignature.common.HttpHeaders
 import dev.usbharu.httpsignature.common.HttpMethod
 import dev.usbharu.httpsignature.common.HttpRequest
 import dev.usbharu.httpsignature.common.PrivateKey
-import org.junit.jupiter.api.Assertions.*
+import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Test
-import org.mockito.MockSettings
 import org.mockito.Mockito
 import org.mockito.Mockito.*
 import java.net.URL
 import java.security.KeyFactory
-import java.security.SignatureSpi
 import java.security.interfaces.RSAPrivateKey
 import java.security.interfaces.RSAPublicKey
 import java.security.spec.PKCS8EncodedKeySpec
diff --git a/src/test/kotlin/dev/usbharu/httpsignature/v2/DefaultHttpSignatureHeaderParserTest.kt b/src/test/kotlin/dev/usbharu/httpsignature/v2/DefaultHttpSignatureHeaderParserTest.kt
index dbde403..57c6d2f 100644
--- a/src/test/kotlin/dev/usbharu/httpsignature/v2/DefaultHttpSignatureHeaderParserTest.kt
+++ b/src/test/kotlin/dev/usbharu/httpsignature/v2/DefaultHttpSignatureHeaderParserTest.kt
@@ -12,7 +12,14 @@ class DefaultHttpSignatureHeaderParserTest {
                 "sig1=(\"@method\" \"@target-uri\" \"@authority\" " +
                         "     \"content-digest\" \"cache-control\");" +
                         "     created=1618884475;keyid=\"test-key-rsa-pss\""
-            ), listOf()
+            ), listOf(
+                "sig1=:P0wLUszWQjoi54udOtydf9IWTfNhy+r53jGFj9XZuP4uKwxyJo" +
+                        "1RSHi+oEF1FuX6O29d+lbxwwBao1BAgadijW+7O/PyezlTnqAOVPWx9GlyntiCiHz" +
+                        "C87qmSQjvu1CFyFuWSjdGa3qLYYlNm7pVaJFalQiKWnUaqfT4LyttaXyoyZW84jS8" +
+                        "gyarxAiWI97mPXU+OVM64+HVBHmnEsS+lTeIsEQo36T3NFf2CujWARPQg53r58Rmp" +
+                        "Z+J9eKR2CD6IJQvacn5A4Ix5BUAVGqlyp8JYm+S/CWJi31PNUjRRCusCVRj05NrxA" +
+                        "BNFv3r5S9IXf2fYJK+eyW4AiGVMvMcOg==:"
+            )
         )
     }