Commit 4303221
Changed files (7)
pkg/dto/client_information_response.go
@@ -9,10 +9,11 @@ import (
)
type ClientInformationResponse struct {
- ClientId string `json:"client_id"`
- ClientSecret string `json:"client_secret"`
- ClientIdIssuedAt int64 `json:"client_id_issued_at"`
- ClientSecretExpiresAt int64 `json:"client_secret_expires_at"`
+ ClientId string `json:"client_id"`
+ ClientSecret string `json:"client_secret"`
+ ClientIdIssuedAt int64 `json:"client_id_issued_at"`
+ ClientSecretExpiresAt int64 `json:"client_secret_expires_at"`
+
RedirectUris []string `json:"redirect_uris"`
GrantTypes []string `json:"grant_types"`
ClientName string `json:"client_name"`
@@ -30,9 +31,9 @@ func NewClientInformationResponse(request *ClientRegistrationRequest) *ClientInf
ClientSecret: uuid.GenerateUUID(),
ClientSecretExpiresAt: expiresAt.Unix(),
RedirectUris: request.RedirectUris,
- TokenEndpointAuthMethod: request.TokenEndpointAuthMethod,
+ TokenEndpointAuthMethod: request.TokenEndpointAuthMethod.String(),
LogoUri: request.LogoUri,
- JwksUri: request.JwksUri,
+ JwksUri: request.JWKSUri,
}
}
pkg/dto/client_information_response_test.go
@@ -9,19 +9,30 @@ import (
func TestClientInformationResponse(t *testing.T) {
t.Run("Valid", func(t *testing.T) {
t.Run("blank client_name", func(t *testing.T) {
- response := NewClientInformationResponse(&ClientRegistrationRequest{ClientName: ""})
+ response := NewClientInformationResponse(&ClientRegistrationRequest{
+ ClientMetadata: ClientMetadata{
+ ClientName: "",
+ },
+ })
assert.Equal(t, InvalidClientMetadata, response.Valid())
})
t.Run("empty redirect_uris", func(t *testing.T) {
- response := NewClientInformationResponse(&ClientRegistrationRequest{ClientName: "Example", RedirectUris: []string{}})
+ response := NewClientInformationResponse(&ClientRegistrationRequest{
+ ClientMetadata: ClientMetadata{
+ ClientName: "Example",
+ RedirectUris: []string{},
+ },
+ })
assert.Equal(t, InvalidRedirectUri, response.Valid())
})
t.Run("invalid redirect_uri", func(t *testing.T) {
assert.Equal(t, InvalidRedirectUri, NewClientInformationResponse(&ClientRegistrationRequest{
- ClientName: "Example",
- RedirectUris: []string{"invalid"},
+ ClientMetadata: ClientMetadata{
+ ClientName: "Example",
+ RedirectUris: []string{"invalid"},
+ },
}).Valid())
})
})
pkg/dto/client_metadata.go
@@ -0,0 +1,19 @@
+package dto
+
+type ClientMetadata struct {
+ RedirectUris []string `json:"redirect_uris"`
+ TokenEndpointAuthMethod TokenEndpointAuthMethod `json:"token_endpoint_auth_method"`
+ GrantTypes []GrantType
+ ResponseTypes []ResponseType
+ ClientName string `json:"client_name"`
+ ClientUri string
+ LogoUri string `json:"logo_uri"`
+ Scope string
+ Contacts []string
+ TermsOfServiceUri string
+ PolicyUri string `json:"policy_uri"`
+ JWKSUri string `json:"jwks_uri"`
+ JWKS JsonWebKeySet `json:"jwks"`
+ SoftwareId string
+ SoftwareVersion string
+}
pkg/dto/client_registration_request.go
@@ -1,11 +1,5 @@
package dto
type ClientRegistrationRequest struct {
- RedirectUris []string `json:"redirect_uris"`
- ClientName string `json:"client_name"`
- TokenEndpointAuthMethod string `json:"token_endpoint_auth_method"`
- PolicyUri string `json:"policy_uri"`
- Jwks JsonWebKeySet `json:"jwks"`
- LogoUri string `json:"logo_uri"`
- JwksUri string `json:"jwks_uri"`
+ ClientMetadata
}
pkg/dto/grant_type.go
@@ -0,0 +1,13 @@
+package dto
+
+type GrantType int
+
+const (
+ AuthorizationCode GrantType = iota
+ Implicit
+ Password
+ ClientCredentials
+ RefreshToken
+ JWTBearer
+ SAML2Bearer
+)
pkg/dto/response_type.go
@@ -0,0 +1,8 @@
+package dto
+
+type ResponseType int
+
+const (
+ Code ResponseType = iota
+ Token
+)
pkg/dto/token_endpoint_auth_method.go
@@ -0,0 +1,46 @@
+package dto
+
+import (
+ "bytes"
+ "encoding/json"
+)
+
+type TokenEndpointAuthMethod int
+
+const (
+ None TokenEndpointAuthMethod = iota
+ ClientSecretPost
+ ClientSecretBasic
+)
+
+var toString = map[TokenEndpointAuthMethod]string{
+ None: "none",
+ ClientSecretPost: "client_secret_post",
+ ClientSecretBasic: "client_secret_basic",
+}
+
+var toID = map[string]TokenEndpointAuthMethod{
+ "none": None,
+ "client_secret_post": ClientSecretPost,
+ "client_secret_basic": ClientSecretBasic,
+}
+
+func (x TokenEndpointAuthMethod) MarshalJSON() ([]byte, error) {
+ buffer := bytes.NewBufferString(`"`)
+ buffer.WriteString(toString[x])
+ buffer.WriteString(`"`)
+ return buffer.Bytes(), nil
+}
+
+func (x *TokenEndpointAuthMethod) UnmarshalJSON(b []byte) error {
+ var val string
+ if err := json.Unmarshal(b, &val); err != nil {
+ return err
+ }
+ *x = toID[val]
+ return nil
+}
+
+func (x TokenEndpointAuthMethod) String() string {
+ return toString[x]
+}