scope form encoding

This commit is contained in:
Livio Amstutz 2020-09-29 08:13:51 +02:00
parent 1661b40fbe
commit 507a437c56
3 changed files with 16 additions and 7 deletions

View file

@ -60,8 +60,8 @@ type ResponseType string
type Scopes []string
func (s *Scopes) Encode() string {
return strings.Join(*s, " ")
func (s Scopes) Encode() string {
return strings.Join(s, " ")
}
func (s *Scopes) UnmarshalText(text []byte) error {

View file

@ -5,10 +5,12 @@ import (
"errors"
"net/http"
"net/url"
"reflect"
"strings"
"time"
"github.com/google/uuid"
"github.com/gorilla/schema"
"github.com/caos/oidc/pkg/oidc"
"github.com/caos/oidc/pkg/oidc/grants"
@ -24,6 +26,16 @@ const (
jwtProfileKey = "urn:ietf:params:oauth:grant-type:jwt-bearer"
)
var (
encoder = func() utils.Encoder {
e := schema.NewEncoder()
e.RegisterEncoder(oidc.Scopes{}, func(value reflect.Value) string {
return value.Interface().(oidc.Scopes).Encode()
})
return e
}()
)
//RelayingParty declares the minimal interface for oidc clients
type RelayingParty interface {
//OAuthConfig returns the oauth2 Config
@ -334,7 +346,7 @@ func CallTokenEndpoint(request interface{}, rp RelayingParty) (newToken *oauth2.
}
func callTokenEndpoint(request interface{}, authFn interface{}, rp RelayingParty) (newToken *oauth2.Token, err error) {
req, err := utils.FormRequest(rp.OAuthConfig().Endpoint.TokenURL, request, authFn)
req, err := utils.FormRequest(rp.OAuthConfig().Endpoint.TokenURL, request, encoder, authFn)
if err != nil {
return nil, err
}

View file

@ -10,8 +10,6 @@ import (
"net/url"
"strings"
"time"
"github.com/gorilla/schema"
)
var (
@ -36,9 +34,8 @@ func AuthorizeBasic(user, password string) RequestAuthorization {
}
}
func FormRequest(endpoint string, request interface{}, authFn interface{}) (*http.Request, error) {
func FormRequest(endpoint string, request interface{}, encoder Encoder, authFn interface{}) (*http.Request, error) {
form := url.Values{}
encoder := schema.NewEncoder()
if err := encoder.Encode(request, form); err != nil {
return nil, err
}