1
0
Fork 0
forked from forgejo/forgejo
This commit is contained in:
techknowlogick 2021-02-28 18:08:33 -05:00 committed by GitHub
parent 030646eea4
commit 47f6a4ec3f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
947 changed files with 26119 additions and 7062 deletions

View file

@ -806,19 +806,15 @@ func getBody(request *http.Request) ([]byte, error) {
return originalBody, nil
}
func parseBody(request *http.Request) (map[string]string, error) {
userParams := map[string]string{}
func parseBody(request *http.Request) (map[string][]string, error) {
userParams := map[string][]string{}
// TODO(mrjones): factor parameter extraction into a separate method
if request.Header.Get("Content-Type") !=
"application/x-www-form-urlencoded" {
// Most of the time we get parameters from the query string:
for k, vs := range request.URL.Query() {
if len(vs) != 1 {
return nil, fmt.Errorf("Must have exactly one value per param")
}
userParams[k] = vs[0]
userParams[k] = vs
}
} else {
// x-www-form-urlencoded parameters come from the body instead:
@ -833,24 +829,21 @@ func parseBody(request *http.Request) (map[string]string, error) {
}
for k, vs := range params {
if len(vs) != 1 {
return nil, fmt.Errorf("Must have exactly one value per param")
}
userParams[k] = vs[0]
userParams[k] = vs
}
}
return userParams, nil
}
func paramsToSortedPairs(params map[string]string) pairs {
func paramsToSortedPairs(params map[string][]string) pairs {
// Sort parameters alphabetically
paramPairs := make(pairs, len(params))
i := 0
for key, value := range params {
paramPairs[i] = pair{key: key, value: value}
i++
paramPairs := pairs([]pair{})
for key, values := range params {
for _, value := range values {
paramPairs = append(paramPairs, pair{key: key, value: value})
}
}
sort.Sort(paramPairs)

View file

@ -58,13 +58,16 @@ func makeURLAbs(url *url.URL, request *http.Request) {
// IsAuthorized takes an *http.Request and returns a pointer to a string containing the consumer key,
// or nil if not authorized
func (provider *Provider) IsAuthorized(request *http.Request) (*string, error) {
var userParams = map[string]string{}
var err error
var userParams map[string]string
// start with the body/query params
userParams, err = parseBody(request)
if err != nil {
if params_temp, err := parseBody(request); err != nil {
return nil, err
} else {
for k, v := range params_temp {
userParams[k] = v[0]
}
}
// if the oauth params are in the Authorization header, grab them, and