Merge pull request #1680 from Slamper/develop
Return 404 for unknown RPC endpoints
This commit is contained in:
commit
1318bd18cd
|
@ -32,7 +32,7 @@ func RegisterRPCFuncs(mux *http.ServeMux, funcMap map[string]*RPCFunc, cdc *amin
|
||||||
}
|
}
|
||||||
|
|
||||||
// JSONRPC endpoints
|
// JSONRPC endpoints
|
||||||
mux.HandleFunc("/", makeJSONRPCHandler(funcMap, cdc, logger))
|
mux.HandleFunc("/", handleInvalidJSONRPCPaths(makeJSONRPCHandler(funcMap, cdc, logger)))
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
|
@ -153,6 +153,19 @@ func makeJSONRPCHandler(funcMap map[string]*RPCFunc, cdc *amino.Codec, logger lo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func handleInvalidJSONRPCPaths(next http.HandlerFunc) http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// Since the pattern "/" matches all paths not matched by other registered patterns we check whether the path is indeed
|
||||||
|
// "/", otherwise return a 404 error
|
||||||
|
if r.URL.Path != "/" {
|
||||||
|
http.NotFound(w, r)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
next(w, r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func mapParamsToArgs(rpcFunc *RPCFunc, cdc *amino.Codec, params map[string]json.RawMessage, argsOffset int) ([]reflect.Value, error) {
|
func mapParamsToArgs(rpcFunc *RPCFunc, cdc *amino.Codec, params map[string]json.RawMessage, argsOffset int) ([]reflect.Value, error) {
|
||||||
values := make([]reflect.Value, len(rpcFunc.argNames))
|
values := make([]reflect.Value, len(rpcFunc.argNames))
|
||||||
for i, argName := range rpcFunc.argNames {
|
for i, argName := range rpcFunc.argNames {
|
||||||
|
|
|
@ -97,3 +97,14 @@ func TestRPCNotification(t *testing.T) {
|
||||||
require.Nil(t, err, "reading from the body should not give back an error")
|
require.Nil(t, err, "reading from the body should not give back an error")
|
||||||
require.Equal(t, len(blob), 0, "a notification SHOULD NOT be responded to by the server")
|
require.Equal(t, len(blob), 0, "a notification SHOULD NOT be responded to by the server")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUnknownRPCPath(t *testing.T) {
|
||||||
|
mux := testMux()
|
||||||
|
req, _ := http.NewRequest("GET", "http://localhost/unknownrpcpath", nil)
|
||||||
|
rec := httptest.NewRecorder()
|
||||||
|
mux.ServeHTTP(rec, req)
|
||||||
|
res := rec.Result()
|
||||||
|
|
||||||
|
// Always expecting back a 404 error
|
||||||
|
require.Equal(t, http.StatusNotFound, res.StatusCode, "should always return 404")
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue