mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-05-31 10:14:15 +00:00
Like the client email, the subId is embedded directly in subscription URLs, so the same characters break it. Validate it on the backend (Create + Update) and the frontend (Zod), with a localized message across all 13 locales. An empty subId stays allowed (it is then auto-generated).
57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
package service
|
|
|
|
import "testing"
|
|
|
|
func TestValidateClientEmail(t *testing.T) {
|
|
valid := []string{
|
|
"alice",
|
|
"alice@example.com",
|
|
"user-123_test.name",
|
|
"имя",
|
|
}
|
|
for _, email := range valid {
|
|
if err := validateClientEmail(email); err != nil {
|
|
t.Errorf("validateClientEmail(%q) = %v, want nil", email, err)
|
|
}
|
|
}
|
|
|
|
invalid := []string{
|
|
"i6dui/",
|
|
"a/b",
|
|
"client with spaces",
|
|
"back\\slash",
|
|
"tab\there",
|
|
"new\nline",
|
|
"\x7fdelete",
|
|
}
|
|
for _, email := range invalid {
|
|
if err := validateClientEmail(email); err == nil {
|
|
t.Errorf("validateClientEmail(%q) = nil, want error", email)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestValidateClientSubID(t *testing.T) {
|
|
valid := []string{
|
|
"",
|
|
"abc123",
|
|
"sub-id_value",
|
|
}
|
|
for _, subID := range valid {
|
|
if err := validateClientSubID(subID); err != nil {
|
|
t.Errorf("validateClientSubID(%q) = %v, want nil", subID, err)
|
|
}
|
|
}
|
|
|
|
invalid := []string{
|
|
"a/b",
|
|
"with space",
|
|
"back\\slash",
|
|
"new\nline",
|
|
}
|
|
for _, subID := range invalid {
|
|
if err := validateClientSubID(subID); err == nil {
|
|
t.Errorf("validateClientSubID(%q) = nil, want error", subID)
|
|
}
|
|
}
|
|
}
|