Skip to content

Commit 68313aa

Browse files
committed
feat: optional PUT, local data store
1 parent c39499a commit 68313aa

7 files changed

+682
-73
lines changed

docs/environment-variables.md

+22
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
- [Configuration](#configuration)
66
- [`SOMEGUY_LISTEN_ADDRESS`](#someguy_listen_address)
77
- [`SOMEGUY_ACCELERATED_DHT`](#someguy_accelerated_dht)
8+
- [`SOMEGUY_PUT_ENABLED`](#someguy_put_enabled)
9+
- [`SOMEGUY_DATADIR`](#someguy_datadir)
810
- [`SOMEGUY_PROVIDER_ENDPOINTS`](#someguy_provider_endpoints)
911
- [`SOMEGUY_PEER_ENDPOINTS`](#someguy_peer_endpoints)
1012
- [`SOMEGUY_IPNS_ENDPOINTS`](#someguy_ipns_endpoints)
@@ -28,6 +30,26 @@ Whether or not the Accelerated DHT is enabled or not.
2830

2931
Default: `true`
3032

33+
### `SOMEGUY_PUT_ENABLED`
34+
35+
Whether or not to accept Delegated Routing V1 PUT requests. Affects all PUT requests:
36+
provider records, peer records and IPNS records.
37+
38+
By default, PUT requests are ignored. Therefore, they will neither be stored locally,
39+
nor sent to other remote endpoints.
40+
41+
Default: `false`
42+
43+
### `SOMEGUY_DATADIR`
44+
45+
Used in conjunction with [`SOMEGUY_PUT_ENABLED`](#someguy_put_enabled).
46+
47+
The LevelDB data directory to persist PUT records. When receiving PUT requests,
48+
the records will be stored in this database. The database is queried for GET
49+
requests.
50+
51+
Default: none
52+
3153
### `SOMEGUY_PROVIDER_ENDPOINTS`
3254

3355
Comma-separated list of other Delegated Routing V1 endpoints to proxy provider requests to.

go.mod

+5-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ require (
77
github.com/felixge/httpsnoop v1.0.4
88
github.com/ipfs/boxo v0.18.1-0.20240319120907-07fc4754a2d2
99
github.com/ipfs/go-cid v0.4.1
10+
github.com/ipfs/go-datastore v0.6.0
11+
github.com/ipfs/go-ds-leveldb v0.5.0
1012
github.com/ipfs/go-log/v2 v2.5.1
1113
github.com/libp2p/go-libp2p v0.33.0
1214
github.com/libp2p/go-libp2p-kad-dht v0.25.2
@@ -15,6 +17,7 @@ require (
1517
github.com/multiformats/go-multihash v0.2.3
1618
github.com/prometheus/client_golang v1.19.0
1719
github.com/rs/cors v1.10.1
20+
github.com/samber/lo v1.39.0
1821
github.com/slok/go-http-metrics v0.11.0
1922
github.com/stretchr/testify v1.9.0
2023
github.com/urfave/cli/v2 v2.27.1
@@ -41,6 +44,7 @@ require (
4144
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
4245
github.com/godbus/dbus/v5 v5.1.0 // indirect
4346
github.com/gogo/protobuf v1.3.2 // indirect
47+
github.com/golang/snappy v0.0.4 // indirect
4448
github.com/google/gopacket v1.1.19 // indirect
4549
github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 // indirect
4650
github.com/google/uuid v1.6.0 // indirect
@@ -50,7 +54,6 @@ require (
5054
github.com/hashicorp/go-multierror v1.1.1 // indirect
5155
github.com/hashicorp/golang-lru v1.0.2 // indirect
5256
github.com/huin/goupnp v1.3.0 // indirect
53-
github.com/ipfs/go-datastore v0.6.0 // indirect
5457
github.com/ipfs/go-log v1.0.5 // indirect
5558
github.com/ipld/go-ipld-prime v0.21.0 // indirect
5659
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
@@ -101,9 +104,9 @@ require (
101104
github.com/quic-go/webtransport-go v0.6.0 // indirect
102105
github.com/raulk/go-watchdog v1.3.0 // indirect
103106
github.com/russross/blackfriday/v2 v2.1.0 // indirect
104-
github.com/samber/lo v1.39.0 // indirect
105107
github.com/spaolacci/murmur3 v1.1.0 // indirect
106108
github.com/stretchr/objx v0.5.2 // indirect
109+
github.com/syndtr/goleveldb v1.0.0 // indirect
107110
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect
108111
github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e // indirect
109112
go.opencensus.io v0.24.0 // indirect

go.sum

+12
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
135135
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
136136
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
137137
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
138+
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
139+
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
138140
github.com/google/brotli/go/cbrotli v0.0.0-20230829110029-ed738e842d2f h1:jopqB+UTSdJGEJT8tEqYyE29zN91fi2827oLET8tl7k=
139141
github.com/google/brotli/go/cbrotli v0.0.0-20230829110029-ed738e842d2f/go.mod h1:nOPhAkwVliJdNTkj3gXpljmWhjc4wCaVqbMJcPKWP4s=
140142
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
@@ -182,6 +184,7 @@ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
182184
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
183185
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
184186
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
187+
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
185188
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
186189
github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc=
187190
github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8=
@@ -193,12 +196,15 @@ github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s=
193196
github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk=
194197
github.com/ipfs/go-datastore v0.1.0/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE=
195198
github.com/ipfs/go-datastore v0.1.1/go.mod h1:w38XXW9kVFNp57Zj5knbKWM2T+KOZCGDRVNdgPHtbHw=
199+
github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk=
196200
github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk=
197201
github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8=
198202
github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk=
199203
github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps=
200204
github.com/ipfs/go-ds-badger v0.0.7/go.mod h1:qt0/fWzZDoPW6jpQeqUjR5kBfhDNB65jd9YlmAvpQBk=
201205
github.com/ipfs/go-ds-leveldb v0.1.0/go.mod h1:hqAW8y4bwX5LWcCtku2rFNX3vjDZCy5LZCg+cSZvYb8=
206+
github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo=
207+
github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q=
202208
github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
203209
github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc=
204210
github.com/ipfs/go-ipfs-util v0.0.3 h1:2RFdGez6bu2ZlZdI+rWfIdbQb1KudQp3VGwPtdNCmE0=
@@ -244,6 +250,7 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv
244250
github.com/koron/go-ssdp v0.0.4 h1:1IDwrghSKYM7yLf7XCzbByg2sJ/JcNOZRXS2jczTwz0=
245251
github.com/koron/go-ssdp v0.0.4/go.mod h1:oDXq+E5IL5q0U8uSBcoAXzTzInwy5lEgC91HoKtbmZk=
246252
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
253+
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
247254
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
248255
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
249256
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
@@ -370,6 +377,7 @@ github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOEL
370377
github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo=
371378
github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM=
372379
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
380+
github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
373381
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
374382
github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY=
375383
github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM=
@@ -489,6 +497,7 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o
489497
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
490498
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
491499
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
500+
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
492501
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
493502
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
494503
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
@@ -714,13 +723,16 @@ google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7
714723
google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
715724
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
716725
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
726+
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
717727
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
718728
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
719729
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
730+
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
720731
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
721732
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
722733
gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8=
723734
gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE=
735+
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
724736
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
725737
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
726738
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

main.go

+23-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,18 @@ func main() {
3636
EnvVars: []string{"SOMEGUY_ACCELERATED_DHT"},
3737
Usage: "run the accelerated DHT client",
3838
},
39+
&cli.BoolFlag{
40+
Name: "put-enabled",
41+
Value: false,
42+
EnvVars: []string{"SOMEGUY_PUT_ENABLED"},
43+
Usage: "enables HTTP PUT endpoints",
44+
},
45+
&cli.StringFlag{
46+
Name: "datadir",
47+
Value: "",
48+
EnvVars: []string{"SOMEGUY_DATADIR"},
49+
Usage: "directory for persistent data",
50+
},
3951
&cli.StringSliceFlag{
4052
Name: "provider-endpoints",
4153
Value: cli.NewStringSlice(cidContactEndpoint),
@@ -56,7 +68,17 @@ func main() {
5668
},
5769
},
5870
Action: func(ctx *cli.Context) error {
59-
return start(ctx.Context, ctx.String("listen-address"), ctx.Bool("accelerated-dht"), ctx.StringSlice("provider-endpoints"), ctx.StringSlice("peer-endpoints"), ctx.StringSlice("ipns-endpoints"))
71+
options := &serverOptions{
72+
listenAddress: ctx.String("listen-address"),
73+
acceleratedDHT: ctx.Bool("accelerated-dht"),
74+
putEnabled: ctx.Bool("put-enabled"),
75+
contentEndpoints: ctx.StringSlice("provider-endpoints"),
76+
peerEndpoints: ctx.StringSlice("peer-endpoints"),
77+
ipnsEndpoints: ctx.StringSlice("ipns-endpoints"),
78+
dataDirectory: ctx.String("datadir"),
79+
}
80+
81+
return startServer(ctx.Context, options)
6082
},
6183
},
6284
{

0 commit comments

Comments
 (0)