diff --git a/internal/domain/pkce.go b/internal/domain/pkce.go deleted file mode 100644 index 89b471c..0000000 --- a/internal/domain/pkce.go +++ /dev/null @@ -1,58 +0,0 @@ -//nolint: gosec -package domain - -import ( - "crypto/md5" - "crypto/sha1" - "crypto/sha256" - "crypto/sha512" - "encoding/base64" - "hash" - "io" -) - -type ( - PKCE struct { - Method PKCEMethod - Verifier string - Challenge string - } - - PKCEMethod string -) - -const ( - PKCEMethodMD5 PKCEMethod = "MD5" - PKCEMethodPlain PKCEMethod = "plain" - PKCEMethodS1 PKCEMethod = "S1" - PKCEMethodS256 PKCEMethod = "S256" - PKCEMethodS512 PKCEMethod = "S512" -) - -func (pkce PKCE) IsValid() bool { - h := pkce.Method.Hash() - if h == nil { // NOTE(toby3d): PLAIN - return pkce.Challenge == pkce.Verifier - } - - _, _ = io.WriteString(h, pkce.Verifier) - - return pkce.Challenge == base64.RawURLEncoding.EncodeToString(h.Sum(nil)) -} - -func (m PKCEMethod) Hash() hash.Hash { - switch m { - case PKCEMethodMD5: - return md5.New() - case PKCEMethodS1: - return sha1.New() - case PKCEMethodS256: - return sha256.New() - case PKCEMethodS512: - return sha512.New() - case PKCEMethodPlain: - fallthrough - default: - return nil - } -} diff --git a/internal/domain/pkce_test.go b/internal/domain/pkce_test.go deleted file mode 100644 index 7b88c4c..0000000 --- a/internal/domain/pkce_test.go +++ /dev/null @@ -1,73 +0,0 @@ -package domain_test - -import ( - "encoding/base64" - "io" - "math/rand" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "source.toby3d.me/website/oauth/internal/domain" - "source.toby3d.me/website/oauth/internal/random" -) - -const ( - MinLength int = 42 - MaxLength int = 128 -) - -func TestPKCEIsValid(t *testing.T) { - t.Parallel() - - rand.Seed(time.Now().UnixNano()) - - //nolint: gosec - verifier := random.New().String(MinLength + rand.Intn(MaxLength-MinLength)) - - for _, testCase := range []struct { - Name string - Method domain.PKCEMethod - }{{ - Name: "MD5", - Method: domain.PKCEMethodMD5, - }, { - Name: "plain", - Method: domain.PKCEMethodPlain, - }, { - Name: "S1", - Method: domain.PKCEMethodS1, - }, { - Name: "S256", - Method: domain.PKCEMethodS256, - }, { - Name: "S512", - Method: domain.PKCEMethodS512, - }, { - Name: "fallback to plain", - Method: "UNDEFINED", - }} { - testCase := testCase - - t.Run(testCase.Name, func(t *testing.T) { - t.Parallel() - - pkce := &domain.PKCE{ - Method: testCase.Method, - Verifier: verifier, - Challenge: verifier, - } - - if h := pkce.Method.Hash(); h != nil { - _, err := io.WriteString(h, pkce.Verifier) - require.NoError(t, err) - - pkce.Challenge = base64.RawURLEncoding.EncodeToString(h.Sum(nil)) - } - - assert.True(t, pkce.IsValid()) - }) - } -}