@@ -429,6 +429,7 @@ func setupWFE(t *testing.T) (WebFrontEndImpl, clock.FakeClock, requestSigner) {
429
429
blog .NewMock (),
430
430
10 * time .Second ,
431
431
10 * time .Second ,
432
+ 2 ,
432
433
& MockRegistrationAuthority {clk : fc },
433
434
mockSA ,
434
435
nil ,
@@ -1647,6 +1648,124 @@ func TestNewAccountNoID(t *testing.T) {
1647
1648
}` )
1648
1649
}
1649
1650
1651
+ func TestContactsToEmails (t * testing.T ) {
1652
+ t .Parallel ()
1653
+ wfe , _ , _ := setupWFE (t )
1654
+
1655
+ for _ , tc := range []struct {
1656
+ name string
1657
+ contacts []string
1658
+ want []string
1659
+ wantErr string
1660
+ }{
1661
+ {
1662
+ name : "no contacts" ,
1663
+ contacts : []string {},
1664
+ want : []string {},
1665
+ },
1666
+ {
1667
+ name : "happy path" ,
1668
+ contacts : []
string {
"mailto:[email protected] " ,
"mailto:[email protected] " },
1669
+
1670
+ },
1671
+ {
1672
+ name : "empty url" ,
1673
+ contacts : []string {"" },
1674
+ wantErr : "empty contact" ,
1675
+ },
1676
+ {
1677
+ name : "too many contacts" ,
1678
+ contacts : []
string {
"mailto:[email protected] " ,
"mailto:[email protected] " ,
"mailto:[email protected] " },
1679
+ wantErr : "too many contacts" ,
1680
+ },
1681
+ {
1682
+ name : "unknown scheme" ,
1683
+ contacts : []string {"ansible:earth.sol.milkyway.laniakea/letsencrypt" },
1684
+ wantErr : "contact scheme" ,
1685
+ },
1686
+ {
1687
+ name : "malformed email" ,
1688
+ contacts : []string {"mailto:admin.com" },
1689
+ wantErr : "unable to parse email address" ,
1690
+ },
1691
+ {
1692
+ name : "non-ascii email" ,
1693
+ contacts : []
string {
"mailto:señ[email protected] " },
1694
+ wantErr : "contains non-ASCII characters" ,
1695
+ },
1696
+ {
1697
+ name : "unarseable email" ,
1698
+
1699
+ wantErr : "unable to parse email address" ,
1700
+ },
1701
+ {
1702
+ name : "forbidden example domain" ,
1703
+ contacts : []
string {
"mailto:[email protected] " },
1704
+ wantErr : "forbidden" ,
1705
+ },
1706
+ {
1707
+ name : "forbidden non-public domain" ,
1708
+ contacts : []string {"mailto:admin@localhost" },
1709
+ wantErr : "needs at least one dot" ,
1710
+ },
1711
+ {
1712
+ name : "forbidden non-iana domain" ,
1713
+ contacts : []
string {
"mailto:[email protected] " },
1714
+ wantErr : "does not end with a valid public suffix" ,
1715
+ },
1716
+ {
1717
+ name : "forbidden ip domain" ,
1718
+ contacts : []
string {
"mailto:[email protected] " },
1719
+ wantErr : "value is an IP address" ,
1720
+ },
1721
+ {
1722
+ name : "forbidden bracketed ip domain" ,
1723
+ contacts : []string {"mailto:admin@[1.2.3.4]" },
1724
+ wantErr : "contains an invalid character" ,
1725
+ },
1726
+ {
1727
+ name : "query parameter" ,
1728
+ contacts : []
string {
"mailto:[email protected] ?no-reminder-emails" },
1729
+ wantErr : "contains a question mark" ,
1730
+ },
1731
+ {
1732
+ name : "empty query parameter" ,
1733
+ contacts : []
string {
"mailto:[email protected] ?" },
1734
+ wantErr : "contains a question mark" ,
1735
+ },
1736
+ {
1737
+ name : "fragment url" ,
1738
+ contacts : []
string {
"mailto:[email protected] #optional" },
1739
+ wantErr : "contains a '#'" ,
1740
+ },
1741
+ {
1742
+ name : "empty frament url" ,
1743
+ contacts : []
string {
"mailto:[email protected] #" },
1744
+ wantErr : "contains a '#'" ,
1745
+ },
1746
+ } {
1747
+ t .Run (tc .name , func (t * testing.T ) {
1748
+ t .Parallel ()
1749
+ got , err := wfe .contactsToEmails (tc .contacts )
1750
+ if tc .wantErr != "" {
1751
+ if err == nil {
1752
+ t .Fatalf ("contactsToEmails(%#v) = nil, but want %q" , tc .contacts , tc .wantErr )
1753
+ }
1754
+ if ! strings .Contains (err .Error (), tc .wantErr ) {
1755
+ t .Errorf ("contactsToEmails(%#v) = %q, but want %q" , tc .contacts , err .Error (), tc .wantErr )
1756
+ }
1757
+ } else {
1758
+ if err != nil {
1759
+ t .Fatalf ("contactsToEmails(%#v) = %q, but want %#v" , tc .contacts , err .Error (), tc .want )
1760
+ }
1761
+ if ! slices .Equal (got , tc .want ) {
1762
+ t .Errorf ("contactsToEmails(%#v) = %#v, but want %#v" , tc .contacts , got , tc .want )
1763
+ }
1764
+ }
1765
+ })
1766
+ }
1767
+ }
1768
+
1650
1769
func TestGetAuthorizationHandler (t * testing.T ) {
1651
1770
wfe , _ , signer := setupWFE (t )
1652
1771
@@ -4189,7 +4308,7 @@ func TestNewAccountCreatesContacts(t *testing.T) {
4189
4308
{
4190
4309
name : "One valid email, one invalid email" ,
4191
4310
contacts : []
string {
"mailto:[email protected] " ,
"mailto:lol@%mail.com" },
4192
- expected : []
string {
"[email protected] " },
4311
+ expected : []string {},
4193
4312
},
4194
4313
{
4195
4314
name : "Valid email with non-email prefix" ,
0 commit comments