#!/usr/bin/env bash

ENABLED=yes
[[ ${ENABLED} == yes ]] || 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 $@
