@@ -50,13 +50,13 @@ type directoryItem struct {
50
50
type gatewayHandler struct {
51
51
node * core.IpfsNode
52
52
dirList * template.Template
53
- writable bool
53
+ config GatewayConfig
54
54
}
55
55
56
- func newGatewayHandler (node * core.IpfsNode , writable bool ) (* gatewayHandler , error ) {
56
+ func newGatewayHandler (node * core.IpfsNode , conf GatewayConfig ) (* gatewayHandler , error ) {
57
57
i := & gatewayHandler {
58
58
node : node ,
59
- writable : writable ,
59
+ config : conf ,
60
60
}
61
61
err := i .loadTemplate ()
62
62
if err != nil {
@@ -125,18 +125,20 @@ func (i *gatewayHandler) NewDagReader(nd *dag.Node) (uio.ReadSeekCloser, error)
125
125
return uio .NewDagReader (i .node .Context (), nd , i .node .DAG )
126
126
}
127
127
128
+ // TODO(btc): break this apart into separate handlers using a more expressive
129
+ // muxer
128
130
func (i * gatewayHandler ) ServeHTTP (w http.ResponseWriter , r * http.Request ) {
129
- if i .writable && r .Method == "POST" {
131
+ if i .config . Writable && r .Method == "POST" {
130
132
i .postHandler (w , r )
131
133
return
132
134
}
133
135
134
- if i .writable && r .Method == "PUT" {
136
+ if i .config . Writable && r .Method == "PUT" {
135
137
i .putHandler (w , r )
136
138
return
137
139
}
138
140
139
- if i .writable && r .Method == "DELETE" {
141
+ if i .config . Writable && r .Method == "DELETE" {
140
142
i .deleteHandler (w , r )
141
143
return
142
144
}
@@ -147,7 +149,7 @@ func (i *gatewayHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
147
149
}
148
150
149
151
errmsg := "Method " + r .Method + " not allowed: "
150
- if ! i .writable {
152
+ if ! i .config . Writable {
151
153
w .WriteHeader (http .StatusMethodNotAllowed )
152
154
errmsg = errmsg + "read only access"
153
155
} else {
@@ -164,6 +166,11 @@ func (i *gatewayHandler) getHandler(w http.ResponseWriter, r *http.Request) {
164
166
165
167
urlPath := r .URL .Path
166
168
169
+ if i .config .BlockList != nil && i .config .BlockList .ShouldBlock (urlPath ) {
170
+ w .WriteHeader (http .StatusNotFound )
171
+ return
172
+ }
173
+
167
174
nd , p , err := i .ResolvePath (ctx , urlPath )
168
175
if err != nil {
169
176
if err == routing .ErrNotFound {
0 commit comments