tis-mullvad-browser icon

Mullvad Browser

Silent install package for Mullvad Browser

15.0.2-0
Internet
Security
Internet
Security

Preprod packages are packages built on LUTI. They remain in PREPROD usually for 5 days, after which a new VirusTotal scan is performed.
If the package passes this last check, it is promoted to PROD and published on the store.

  • package: tis-mullvad-browser
  • name: Mullvad Browser
  • version: 15.0.2-0
  • categories: Internet,Security
  • maintainer: WAPT Team,Tranquil IT,Clément Baziret
  • editor: Mullvad
  • licence: opensource_free,cpe:/a:mozilla:public_license_2.0,wapt_public
  • locale: all
  • target_os: windows
  • impacted_process: mullvadbrowser
  • architecture: x64
  • signature_date:
  • size: 95.84 Mo
  • installed_size: 495.32 Mo
  • homepage : https://mullvad.net/fr/browser
  • depends:

package           : tis-mullvad-browser
version           : 15.0.2-0
architecture      : x64
section           : base
priority          : optional
name              : Mullvad Browser
categories        : Internet,Security
maintainer        : WAPT Team,Tranquil IT,Clément Baziret
description       : Mullvad Browser is Tor Browser without the Tor Network - that allows anyone to take advantage of all the privacy features Tor created
depends           : tis-7zip
conflicts         : 
maturity          : PREPROD
locale            : all
target_os         : windows
min_wapt_version  : 2.3
sources           : https://github.com/mullvad/mullvad-browser/releases
installed_size    : 495317957
impacted_process  : mullvadbrowser
description_fr    : Mullvad Browser est un navigateur Tor sans le réseau Tor - qui permet à n'importe qui de profiter de toutes les fonctionnalités de confidentialité créées par Tor
description_pl    : Mullvad Browser to przeglądarka Tor bez sieci Tor - która pozwala każdemu korzystać ze wszystkich funkcji prywatności stworzonych przez Tor
description_de    : Mullvad Browser ist ein Tor-Browser ohne das Tor-Netzwerk, der es jedem erlaubt, alle Vorteile der Privatsphäre zu nutzen, die Tor geschaffen hat
description_es    : Mullvad Browser es el Navegador Tor sin la Red Tor - que permite a cualquiera aprovechar todas las características de privacidad que Tor creó
description_pt    : O Mullvad Browser é o Tor Browser sem a rede Tor - que permite a qualquer pessoa tirar partido de todas as funcionalidades de privacidade que o Tor criou
description_it    : Mullvad Browser è un browser Tor senza la rete Tor, che permette a chiunque di sfruttare tutte le caratteristiche di privacy create da Tor
description_nl    : Mullvad Browser is Tor Browser zonder het Tor Netwerk - waarmee iedereen kan profiteren van alle privacyfuncties die Tor heeft gecreëerd
description_ru    : Mullvad Browser - это Tor Browser без сети Tor, который позволяет любому воспользоваться всеми возможностями конфиденциальности, созданными Tor
audit_schedule    : 
editor            : Mullvad
keywords          : mullvad,browser,tor,network,privacy
licence           : opensource_free,cpe:/a:mozilla:public_license_2.0,wapt_public
homepage          : https://mullvad.net/fr/browser
package_uuid      : bf8e6fe0-ce2f-4a14-82d9-0304ddd58567
valid_from        : 
valid_until       : 
forced_install_on : 
changelog         : 
min_os_version    : 
max_os_version    : 
icon_sha256sum    : b5986b3ccc217e1bc0e9ced367ce55ef2ea8293e7d527c09be84e3c7cd6eef23
signer            : test
signer_fingerprint: b82fc8ef4a4475c0f69ac168176c2bfc58f572eb716c4eadd65e4785c155dd8e
signature_date    : 2025-11-21T12:43:45.000000
signed_attributes : package,version,architecture,section,priority,name,categories,maintainer,description,depends,conflicts,maturity,locale,target_os,min_wapt_version,sources,installed_size,impacted_process,description_fr,description_pl,description_de,description_es,description_pt,description_it,description_nl,description_ru,audit_schedule,editor,keywords,licence,homepage,package_uuid,valid_from,valid_until,forced_install_on,changelog,min_os_version,max_os_version,icon_sha256sum,signer,signer_fingerprint,signature_date,signed_attributes
signature         : TBcIRNtnOO5lOA1V9pDjAotaiPtNe26occz9/4evk3XUYx38xYokO1Ghd+RS0124S78BbmK+OgVOCdB8q1jMN9zY2REn04kgMEuR/DcFmKdIabNXxY5wxyUJoVPeNeEXO/T9L4ALepdAMfC++9TKWUs1mJR0A6WjOhR84nd9YpJwAWXL4RXC6zCc5CswhnfvO3EDzfi2zI7Mdh2/9O/Sak4yLtl7sJO+2IDcbga1N1ME3Mvnf8vLcUKqFzSw7J75EtitRRC7vBbisTGL0tfurWM8Dq3DczdRBbwFpnbGMpnjav++u/bYDZYSorUu+tt3VoImldPPXirfflmsUVmEPg==

# -*- coding: utf-8 -*-
from setuphelpers import *
from setupdevhelpers import unzip_with_7zip


"""
    The .exe of mullvad browser installs in the user appdata. There is an option to install it in
    standalone but it is only accessible via GUI so we are doing a portable install

    https://mullvad.net/fr/help/install-mullvad-browser#windows-install

    Before using this package, make sure that the profiles are saved during an update
"""

app_name = "MullvadBrowser"
app_dir = makepath(programfiles, app_name)
app_path = makepath(app_dir, f"mullvadbrowser.exe")
icon_path = app_path
audit_version = False


def get_installed_version(app_path):
    return get_file_properties(app_path).get("FileVersion", "")


def install():
    # Declaring local variables
    zip_name = glob.glob(f"mullvad-browser-windows-x86_64-*.exe")[0]
    unzip_dest = app_name
    unzipped_dir = app_name

    # Installing software
    killalltasks(ensure_list(control.impacted_process))
    if isdir(app_dir) and force:
        remove_tree(app_dir)
    mkdirs(app_dir)
    print("Extracting: %s to: %s" % (zip_name, app_dir))
    unzip_with_7zip(zip_name, unzip_dest)
    copytree2(unzipped_dir, app_dir, onreplace=default_overwrite)

    # Creating custom shortcuts
    create_desktop_shortcut(app_name, target=app_path)
    create_programs_menu_shortcut(app_name, target=app_path)


def audit():
    # Auditing software
    audit_status = "OK"
    installed_version = get_installed_version(app_path)
    if Version(installed_version) < Version(control.get_software_version()) and audit_version:
        print("%s is installed in version (%s) instead of (%s)" % (app_name, installed_version, control.get_software_version()))
        audit_status = "WARNING"
    elif isdir(app_dir) and not dir_is_empty(app_dir):
        print("%s (%s) is installed" % (app_name, installed_version))
        audit_status = "OK"
    else:
        print("%s is not installed" % app_name)
        audit_status = "ERROR"
    return audit_status


def uninstall():
    # Uninstalling software
    killalltasks(ensure_list(control.impacted_process))
    if isdir(app_dir):
        remove_tree(app_dir)

    # Removing shortcuts
    remove_desktop_shortcut(app_name)
    remove_programs_menu_shortcut(app_name)

# -*- coding: utf-8 -*-
from setuphelpers import *
from setupdevhelpers import *


def update_package():
    # Declaring local variables
    package_updated = False
    proxies = get_proxies_from_wapt_console()
    if not proxies:
        proxies = get_proxies()
    api_url = "https://api.github.com/repos/mullvad/mullvad-browser/releases/latest"
    update_dict = {
        "windows-x64": ".exe",
        "macos-x64": ".dmg",
        "debian_based-x64": ".tar.xz",
    }

    # Getting latest version information from official sources
    print("API used is: %s" % api_url)
    json_load = wgets(api_url, proxies=proxies, as_json=True)
    version = json_load["tag_name"].replace("v", "").replace(".windows", "")
    for to_download in json_load["assets"]:
        if to_download["name"].endswith(update_dict[control.target_os + "-" + ensure_list(control.architecture)[0]]):
            download_url = to_download["browser_download_url"]
            latest_bin = to_download["name"]
            break

    # Downloading latest binaries
    print("Latest %s version is: %s" % (control.name, version))
    print("Download URL is: %s" % download_url)
    if not isfile(latest_bin):
        print("Downloading: %s" % latest_bin)
        wget(download_url, latest_bin, proxies=proxies)
    else:
        print("Binary is present: %s" % latest_bin)

    # Deleting outdated binaries
    remove_outdated_binaries(latest_bin)

    # Checking version from file
    if get_os_name() == "Windows" and "windows" in control.target_os.lower():
        version_from_file = get_version_from_binary(latest_bin)
        if Version(version_from_file, 4) == Version(version, 4):
            print(f"INFO: Binary file version ({version_from_file}) corresponds to online version ({version})")
        else:
            error(f"ERROR: Binary file version ({version_from_file}) do NOT corresponds to online version ({version})")

    # Changing version of the package
    if Version(version, 4) > Version(control.get_software_version(), 4):
        print("Software version updated (from: %s to: %s)" % (control.get_software_version(), Version(version)))
        package_updated = True
    else:
        print("Software version up-to-date (%s)" % Version(version))
    control.set_software_version(version)
    control.save_control_to_wapt()

    # Validating update-package-sources
    return package_updated

01ca7fe94636e5a08fcb73849d3b5df25d51e2c82f4dd1a08f01798b25899819 : WAPT/certificate.crt
2efb989c0f5498f32e0dc1d4fbe200ee8606bd1d709d64779f0f8b0ec5183a85 : WAPT/control
b5986b3ccc217e1bc0e9ced367ce55ef2ea8293e7d527c09be84e3c7cd6eef23 : WAPT/icon.png
46a4f462d3d22474711c50ec03c6820f56cf8e93c0d730f4a3e83f75fa85f3b4 : luti.json
ac6bb882df0e382356cf75c1f22d5a1712459c4841e1cafe603e82223fc9a1bd : mullvad-browser-windows-x86_64-15.0.2.exe
21c3a9296b56707caa45bd338b8a3c1c6cc543cfd5ffc7705a5ab1de3605c661 : setup.py
a4b1f7b47506e51967b7ee222800ac43a9737967ecd3310fbd08f5cee2a79f31 : update_package.py