Merge pull request #2577 from MHSanaei/new-fixes

New fixes
This commit is contained in:
Sanaei 2024-10-10 21:37:54 +02:00 committed by GitHub
commit 4a05188a7f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -2,9 +2,7 @@ package service
import ( import (
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"regexp"
"strconv" "strconv"
"strings" "strings"
"time" "time"
@ -101,8 +99,9 @@ func (s *InboundService) getAllEmails() ([]string, error) {
} }
func (s *InboundService) contains(slice []string, str string) bool { func (s *InboundService) contains(slice []string, str string) bool {
lowerStr := strings.ToLower(str)
for _, s := range slice { for _, s := range slice {
if s == str { if strings.ToLower(s) == lowerStr {
return true return true
} }
} }
@ -414,12 +413,6 @@ func (s *InboundService) AddInboundClient(data *model.Inbound) (bool, error) {
return false, err return false, err
} }
email := clients[0].Email
valid, err := validateEmail(email)
if !valid {
return false, err
}
var settings map[string]interface{} var settings map[string]interface{}
err = json.Unmarshal([]byte(data.Settings), &settings) err = json.Unmarshal([]byte(data.Settings), &settings)
if err != nil { if err != nil {
@ -610,12 +603,6 @@ func (s *InboundService) UpdateInboundClient(data *model.Inbound, clientId strin
return false, err return false, err
} }
email := clients[0].Email
valid, err := validateEmail(email)
if !valid {
return false, err
}
var settings map[string]interface{} var settings map[string]interface{}
err = json.Unmarshal([]byte(data.Settings), &settings) err = json.Unmarshal([]byte(data.Settings), &settings)
if err != nil { if err != nil {
@ -1050,10 +1037,14 @@ func (s *InboundService) disableInvalidInbounds(tx *gorm.DB) (bool, int64, error
if err1 == nil { if err1 == nil {
logger.Debug("Inbound disabled by api:", tag) logger.Debug("Inbound disabled by api:", tag)
} else { } else {
logger.Debug("Error in disabling inbound by api:", err1) if strings.Contains(err1.Error(), fmt.Sprintf("User %s not found.", tag)) {
logger.Debug("User is already disabled. Nothing to do more...")
} else {
logger.Debug("Error in disabling client by api:", err1)
needRestart = true needRestart = true
} }
} }
}
s.xrayApi.Close() s.xrayApi.Close()
} }
@ -1088,11 +1079,19 @@ func (s *InboundService) disableInvalidClients(tx *gorm.DB) (bool, int64, error)
err1 := s.xrayApi.RemoveUser(result.Tag, result.Email) err1 := s.xrayApi.RemoveUser(result.Tag, result.Email)
if err1 == nil { if err1 == nil {
logger.Debug("Client disabled by api:", result.Email) logger.Debug("Client disabled by api:", result.Email)
} else {
if strings.Contains(err1.Error(), fmt.Sprintf("User %s not found.", result.Email)) {
logger.Debug("User is already disabled. Nothing to do more...")
} else {
if strings.Contains(err1.Error(), fmt.Sprintf("User %s not found.", result.Email)) {
logger.Debug("User is already disabled. Nothing to do more...")
} else { } else {
logger.Debug("Error in disabling client by api:", err1) logger.Debug("Error in disabling client by api:", err1)
needRestart = true needRestart = true
} }
} }
}
}
s.xrayApi.Close() s.xrayApi.Close()
} }
result := tx.Model(xray.ClientTraffic{}). result := tx.Model(xray.ClientTraffic{}).
@ -2022,26 +2021,3 @@ func (s *InboundService) MigrateDB() {
func (s *InboundService) GetOnlineClients() []string { func (s *InboundService) GetOnlineClients() []string {
return p.GetOnlineClients() return p.GetOnlineClients()
} }
func validateEmail(email string) (bool, error) {
if strings.Contains(email, " ") {
return false, errors.New("email contains spaces, please remove them")
}
if email != strings.ToLower(email) {
return false, errors.New("email contains uppercase letters, please convert to lowercase")
}
nonEnglishPattern := `[^\x00-\x7F]`
if regexp.MustCompile(nonEnglishPattern).MatchString(email) {
return false, errors.New("email contains non-English characters, please use only English")
}
emailPattern := `^[a-z0-9@._-]+$`
if !regexp.MustCompile(emailPattern).MatchString(email) {
return false, errors.New("email contains invalid characters, please use only lowercase letters, digits, and @._-")
}
return true, nil
}