Skip to content

Commit

Permalink
Fix for getkin#706
Browse files Browse the repository at this point in the history
  • Loading branch information
sl255051 committed Dec 15, 2022
1 parent 1b33f15 commit 61c1280
Show file tree
Hide file tree
Showing 2 changed files with 264 additions and 146 deletions.
60 changes: 34 additions & 26 deletions routers/gorillamux/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,6 @@ func NewRouter(doc *openapi3.T) (routers.Router, error) {
muxRouter := mux.NewRouter().UseEncodedPath()
r := &Router{}
for _, path := range orderedPaths(doc.Paths) {
servers := servers

pathItem := doc.Paths[path]
if len(pathItem.Servers) > 0 {
if servers, err = makeServers(pathItem.Servers); err != nil {
Expand Down Expand Up @@ -140,19 +138,13 @@ func makeServers(in openapi3.Servers) ([]srv, error) {
if lhs := strings.TrimSuffix(serverURL, server.Variables[sVar].Default); lhs != "" {
varsUpdater = func(vars map[string]string) { vars[sVar] = lhs }
}
servers = append(servers, srv{
base: server.Variables[sVar].Default,
server: server,
varsUpdater: varsUpdater,
})
continue
}
svr, err := newSrv(serverURL, server, varsUpdater)
if err != nil {
return nil, err
}

var schemes []string
if strings.Contains(serverURL, "://") {
scheme0 := strings.Split(serverURL, "://")[0]
schemes = permutePart(scheme0, server)
serverURL = strings.Replace(serverURL, scheme0+"://", schemes[0]+"://", 1)
servers = append(servers, svr)
continue
}

// If a variable represents the port "http://domain.tld:{port}/bla"
Expand All @@ -172,21 +164,11 @@ func makeServers(in openapi3.Servers) ([]srv, error) {
}
}

u, err := url.Parse(bEncode(serverURL))
svr, err := newSrv(serverURL, server, varsUpdater)
if err != nil {
return nil, err
}
path := bDecode(u.EscapedPath())
if len(path) > 0 && path[len(path)-1] == '/' {
path = path[:len(path)-1]
}
servers = append(servers, srv{
host: bDecode(u.Host), //u.Hostname()?
base: path,
schemes: schemes, // scheme: []string{scheme0}, TODO: https://github.com/gorilla/mux/issues/624
server: server,
varsUpdater: varsUpdater,
})
servers = append(servers, svr)
}
if len(servers) == 0 {
servers = append(servers, srv{})
Expand All @@ -195,6 +177,32 @@ func makeServers(in openapi3.Servers) ([]srv, error) {
return servers, nil
}

func newSrv(serverURL string, server *openapi3.Server, varsUpdater varsf) (srv, error) {
var schemes []string
if strings.Contains(serverURL, "://") {
scheme0 := strings.Split(serverURL, "://")[0]
schemes = permutePart(scheme0, server)
serverURL = strings.Replace(serverURL, scheme0+"://", schemes[0]+"://", 1)
}

u, err := url.Parse(bEncode(serverURL))
if err != nil {
return srv{}, err
}
path := bDecode(u.EscapedPath())
if len(path) > 0 && path[len(path)-1] == '/' {
path = path[:len(path)-1]
}
svr := srv{
host: bDecode(u.Host), //u.Hostname()?
base: path,
schemes: schemes, // scheme: []string{scheme0}, TODO: https://github.com/gorilla/mux/issues/624
server: server,
varsUpdater: varsUpdater,
}
return svr, nil
}

func orderedPaths(paths map[string]*openapi3.PathItem) []string {
// https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md#pathsObject
// When matching URLs, concrete (non-templated) paths would be matched
Expand Down
Loading

0 comments on commit 61c1280

Please sign in to comment.