Change to parseHostPort usage

Signed-off-by: Loren Eteval <loren.eteval@proton.me>
This commit is contained in:
Loren Eteval
2023-10-21 12:10:03 +08:00
parent e0d59aaade
commit 7cabeccb87
4 changed files with 55 additions and 26 deletions
+30 -10
View File
@@ -31,6 +31,7 @@ from Furious.Utility.Utility import (
StateContext,
ServerStorage,
bootstrapIcon,
parseHostPort,
enumValueWrapper,
protocolRepr,
)
@@ -262,7 +263,9 @@ class ImportLinkAction(Action):
remark = urllib.parse.unquote(parseResult.fragment)
uuid_, remote_host, remote_port = re.split(r'[@:]', parseResult.netloc)
uuid_, server = parseResult.netloc.split('@')
remote_host, remote_port = parseHostPort(server)
encryption = queryObject.get('encryption', 'none')
type_ = queryObject.get('type', 'tcp')
@@ -301,9 +304,11 @@ class ImportLinkAction(Action):
)
return remark, True
except Exception:
except Exception as ex:
# Any non-exit exceptions
logger.error(f'import share link failed: {data}. Exception: {ex}')
return '', False
@staticmethod
@@ -316,18 +321,24 @@ class ImportLinkAction(Action):
remark = urllib.parse.unquote(result.fragment)
try:
# Try pack with 3 element
userinfo, address, port = re.split(r'[@:]', result.netloc)
# Try pack with 4 element
methodPassword, server = result.netloc.split('@')
method, password = methodPassword.split(':')
address, port = parseHostPort(server)
except ValueError:
# Unpack error. Try pack with 3 element
userinfo, server = result.netloc.split('@')
address, port = parseHostPort(server)
# Some old SS share link doesn't add padding
# in base64 encoding. Add padding to userinfo
method, password = (
Base64Encoder.decode(userinfo + '===').decode().split(':')
)
except ValueError:
# Unpack error. Try pack with 4 element
method, password, address, port = re.split(r'[@:]', result.netloc)
except Exception as ex:
# Any non-exit exceptions
@@ -359,6 +370,8 @@ class ImportLinkAction(Action):
except Exception as ex:
# Any non-exit exceptions
logger.error(f'import share link failed: {data}. Exception: {ex}')
return '', False
@staticmethod
@@ -370,6 +383,7 @@ class ImportLinkAction(Action):
# ss://base64...
myData = Base64Encoder.decode(data[5:]).decode()
myJSON = XrayCoreConfiguration.build(
# For sslegacy, we don't try to consider IPv6 case
ProxyOutboundObjectSS(*re.split(r'[@:]', myData))
)
@@ -406,7 +420,9 @@ class ImportLinkAction(Action):
remark = urllib.parse.unquote(parseResult.fragment)
password, address, port = re.split(r'[@:]', parseResult.netloc)
password, server = parseResult.netloc.split('@')
address, port = parseHostPort(server)
type_ = queryObject.get('type', 'tcp')
# For Trojan: Assign tls by default
@@ -442,9 +458,11 @@ class ImportLinkAction(Action):
)
return remark, True
except Exception:
except Exception as ex:
# Any non-exit exceptions
logger.error(f'import share link failed: {data}. Exception: {ex}')
return '', False
@staticmethod
@@ -497,6 +515,8 @@ class ImportLinkAction(Action):
importServerArgs,
)
logger.error(f'unsupported share link: {shareLink}')
return '', False
def triggeredCallback(self, checked):
+18 -10
View File
@@ -16,7 +16,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
from Furious.Core.Core import XrayCore, Hysteria1, Hysteria2
from Furious.Utility.Utility import Protocol, protocolRepr
from Furious.Utility.Utility import Protocol, protocolRepr, parseHostPort
class Intellisense:
@@ -113,11 +113,14 @@ class Intellisense:
return ''
if Intellisense.getCoreType(ob) == Hysteria1.name():
return ob['server'].split(':')[0]
if Intellisense.getCoreType(ob) == Hysteria2.name():
return ob['server'].split(':')[0]
if (
Intellisense.getCoreType(ob) == Hysteria1.name()
or Intellisense.getCoreType(ob) == Hysteria2.name()
):
if ob['server'].count(',') == 0:
return parseHostPort(ob['server'])[0]
else:
return parseHostPort(ob['server'].split(',')[0])[0]
return ''
except Exception:
@@ -154,11 +157,16 @@ class Intellisense:
return ''
if Intellisense.getCoreType(ob) == Hysteria1.name():
return ob['server'].split(':')[1]
if (
Intellisense.getCoreType(ob) == Hysteria1.name()
or Intellisense.getCoreType(ob) == Hysteria2.name()
):
if ob['server'].count(',') == 0:
return parseHostPort(ob['server'])[1]
else:
server, dynamicPort = ob['server'].split(',')
if Intellisense.getCoreType(ob) == Hysteria2.name():
return ob['server'].split(':')[1]
return f'{parseHostPort(server)[1]},{dynamicPort}'
return ''
except Exception:
+4 -4
View File
@@ -16,7 +16,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
from Furious.Utility.Constants import PLATFORM
from Furious.Utility.Utility import runCommand
from Furious.Utility.Utility import runCommand, parseHostPort
import logging
import subprocess
@@ -124,7 +124,7 @@ class _Proxy:
if PLATFORM == 'Linux':
try:
host, port = server.split(':')
host, port = parseHostPort(server)
linuxProxyConfig('proxy.http', 'host', host)
linuxProxyConfig('proxy.http', 'port', port)
@@ -143,8 +143,8 @@ class _Proxy:
if PLATFORM == 'Darwin':
try:
darwinProxyConfig('setwebproxy', *server.split(':'))
darwinProxyConfig('setsecurewebproxy', *server.split(':'))
darwinProxyConfig('setwebproxy', *parseHostPort(server))
darwinProxyConfig('setsecurewebproxy', *parseHostPort(server))
darwinProxyConfig('setproxybypassdomains', *bypass.split(';'))
except Exception:
# Any non-exit exceptions
+3 -2
View File
@@ -52,6 +52,7 @@ from Furious.Utility.Utility import (
SupportConnectedCallback,
bootstrapIcon,
enumValueWrapper,
parseHostPort,
eventLoopWait,
swapListItem,
moveToCenter,
@@ -747,8 +748,8 @@ def useProxyServerIfPossible(manager, loggerAction):
if proxyServer:
logger.info(f'{loggerAction} uses proxy server {proxyServer}')
# Checked. split should not throw exceptions
proxyHost, proxyPort = proxyServer.split(':')
# Checked. Should not throw exceptions
proxyHost, proxyPort = parseHostPort(proxyServer)
# Checked. int(proxyPort) should not throw exceptions
manager.setProxy(