mirror of
https://github.com/decke/smtprelay.git
synced 2025-12-25 07:43:06 -07:00
Expand allowedUsers email field to support comma-separated and domains (#9)
* Expand allowedUsers email field to support comma-separated and domains Closes #8 * Refactor AuthFetch() to return AuthUser struct Also, this breaks out a parseLine() function which can be easily tested. * Ignore empty addrs after splitting commas This ignores a trailing comma * Add tests for auth parseLine() * Update documentation in smtprelay.ini * Fix bug where addrAllowed() was incorrectly case-sensitive * Update allowedUsers allowed domain format to require leading @ This disambiguates a local user ('john.smith') from a domain ('example.com')
This commit is contained in:
committed by
GitHub
parent
5c2e28ac36
commit
0e8986ca79
89
auth_test.go
Normal file
89
auth_test.go
Normal file
@@ -0,0 +1,89 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func stringsEqual(a, b []string) bool {
|
||||
if len(a) != len(b) {
|
||||
return false
|
||||
}
|
||||
for i, _ := range a {
|
||||
if a[i] != b[i] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func TestParseLine(t *testing.T) {
|
||||
var tests = []struct {
|
||||
name string
|
||||
expectFail bool
|
||||
line string
|
||||
username string
|
||||
addrs []string
|
||||
}{
|
||||
{
|
||||
name: "Empty line",
|
||||
expectFail: true,
|
||||
line: "",
|
||||
},
|
||||
{
|
||||
name: "Too few fields",
|
||||
expectFail: true,
|
||||
line: "joe",
|
||||
},
|
||||
{
|
||||
name: "Too many fields",
|
||||
expectFail: true,
|
||||
line: "joe xxx joe@example.com whatsthis",
|
||||
},
|
||||
{
|
||||
name: "Normal case",
|
||||
line: "joe xxx joe@example.com",
|
||||
username: "joe",
|
||||
addrs: []string{"joe@example.com"},
|
||||
},
|
||||
{
|
||||
name: "No allowed addrs given",
|
||||
line: "joe xxx",
|
||||
username: "joe",
|
||||
addrs: []string{},
|
||||
},
|
||||
{
|
||||
name: "Trailing comma",
|
||||
line: "joe xxx joe@example.com,",
|
||||
username: "joe",
|
||||
addrs: []string{"joe@example.com"},
|
||||
},
|
||||
{
|
||||
name: "Multiple allowed addrs",
|
||||
line: "joe xxx joe@example.com,@foo.example.com",
|
||||
username: "joe",
|
||||
addrs: []string{"joe@example.com", "@foo.example.com"},
|
||||
},
|
||||
}
|
||||
|
||||
for i, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
user := parseLine(test.line)
|
||||
if user == nil {
|
||||
if !test.expectFail {
|
||||
t.Errorf("parseLine() returned nil unexpectedly")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if user.username != test.username {
|
||||
t.Errorf("Testcase %d: Incorrect username: expected %v, got %v",
|
||||
i, test.username, user.username)
|
||||
}
|
||||
|
||||
if !stringsEqual(user.allowedAddresses, test.addrs) {
|
||||
t.Errorf("Testcase %d: Incorrect addresses: expected %v, got %v",
|
||||
i, test.addrs, user.allowedAddresses)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user