This commit is contained in:
Gnarwhal 2024-10-02 15:01:29 +00:00
parent 86dc81451a
commit 7b2d7c3f42
Signed by: Gnarwhal
GPG key ID: 0989A73D8C421174
2 changed files with 96 additions and 3 deletions

View file

@ -23,15 +23,15 @@ import (
"regexp" "regexp"
) )
var ReversePath = regexp.MustCompile(fmt.Sprintf("(?:%v)|<>", path)) var ReversePath = regexp.MustCompile(fmt.Sprintf("(?:%v)|<()>", path))
var ForwardPath = regexp.MustCompile(path) var ForwardPath = regexp.MustCompile(path)
var Domain = regexp.MustCompile(fmt.Sprintf(".+@(%v)", domain)) var Domain = regexp.MustCompile(fmt.Sprintf(".+@(%v)", domain))
// https://datatracker.ietf.org/doc/html/rfc5321#page-41 // https://datatracker.ietf.org/doc/html/rfc5321#page-41
// Is this...legal, m'lord? (no, but ¯\_(ツ)_/¯) // Is this...legal, m'lord? (no, but ¯\_(ツ)_/¯)
// ... // ...
// Ok fine. TODO. Happy now? // What? You want more? Nope. That is all you get.
var path = fmt.Sprintf("<(?:.*:)?(.+@%v)", domain) var path = fmt.Sprintf("<(?:.*:)?(.+@%v)>", domain)
var domain = fmt.Sprintf("%v(?:.%v)*", sub_domain, sub_domain) var domain = fmt.Sprintf("%v(?:.%v)*", sub_domain, sub_domain)
var sub_domain = fmt.Sprintf("%v(?:%v)?", let_dig, let_str) var sub_domain = fmt.Sprintf("%v(?:%v)?", let_dig, let_str)
var let_str = fmt.Sprintf("%v*%v", let_dig_und, let_dig) var let_str = fmt.Sprintf("%v*%v", let_dig_und, let_dig)

93
smtp/parsers_test.go Normal file
View file

@ -0,0 +1,93 @@
/* diodemail - send-only smtp server
* Copyright (c) 2024 Gnarwhal
*
* This file is part of SSHare.
*
* SSHare is free software: you can redistribute it and/or modify it under the terms of
* the GNU General Public License as published by the Free Software Foundation,
* either version 3 of the License, or (at your option) any later version.
*
* SSHare is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* SSHare. If not, see <https://www.gnu.org/licenses/>.
*/
package smtp
import (
"testing"
)
func TestPathPatterns(t *testing.T) {
var tests = []struct {
pattern string
matches bool
group string
} {
{
"<test@example.com>",
true, "test@example.com",
},
{
"<test@example.com",
false, "",
},
{
"<test@sub-domain.example.com>",
true, "test@sub-domain.example.com",
},
{
"<テスト@何か.com>",
true, "テスト@何か.com",
},
{
"<@source-path.com:test@example.com>",
true, "test@example.com",
},
{
"<@second-path.com,@source-path.com:test@example.com>",
true, "test@example.com",
},
{
"<test@example-.com>",
false, "",
},
{
"<test@example!.com>",
false, "",
},
{
"<@nope>",
false, "",
},
{
"<nope>",
false, "",
},
{
"<>",
true, "",
},
}
for _, test := range tests {
t.Run(test.pattern, func(t *testing.T) {
match := ReversePath.FindStringSubmatch(test.pattern)
if match == nil {
if test.matches {
t.Errorf("unxpectedly did not match")
}
} else {
if !test.matches {
t.Errorf("unexpectedly matched: %v", match[0])
} else if match[1] != test.group {
t.Errorf("got %v, expected %v", match[1], test.group)
}
}
})
}
}