tis-firefox-addon-bitwarden icon

tis-firefox-addon-bitwarden

Silent install package for tis-firefox-addon-bitwarden

2024.12.3-0

  • package: tis-firefox-addon-bitwarden
  • version: 2024.12.3-0
  • categories: Extension
  • maintainer: WAPT Team,Tranquil IT,Ingrid TALBOT
  • licence: proprietary_free,wapt_private
  • target_os: all
  • impacted_process: firefox
  • architecture: all
  • signature_date:
  • size: 16.60 Mo

package           : tis-firefox-addon-bitwarden
version           : 2024.12.3-0
architecture      : all
section           : base
priority          : optional
name              : 
categories        : Extension
maintainer        : WAPT Team,Tranquil IT,Ingrid TALBOT
description       : Package for tis-firefox-addon-bitwarden
depends           : 
conflicts         : 
maturity          : PROD
locale            : 
target_os         : all
min_wapt_version  : 
sources           : 
installed_size    : 
impacted_process  : firefox
description_fr    : 
description_pl    : 
description_de    : 
description_es    : 
description_pt    : 
description_it    : 
description_nl    : 
description_ru    : 
audit_schedule    : 
editor            : 
keywords          : 
licence           : proprietary_free,wapt_private
homepage          : 
package_uuid      : df0ae503-5324-4bad-bba2-1e5d15bd8683
valid_from        : 
valid_until       : 
forced_install_on : 
changelog         : 
min_os_version    : 
max_os_version    : 
icon_sha256sum    : 
signer            : Tranquil IT
signer_fingerprint: 8c5127a75392be9cc9afd0dbae1222a673072c308c14d88ab246e23832e8c6bb
signature_date    : 2025-01-14T14:12:44.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         : I2Vfi6vETq1yhy9Zffa+aBOpWYtM9bj7BsLNWVungHLiGmrkJrMspjhE5WTqnFt++/mEx1t4/UL+a7Bet4awnTMk5WKq/uJqxGH6E6/a4oghTb3E/CGC6XglHKN1rcQuXUCUJgujlA2opBtnelHz5tlOjZdD+1aHsGtGPLUPfyRnrmlvP0hFWhI2vds3tssJRffLSHyCEXO77wNJtfUve2yP0MMbD3NRL6ZZb8tY3rk8jZ+V4SvuEViNhGHGlEJnLrh4oMCmP40yeLYTl4mteqmXYI1EOHaOu7xceUF/iD4X0WVWbBnHuLfbYmrBkIk7wPwLqnJ/jcnqd9CYrluSBg==

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

addon_id = "{446900e4-71c2-419f-a6a7-df9c091e268b}"
extension_file_contains = "bitwarden-"
policies_file = "policies.json"
extension_dict = {"policies": {"ExtensionSettings": {addon_id: {}}}}

def get_firefox_policies_dirs():
    detected_apps = installed_softwares("Firefox")
    firefox_policies_dirs = []
    if get_os_name() == "Linux":
        firefox_policies_dirs.append("/etc/firefox/policies")
    else:
        if not detected_apps:
            error("Firefox is not installed on this machine.")
    for ffox in detected_apps:
        if get_os_name() == "Windows":
            firefox_policies_dirs.append(makepath(ffox["install_location"], "distribution"))
        if get_os_name() == "Darwin":
            firefox_policies_dirs.append(makepath(ffox["install_location"], "Contents", "Resources", "distribution"))

    return firefox_policies_dirs

def install():
    bin_name = glob.glob("*.xpi")[0]

    # Interact differently with Luti
    if params.get("running_as_luti", False):
        WAPT.install("tis-firefox")

    for firefox_policies_dir in get_firefox_policies_dirs():
        policies_path = makepath(firefox_policies_dir, policies_file)
        killalltasks(ensure_list(control.impacted_process))
        if get_os_name() == "Darwin":
            run("sudo defaults write /Library/Preferences/org.mozilla.firefox EnterprisePoliciesEnabled -bool TRUE")
        mkdirs(firefox_policies_dir)

        # Copying extension_file
        extension_path = makepath(firefox_policies_dir, bin_name)
        print(f"Copying: {extension_path}")
        filecopyto(bin_name, firefox_policies_dir)

        # Prepare policies.json
        extension_dict["policies"]["ExtensionSettings"][addon_id]["install_url"] = "file://" + extension_path
        extension_dict["policies"]["ExtensionSettings"][addon_id]["installation_mode"] = "force_installed"

        # Write policies.json
        if isfile(policies_path):
            app_policies_dict = json_load_file(policies_path)
        else:
            app_policies_dict = {}
        merged_app_policies_dict = merge_dicts(app_policies_dict, extension_dict)
        print(f"Updating Firefox configuration to: {policies_path}")
        json_write_file(policies_path, merged_app_policies_dict, 2)

    if get_os_name() == "Windows":
        ffox_policies_reg_path = r"SOFTWARE\Policies\Mozilla\Firefox"
        if reg_key_exists(HKEY_LOCAL_MACHINE, ffox_policies_reg_path):
            print(
                "WARNING: Registry policies has been removed because it bypasses the policies.json file (source: https://support.mozilla.org/bm/questions/1236197)."
            )
            registry_deletekey(HKEY_LOCAL_MACHINE, ffox_policies_reg_path, "", force=True)

# def audit():
#     audit_status = "OK"
#     for firefox_policies_dir in get_firefox_policies_dirs():
#         policies_path = makepath(firefox_policies_dir, policies_file)
#         if policies_path:
#             with open(policies_path) as file:
#                 data = json.load(file)
#                 if not addon_id in data["policies"]["ExtensionSettings"]:
#                     audit_status = "WARNING"
#                     print("WARNING: Configuration is NOT applied for Firefox, re-applying...")

#         elif not isfile(policies_path):
#             print("WARNING: Configuration is NOT applied for Firefox, re-applying...")
#             install()
#             audit_status = "WARNING"
#         else:
#             print("OK: Configuration is correctly applied for Firefox.")
#             audit_status = "OK"

#     return audit_status


def uninstall():
    for firefox_policies_dir in get_firefox_policies_dirs():
        policies_path = makepath(firefox_policies_dir, policies_file)

        # Write policies.json if needed
        if isfile(policies_path):
            app_policies_dict = json_load_file(policies_path)
            try:
                del app_policies_dict["policies"]["ExtensionSettings"][addon_id]
                print(f"Updating Firefox configuration to: {policies_path}")
                json_write_file(policies_path, app_policies_dict, 2)
            except KeyError as e:
                print(f"The key {addon_id} does not exist in the dictionary: {e}")

        for extension_file in glob.glob(makepath(firefox_policies_dir, extension_file_contains + "*.xpi")):
            remove_file(extension_file)




def merge_dicts(dict1, dict2):
    for key, value in dict2.items():
        if key in dict1 and isinstance(value, dict) and isinstance(dict1[key], dict):
            merge_dicts(dict1[key], value)  # recursive merge
        else:
            dict1[key] = value
    return dict1

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


def update_package():
    # Declaring local variables
    package_updated = False
    proxies = get_proxies()
    if not proxies:
        proxies = get_proxies_from_wapt_console()

    download_url = "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi"

    # Getting latest version information from download url
    requests_result = requests.head(download_url, proxies=proxies, allow_redirects=True)
    latest_bin = requests_result.url.split("/")[-1]
    version = latest_bin.split("-")[-1].rsplit(".", 1)[0]

    # 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)

    # Downloading latest binaries
    print(f"Latest version of {control.name} is: {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)

    # Changing version of the package
    if Version(version) > Version(control.get_software_version()):
        print(f"Software version updated (from: {control.get_software_version()} to: {Version(version)})")
        package_updated = True
    else:
        print(f"Software version up-to-date ({Version(version)})")

    # Deleting binaries
    for f in glob.glob("*.xpi"):
        if f != latest_bin:
            remove_file(f)
    
    control.set_software_version(version)
    control.save_control_to_wapt()

    return package_updated

38d056ab130f7bf7c481c12636a4e9959de36561d3dfcbe54c6e3571bc0c1dc3 : WAPT/certificate.crt
d9d15dba8a89339f3cdb873efc8f98eab466d85665ae83465fcbb31e745a9450 : WAPT/control
a48af549da66e2987a135b0cb918b1c90f8e80b868760cbaa07c8f6df4da9b07 : bitwarden_password_manager-2024.12.3.xpi
1f3e42808ef4f669895a813f9970388a8c08cc94ae5a00c9981c7798171adc87 : luti.json
fdc62564d8fa4ff5f60b7d9a1821f2b9cd1265d8716142c22e2b349b4402759c : setup.py
64a2c6d42d1475b7bf75381acdb0a32db7da08ca921b1ee5bf5c1f48f1afc7e4 : update_package.py