Smol
This commit is contained in:
parent
86dc81451a
commit
7b2d7c3f42
2 changed files with 96 additions and 3 deletions
|
@ -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
93
smtp/parsers_test.go
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue