Skip to content

Commit e281a31

Browse files
committed
feat: initial implementation
1 parent 8bed89b commit e281a31

File tree

4 files changed

+1518
-0
lines changed

4 files changed

+1518
-0
lines changed

app.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package caddy_libp2p_listener
2+
3+
import (
4+
"github.com/caddyserver/caddy/v2"
5+
"github.com/caddyserver/caddy/v2/caddyconfig"
6+
"github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
7+
"github.com/caddyserver/caddy/v2/caddyconfig/httpcaddyfile"
8+
"go.uber.org/zap"
9+
"strconv"
10+
)
11+
12+
func init() {
13+
caddy.RegisterModule(App{})
14+
httpcaddyfile.RegisterGlobalOption("libp2p", parseAppConfig)
15+
}
16+
17+
// App is the libp2p Caddy app used to configure libp2p nodes.
18+
type App struct {
19+
// PrivateKey is the location of the private key as a PEM file
20+
PrivateKey string `json:"private_key,omitempty" caddy:"namespace=libp2p.key"`
21+
22+
// AdvertiseAmino indicates if the peer's addresses should be adverised in the Amino DHT
23+
// This is particularly useful for WebTransport and WebRTC which have their certificate hashes rotate
24+
// even while their peerID remains the same
25+
AdvertiseAmino bool `json:"advertise_amino,omitempty" caddy:"namespace=libp2p.advertise_amino"`
26+
27+
logger *zap.Logger
28+
}
29+
30+
func (App) CaddyModule() caddy.ModuleInfo {
31+
return caddy.ModuleInfo{
32+
ID: "libp2p",
33+
New: func() caddy.Module { return new(App) },
34+
}
35+
}
36+
37+
func (t *App) Provision(ctx caddy.Context) error {
38+
t.logger = ctx.Logger(t)
39+
return nil
40+
}
41+
42+
func (t *App) Start() error {
43+
return nil
44+
}
45+
46+
func (t *App) Stop() error {
47+
return nil
48+
}
49+
50+
func parseAppConfig(d *caddyfile.Dispenser, _ any) (any, error) {
51+
app := &App{}
52+
if !d.Next() {
53+
return app, d.ArgErr()
54+
55+
}
56+
57+
for d.NextBlock(0) {
58+
val := d.Val()
59+
60+
switch val {
61+
case "advertise_amino":
62+
if d.NextArg() {
63+
v, err := strconv.ParseBool(d.Val())
64+
if err != nil {
65+
return nil, d.WrapErr(err)
66+
}
67+
app.AdvertiseAmino = v
68+
} else {
69+
app.AdvertiseAmino = true
70+
}
71+
case "private_key":
72+
if !d.NextArg() {
73+
return nil, d.ArgErr()
74+
}
75+
app.PrivateKey = d.Val()
76+
default:
77+
return nil, d.Errf("unrecognized directive: %s", d.Val())
78+
}
79+
}
80+
return httpcaddyfile.App{
81+
Name: "libp2p",
82+
Value: caddyconfig.JSON(app, nil),
83+
}, nil
84+
}
85+
86+
var (
87+
_ caddy.App = (*App)(nil)
88+
_ caddy.Provisioner = (*App)(nil)
89+
)

go.mod

Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
module github.com/aschmahmann/caddy-libp2p-listener
2+
3+
go 1.21.4
4+
5+
require (
6+
github.com/caddyserver/caddy/v2 v2.8.4
7+
github.com/libp2p/go-libp2p v0.35.0
8+
github.com/libp2p/go-libp2p-kad-dht v0.25.2
9+
github.com/multiformats/go-multiaddr v0.12.4
10+
go.uber.org/zap v1.27.0
11+
)
12+
13+
require (
14+
filippo.io/edwards25519 v1.1.0 // indirect
15+
github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect
16+
github.com/Masterminds/goutils v1.1.1 // indirect
17+
github.com/Masterminds/semver/v3 v3.2.0 // indirect
18+
github.com/Masterminds/sprig/v3 v3.2.3 // indirect
19+
github.com/Microsoft/go-winio v0.6.0 // indirect
20+
github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
21+
github.com/aryann/difflib v0.0.0-20210328193216-ff5ff6dc229b // indirect
22+
github.com/benbjohnson/clock v1.3.5 // indirect
23+
github.com/beorn7/perks v1.0.1 // indirect
24+
github.com/caddyserver/certmagic v0.21.3 // indirect
25+
github.com/caddyserver/zerossl v0.1.3 // indirect
26+
github.com/cespare/xxhash v1.1.0 // indirect
27+
github.com/cespare/xxhash/v2 v2.2.0 // indirect
28+
github.com/chzyer/readline v1.5.1 // indirect
29+
github.com/containerd/cgroups v1.1.0 // indirect
30+
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
31+
github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect
32+
github.com/davecgh/go-spew v1.1.1 // indirect
33+
github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect
34+
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect
35+
github.com/dgraph-io/badger v1.6.2 // indirect
36+
github.com/dgraph-io/badger/v2 v2.2007.4 // indirect
37+
github.com/dgraph-io/ristretto v0.1.0 // indirect
38+
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
39+
github.com/docker/go-units v0.5.0 // indirect
40+
github.com/dustin/go-humanize v1.0.1 // indirect
41+
github.com/elastic/gosigar v0.14.2 // indirect
42+
github.com/flynn/noise v1.1.0 // indirect
43+
github.com/francoispqt/gojay v1.2.13 // indirect
44+
github.com/go-jose/go-jose/v3 v3.0.3 // indirect
45+
github.com/go-kit/kit v0.13.0 // indirect
46+
github.com/go-kit/log v0.2.1 // indirect
47+
github.com/go-logfmt/logfmt v0.6.0 // indirect
48+
github.com/go-logr/logr v1.4.1 // indirect
49+
github.com/go-logr/stdr v1.2.2 // indirect
50+
github.com/go-sql-driver/mysql v1.7.1 // indirect
51+
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
52+
github.com/godbus/dbus/v5 v5.1.0 // indirect
53+
github.com/gogo/protobuf v1.3.2 // indirect
54+
github.com/golang/glog v1.2.0 // indirect
55+
github.com/golang/protobuf v1.5.4 // indirect
56+
github.com/golang/snappy v0.0.4 // indirect
57+
github.com/google/cel-go v0.20.1 // indirect
58+
github.com/google/gopacket v1.1.19 // indirect
59+
github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5 // indirect
60+
github.com/google/uuid v1.6.0 // indirect
61+
github.com/gorilla/websocket v1.5.1 // indirect
62+
github.com/hashicorp/errwrap v1.1.0 // indirect
63+
github.com/hashicorp/go-multierror v1.1.1 // indirect
64+
github.com/hashicorp/golang-lru v0.5.4 // indirect
65+
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
66+
github.com/huandu/xstrings v1.3.3 // indirect
67+
github.com/huin/goupnp v1.3.0 // indirect
68+
github.com/imdario/mergo v0.3.12 // indirect
69+
github.com/inconshreveable/mousetrap v1.1.0 // indirect
70+
github.com/ipfs/boxo v0.10.0 // indirect
71+
github.com/ipfs/go-cid v0.4.1 // indirect
72+
github.com/ipfs/go-datastore v0.6.0 // indirect
73+
github.com/ipfs/go-log v1.0.5 // indirect
74+
github.com/ipfs/go-log/v2 v2.5.1 // indirect
75+
github.com/ipld/go-ipld-prime v0.20.0 // indirect
76+
github.com/jackc/chunkreader/v2 v2.0.1 // indirect
77+
github.com/jackc/pgconn v1.14.3 // indirect
78+
github.com/jackc/pgio v1.0.0 // indirect
79+
github.com/jackc/pgpassfile v1.0.0 // indirect
80+
github.com/jackc/pgproto3/v2 v2.3.3 // indirect
81+
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
82+
github.com/jackc/pgtype v1.14.0 // indirect
83+
github.com/jackc/pgx/v4 v4.18.3 // indirect
84+
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
85+
github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
86+
github.com/jbenet/goprocess v0.1.4 // indirect
87+
github.com/klauspost/compress v1.17.8 // indirect
88+
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
89+
github.com/koron/go-ssdp v0.0.4 // indirect
90+
github.com/libdns/libdns v0.2.2 // indirect
91+
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
92+
github.com/libp2p/go-cidranger v1.1.0 // indirect
93+
github.com/libp2p/go-flow-metrics v0.1.0 // indirect
94+
github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect
95+
github.com/libp2p/go-libp2p-kbucket v0.6.3 // indirect
96+
github.com/libp2p/go-libp2p-record v0.2.0 // indirect
97+
github.com/libp2p/go-libp2p-routing-helpers v0.7.2 // indirect
98+
github.com/libp2p/go-msgio v0.3.0 // indirect
99+
github.com/libp2p/go-nat v0.2.0 // indirect
100+
github.com/libp2p/go-netroute v0.2.1 // indirect
101+
github.com/libp2p/go-reuseport v0.4.0 // indirect
102+
github.com/libp2p/go-yamux/v4 v4.0.1 // indirect
103+
github.com/manifoldco/promptui v0.9.0 // indirect
104+
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect
105+
github.com/mattn/go-colorable v0.1.13 // indirect
106+
github.com/mattn/go-isatty v0.0.20 // indirect
107+
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
108+
github.com/mholt/acmez/v2 v2.0.1 // indirect
109+
github.com/miekg/dns v1.1.59 // indirect
110+
github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect
111+
github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect
112+
github.com/minio/sha256-simd v1.0.1 // indirect
113+
github.com/mitchellh/copystructure v1.2.0 // indirect
114+
github.com/mitchellh/go-ps v1.0.0 // indirect
115+
github.com/mitchellh/reflectwalk v1.0.2 // indirect
116+
github.com/mr-tron/base58 v1.2.0 // indirect
117+
github.com/multiformats/go-base32 v0.1.0 // indirect
118+
github.com/multiformats/go-base36 v0.2.0 // indirect
119+
github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect
120+
github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect
121+
github.com/multiformats/go-multibase v0.2.0 // indirect
122+
github.com/multiformats/go-multicodec v0.9.0 // indirect
123+
github.com/multiformats/go-multihash v0.2.3 // indirect
124+
github.com/multiformats/go-multistream v0.5.0 // indirect
125+
github.com/multiformats/go-varint v0.0.7 // indirect
126+
github.com/onsi/ginkgo/v2 v2.15.0 // indirect
127+
github.com/opencontainers/runtime-spec v1.2.0 // indirect
128+
github.com/opentracing/opentracing-go v1.2.0 // indirect
129+
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect
130+
github.com/pion/datachannel v1.5.6 // indirect
131+
github.com/pion/dtls/v2 v2.2.11 // indirect
132+
github.com/pion/ice/v2 v2.3.24 // indirect
133+
github.com/pion/interceptor v0.1.29 // indirect
134+
github.com/pion/logging v0.2.2 // indirect
135+
github.com/pion/mdns v0.0.12 // indirect
136+
github.com/pion/randutil v0.1.0 // indirect
137+
github.com/pion/rtcp v1.2.14 // indirect
138+
github.com/pion/rtp v1.8.6 // indirect
139+
github.com/pion/sctp v1.8.16 // indirect
140+
github.com/pion/sdp/v3 v3.0.9 // indirect
141+
github.com/pion/srtp/v2 v2.0.18 // indirect
142+
github.com/pion/stun v0.6.1 // indirect
143+
github.com/pion/transport/v2 v2.2.5 // indirect
144+
github.com/pion/turn/v2 v2.1.6 // indirect
145+
github.com/pion/webrtc/v3 v3.2.40 // indirect
146+
github.com/pkg/errors v0.9.1 // indirect
147+
github.com/pmezard/go-difflib v1.0.0 // indirect
148+
github.com/polydawn/refmt v0.89.0 // indirect
149+
github.com/prometheus/client_golang v1.19.1 // indirect
150+
github.com/prometheus/client_model v0.6.1 // indirect
151+
github.com/prometheus/common v0.48.0 // indirect
152+
github.com/prometheus/procfs v0.12.0 // indirect
153+
github.com/quic-go/qpack v0.4.0 // indirect
154+
github.com/quic-go/quic-go v0.44.0 // indirect
155+
github.com/quic-go/webtransport-go v0.8.0 // indirect
156+
github.com/raulk/go-watchdog v1.3.0 // indirect
157+
github.com/rs/xid v1.5.0 // indirect
158+
github.com/russross/blackfriday/v2 v2.1.0 // indirect
159+
github.com/shopspring/decimal v1.2.0 // indirect
160+
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
161+
github.com/slackhq/nebula v1.6.1 // indirect
162+
github.com/smallstep/certificates v0.26.1 // indirect
163+
github.com/smallstep/nosql v0.6.1 // indirect
164+
github.com/smallstep/pkcs7 v0.0.0-20231024181729-3b98ecc1ca81 // indirect
165+
github.com/smallstep/scep v0.0.0-20231024192529-aee96d7ad34d // indirect
166+
github.com/smallstep/truststore v0.13.0 // indirect
167+
github.com/spaolacci/murmur3 v1.1.0 // indirect
168+
github.com/spf13/cast v1.4.1 // indirect
169+
github.com/spf13/cobra v1.8.0 // indirect
170+
github.com/spf13/pflag v1.0.5 // indirect
171+
github.com/stoewer/go-strcase v1.2.0 // indirect
172+
github.com/stretchr/testify v1.9.0 // indirect
173+
github.com/tailscale/tscert v0.0.0-20240517230440-bbccfbf48933 // indirect
174+
github.com/urfave/cli v1.22.14 // indirect
175+
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect
176+
github.com/zeebo/blake3 v0.2.3 // indirect
177+
go.etcd.io/bbolt v1.3.9 // indirect
178+
go.opencensus.io v0.24.0 // indirect
179+
go.opentelemetry.io/otel v1.24.0 // indirect
180+
go.opentelemetry.io/otel/metric v1.24.0 // indirect
181+
go.opentelemetry.io/otel/trace v1.24.0 // indirect
182+
go.step.sm/cli-utils v0.9.0 // indirect
183+
go.step.sm/crypto v0.45.0 // indirect
184+
go.step.sm/linkedca v0.20.1 // indirect
185+
go.uber.org/automaxprocs v1.5.3 // indirect
186+
go.uber.org/dig v1.17.1 // indirect
187+
go.uber.org/fx v1.21.1 // indirect
188+
go.uber.org/mock v0.4.0 // indirect
189+
go.uber.org/multierr v1.11.0 // indirect
190+
go.uber.org/zap/exp v0.2.0 // indirect
191+
golang.org/x/crypto v0.23.0 // indirect
192+
golang.org/x/crypto/x509roots/fallback v0.0.0-20240507223354-67b13616a595 // indirect
193+
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect
194+
golang.org/x/mod v0.17.0 // indirect
195+
golang.org/x/net v0.25.0 // indirect
196+
golang.org/x/sync v0.7.0 // indirect
197+
golang.org/x/sys v0.20.0 // indirect
198+
golang.org/x/term v0.20.0 // indirect
199+
golang.org/x/text v0.15.0 // indirect
200+
golang.org/x/time v0.5.0 // indirect
201+
golang.org/x/tools v0.21.0 // indirect
202+
gonum.org/v1/gonum v0.13.0 // indirect
203+
google.golang.org/genproto/googleapis/api v0.0.0-20240506185236-b8a5c65736ae // indirect
204+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 // indirect
205+
google.golang.org/grpc v1.63.2 // indirect
206+
google.golang.org/protobuf v1.34.1 // indirect
207+
gopkg.in/yaml.v3 v3.0.1 // indirect
208+
howett.net/plist v1.0.0 // indirect
209+
lukechampine.com/blake3 v1.2.1 // indirect
210+
)

0 commit comments

Comments
 (0)