@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 87 lines 2.21 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 proxyprotocol
16
17 import (
18 "github.com/caddyserver/caddy/v2"
19 "github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
20 )
21
22 func init() {
23 caddy.RegisterModule(ListenerWrapper{})
24 }
25
26 func (ListenerWrapper) CaddyModule() caddy.ModuleInfo {
27 return caddy.ModuleInfo{
28 ID: "caddy.listeners.proxy_protocol",
29 New: func() caddy.Module { return new(ListenerWrapper) },
30 }
31 }
32
33 // UnmarshalCaddyfile sets up the listener Listenerwrapper from Caddyfile tokens. Syntax:
34 //
35 // proxy_protocol {
36 // timeout <duration>
37 // allow <IPs...>
38 // deny <IPs...>
39 // fallback_policy <policy>
40 // }
41 func (w *ListenerWrapper) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
42 d.Next() // consume wrapper name
43
44 // No same-line options are supported
45 if d.NextArg() {
46 return d.ArgErr()
47 }
48
49 for d.NextBlock(0) {
50 switch d.Val() {
51 case "timeout":
52 if !d.NextArg() {
53 return d.ArgErr()
54 }
55 dur, err := caddy.ParseDuration(d.Val())
56 if err != nil {
57 return d.Errf("parsing proxy_protocol timeout duration: %v", err)
58 }
59 w.Timeout = caddy.Duration(dur)
60
61 case "allow":
62 w.Allow = append(w.Allow, d.RemainingArgs()...)
63 case "deny":
64 w.Deny = append(w.Deny, d.RemainingArgs()...)
65 case "fallback_policy":
66 if !d.NextArg() {
67 return d.ArgErr()
68 }
69 p, err := parsePolicy(d.Val())
70 if err != nil {
71 return d.WrapErr(err)
72 }
73 w.FallbackPolicy = p
74 default:
75 return d.ArgErr()
76 }
77 }
78 return nil
79 }
80
81 // Interface guards
82 var (
83 _ caddy.Provisioner = (*ListenerWrapper)(nil)
84 _ caddy.Module = (*ListenerWrapper)(nil)
85 _ caddy.ListenerWrapper = (*ListenerWrapper)(nil)
86 _ caddyfile.Unmarshaler = (*ListenerWrapper)(nil)
87 )