@@ -15,7 +15,28 @@ class ProxyServerModel: NSObject, Codable {
1515 @objc dynamic var method : String = " RC4-MD5 "
1616 @objc dynamic var remark : String = " Proxy "
1717
18+
19+ static let supportMethod = [
20+ " RC4-MD5 " ,
21+ " AES-128-CTR " ,
22+ " AES-192-CTR " ,
23+ " AES-256-CTR " ,
24+ " AES-128-CFB " ,
25+ " AES-192-CFB " ,
26+ " AES-256-CFB " ,
27+ " CHACHA20 " ,
28+ " CHACHA20-IETF " ,
29+ " XCHACHA20 " ,
30+ " AEAD_AES_128_GCM " ,
31+ " AEAD_AES_192_GCM " ,
32+ " AEAD_AES_256_GCM " ,
33+ " AEAD_CHACHA20_POLY1305 "
34+ ]
35+
1836 func isValid( ) -> Bool {
37+ let whitespace = NSCharacterSet . whitespacesAndNewlines
38+ remark = remark. components ( separatedBy: whitespace) . joined ( )
39+
1940 func validateIpAddress( _ ipToValidate: String ) -> Bool {
2041
2142 var sin = sockaddr_in ( )
@@ -34,6 +55,7 @@ class ProxyServerModel: NSObject, Codable {
3455 }
3556
3657 func validateDomainName( _ value: String ) -> Bool {
58+ // this regex from ss-ng seems useless
3759 let validHostnameRegex = " ^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9 \\ -]*[a-zA-Z0-9]) \\ .)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9 \\ -]*[A-Za-z0-9])$ "
3860
3961 if ( value. range ( of: validHostnameRegex, options: . regularExpression) != nil ) {
@@ -43,16 +65,22 @@ class ProxyServerModel: NSObject, Codable {
4365 }
4466 }
4567
46- func validatePort ( _ value: String ) -> Bool {
68+ func vaildatePort ( _ value: String ) -> Bool {
4769 if let port = Int ( value) {
4870 return port > 0 && port <= 65535
4971 }
5072 return false
5173 }
5274
53- if !( validateIpAddress ( serverHost) ||
54- validateDomainName ( serverHost) ||
55- validatePort ( serverPort) ) {
75+ func vaildateMethod( _ method: String ) -> Bool {
76+ return type ( of: self ) . supportMethod. contains ( method. uppercased ( ) )
77+ }
78+
79+ if !( validateIpAddress ( serverHost) || validateDomainName ( serverHost) ) {
80+ return false
81+ }
82+
83+ if !( vaildateMethod ( method) && vaildatePort ( serverPort) ) {
5684 return false
5785 }
5886
0 commit comments