tis-signal-desktop icon

Signal

Paquet d’installation silencieuse pour Signal

7.86.0-5
Messaging
Messaging

Les paquets PREPROD sont des paquets construits via LUTI. Ils restent généralement 5 jours en PREPROD, après quoi un deuxième scan VirusTotal est effectué pour vérifier que le status n'a pas changé.
Si le paquet réussit ce dernier contrôle, il est promu en PROD et publié sur le store.

  • package: tis-signal-desktop
  • name: Signal
  • version: 7.86.0-5
  • categories: Messaging
  • maintainer: WAPT Team,Tranquil IT,Jimmy PELÉ,Flavien SCHELFAUT
  • editor: Signal Foundation,Signal Messenger LLC
  • licence: GPLv3
  • locale: all
  • target_os: debian_based
  • impacted_process: signal
  • architecture: x64
  • signature_date:
  • size: 110.83 Mo
  • homepage : https://signal.org/

package           : tis-signal-desktop
version           : 7.86.0-5
architecture      : x64
section           : base
priority          : optional
name              : Signal
categories        : Messaging
maintainer        : WAPT Team,Tranquil IT,Jimmy PELÉ,Flavien SCHELFAUT
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          : PREPROD
locale            : all
target_os         : debian_based
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      : e7b5a004-fcc6-4a5c-97e8-4ad4e12031eb
valid_from        : 
valid_until       : 
forced_install_on : 
changelog         : 
min_os_version    : 
max_os_version    : 
icon_sha256sum    : 3adb886fd11d1ac878e24c20600a8c65721098a0607e1723638e5719c9805539
signer            : test
signer_fingerprint: b82fc8ef4a4475c0f69ac168176c2bfc58f572eb716c4eadd65e4785c155dd8e
signature_date    : 2026-01-21T22:59:16.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         : Zbgl8U7LD+wJAdQ71DyApARp+HKeu+LMslAEGWB7dgBtoTd29iAl81zPs+sVDZMcv4DC9q+LWF8GCqi3imH+DiIQzeMAsrHDbZat7zV5pRRDkgv7bicsKNYorUaUN3rBOGUQ+ev9palLWjjXxPBEkmFd3Yb9OLZG2NdyRlQbcP3UxgB7igOjgY+e4bmwCB6ZrQ3rkP1876sRscr1ASTKB9vbprg5KVD1KrZZ4P9d66y0J6uf5zensEPDmuUdqnKizf7D9wpCmV+GQ74heCsM/yGnghc6gMEhypDx047iH2aA52toeyfSucQhjMmiSF66miDIVdGzfHMTd3ZgJptouQ==

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


def install():
    deb_file = glob.glob('signal-desktop*.deb')[0]
    install_deb(deb_file)

def uninstall():
    uninstall_apt("signal-desktop", autoremove=True)

# -*- coding: utf-8 -*-
from setuphelpers import *
from io import BytesIO
import gzip
import os
import re


class DebianPackagesParser:

    def __init__(self, file):
        file_text = self.__read_input(file)
        file_text = self.__remove_pgp_key(file_text)

        packages = file_text.split("\n\n")

        self.raw_pkg_info = []
        if len(packages[0]):
            self.raw_pkg_info = [self.__get_raw_info(pkg) for pkg in packages]

    def __read_input(self, input_obj):
        """Ensures valid input type"""
        if type(input_obj) is not str:
            raise TypeError("input must be string or string path to file")
        elif os.path.exists(os.path.abspath(input_obj)):
            with open(input_obj, "r", encoding="utf8") as f:
                file_text = f.read().strip()
            return file_text
        else:
            return input_obj.strip()

    def __remove_pgp_key(self, text):
        gpg_regex = re.compile(r"^-----BEGIN PGP PUBLIC KEY BLOCK-----[a-zA-Z\d\n\/.:+= ]+-----END PGP PUBLIC KEY BLOCK-----$", flags=re.MULTILINE)
        return re.sub(gpg_regex, '', text)

    def __get_raw_info(self, text):
        """Parses a Debian control file and returns raw dictionary"""
        split_regex = re.compile(r"^[A-Za-z0-9-]+:\s", flags=re.MULTILINE)

        keys = [key[:-2].lower() for key in split_regex.findall(text)]
        values = [value.strip() for value in re.split(split_regex, text)[1:]]

        if values:
            return dict(zip(keys, values))
        else:
            raise ValueError("file or text don't match Debian Control File schema")

def get_all_dep_version_package(list_package, package_name, all_dep):
    """Recursively get all dependencies of a given package."""
    # Get the latest version of the package
    last_package = sorted([u for u in list_package if u['package'] == package_name], 
                          key=lambda p: Version(p['version']), reverse=True)
    if not last_package:
        return  # Exit if the package is not found
    
    last_package = last_package[0]
    
    # Add the last package to the dependencies list
    if last_package not in all_dep:
        all_dep.append(last_package)
    
    # Parse the dependencies
    dependencies = last_package.get('depends', '').split(',')
    
    for dep_group in dependencies:
        dep_candidates = dep_group.split('|')
        
        # Pick the first available candidate
        for dep in dep_candidates:
            dep_name = dep.split('(')[0].strip()
            # Recursively fetch dependencies for this package
            get_all_dep_version_package(list_package, dep_name, all_dep)

def download_all_dependencies(list_package, package_name, urldepot, proxies=None):
    """Download all dependencies of a package."""
    all_dep = []

    # Fetch all dependencies of the package
    get_all_dep_version_package(list_package, package_name, all_dep)

    # Create the list of URLs for all dependencies
    list_deb = [urldepot + '/' + u['filename'] for u in all_dep]

    # Download each dependency
    for f in list_deb:
        filename = f.split('/')[-1]
        if not isfile(filename):
            wget(f, filename, proxies=proxies)
        else:
            print(f"{filename} already exists.")

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

    base_url = 'https://updates.signal.org/desktop/apt'
    dist = "xenial"
    arch = "amd64"
    package_name = "signal-desktop"

    # We remove all deb file first
    for deb in glob.glob('*.deb'):
        remove_file(deb)

    urldepot = f"{base_url}/dists/{dist}/main/binary-{arch}/Packages.gz"
    print(f"Repo url is {urldepot}")

    with gzip.open(BytesIO(wgets(urldepot, proxies=proxies))) as f:
        data = f.read().decode('utf-8')

    list_package = DebianPackagesParser(data).raw_pkg_info

    # Getting latest version of the package
    last_package = sorted([u for u in list_package if u['package'] == package_name], key=lambda p: (Version(p['version'])), reverse=True)[0]
    last_version = last_package['version']

    download_all_dependencies(list_package, package_name, base_url, proxies)

    control.set_software_version(last_version)
    control.save_control_to_wapt()

01ca7fe94636e5a08fcb73849d3b5df25d51e2c82f4dd1a08f01798b25899819 : WAPT/certificate.crt
57374048a80839dcb54f3266a106c513b7c04250819ae77fa73d6ff9b0479643 : WAPT/control
3adb886fd11d1ac878e24c20600a8c65721098a0607e1723638e5719c9805539 : WAPT/icon.png
d9de99ca7e0566187ab655cc40b283e32acf6f4cf6349dc3621aa6581e33a436 : luti.json
1c89a6885d49327ec222d45e5ce8fada90d706de69a505d5f2cba778655c3442 : setup.py
f84e35984d748eee0415caa4881dacc50d8a111b709729bc3b2a87287b57d6c6 : signal-desktop_7.86.0_amd64.deb
c740f955dc5ca247cc6c88f0868731bac43a4eaa4331ca635de15c3b1856c36e : update_package.py