diff options
-rw-r--r-- | pkg/pyinst/anonvpn.spec | 56 | ||||
-rw-r--r-- | setup.py | 2 | ||||
-rw-r--r-- | src/leap/bitmask/gui/anonvpn.py | 72 |
3 files changed, 130 insertions, 0 deletions
diff --git a/pkg/pyinst/anonvpn.spec b/pkg/pyinst/anonvpn.spec new file mode 100644 index 00000000..3f5e18da --- /dev/null +++ b/pkg/pyinst/anonvpn.spec @@ -0,0 +1,56 @@ +# -*- mode: python -*- +import os +import sys +import platform + +block_cipher = None + +IS_MAC = sys.platform.startswith('darwin') +IS_WIN = platform.system() == 'Windows' + +BITMASK_VERSION = open('pkg/next-version').read() +if IS_MAC: + # launchd chokes because more digits are added to the version string, + # so let's skip the patch part of the version. + BITMASK_VERSION = '.'.join(BITMASK_VERSION.split('.')[:-1]) + +hiddenimports = [ + 'appdirs', + 'service_identity', + 'leap.common', 'leap.bitmask', + 'leap.bitmask.core.logs', + 'packaging', 'packaging.version', 'packaging.specifiers', + 'packaging.requirements'] + +VENV = os.environ.get('VIRTUAL_ENV', '') +ENTRYPOINT = ['../../src/leap/bitmask/gui/anonvpn.py'] + +a = Analysis(ENTRYPOINT, + binaries=None, + datas=None, + hiddenimports=hiddenimports, + hookspath=[], + runtime_hooks=[], + excludes=excludes, + + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher) +pyz = PYZ(a.pure, a.zipped_data, + cipher=block_cipher) +exe = EXE(pyz, + a.scripts, + exclude_binaries=True, + name='anonvpn', + debug=True, + strip=True, + upx=True, + # TODO remove console for win + console=True) +coll = COLLECT(exe, + a.binaries, + a.zipfiles, + a.datas, + strip=False, + upx=True, + name='anonvpn') @@ -66,6 +66,7 @@ DOWNLOAD_URL = DOWNLOAD_BASE % VERSION # Entry points gui_launcher = 'bitmask=leap.bitmask.gui.app:start_app' +anonvpn = 'bitmask_anonvpn=leap.bitmask.gui.anonvpn:start_app' chrome_launcher = 'bitmask_chromium=leap.bitmask.chrome.chromeapp:start_app' bitmask_cli = 'bitmaskctl=leap.bitmask.cli.bitmask_cli:main' bitmask_helpers = 'bitmask_helpers=leap.bitmask.vpn.helpers:main' @@ -96,6 +97,7 @@ setup( entry_points={ 'console_scripts': [ gui_launcher, + anonvpn, chrome_launcher, bitmask_cli, bitmaskd, diff --git a/src/leap/bitmask/gui/anonvpn.py b/src/leap/bitmask/gui/anonvpn.py new file mode 100644 index 00000000..b15f7c7f --- /dev/null +++ b/src/leap/bitmask/gui/anonvpn.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +# anonvpn.py +# Copyright (C) 2018 LEAP Encryption Acess Project +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# 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 <http://www.gnu.org/licenses/>. + +""" +Entrypoint for an standalone systray binary. + +Launches bitmaskd and then launches the systray. +""" + +import subprocess +import os +import platform +import signal +import sys + +from functools import partial +from multiprocessing import Process + +from leap.bitmask.core.launcher import run_bitmaskd, pid +from leap.bitmask.gui.housekeeping import cleanup, terminate, reset_authtoken +from leap.bitmask.gui.housekeeping import NoAuthTokenError +from leap.common.config import get_path_prefix + + +bitmaskd = None + + +def _handle_kill(*args, **kw): + global bitmaskd + bitmaskd.join() + terminate(pid) + cleanup() + sys.exit() + + +def launch_gui(): + from leap.bitmask.util import STANDALONE + if STANDALONE: + gui = './bitmask-systray' + else: + gui = 'bitmask-systray' + subprocess.call([gui]) + +def start_app(): + global bitmaskd + + bitmaskd = Process(target=run_bitmaskd) + bitmaskd.start() + reset_authtoken() + launch_gui() + print "[anonvpn] Systray Quitted." + bitmaskd.join() + terminate(pid) + cleanup() + + +if __name__ == "__main__": + start_app() |