diff --git a/patterns.go b/patterns.go index 4fd6f6a..98eba14 100644 --- a/patterns.go +++ b/patterns.go @@ -74,6 +74,15 @@ var WebRTCDirect = Or( And(HTTP, Base(ma.P_P2P_WEBRTC_DIRECT)), And(HTTPS, Base(ma.P_P2P_WEBRTC_DIRECT))) +// Define a onion v2 format multiaddr +var ONION2 = Base(ma.P_ONION) + +// Define a onion v3 format multiaddr +var ONION3 = Base(ma.P_ONION3) + +// Define both onion v2 and v3 multiaddr +var ONION = Or(ONION2, ONION3) + const ( or = iota and = iota diff --git a/patterns_test.go b/patterns_test.go index b14e24b..2d01945 100644 --- a/patterns_test.go +++ b/patterns_test.go @@ -75,6 +75,16 @@ var TestVectors = map[string]*testVector{ Good: []string{"/ip4/1.2.3.4/https", "/dns4/example.io/https", "/dns6/::/tcp/7011/https", "/ip6/fc00::/https"}, Bad: []string{"/ip4/1.2.3.4/http", "/ip4/0.0.0.0/tcp/12345/quic", "/ip6/fc00::/tcp/5523"}, }, + "ONION": { + Pattern: ONION, + Good: []string{"/onion/timaq4ygg2iegci7:1234", "/onion3/vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd:1234"}, + Bad: []string{"/onion/timaq4ygg2iegci:80", "/onion/timaq4ygg2iegci7:-1", "/onion/timaq4ygg2iegci7", + "/onion3/vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopyyd:1234", + "/onion3/vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd:-1", + "/onion3/vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd"}, + }, + + } func TestProtocolMatching(t *testing.T) {