summaryrefslogtreecommitdiff
path: root/snap/local/pre/pack_installers
diff options
context:
space:
mode:
Diffstat (limited to 'snap/local/pre/pack_installers')
-rwxr-xr-xsnap/local/pre/pack_installers61
1 files changed, 61 insertions, 0 deletions
diff --git a/snap/local/pre/pack_installers b/snap/local/pre/pack_installers
new file mode 100755
index 0000000..9cf7b15
--- /dev/null
+++ b/snap/local/pre/pack_installers
@@ -0,0 +1,61 @@
+#!/usr/bin/env python3
+import os
+import subprocess
+from base64 import encodestring as encode
+
+# we expect to find bitmask-dev cloned in the parent folder for this repo
+# we will clone it if not
+PARENT = '../../'
+BITMASK_FOLDER = PARENT + 'bitmask-dev/'
+BITMASK_GIT = 'https://0xacab.org/leap/bitmask-dev'
+HELPDIR = BITMASK_FOLDER + 'src/leap/bitmask/vpn/helpers/linux/'
+INSTALL = 'hooks/install'
+POLKIT_FILE = 'se.leap.bitmask.riseupvpn.policy'
+APP_NAME = 'riseup-vpn'
+
+if not os.path.isdir(BITMASK_FOLDER):
+ print('[+] Cloning bitmask-dev repo to get helpers...')
+ cmd = 'cd ../.. && git clone %s' % (BITMASK_GIT, )
+ os.system(cmd)
+else:
+ print('[+] Updating bitmask-dev repo to get helpers...')
+ cmd = 'cd ' + BITMASK_FOLDER + ' && git pull'
+ os.system(cmd)
+
+with open(os.path.join(HELPDIR, POLKIT_FILE)) as polkit:
+ b64_polkit = encode(polkit.read().encode())
+
+with open(INSTALL, 'w') as install:
+ install.write('#!/usr/bin/env python3\n')
+ install.write('# DO NOT MODIFY MANUALLY\n')
+ install.write('# This helper installs the polkit policy file\n')
+ install.write('# for the RiseupVPN snap.\n')
+ install.write('# It is generated automatically\n')
+ install.write('# by the script at "snap/local/pre/pack_installers"\n')
+ install.write('import subprocess\n')
+ install.write('import os\n')
+ install.write('from base64 import decodestring as decode\n')
+ install.write("""
+POLKIT = {polkit}
+
+with open('/usr/share/polkit-1/actions/{polkit_file}', 'w') as polkit:
+ lines = decode(POLKIT).split(b"\\n")
+ for line in lines:
+ polkit.write(line.decode() + "\\n")
+
+with open('/etc/os-release') as f:
+ release = f.read()
+# this is a workaround for the fact that debian does not place snap desktop entries in a system+wide path.
+if 'ID=debian' in release:
+ desktop_path = "/usr/share/applications/{app_name}.desktop"
+ if os.path.exists(desktop_path):
+ os.remove(desktop_path)
+ os.symlink("/snap/{app_name}/current/snap/meta/gui/{app_name}.desktop", desktop_path)
+ subprocess.call(['update-desktop-database'])
+""".format(
+ polkit=b64_polkit,
+ polkit_file=POLKIT_FILE,
+ app_name=APP_NAME))
+
+subprocess.Popen(["chmod", "+x", INSTALL])
+print("[+] Done packing installers into the snap install hook...")