refact: custom client proxy (#8093)

Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
fufesou 2024-05-19 16:40:49 +08:00 committed by GitHub
parent 986b9fb0e0
commit d8c9250aab
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 61 additions and 5 deletions

View File

@ -2170,6 +2170,11 @@ void changeSocks5Proxy() async {
var pwdController = TextEditingController(text: password); var pwdController = TextEditingController(text: password);
RxBool obscure = true.obs; RxBool obscure = true.obs;
// proxy settings
// The following option is a not real key, it is just used for custom client advanced settings.
const String optionProxyUrl = "proxy-url";
final isOptFixed = isOptionFixed(optionProxyUrl);
var isInProgress = false; var isInProgress = false;
gFFI.dialogManager.show((setState, close, context) { gFFI.dialogManager.show((setState, close, context) {
submit() async { submit() async {
@ -2247,6 +2252,7 @@ void changeSocks5Proxy() async {
), ),
controller: proxyController, controller: proxyController,
autofocus: true, autofocus: true,
enabled: !isOptFixed,
), ),
), ),
], ],
@ -2262,6 +2268,7 @@ void changeSocks5Proxy() async {
Expanded( Expanded(
child: TextField( child: TextField(
controller: userController, controller: userController,
enabled: isInProgress,
), ),
), ),
], ],
@ -2284,6 +2291,7 @@ void changeSocks5Proxy() async {
? Icons.visibility_off ? Icons.visibility_off
: Icons.visibility))), : Icons.visibility))),
controller: pwdController, controller: pwdController,
enabled: !isOptFixed,
)), )),
), ),
], ],
@ -2296,7 +2304,7 @@ void changeSocks5Proxy() async {
), ),
actions: [ actions: [
dialogButton('Cancel', onPressed: close, isOutline: true), dialogButton('Cancel', onPressed: close, isOutline: true),
dialogButton('OK', onPressed: submit), if (!isOptFixed) dialogButton('OK', onPressed: submit),
], ],
onSubmit: submit, onSubmit: submit,
onCancel: close, onCancel: close,

View File

@ -1014,8 +1014,30 @@ impl Config {
config.store(); config.store();
} }
#[inline]
fn get_socks_from_custom_client_advanced_settings(
settings: &HashMap<String, String>,
) -> Option<Socks5Server> {
let url = settings.get(keys::OPTION_PROXY_URL)?;
Some(Socks5Server {
proxy: url.to_owned(),
username: settings
.get(keys::OPTION_PROXY_USERNAME)
.map(|x| x.to_string())
.unwrap_or_default(),
password: settings
.get(keys::OPTION_PROXY_PASSWORD)
.map(|x| x.to_string())
.unwrap_or_default(),
})
}
pub fn get_socks() -> Option<Socks5Server> { pub fn get_socks() -> Option<Socks5Server> {
CONFIG2.read().unwrap().socks.clone() Self::get_socks_from_custom_client_advanced_settings(&OVERWRITE_SETTINGS.read().unwrap())
.or(CONFIG2.read().unwrap().socks.clone())
.or(Self::get_socks_from_custom_client_advanced_settings(
&DEFAULT_SETTINGS.read().unwrap(),
))
} }
#[inline] #[inline]
@ -1024,10 +1046,26 @@ impl Config {
} }
pub fn get_network_type() -> NetworkType { pub fn get_network_type() -> NetworkType {
match &CONFIG2.read().unwrap().socks { if OVERWRITE_SETTINGS
None => NetworkType::Direct, .read()
Some(_) => NetworkType::ProxySocks, .unwrap()
.get(keys::OPTION_PROXY_URL)
.is_some()
{
return NetworkType::ProxySocks;
} }
if CONFIG2.read().unwrap().socks.is_some() {
return NetworkType::ProxySocks;
}
if DEFAULT_SETTINGS
.read()
.unwrap()
.get(keys::OPTION_PROXY_URL)
.is_some()
{
return NetworkType::ProxySocks;
}
NetworkType::Direct
} }
pub fn get() -> Config { pub fn get() -> Config {
@ -2056,6 +2094,13 @@ pub mod keys {
pub const OPTION_FLUTTER_PEER_CARD_UI_TYLE: &str = "peer-card-ui-type"; pub const OPTION_FLUTTER_PEER_CARD_UI_TYLE: &str = "peer-card-ui-type";
pub const OPTION_FLUTTER_CURRENT_AB_NAME: &str = "current-ab-name"; pub const OPTION_FLUTTER_CURRENT_AB_NAME: &str = "current-ab-name";
// proxy settings
// The following options are not real keys, they are just used for custom client advanced settings.
// The real keys are in Config2::socks.
pub const OPTION_PROXY_URL: &str = "proxy-url";
pub const OPTION_PROXY_USERNAME: &str = "proxy-username";
pub const OPTION_PROXY_PASSWORD: &str = "proxy-password";
// DEFAULT_DISPLAY_SETTINGS, OVERWRITE_DISPLAY_SETTINGS // DEFAULT_DISPLAY_SETTINGS, OVERWRITE_DISPLAY_SETTINGS
pub const KEYS_DISPLAY_SETTINGS: &[&str] = &[ pub const KEYS_DISPLAY_SETTINGS: &[&str] = &[
OPTION_VIEW_ONLY, OPTION_VIEW_ONLY,
@ -2131,6 +2176,9 @@ pub mod keys {
OPTION_ALLOW_LINUX_HEADLESS, OPTION_ALLOW_LINUX_HEADLESS,
OPTION_ENABLE_HWCODEC, OPTION_ENABLE_HWCODEC,
OPTION_APPROVE_MODE, OPTION_APPROVE_MODE,
OPTION_PROXY_URL,
OPTION_PROXY_USERNAME,
OPTION_PROXY_PASSWORD,
]; ];
} }