wapt-chrome/setup.py

153 lines
6.5 KiB
Python

# -*- coding: utf-8 -*-
from setuphelpers import *
from jinja2 import Environment, FileSystemLoader
uninstallkey = []
variables = {
'web_home_page': 'https://google.fr'
}
def install():
# Read local variables file if available
if isfile(makepath(programfiles32,'wapt','private','symetric.txt')) and isfile(makepath(programfiles32,'wapt','private','variables.txt')):
print('Reading local encrypted variables file')
from cryptography.fernet import Fernet
import yaml
f = Fernet(open(makepath(programfiles32,'wapt','private','symetric.txt'),'r').read())
variables.update(yaml.safe_load(f.decrypt(open(makepath(programfiles32,'wapt','private','variables.txt'),'r').read())))
# Declaring specific app values
chrome_app_path=makepath(programfiles32,'Google','Chrome','Application')
chrome_bin_path=makepath(chrome_app_path,'chrome.exe')
bin_name = 'googlechromestandaloneenterprise64.msi' if iswin64() else 'googlechromestandaloneenterprise.msi'
print('Installing %s' % control.asrequirement())
# Specific app values
package_version = control['version'].split('-',1)[0]
skip = False
# Getting the used storage on programfiles before installation (place it on the top)
get_disk_free_space_before = get_disk_free_space(programfiles)
if isfile(chrome_bin_path):
if Version(get_file_properties(chrome_bin_path)['ProductVersion']) >= Version(package_version):
print('File %s version is : %s ' % (chrome_bin_path,get_file_properties(chrome_bin_path)['ProductVersion']))
print('Package version is : %s ' % package_version)
uninstallkey_from_file = get_msi_properties(bin_name)['ProductCode']
if uninstall_key_exists(uninstallkey_from_file):
uninstallkey.append(uninstallkey_from_file)
skip = True
if (not skip) or (force == True) :
def get_version_chrome(key):
if isfile(makepath(programfiles,'Google','Chrome','Application','chrome.exe')):
return get_file_properties(makepath(programfiles,'Google','Chrome','Application','chrome.exe'))['ProductVersion']
return get_file_properties(chrome_bin_path)['ProductVersion']
install_msi_if_needed(bin_name
,min_version=package_version
,get_version=get_version_chrome)
# Update var after install, as CHrome can be installed either in programfiles or programfiles32
if isfile(makepath(programfiles,'Google','Chrome','Application','chrome.exe')):
chrome_app_path=makepath(programfiles,'Google','Chrome','Application')
chrome_bin_path=makepath(chrome_app_path,'chrome.exe')
# Disabling Google Chrome auto updates
for task in ['GoogleUpdateTaskMachineCore', 'GoogleUpdateTaskMachineUA']:
if task_exists(task):
disable_task(task)
registry_setstring(HKEY_LOCAL_MACHINE,'SOFTWARE\\Policies\\Google\\Update','UpdateDefault',0,type=REG_DWORD)
registry_setstring(HKEY_LOCAL_MACHINE,'SOFTWARE\\Policies\\Google\\Update','DisableAutoUpdateChecksCheckboxValue',1,type=REG_DWORD)
registry_setstring(HKEY_LOCAL_MACHINE,'SOFTWARE\\Policies\\Google\\Update','AutoUpdateCheckPeriodMinutes',0,type=REG_DWORD)
if iswin64():
registry_setstring(HKEY_LOCAL_MACHINE,'SOFTWARE\\Wow6432Node\\Google\\Update','UpdateDefault',0,type=REG_DWORD)
registry_setstring(HKEY_LOCAL_MACHINE,'SOFTWARE\\Wow6432Node\\Google\\Update','DisableAutoUpdateChecksCheckboxValue',1,type=REG_DWORD)
registry_setstring(HKEY_LOCAL_MACHINE,'SOFTWARE\\Wow6432Node\\Google\\Update','AutoUpdateCheckPeriodMinutes',0,type=REG_DWORD)
# Disabling Google Chrome telemtry
registry_setstring(HKEY_LOCAL_MACHINE,'SOFTWARE\\Policies\\Explorer\\DisallowRun','chrome_telemetry','Software_Reporter_Tool.exe',type=REG_SZ)
# Adding master preferences file
jinja2 = Environment(
loader=FileSystemLoader(os.getcwd()),
trim_blocks=True
)
open(makepath(chrome_app_path,'master_preferences'),'w').write(
jinja2.get_template('master_preferences.j2').render(
web_home_page = variables['web_home_page']
)
)
# Return used storage of the program. (place it on the bottom)
get_disk_free_space_after = get_disk_free_space(programfiles)
free_space_after_diff = get_disk_free_space_before - get_disk_free_space_after
print("Storage used: " + str(free_space_after_diff))
def uninstall():
print('uninstalling %s' % control.asrequirement())
for chrome in installed_softwares('Google Chrome'):
print('Uninstalling %s' % chrome['version'])
run(uninstall_cmd(chrome['key']))
def session_setup():
print('Session setup for %s' % control.asrequirement())
print('Disabling Telemetry')
swreporter_path=makepath(user_local_appdata,'Google','Chrome','User Data','SwReporter')
if isdir(swreporter_path):
remove_tree(swreporter_path)
def update_package():
print('Update package content from upstream binary sources')
from waptpackage import PackageEntry
import requests
import json
# Get latest version number from official website
latest_version = json.loads(wgets('http://omahaproxy.appspot.com/all.json?os=win64&channel=stable'))[0]['versions'][0]['version']
pe = PackageEntry()
control = pe.load_control_from_wapt(os.getcwd())
current_version = control['version'].split('-',1)[0]
base_url = 'https://dl.google.com/tag/s/dl/chrome/install/'
if Version(latest_version) > Version(current_version):
print('Latest ' + control.name + ' version is: ' + latest_version)
for file in ['googlechromestandaloneenterprise64.msi', 'googlechromestandaloneenterprise.msi']:
url_dl = base_url + file
# Downloading latest binaries
if isfile(file):
remove_file(file)
print('Downloading ' + file + ' from ' + url_dl)
wget(url_dl, file)
pe.version = latest_version + '-0'
pe.maturity = 'PREPROD'
pe.save_control_to_wapt(os.getcwd())
print('Package updated to %s' % latest_version)
else:
print('This package is already up-to-date')
for file in ['googlechromestandaloneenterprise64.msi', 'googlechromestandaloneenterprise.msi']:
if not isfile(file):
url_dl = base_url + file
print('%s file is missing, downloading it from %s' % (file, url_dl))
wget(url_dl, file)
if __name__ == '__main__':
update_package()