You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ublinux-init/ublinux/rc.desktop/deonly/gnome-network-proxy-system

86 lines
4.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/bash
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
#
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; }
unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=.
SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
SYSCONF="${ROOTFS}${SYSCONF}"
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/network; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
## Установка системных прокси для HTTP,HTTPS,FTP,SOCKS,RSYNC и адреса исключений EXCLUDE
## Для применения требуется перелогиниться
## PROXY_SYSTEM[%PROTOCOL%]=%SERVER%
exec_proxy_gnome(){
if [[ ${PROXY_SYSTEM[0],,} == @(n|no|none|disable) ]]; then
gsettings set org.gnome.system.proxy mode 'none'
gsettings set org.gnome.system.proxy.http enabled false
elif [[ -n ${PROXY_SYSTEM[@]} ]]; then
gsettings set org.gnome.system.proxy mode 'manual'
if [[ -n ${PROXY_SYSTEM[all]} ]]; then
gsettings set org.gnome.system.proxy use-same-proxy true
PROXY_SYSTEM[http]="${PROXY_SYSTEM[all]}"
fi
if [[ ${PROXY_SYSTEM[http],,} == @(n|no|none|disable) ]]; then
gsettings set org.gnome.system.proxy.http enabled false
elif [[ -n ${PROXY_SYSTEM[http]} ]]; then
gsettings set org.gnome.system.proxy.http enabled true
if [[ ${PROXY_HOST} =~ '@' ]]; then
PROXY_USER_PASS="${PROXY_SYSTEM[${PROTOCOL}]##*/}" # Вырезаем протокол http://
PROXY_USER_PASS="${PROXY_USER_PASS%%@*}" # Вырезаем имя пользователя и пароль
PROXY_USER_PASS="${PROXY_USER_PASS%%:*}" # Вырезаем имя пользователя
PROXY_PASSWORD="${PROXY_USER_PASS#*:}" # Вырезаем пароль
[[ ${PROXY_USER_PASS} == ${PROXY_PASSWORD} ]] && unset PROXY_PASSWORD
gsettings set org.gnome.system.proxy.http use-authentication true
gsettings set org.gnome.system.proxy.http authentication-user "'${PROXY_USER}'"
gsettings set org.gnome.system.proxy.http authentication-password "'${PROXY_PASSWORD}'"
else
gsettings set org.gnome.system.proxy.http use-authentication false
fi
fi
if [[ ${PROXY_SYSTEM[exclude],,} == @(n|no|none|disable) ]]; then
gsettings set org.gnome.system.proxy ignore-hosts "['localhost', '127.0.0.0/8', '10.0.0.0/8', '192.168.0.0/16', '172.16.0.0/12', '*.local', '*.local.com', '*.local.ru']"
elif [[ -n ${PROXY_SYSTEM[exclude]} ]]; then
gsettings set org.gnome.system.proxy ignore-hosts "['${PROXY_SYSTEM[exclude]//,/\', \'}']"
fi
if [[ ${PROXY_SYSTEM[auto],,} == @(n|no|none|disable) ]]; then
gsettings set org.gnome.system.proxy autoconfig-url "''"
elif [[ -n ${PROXY_SYSTEM[auto]} ]]; then
gsettings set org.gnome.system.proxy mode 'auto'
gsettings set org.gnome.system.proxy autoconfig-url "'${PROXY_SYSTEM[auto]}'"
fi
for PROTOCOL in http https ftp socks; do
if [[ ${PROXY_SYSTEM[${PROTOCOL}],,} == @(n|no|none|disable) ]]; then
gsettings set org.gnome.system.proxy.${PROTOCOL} host "''"
gsettings set org.gnome.system.proxy.${PROTOCOL} port 0
elif [[ -n ${PROXY_SYSTEM[${PROTOCOL}]} ]]; then
PROXY_HOST="${PROXY_SYSTEM[${PROTOCOL}]##*/}" # Вырезаем протокол http://
PROXY_HOST_IP_PORT="${PROXY_HOST##*@}" # Вырезаем имя или IP с портом, 192.168.1.1:443
PROXY_HOST="${PROXY_HOST_IP_PORT%:*}" # Только имя или IP
PROXY_PORT="${PROXY_HOST_IP_PORT#*:}" # Только порт
[[ ${PROXY_PORT} == ${PROXY_HOST_IP_PORT} ]] && PROXY_PORT=8080 # Если порт не задан
gsettings set org.gnome.system.proxy.${PROTOCOL} host "'${PROXY_HOST}'"
gsettings set org.gnome.system.proxy.${PROTOCOL} port ${PROXY_PORT}
fi
done
fi
}
################
##### MAIN #####
################
exec_proxy_gnome $@