@marcel91200 / caddy Mirror · read-only
Fork 0

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

Mirrored from https://github.com/Slazee/caddy.git

Synced Nov 11, 01:00 UTC

master
go 56 lines 1.57 KB
Raw
1 // Copyright 2015 Matthew Holt and The Caddy Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 package caddyhttp
16
17 import (
18 "fmt"
19 "net/http"
20
21 "github.com/caddyserver/caddy/v2"
22 )
23
24 func init() {
25 caddy.RegisterModule(Invoke{})
26 }
27
28 // Invoke implements a handler that compiles and executes a
29 // named route that was defined on the server.
30 //
31 // EXPERIMENTAL: Subject to change or removal.
32 type Invoke struct {
33 // Name is the key of the named route to execute
34 Name string `json:"name,omitempty"`
35 }
36
37 // CaddyModule returns the Caddy module information.
38 func (Invoke) CaddyModule() caddy.ModuleInfo {
39 return caddy.ModuleInfo{
40 ID: "http.handlers.invoke",
41 New: func() caddy.Module { return new(Invoke) },
42 }
43 }
44
45 func (invoke *Invoke) ServeHTTP(w http.ResponseWriter, r *http.Request, next Handler) error {
46 server := r.Context().Value(ServerCtxKey).(*Server)
47 if route, ok := server.NamedRoutes[invoke.Name]; ok {
48 return route.Compile(next).ServeHTTP(w, r)
49 }
50 return fmt.Errorf("invoke: route '%s' not found", invoke.Name)
51 }
52
53 // Interface guards
54 var (
55 _ MiddlewareHandler = (*Invoke)(nil)
56 )