refactor: 互換性をもたせながら新しいAPIに対応できるように変更

This commit is contained in:
usbharu 2024-09-25 12:43:17 +09:00
parent 9f02f19ca7
commit cc55006fea
Signed by: usbharu
GPG Key ID: 95CBCF7046307B77
9 changed files with 30 additions and 20 deletions

View File

@ -1,6 +1,6 @@
package dev.usbharu.httpsignature.common package dev.usbharu.httpsignature.common
enum class HttpMethod(val value: String) { enum class HttpMethod(val value: String, override val methodName: String) : HttpMethodBase {
GET("get"), GET("get", "GET"),
POST("post") POST("post", "POST")
} }

View File

@ -0,0 +1,5 @@
package dev.usbharu.httpsignature.common
interface HttpMethodBase {
val methodName: String
}

View File

@ -2,4 +2,4 @@ package dev.usbharu.httpsignature.common
import java.net.URL 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)

View File

@ -1,14 +1,14 @@
package dev.usbharu.httpsignature.sign package dev.usbharu.httpsignature.sign
import dev.usbharu.httpsignature.common.HttpHeaders import dev.usbharu.httpsignature.common.HttpHeaders
import dev.usbharu.httpsignature.common.HttpMethod import dev.usbharu.httpsignature.common.HttpMethodBase
import java.net.URL import java.net.URL
@Deprecated("") @Deprecated("")
abstract class AbstractHttpSignatureSigner : HttpSignatureSigner { abstract class AbstractHttpSignatureSigner : HttpSignatureSigner {
override fun buildSignString( override fun buildSignString(
url: URL, url: URL,
method: HttpMethod, method: HttpMethodBase,
headers: HttpHeaders, headers: HttpHeaders,
signHeaders: List<String> signHeaders: List<String>
): String { ): String {
@ -22,11 +22,11 @@ abstract class AbstractHttpSignatureSigner : HttpSignatureSigner {
return result 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)") { if (fieldName != "(request-target)") {
throw IllegalArgumentException(fieldName + "is unsupported type") throw IllegalArgumentException(fieldName + "is unsupported type")
} }
return "(request-target): ${method.value.lowercase()} ${url.path}" return "(request-target): ${method.methodName.lowercase()} ${url.path}"
} }
// TODO: 複数ヘッダーの正規化をする // TODO: 複数ヘッダーの正規化をする

View File

@ -1,6 +1,6 @@
package dev.usbharu.httpsignature.sign 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.HttpRequest
import dev.usbharu.httpsignature.common.PrivateKey import dev.usbharu.httpsignature.common.PrivateKey
import java.net.URL import java.net.URL
@ -46,10 +46,10 @@ class Hs2019HttpSignatureSigner(private val expires: Long,private val salt:Int =
} }
@Throws(IllegalArgumentException::class) @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) { return when (fieldName) {
"(request-target)" -> { "(request-target)" -> {
"(request-target): ${method.value.lowercase()} ${url.path}" "(request-target): ${method.methodName.lowercase()} ${url.path}"
} }
"(created)" -> { "(created)" -> {

View File

@ -1,7 +1,7 @@
package dev.usbharu.httpsignature.sign package dev.usbharu.httpsignature.sign
import dev.usbharu.httpsignature.common.HttpHeaders 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.HttpRequest
import dev.usbharu.httpsignature.common.PrivateKey import dev.usbharu.httpsignature.common.PrivateKey
import java.net.URL import java.net.URL
@ -12,7 +12,7 @@ interface HttpSignatureSigner {
fun signRaw(signString: String, privateKey: PrivateKey, signHeaders: List<String>): String fun signRaw(signString: String, privateKey: PrivateKey, signHeaders: List<String>): String
fun buildSignString( fun buildSignString(
url: URL, url: URL,
method: HttpMethod, method: HttpMethodBase,
headers: HttpHeaders, headers: HttpHeaders,
signHeaders: List<String> signHeaders: List<String>
): String ): String

View File

@ -1,7 +1,7 @@
package dev.usbharu.httpsignature.verify package dev.usbharu.httpsignature.verify
import dev.usbharu.httpsignature.common.HttpHeaders 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.HttpRequest
import dev.usbharu.httpsignature.common.PublicKey import dev.usbharu.httpsignature.common.PublicKey
import java.net.URL import java.net.URL
@ -79,7 +79,7 @@ class Hs2019HttpSignatureVerifier(
private fun buildSignString( private fun buildSignString(
url: URL, url: URL,
method: HttpMethod, method: HttpMethodBase,
headers: HttpHeaders, headers: HttpHeaders,
signHeaders: List<String>, signHeaders: List<String>,
created: Long?, created: Long?,
@ -88,7 +88,7 @@ class Hs2019HttpSignatureVerifier(
return signHeaders.joinToString("\n") { return signHeaders.joinToString("\n") {
when (it) { when (it) {
"(request-target)" -> { "(request-target)" -> {
"(request-target): ${method.value.lowercase()} ${url.path}" "(request-target): ${method.methodName.lowercase()} ${url.path}"
} }
"(created)" -> { "(created)" -> {

View File

@ -4,14 +4,12 @@ import dev.usbharu.httpsignature.common.HttpHeaders
import dev.usbharu.httpsignature.common.HttpMethod import dev.usbharu.httpsignature.common.HttpMethod
import dev.usbharu.httpsignature.common.HttpRequest import dev.usbharu.httpsignature.common.HttpRequest
import dev.usbharu.httpsignature.common.PrivateKey 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.junit.jupiter.api.Test
import org.mockito.MockSettings
import org.mockito.Mockito import org.mockito.Mockito
import org.mockito.Mockito.* import org.mockito.Mockito.*
import java.net.URL import java.net.URL
import java.security.KeyFactory import java.security.KeyFactory
import java.security.SignatureSpi
import java.security.interfaces.RSAPrivateKey import java.security.interfaces.RSAPrivateKey
import java.security.interfaces.RSAPublicKey import java.security.interfaces.RSAPublicKey
import java.security.spec.PKCS8EncodedKeySpec import java.security.spec.PKCS8EncodedKeySpec

View File

@ -12,7 +12,14 @@ class DefaultHttpSignatureHeaderParserTest {
"sig1=(\"@method\" \"@target-uri\" \"@authority\" " + "sig1=(\"@method\" \"@target-uri\" \"@authority\" " +
" \"content-digest\" \"cache-control\");" + " \"content-digest\" \"cache-control\");" +
" created=1618884475;keyid=\"test-key-rsa-pss\"" " 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==:"
)
) )
} }