tis-signal-desktop icon

Signal

Silent install package for Signal

7.68.0-15

  • package: tis-signal-desktop
  • name: Signal
  • version: 7.68.0-15
  • categories: Messaging
  • maintainer: WAPT Team,Jimmy PELÉ
  • editor: Signal Foundation,Signal Messenger LLC
  • licence: GPLv3
  • locale: all
  • target_os: windows
  • impacted_process: signal
  • architecture: x64
  • signature_date:
  • size: 172.92 Mo
  • homepage : https://signal.org/

package           : tis-signal-desktop
version           : 7.68.0-15
architecture      : x64
section           : base
priority          : optional
name              : Signal
categories        : Messaging
maintainer        : WAPT Team,Jimmy PELÉ
description       : Signal is a cross-platform encrypted messaging service. It uses the Internet to send one-to-one and group messages, which can include files, voice notes, images and videos.
depends           : 
conflicts         : 
maturity          : PROD
locale            : all
target_os         : windows
min_wapt_version  : 2.1
sources           : https://signal.org/download/
installed_size    : 
impacted_process  : signal
description_fr    : Signal permet de communiquer (appels vocaux et vidéo, messages texte ou médias) de façon chiffrée et sécurisée.
description_pl    : Signal to wieloplatformowa usługa szyfrowania wiadomości. Wykorzystuje Internet do wysyłania wiadomości od jednego do drugiego i grupowych, które mogą zawierać pliki, notatki głosowe, obrazy i filmy
description_de    : Signal ist ein plattformübergreifender verschlüsselter Nachrichtendienst. Er nutzt das Internet, um Einzel- und Gruppennachrichten zu versenden, die Dateien, Sprachnotizen, Bilder und Videos enthalten können
description_es    : Signal es un servicio de mensajería encriptada multiplataforma. Utiliza Internet para enviar mensajes uno a uno y en grupo, que pueden incluir archivos, notas de voz, imágenes y vídeos
description_pt    : O sinal é um serviço de mensagens encriptadas multiplataforma. Utiliza a Internet para enviar mensagens individuais e de grupo, que podem incluir ficheiros, notas de voz, imagens e vídeos
description_it    : Signal è un servizio di messaggistica criptata multipiattaforma. Utilizza Internet per inviare messaggi individuali e di gruppo, che possono includere file, note vocali, immagini e video
description_nl    : Signal is een platformonafhankelijke versleutelde berichtendienst. Het gebruikt het internet om één-op-één-berichten en groepsberichten te versturen, die bestanden, spraaknotities, afbeeldingen en video's kunnen bevatten
description_ru    : Signal - это кросс-платформенная служба обмена зашифрованными сообщениями. Он использует Интернет для отправки индивидуальных и групповых сообщений, которые могут включать файлы, голосовые заметки, изображения и видео
audit_schedule    : 
editor            : Signal Foundation,Signal Messenger LLC
keywords          : 
licence           : GPLv3
homepage          : https://signal.org/
package_uuid      : 6ba12074-a9f4-4c17-b68f-3fbbe3d25147
valid_from        : 
valid_until       : 
forced_install_on : 
changelog         : 
min_os_version    : 10.0
max_os_version    : 
icon_sha256sum    : 3adb886fd11d1ac878e24c20600a8c65721098a0607e1723638e5719c9805539
signer            : Tranquil IT
signer_fingerprint: 8c5127a75392be9cc9afd0dbae1222a673072c308c14d88ab246e23832e8c6bb
signature_date    : 2025-09-02T01:11:42.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         : WIUygH+GOdiuJu7ehl8YKp3/Kd1xiS/LnRElPljL0c0x3bRAyi92uXHM0MxalfZsicX8uRLkvQzWTEiUoOH8s1wmoS1XJQvAJhjKQMvrljJ3KOQjoZwAj2Y0REAl+zmdc9znuewrOmerzexpqwVOOCingnFFztcy2sVS3dkooT6LdSPJ/7CNQtBTnqlkBHOw8X9sZbq8OenOaQkcie8Ttgqnb/drT1v1BcSBp+Kl+mt0NJPb6+5tKVeIGbPFL+DO8KKvLf4Ailh93xyjldkVcEKPIuRaObz1oEhw+UTyxb/HsNzkkG0pPvrUFuBP1x9upyeBJnIZxwA/yT7XszXyLA==

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

app_dir_name = "signal-desktop"
app_user_dir = makepath(user_local_appdata, "Programs", app_dir_name)
app_user_uninstall = makepath(app_user_dir, "Uninstall Signal.exe")
app_user_uninstall_cmd = f'"{app_user_uninstall}" /S'
app_user_updater = makepath(user_local_appdata, "signal-desktop-updater")
app_sys_dir = makepath(programfiles32, app_dir_name)
app_sys_path = makepath(app_sys_dir, "Signal.exe")


def install():
    # Specific app values
    package_version = control.get_software_version()
    bin_zip_string = f"signal-desktop-win-x64-{package_version}.zip"

    killalltasks(control.get_impacted_process_list())

    # Installing the package
    if isdir(app_sys_dir):
        remove_tree(app_sys_dir)

    unzip(bin_zip_string, makepath(programfiles32))
    create_programs_menu_shortcut("Signal", app_sys_path)


def uninstall():

    # Uninstalling the package
    if isdir(app_sys_dir):
        remove_tree(app_sys_dir)
    remove_programs_menu_shortcut("Signal")


def session_setup():
    print("Disabling: auto update check")
    if isdir(app_user_updater):
        remove_tree(app_user_updater)

    print("Uninstalling from user environnement if installed")
    if isfile(app_user_uninstall):
        print("Running " + app_user_uninstall_cmd)
        run(app_user_uninstall_cmd)
    remove_user_programs_menu_shortcut("Signal")

# -*- coding: utf-8 -*-
from setuphelpers import *
from waptutils import create_recursive_zip
import waptlicences
import re

app_dir_name = "signal-desktop"
seven_zip_path = makepath(programfiles, "7-Zip", "7z.exe")

def read_file(filepath):
    with open(filepath, 'r', encoding='utf-8') as file:
        content = file.read()
    return content

def find_version(filename):
    version = re.search('version: .*', read_file(filename)).group(0)
    return version.split(':')[-1].strip()


def make_portable_install(latest_bin):

    archive_filename = latest_bin.replace('.exe', '.zip')
    print("Generate zip file with .exe file")

    if isdir(app_dir_name):
        remove_tree(app_dir_name)
    mkdirs(app_dir_name)

    try:
        # Unzip the exe file
        run(f'"{seven_zip_path}" e {latest_bin} -o{app_dir_name}')

        # Remove useless files extracted
        files_to_delete = ("nsExec.dll", "nsis7z.dll", "nsProcess.dll", "SpiderBanner.dll", "StdUtils.dll", "System.dll", "WinShell.dll")
        for file in files_to_delete:
            remove_file(makepath(app_dir_name, file))

        # Unzip the archive app-64.7z inside the extracted .exe
        app_7zip = makepath(app_dir_name, "app-64.7z")
        run(f'"{seven_zip_path}" x {app_7zip} -o{app_dir_name}\\')
        remove_file(app_7zip)

        # Make the zip file
        create_recursive_zip(archive_filename, app_dir_name, target_root=app_dir_name)

    except:
        error("Unabled to generate the zip file !")

    # Delete the folder
    remove_tree(app_dir_name)

    # Deleting outdated zip file
    for f in glob.glob("*.zip"):
        if f != archive_filename:
            remove_file(f)

    print("The zip file is correctly generated !")


def update_package():
    print("Download/Update package content from upstream binary sources")

    # Declaring local variables
    package_updated = False
    proxies = get_proxies_from_wapt_console()
    if not proxies:
        proxies = get_proxies()
    app_name = control.name

    os_dict_yaml = { 'windows' : 'latest', 'darwin' : 'latest-mac' }
    yaml_download = f"https://updates.signal.org/desktop/{os_dict_yaml[control.target_os]}.yml"
    yaml_file = 'latest.yml'

    print(f"Downloading the yaml file: {yaml_download}")
    wget(yaml_download, yaml_file, proxies=proxies)

    # WAPT for the moment as no yaml parser
    # This part can be improved in the future
    version = find_version(yaml_file)

    latest_bin = f"signal-desktop-win-x64-{version}.exe"
    url_dl = f"https://updates.signal.org/desktop/{latest_bin}"

    print(f"Latest {app_name} version is: {version}")
    print(f"Download URL is: {url_dl}")

    # Downloading latest binaries
    if not isfile(latest_bin):
        print("Downloading: " + latest_bin)
        wget(url_dl, latest_bin, proxies=proxies)
    else:
        print(f"Binary is present: {latest_bin}")

    # Deleting outdated binaries
    for f in glob.glob('*.exe'):
        if Version(get_version_from_binary(f)) < Version(version):
            remove_file(f)

    expected_issuer = 'Signal Messenger, LLC'
    sign_name = waptlicences.check_exe_signing_certificate(latest_bin)[0]
    if sign_name != expected_issuer:
        error(f'Bad issuer {sign_name} != {expected_issuer} ')

    make_portable_install(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})")
        package_updated = True
    else:
        print(f"Software version up-to-date ({version})")

    control.set_software_version(get_version_from_binary(latest_bin))
    control.save_control_to_wapt()

    # Deleting all binaries
    for f in glob.glob("*.exe"):
        remove_file(f)
    
    remove_file(yaml_file)

    # Validating update-package-sources
    return package_updated

38d056ab130f7bf7c481c12636a4e9959de36561d3dfcbe54c6e3571bc0c1dc3 : WAPT/certificate.crt
4812a28b2557b2ce3fe3ce5ea67c42e0164ca04232a97e13b8fda297fbf4502a : WAPT/control
3adb886fd11d1ac878e24c20600a8c65721098a0607e1723638e5719c9805539 : WAPT/icon.png
151935a3b1739237e09496b759f72c04df20628aa9fcc48a5c9c9051449c38d9 : luti.json
2393e0d5d737c0950066ddd9ad1479638de64b8e2881d8adf170963f8cc4c8c8 : setup.py
6d65364a7747815a8cd212ef442777b926519dff92deeecd887993a83deddce6 : signal-desktop-win-x64-7.68.0.zip
8ecd59b09bed222ae4eeb065654c02a3a84d250561699c5416de63be978324ce : update_package.py