go-ethereum/rpc
wbt f1e1d9f874
node: support expressive origin rules in ws.origins (#21481)
* Only compare hostnames in ws.origins

Also using a helper function for ToLower consolidates all preparation steps in one function for more maintainable consistency.

Spaces => tabs

Remove a semicolon

Add space at start of comment

Remove parens around conditional

Handle case wehre parsed hostname is empty

When passing a single word like "localhost" the parsed hostname is an empty string. Handle this and the error-parsing case together as default, and the nonempty hostname case in the conditional.

Refactor with new originIsAllowed functions

Adds originIsAllowed() & ruleAllowsOrigin(); removes prepOriginForComparison

Remove blank line

Added tests for simple allowed-orign rule

which does not specify a protocol or port, just a hostname

Fix copy-paste: `:=` => `=`

Remove parens around conditional

Remove autoadded whitespace on blank lines

Compare scheme, hostname, and port with rule

if the rule specifies those portions.

Remove one autoadded trailing whitespace

Better handle case where only origin host is given

e.g. "localhost"

Remove parens around conditional

Refactor: attemptWebsocketConnectionFromOrigin DRY

Include return type on helper function

Provide srv obj in helper fn

Provide srv to helper fn

Remove stray underscore

Remove blank line

parent 93e666b4c1e7e49b8406dc83ed93f4a02ea49ac1
author wbt <wbt@users.noreply.github.com> 1598559718 -0400
committer Martin Holst Swende <martin@swende.se> 1605602257 +0100
gpgsig -----BEGIN PGP SIGNATURE-----

 iQFFBAABCAAvFiEEypmrtbNuJK1doP1AaDtDjAWl3fAFAl+zi9ARHG1hcnRpbkBz
 d2VuZGUuc2UACgkQaDtDjAWl3fDRiwgAoMtzU8dwRV7Q9xkCwWEx9Wz2f3n6jUr2
 VWBycDKGKwRkPPOER3oc9kzjGU/P1tFlK07PjfnAKZ9KWzxpDcJZwYM3xCBurG7A
 16y4YsQnzgPNONv3xIkdi3RZtDBIiPFFEmdZFFvZ/jKexfI6JIYPngCAoqdTIFb9
 On/aPvvVWQn1ExfmarsvvJ7kUDUG77tZipuacEH5FfFsfelBWOEYPe+I9ToUHskv
 +qO6rOkV1Ojk8eBc6o0R1PnApwCAlEhJs7aM/SEOg4B4ZJJneiFuEXBIG9+0yS2I
 NOicuDPLGucOB5nBsfIKI3USPeE+3jxdT8go2lN5Nrhm6MimoILDsQ==
 =sgUp
 -----END PGP SIGNATURE-----

Refactor: drop err var for more concise test lines

Add several tests for new WebSocket origin checks

Remove autoadded whitespace on blank lines

Restore TestWebsocketOrigins originally-named test

and rename the others to be helpers rather than full tests

Remove autoadded whitespace on blank line

Temporarily comment out new test sets

Uncomment test around origin rule with scheme

Remove tests without scheme on browser origin

per https://github.com/ethereum/go-ethereum/pull/21481/files#r479371498

Uncomment tests with port; remove some blank lines

Handle when browser does not specify scheme/port

Uncomment test for including scheme & port in rule

Add IP tests

* node: more tests + table-driven, ws origin changes

Co-authored-by: Martin Holst Swende <martin@swende.se>
2020-11-19 14:54:49 +01:00
..
testdata rpc: fix issue with null JSON-RPC messages (#21497) 2020-08-28 16:27:58 +02:00
client_example_test.go rpc: make ExampleClientSubscription work with the geth API (#19483) 2020-04-27 17:25:24 +02:00
client_test.go rpc: add SetHeader method to Client (#21392) 2020-08-03 14:08:42 +02:00
client.go rpc: add SetHeader method to Client (#21392) 2020-08-03 14:08:42 +02:00
constants_unix_nocgo.go accounts, p2p, rpc: make CGO_ENABLED=0 build again (#19593) 2019-05-26 01:07:10 +03:00
constants_unix.go accounts, p2p, rpc: make CGO_ENABLED=0 build again (#19593) 2019-05-26 01:07:10 +03:00
doc.go rpc: remove 'exported or builtin' restriction for parameters (#20332) 2019-11-20 10:06:21 +02:00
endpoints.go node: allow websocket and HTTP on the same port (#20810) 2020-04-08 13:33:12 +02:00
errors.go internal/ethapi: return revert reason for eth_call (#21083) 2020-06-08 11:09:49 +03:00
handler.go internal/ethapi: return revert reason for eth_call (#21083) 2020-06-08 11:09:49 +03:00
http_test.go rpc: add explicit 200 response for empty HTTP GET (#20952) 2020-04-28 10:43:21 +02:00
http.go rpc: add SetHeader method to Client (#21392) 2020-08-03 14:08:42 +02:00
inproc.go rpc, p2p/simulations: use github.com/gorilla/websocket (#20289) 2019-11-18 10:40:59 +02:00
ipc_js.go all: update author list and licenses 2019-07-22 12:17:27 +03:00
ipc_unix.go rpc: implement websockets with github.com/gorilla/websocket (#19866) 2019-07-22 13:22:39 +03:00
ipc_windows.go all: import "context" instead of "golang.org/x/net/context" 2017-03-22 20:49:15 +01:00
ipc.go rpc, p2p/simulations: use github.com/gorilla/websocket (#20289) 2019-11-18 10:40:59 +02:00
json.go rpc: fix issue with null JSON-RPC messages (#21497) 2020-08-28 16:27:58 +02:00
metrics.go rpc: metrics for JSON-RPC method calls (#20847) 2020-04-03 12:36:44 +02:00
server_test.go internal/ethapi: return revert reason for eth_call (#21083) 2020-06-08 11:09:49 +03:00
server.go all: fix typos in comments (#21118) 2020-05-25 10:21:28 +02:00
service.go rpc: remove 'exported or builtin' restriction for parameters (#20332) 2019-11-20 10:06:21 +02:00
stdio.go rpc, p2p/simulations: use github.com/gorilla/websocket (#20289) 2019-11-18 10:40:59 +02:00
subscription_test.go all: fix a bunch of inconsequential goroutine leaks (#20667) 2020-04-03 20:07:22 +02:00
subscription.go rpc: remove silly use of ReadVarint in subscription ID generator (#21391) 2020-07-31 16:20:31 +02:00
testservice_test.go internal/ethapi: return revert reason for eth_call (#21083) 2020-06-08 11:09:49 +03:00
types_test.go internal/ethapi: support block number or hash on state-related methods (#19491) 2019-09-26 10:47:31 +02:00
types.go internal/ethapi: return revert reason for eth_call (#21083) 2020-06-08 11:09:49 +03:00
websocket_test.go rpc: add missing timer.Stop calls in websocket tests (#20863) 2020-04-02 22:08:45 +02:00
websocket.go node: support expressive origin rules in ws.origins (#21481) 2020-11-19 14:54:49 +01:00