This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / netutil / ssrf.go
1.1 kB 51 lines
1package netutil 2 3import ( 4 "fmt" 5 "net" 6 "net/http" 7 "net/url" 8 9 "github.com/bluesky-social/indigo/util/ssrf" 10 "github.com/gorilla/websocket" 11) 12 13// refuses non-public ips to prevent ssrf 14func SSRFDialer(dev bool) *net.Dialer { 15 if dev { 16 return &net.Dialer{} 17 } 18 return ssrf.PublicOnlyDialer() 19} 20 21// refuses non-public ips to prevent ssrf 22func SSRFTransport(dev bool) *http.Transport { 23 if dev { 24 return &http.Transport{} 25 } 26 return ssrf.PublicOnlyTransport() 27} 28 29// refuses non-public ips to prevent ssrf 30func SSRFWebsocketDialer(dev bool) *websocket.Dialer { 31 dialer := *websocket.DefaultDialer 32 dialer.NetDialContext = SSRFDialer(dev).DialContext 33 return &dialer 34} 35 36func EnforceWSSURL(rawURL string, dev bool) (*url.URL, error) { 37 u, err := url.Parse(rawURL) 38 if err != nil { 39 return nil, fmt.Errorf("invalid url: %w", err) 40 } 41 switch u.Scheme { 42 case "wss": 43 case "ws": 44 if !dev { 45 return nil, fmt.Errorf("insecure scheme %q is prohibited in production; use wss://", u.Scheme) 46 } 47 default: 48 return nil, fmt.Errorf("unsupported websocket scheme %q", u.Scheme) 49 } 50 return u, nil 51}