test(proxy): add tests for relayURL check

This commit is contained in:
WofWca 2024-08-30 16:42:52 +04:00 committed by Shelikhoo
parent 978a55b7c4
commit 14f4c82ff7
No known key found for this signature in database
GPG key ID: 4C9764E9FE80A3DC
2 changed files with 91 additions and 12 deletions

View file

@ -600,18 +600,12 @@ func (sf *SnowflakeProxy) runSession(sid string) {
}
log.Printf("Received Offer From Broker: \n\t%s", strings.ReplaceAll(offer.SDP, "\n", "\n\t"))
matcher := namematcher.NewNameMatcher(sf.RelayDomainNamePattern)
parsedRelayURL, err := url.Parse(relayURL)
if err != nil {
log.Printf("bad offer from broker: bad Relay URL %v", err.Error())
tokens.ret()
return
}
if relayURL != "" && (!matcher.IsMember(parsedRelayURL.Hostname()) || (!sf.AllowNonTLSRelay && parsedRelayURL.Scheme != "wss")) {
log.Printf("bad offer from broker: rejected Relay URL")
tokens.ret()
return
if relayURL != "" {
if err := checkIsRelayURLAcceptable(sf.RelayDomainNamePattern, sf.AllowNonTLSRelay, relayURL); err != nil {
log.Printf("bad offer from broker: %v", err)
tokens.ret()
return
}
}
dataChan := make(chan struct{})
@ -647,6 +641,24 @@ func (sf *SnowflakeProxy) runSession(sid string) {
}
}
// Returns nil if the relayURL is acceptable
func checkIsRelayURLAcceptable(
allowedHostNamePattern string,
allowNonTLSRelay bool,
relayURL string,
) error {
parsedRelayURL, err := url.Parse(relayURL)
if err != nil {
return fmt.Errorf("bad Relay URL %w", err)
}
matcher := namematcher.NewNameMatcher(allowedHostNamePattern)
if !matcher.IsMember(parsedRelayURL.Hostname()) || (!allowNonTLSRelay && parsedRelayURL.Scheme != "wss") {
return fmt.Errorf("rejected Relay URL")
} else {
return nil
}
}
// Start configures and starts a Snowflake, fully formed and special. Configuration
// values that are unset will default to their corresponding default values.
func (sf *SnowflakeProxy) Start() error {