aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/go-openapi/swag/loading.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/go-openapi/swag/loading.go')
-rw-r--r--vendor/github.com/go-openapi/swag/loading.go24
1 files changed, 23 insertions, 1 deletions
diff --git a/vendor/github.com/go-openapi/swag/loading.go b/vendor/github.com/go-openapi/swag/loading.go
index 0bb22df140..9a60409725 100644
--- a/vendor/github.com/go-openapi/swag/loading.go
+++ b/vendor/github.com/go-openapi/swag/loading.go
@@ -19,7 +19,9 @@ import (
"io/ioutil"
"log"
"net/http"
+ "net/url"
"path/filepath"
+ "runtime"
"strings"
"time"
)
@@ -53,10 +55,30 @@ func LoadStrategy(path string, local, remote func(string) ([]byte, error)) func(
return remote
}
return func(pth string) ([]byte, error) {
- upth, err := pathUnescape(strings.TrimPrefix(pth, `file://`))
+ upth, err := pathUnescape(pth)
if err != nil {
return nil, err
}
+
+ if strings.HasPrefix(pth, `file://`) {
+ if runtime.GOOS == "windows" {
+ // support for canonical file URIs on windows.
+ // Zero tolerance here for dodgy URIs.
+ u, _ := url.Parse(upth)
+ if u.Host != "" {
+ // assume UNC name (volume share)
+ // file://host/share/folder\... ==> \\host\share\path\folder
+ // NOTE: UNC port not yet supported
+ upth = strings.Join([]string{`\`, u.Host, u.Path}, `\`)
+ } else {
+ // file:///c:/folder/... ==> just remove the leading slash
+ upth = strings.TrimPrefix(upth, `file:///`)
+ }
+ } else {
+ upth = strings.TrimPrefix(upth, `file://`)
+ }
+ }
+
return local(filepath.FromSlash(upth))
}
}