- 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