summaryrefslogtreecommitdiff
path: root/modules/caddyhttp/subroute.go
diff options
context:
space:
mode:
authorMatthew Holt <mholt@users.noreply.github.com>2019-07-11 17:02:57 -0600
committerMatthew Holt <mholt@users.noreply.github.com>2019-07-11 17:02:57 -0600
commiteb8625f7744ba5e72b51549adc086e45313267cb (patch)
treeac1c77bccd7a1d23cb8e1fd361ed334a3890a80c /modules/caddyhttp/subroute.go
parent4a3a418156e25aae17659142a4bf9259d7702c44 (diff)
Add error & subroute handlers; weakString; other minor handler changes
Diffstat (limited to 'modules/caddyhttp/subroute.go')
-rw-r--r--modules/caddyhttp/subroute.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/modules/caddyhttp/subroute.go b/modules/caddyhttp/subroute.go
new file mode 100644
index 0000000..9172146
--- /dev/null
+++ b/modules/caddyhttp/subroute.go
@@ -0,0 +1,60 @@
+// Copyright 2015 Matthew Holt and The Caddy Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package caddyhttp
+
+import (
+ "fmt"
+ "net/http"
+
+ "github.com/caddyserver/caddy/v2"
+)
+
+func init() {
+ caddy.RegisterModule(caddy.Module{
+ Name: "http.handlers.subroute",
+ New: func() interface{} { return new(Subroute) },
+ })
+}
+
+// Subroute implements a handler that compiles and executes routes.
+// This is useful for a batch of routes that all inherit the same
+// matchers, or for routes with matchers that must be have deferred
+// evaluation (e.g. if they depend on placeholders created by other
+// matchers that need to be evaluated first).
+type Subroute struct {
+ Routes RouteList `json:"routes,omitempty"`
+}
+
+// Provision sets up subrouting.
+func (sr *Subroute) Provision(ctx caddy.Context) error {
+ if sr.Routes != nil {
+ err := sr.Routes.Provision(ctx)
+ if err != nil {
+ return fmt.Errorf("setting up routes: %v", err)
+ }
+ }
+ return nil
+}
+
+func (sr *Subroute) ServeHTTP(w http.ResponseWriter, r *http.Request, _ Handler) error {
+ subroute := sr.Routes.BuildCompositeRoute(r)
+ return subroute.ServeHTTP(w, r)
+}
+
+// Interface guards
+var (
+ _ caddy.Provisioner = (*Subroute)(nil)
+ _ MiddlewareHandler = (*Subroute)(nil)
+)