Browse code

bump gorilla/mux v1.7.2

full diff: https://github.com/gorilla/mux/compare/v1.7.0...v1.7.2

includes:

- gorilla/mux#457 adding Router.Name to create new Route
- gorilla/mux#447 host:port matching does not require a :port to be specified

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
(cherry picked from commit 25b451e01b8a1b44f45a67cb4731ff61d7b1ebc1)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>

Sebastiaan van Stijn authored on 2019/06/20 20:33:46
Showing 4 changed files
... ...
@@ -5,7 +5,7 @@ github.com/docker/libtrust                          9cbd2a1374f46905c68a4eb3694a
5 5
 github.com/go-check/check                           4ed411733c5785b40214c70bce814c3a3a689609 https://github.com/cpuguy83/check.git
6 6
 github.com/golang/gddo                              9b12a26f3fbd7397dee4e20939ddca719d840d2a
7 7
 github.com/google/uuid                              0cd6bf5da1e1c83f8b45653022c74f71af0538a4 # v1.1.1
8
-github.com/gorilla/mux                              a7962380ca08b5a188038c69871b8d3fbdf31e89 # v1.7.0
8
+github.com/gorilla/mux                              ed099d42384823742bba0bf9a72b53b55c9e2e38 # v1.7.2
9 9
 github.com/Microsoft/opengcs                        a10967154e143a36014584a6f664344e3bb0aa64
10 10
 
11 11
 github.com/creack/pty                               2769f65a3a94eb8f876f44a0459d24ae7ad2e488 # v1.1.7
... ...
@@ -283,6 +283,12 @@ func (r *Router) NewRoute() *Route {
283 283
 	return route
284 284
 }
285 285
 
286
+// Name registers a new route with a name.
287
+// See Route.Name().
288
+func (r *Router) Name(name string) *Route {
289
+	return r.NewRoute().Name(name)
290
+}
291
+
286 292
 // Handle registers a new route with a matcher for the URL path.
287 293
 // See Route.Path() and Route.Handler().
288 294
 func (r *Router) Handle(path string, handler http.Handler) *Route {
... ...
@@ -113,6 +113,13 @@ func newRouteRegexp(tpl string, typ regexpType, options routeRegexpOptions) (*ro
113 113
 	if typ != regexpTypePrefix {
114 114
 		pattern.WriteByte('$')
115 115
 	}
116
+
117
+	var wildcardHostPort bool
118
+	if typ == regexpTypeHost {
119
+		if !strings.Contains(pattern.String(), ":") {
120
+			wildcardHostPort = true
121
+		}
122
+	}
116 123
 	reverse.WriteString(raw)
117 124
 	if endSlash {
118 125
 		reverse.WriteByte('/')
... ...
@@ -131,13 +138,14 @@ func newRouteRegexp(tpl string, typ regexpType, options routeRegexpOptions) (*ro
131 131
 
132 132
 	// Done!
133 133
 	return &routeRegexp{
134
-		template:   template,
135
-		regexpType: typ,
136
-		options:    options,
137
-		regexp:     reg,
138
-		reverse:    reverse.String(),
139
-		varsN:      varsN,
140
-		varsR:      varsR,
134
+		template:         template,
135
+		regexpType:       typ,
136
+		options:          options,
137
+		regexp:           reg,
138
+		reverse:          reverse.String(),
139
+		varsN:            varsN,
140
+		varsR:            varsR,
141
+		wildcardHostPort: wildcardHostPort,
141 142
 	}, nil
142 143
 }
143 144
 
... ...
@@ -158,11 +166,22 @@ type routeRegexp struct {
158 158
 	varsN []string
159 159
 	// Variable regexps (validators).
160 160
 	varsR []*regexp.Regexp
161
+	// Wildcard host-port (no strict port match in hostname)
162
+	wildcardHostPort bool
161 163
 }
162 164
 
163 165
 // Match matches the regexp against the URL host or path.
164 166
 func (r *routeRegexp) Match(req *http.Request, match *RouteMatch) bool {
165
-	if r.regexpType != regexpTypeHost {
167
+	if r.regexpType == regexpTypeHost {
168
+		host := getHost(req)
169
+		if r.wildcardHostPort {
170
+			// Don't be strict on the port match
171
+			if i := strings.Index(host, ":"); i != -1 {
172
+				host = host[:i]
173
+			}
174
+		}
175
+		return r.regexp.MatchString(host)
176
+	} else {
166 177
 		if r.regexpType == regexpTypeQuery {
167 178
 			return r.matchQueryString(req)
168 179
 		}
... ...
@@ -172,8 +191,6 @@ func (r *routeRegexp) Match(req *http.Request, match *RouteMatch) bool {
172 172
 		}
173 173
 		return r.regexp.MatchString(path)
174 174
 	}
175
-
176
-	return r.regexp.MatchString(getHost(req))
177 175
 }
178 176
 
179 177
 // url builds a URL part using the given values.
... ...
@@ -383,7 +383,7 @@ func (r *Route) PathPrefix(tpl string) *Route {
383 383
 // The above route will only match if the URL contains the defined queries
384 384
 // values, e.g.: ?foo=bar&id=42.
385 385
 //
386
-// It the value is an empty string, it will match any value if the key is set.
386
+// If the value is an empty string, it will match any value if the key is set.
387 387
 //
388 388
 // Variables can define an optional regexp pattern to be matched:
389 389
 //