1
0
Fork 0
mirror of https://git.sr.ht/~rjarry/aerc synced 2025-07-06 19:30:22 +02:00
aerc/lib/autoconfig/mozilla_test.go
Moritz Poldrack d771c49e74 autoconf: add Mozilla lookup
Add config retrieval from Mozilla's Thunderbird Provider index.

Signed-off-by: Moritz Poldrack <git@moritz.sh>
Acked-by: Robin Jarry <robin@jarry.cc>
2025-02-14 13:50:27 +01:00

247 lines
7.4 KiB
Go

package autoconfig
import (
"context"
"errors"
"io"
"net/http"
"strings"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestMozilla(t *testing.T) {
tests := []struct {
address string
correctConfig *Config
}{
{
address: "gmail.com",
correctConfig: &Config{
Found: ProtocolIMAP,
IMAP: Credentials{
Encryption: EncryptionTLS,
Address: "imap.gmail.com",
Port: 993,
Username: "john@gmail.com",
},
SMTP: Credentials{
Encryption: EncryptionTLS,
Address: "smtp.gmail.com",
Port: 465,
Username: "john@gmail.com",
},
},
},
{
address: "gmx.de",
correctConfig: &Config{
Found: ProtocolIMAP,
IMAP: Credentials{
Encryption: EncryptionTLS,
Address: "imap.gmx.net",
Port: 993,
Username: "john@gmx.de",
},
SMTP: Credentials{
Encryption: EncryptionSTARTTLS,
Address: "mail.gmx.net",
Port: 587,
Username: "john@gmx.de",
},
},
},
}
mozillaGet = mozillaTestHTTP
defer func() {
mozillaGet = http.Get
}()
for _, test := range tests {
test := test
t.Run(test.address, func(t *testing.T) {
result := make(chan *Config)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
go getFromMozilla(ctx, "john", test.address, result)
select {
case res := <-result:
if res == nil {
t.Log("no result")
t.FailNow()
}
assert.Equal(t, test.correctConfig, res)
case <-ctx.Done():
t.Error("retrieval timed out!")
}
})
}
}
func mozillaTestHTTP(url string) (*http.Response, error) {
switch url {
case "https://autoconfig.thunderbird.net/v1.1/gmail.com":
return &http.Response{
StatusCode: 200,
Body: io.NopCloser(strings.NewReader(gmailCfg)),
}, nil
case "https://autoconfig.thunderbird.net/v1.1/gmx.de":
return &http.Response{
StatusCode: 200,
Body: io.NopCloser(strings.NewReader(gmxCfg)),
}, nil
case "https://autoconfig.thunderbird.net/v1.1/timeout":
<-time.After(10 * time.Second)
return nil, nil
default:
return nil, errors.New("not prepared")
}
}
const (
gmailCfg = `<clientConfig version="1.1">
<emailProvider id="googlemail.com">
<domain>gmail.com</domain>
<domain>googlemail.com</domain>
<!-- MX, for Google Apps -->
<domain>google.com</domain>
<!-- HACK. Only add ISPs with 100000+ users here -->
<domain>jazztel.es</domain>
<displayName>Google Mail</displayName>
<displayShortName>GMail</displayShortName>
<incomingServer type="imap">
<hostname>imap.gmail.com</hostname>
<port>993</port>
<socketType>SSL</socketType>
<username>%EMAILADDRESS%</username>
<authentication>OAuth2</authentication>
<authentication>password-cleartext</authentication>
</incomingServer>
<incomingServer type="pop3">
<hostname>pop.gmail.com</hostname>
<port>995</port>
<socketType>SSL</socketType>
<username>%EMAILADDRESS%</username>
<authentication>OAuth2</authentication>
<authentication>password-cleartext</authentication>
<pop3>
<leaveMessagesOnServer>true</leaveMessagesOnServer>
</pop3>
</incomingServer>
<outgoingServer type="smtp">
<hostname>smtp.gmail.com</hostname>
<port>465</port>
<socketType>SSL</socketType>
<username>%EMAILADDRESS%</username>
<authentication>OAuth2</authentication>
<authentication>password-cleartext</authentication>
</outgoingServer>
<documentation url="http://mail.google.com/support/bin/answer.py?answer=13273">
<descr>How to enable IMAP/POP3 in GMail</descr>
</documentation>
<documentation url="http://mail.google.com/support/bin/topic.py?topic=12806">
<descr>How to configure email clients for IMAP</descr>
</documentation>
<documentation url="http://mail.google.com/support/bin/topic.py?topic=12805">
<descr>How to configure email clients for POP3</descr>
</documentation>
<documentation url="http://mail.google.com/support/bin/answer.py?answer=86399">
<descr>How to configure TB 2.0 for POP3</descr>
</documentation>
</emailProvider>
<oAuth2>
<issuer>accounts.google.com</issuer>
<!-- https://developers.google.com/identity/protocols/oauth2/scopes -->
<scope>https://mail.google.com/ https://www.googleapis.com/auth/contacts https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/carddav</scope>
<authURL>https://accounts.google.com/o/oauth2/auth</authURL>
<tokenURL>https://www.googleapis.com/oauth2/v3/token</tokenURL>
</oAuth2>
<enable visiturl="https://mail.google.com/mail/?ui=2&amp;shva=1#settings/fwdandpop">
<instruction>You need to enable IMAP access</instruction>
</enable>
<webMail>
<loginPage url="https://accounts.google.com/ServiceLogin?service=mail&amp;continue=http://mail.google.com/mail/"/>
<loginPageInfo url="https://accounts.google.com/ServiceLogin?service=mail&amp;continue=http://mail.google.com/mail/">
<username>%EMAILADDRESS%</username>
<usernameField id="Email"/>
<passwordField id="Passwd"/>
<loginButton id="signIn"/>
</loginPageInfo>
</webMail>
</clientConfig>
`
gmxCfg = `<clientConfig version="1.1">
<emailProvider id="gmx.net">
<domain>gmx.net</domain>
<domain>gmx.de</domain>
<domain>gmx.at</domain>
<domain>gmx.ch</domain>
<domain>gmx.eu</domain>
<domain>gmx.biz</domain>
<domain>gmx.org</domain>
<domain>gmx.info</domain>
<!-- see also other domains below -->
<!-- gmx.com is same company, but different access servers -->
<displayName>GMX Freemail</displayName>
<displayShortName>GMX</displayShortName>
<!-- imap officially costs money, but actually works with freemail accounts, too -->
<incomingServer type="imap">
<hostname>imap.gmx.net</hostname>
<port>993</port>
<socketType>SSL</socketType>
<!-- Kundennummer (customer no) and email address should both work -->
<username>%EMAILADDRESS%</username>
<authentication>password-cleartext</authentication>
</incomingServer>
<incomingServer type="imap">
<hostname>imap.gmx.net</hostname>
<port>143</port>
<socketType>STARTTLS</socketType>
<username>%EMAILADDRESS%</username>
<authentication>password-cleartext</authentication>
</incomingServer>
<incomingServer type="pop3">
<hostname>pop.gmx.net</hostname>
<port>995</port>
<socketType>SSL</socketType>
<!-- see above -->
<username>%EMAILADDRESS%</username>
<authentication>password-cleartext</authentication>
</incomingServer>
<incomingServer type="pop3">
<hostname>pop.gmx.net</hostname>
<port>110</port>
<socketType>STARTTLS</socketType>
<username>%EMAILADDRESS%</username>
<authentication>password-cleartext</authentication>
</incomingServer>
<outgoingServer type="smtp">
<hostname>mail.gmx.net</hostname>
<port>465</port>
<socketType>SSL</socketType>
<!-- see above -->
<username>%EMAILADDRESS%</username>
<authentication>password-cleartext</authentication>
</outgoingServer>
<outgoingServer type="smtp">
<hostname>mail.gmx.net</hostname>
<port>587</port>
<socketType>STARTTLS</socketType>
<username>%EMAILADDRESS%</username>
<authentication>password-cleartext</authentication>
</outgoingServer>
</emailProvider>
</clientConfig>
`
)