{true, "https://wb1.example/", "https://wb2.example/", "https://good.wb2.example/", "https://good.wb2.example"},
{true, "https://wb1.example/", "https://wb2.example/", "https://good.wb2.example:443/", "https://good.wb2.example"},
{true, "https://wb1.example/", "https://wb2.example/", "https://good.wb2.example:443", "https://good.wb2.example/"},
+
+ {true, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example", "https://ok.wildcard.example/"},
+ {true, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example", "https://ok.ok.wildcard.example/"},
+ {true, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example", "https://[ok.ok.wildcard.example]:443/"},
+ {true, "https://wb1.example/", "https://wb2.example/", "https://[*.wildcard.example]:443", "https://ok.ok.wildcard.example/"},
+ {true, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example:443", "https://ok.wildcard.example/"},
+ {true, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example", "https://ok.wildcard.example:443/"},
+ {true, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example:443", "https://ok.wildcard.example:443/"},
+
+ {false, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example", "http://wildcard.example/"},
+ {false, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example", "http://.wildcard.example/"},
+ {false, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example", "http://wrongscheme.wildcard.example/"},
+ {false, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example", "http://wrongscheme.wildcard.example:443/"},
+ {false, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example", "https://wrongport.wildcard.example:80/"},
+ {false, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example", "https://notmatching-wildcard.example/"},
+ {false, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example", "http://notmatching.wildcard.example/"},
+ {false, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example:443", "https://attacker.example/ok.wildcard.example/"},
+ {false, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example", "https://attacker.example/ok.wildcard.example/"},
+ {false, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example", "https://attacker.example/?https://ok.wildcard.example/"},
+ {false, "https://wb1.example/", "https://wb2.example/", "https://*.wildcard.example", "https://attacker.example/#https://ok.wildcard.example/"},
+ {false, "https://wb1.example/", "https://wb2.example/", "https://*-wildcard.example", "https://notsupported-wildcard.example/"},
} {
c.Logf("trial %+v", trial)
// We use json.Unmarshal() to load the test strings
end
end
end
+
+ [
+ [true, "https://ok.example", "https://ok.example"],
+ [true, "https://ok.example:443/", "https://ok.example"],
+ [true, "https://ok.example", "https://ok.example:443/"],
+ [true, "https://ok.example", "https://ok.example/foo/bar"],
+ [true, "https://ok.example", "https://ok.example?foo/bar"],
+ [true, "https://ok.example/waz?quux", "https://ok.example/foo?bar#baz"],
+ [false, "https://ok.example", "http://ok.example"],
+ [false, "https://ok.example", "http://ok.example:443"],
+
+ [true, "https://*.wildcard.example", "https://ok.wildcard.example"],
+ [true, "https://*.wildcard.example", "https://ok.ok.ok.wildcard.example"],
+ [false, "https://*.wildcard.example", "http://wrongscheme.wildcard.example"],
+ [false, "https://*.wildcard.example", "https://wrongport.wildcard.example:80"],
+ [false, "https://*.wildcard.example", "https://ok.wildcard.example.attacker.example/"],
+ [false, "https://*.wildcard.example", "https://attacker.example/https://ok.wildcard.example/"],
+ [false, "https://*.wildcard.example", "https://attacker.example/?https://ok.wildcard.example/"],
+ [false, "https://*.wildcard.example", "https://attacker.example/#https://ok.wildcard.example/"],
+ [false, "https://*-wildcard.example", "https://notsupported-wildcard.example"],
+ ].each do |pass, trusted, current|
+ test "is_trusted(#{current}) returns #{pass} based on #{trusted} in TrustedClients" do
+ Rails.configuration.Login.TrustedClients = ActiveSupport::OrderedOptions.new
+ Rails.configuration.Login.TrustedClients[trusted.to_sym] = ActiveSupport::OrderedOptions.new
+ assert_equal pass, ApiClient.new(url_prefix: current).is_trusted
+ end
+ end
end