#!/usr/bin/env python3 # # Copyright (C) 2018 VyOS maintainers and contributors # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 or later as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # import sys import os import re import subprocess from vyos import ConfigError from vyos.config import Config proxy_def=r'/etc/profile.d/vyos-system-proxy.sh' def get_config(): c = Config() if not c.exists('system proxy'): return None c.set_level('system proxy') cnf = { 'url' : None, 'port' : None, 'usr' : None, 'passwd' : None } if c.exists('url'): cnf['url'] = c.return_value('url') if c.exists('port'): cnf['port'] = c.return_value('port') if c.exists('username'): cnf['usr'] = c.return_value('username') if c.exists('password'): cnf['passwd'] = c.return_value('password') return cnf def verify(c): if not c: return None if not c['url'] or not c['port']: raise ConfigError("proxy url and port requires a value") elif c['usr'] and not c['passwd']: raise ConfigError("proxy password requires a value") elif not c['usr'] and c['passwd']: raise ConfigError("proxy username requires a value") def generate(c): if not c: return None if not c['usr']: return str("export http_proxy={url}:{port}\nexport https_proxy=$http_proxy\nexport ftp_proxy=$http_proxy"\ .format(url=c['url'], port=c['port'])) else: return str("export http_proxy=http://{usr}:{passwd}@{url}:{port}\nexport https_proxy=$http_proxy\nexport ftp_proxy=$http_proxy"\ .format(url=re.sub('http://','',c['url']), port=c['port'], usr=c['usr'], passwd=c['passwd'])) def apply(ln): if not ln and os.path.exists(proxy_def): subprocess.call(['unset http_proxy https_proxy ftp_proxy'], shell=True) os.remove(proxy_def) else: open(proxy_def,'w').write("# generated by system-proxy.py\n{}\n".format(ln)) subprocess.call(['. /etc/profile.d/vyos-system-proxy.sh'], shell=True) if __name__ == '__main__': try: c = get_config() verify(c) ln = generate(c) apply(ln) except ConfigError as e: print(e) sys.exit(1)