Configuration
B3Desk
L’ensemble des paramètres décrits sur cette page peuvent être passées en variables d’environnement à l’application B3Desk.
- pydantic model b3desk.settings.MainSettings[source]
Paramètres de configuration du frontal B3Desk.
- field ACCEPTED_FILES_CLIENT_SIDE: str | None = 'image/*,.pdf,.doc,.docx,.htm,.html,.odp,.ods,.odt,.ppt,.pptx,.xls,.xlsx'
Liste de mime-types autorisés par le navigateur pour le téléversement des fichiers, séparés par des virgules.
Passé en paramètre
acceptedFilesde Dropzone.Plus d’infos sur https://docs.dropzone.dev/configuration/basics/configuration-options
- field ALLOWED_MIME_TYPES_SERVER_SIDE: list[str] | None = ['application/pdf', 'image/vnd.dwg', 'image/x-xcf', 'image/jpeg', 'image/jpx', 'image/png', 'image/apng', 'image/gif', 'image/webp', 'image/x-canon-cr2', 'image/tiff', 'image/bmp', 'image/vnd.ms-photo', 'image/vnd.adobe.photoshop', 'image/x-icon', 'image/heic', 'image/avif', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.oasis.opendocument.text', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.oasis.opendocument.presentation']
Liste de mime-types acceptés par le serveur pour le téléversement de fichiers.
Si non renseigné, tous les fichiers sont autorisés.
- field BABEL_TRANSLATION_DIRECTORIES: str = '/opt/bbb-visio/translations'
Un ou plusieurs chemins vers les répertoires des catalogues de traduction, séparés par des « ; ».
Plus d’infos sur https://python-babel.github.io/flask-babel/#configuration
- field BIGBLUEBUTTON_ANALYTICS_CALLBACK_URL: str | None = None
Passé à l’API BBB via le paramètre
meta_analytics-callback-url.Plus d’informations sur https://docs.bigbluebutton.org/development/api/#create
- field BIGBLUEBUTTON_API_CACHE_DURATION: int = 5
Le temps de mise en cache (en secondes) des réponses aux requêtes GET à l’API BBB.
- field BIGBLUEBUTTON_DIALNUMBER: str | None = None
The dial access number that participants can call in using regular phone.
Required if pin management is enabled.
- field BIGBLUEBUTTON_ENDPOINT: str | None = None
URL du service BBB.
Par exemple
https://bbb30.test/bigbluebutton/api
- field BIGBLUEBUTTON_REQUEST_TIMEOUT: int = 2
BBB request timeout
Timeout for BBB request expressed in seconds in logs
- field CAPTCHA_NUMBER_ATTEMPTS: Annotated[int, Gt(gt=0)] | None = 5
Captcha number attemps
Number of attempts to enter the visio-code before submitting a captcha
- field CAPTCHETAT_API_URL: str | None = 'https://api.piste.gouv.fr/piste/'
PISTE API url
basic url for PISTE API used to get and check captchetat
- field CONTACT_LINK: str | None = None
Contact link
If entered, a “contact” button wil appear in footer
- field DEBUG: bool = False
Mode debug, à ne surtout pas utiliser en production.
Plus d’informations sur https://flask.palletsprojects.com/en/3.0.x/config/#DEBUG
- field DEFAULT_MEETING_DURATION: int = 280
Durée maximum en minutes des réunion passée à l’API BBB.
Plus d’informations sur https://docs.bigbluebutton.org/development/api/#create
- field DOCUMENTATION_LINK_URL: str | None = None
Surcharge l’adresse de la page de documentation si renseigné.
- field ENABLE_PIN_MANAGEMENT: bool | None = False
Enable mangement of PIN by B3Desk.
PIN allows users joining meeting by phone. BIGBLUEBUTTON_DIALNUMBER required if PIN management enabled.
- field ENABLE_SIP: bool | None = False
Enable SIPMediaGW.
SIPMediaGW url allows users connecting SIPMediaGW. FQDN_SIP_SERVER required if SIP enabled.
- field EXTERNAL_UPLOAD_DESCRIPTION: str = 'Fichiers depuis votre Nextcloud'
Description dans BBB des fichiers téléversés dans Nextcloud.
- field LOG_CONFIG: Annotated[Path, PathType(path_type=file)] | None = None
Chemin vers un fichier de configuration de logs Python.
Le fichier doit être au format de fichiers de logs officiel Python. Il peut être au format INI ou à partir de Python 3.11 au format TOML (qui est recommandé):
Astuce
Par défaut les images Docker montent le répertoire
web/confdans/opt/bbb-visio/conf. On peut donc créer un fichierweb/conf/logging.tomldans le projet avec la configuration voulue. On indiquera ensuiteLOG_CONFIG=/opt/bbb-visio/conf/logging.tomlpour que ce fichier soit chargé par l’image Docker.Note
[root] désigne un logger par défaut qui traite tous les messages de log qui ne sont pas traités par d’autres loggers.
Exemple de fichier de configuration de logs au format tomlversion = 1 [formatters.default] format = "[%(asctime)s] %(levelname)s in %(module)s: %(message)s" [handlers.wsgi] class = "logging.handlers.WatchedFileHandler" filename = "/var/log/wsgi.log" formatter = "default" [handlers.b3desk] class = "logging.handlers.WatchedFileHandler" filename = "/var/log/b3desk.log" formatter = "default" [loggers.b3desk] level = "INFO" handlers = ["b3desk"] [root] level = "INFO" handlers = ["wsgi"]
Exemple de configuration avec un fichier destiné aux erreursversion = 1 [formatters.default] format = "[%(asctime)s] %(levelname)s in %(module)s: %(message)s" [handlers.wsgi] class = "logging.handlers.WatchedFileHandler" filename = "/var/log/wsgi.log" formatter = "default" [handlers.b3desk] class = "logging.handlers.WatchedFileHandler" filename = "/var/log/b3desk.log" formatter = "default" [handlers.errors] class = "logging.handlers.WatchedFileHandler" filename = "/var/log/errors.log" formatter = "default" level = "WARNING" [loggers.b3desk] level = "INFO" handlers = ["b3desk", "errors"] [root] level = "INFO" handlers = ["wsgi"]
Exemple de configuration avec les logs BBB dans un fichier dédié, avec DEBUG sur le module BBB uniquement.version = 1 [formatters.default] format = "[%(asctime)s] %(levelname)s in %(module)s: %(message)s" [handlers.wsgi] class = "logging.handlers.WatchedFileHandler" filename = "/var/log/wsgi.log" formatter = "default" [handlers.bbb] class = "logging.handlers.WatchedFileHandler" filename = "/var/log/bbb.log" formatter = "default" [loggers.bbb] level = "DEBUG" handlers = ["bbb"] [loggers.b3desk] level = "INFO" handlers = ["wsgi"] [root] level = "INFO" handlers = ["wsgi"]
- field MAILTO_LINKS: bool = False
Affiche des liens vers les adresses email des modérateurs et participants dans la liste des réunions.
- field MATOMO_URL: str | None = None
URL de l’instance de Matomo vers laquelle envoyer des statistiques.
- field MAXIMUM_MEETING_DELEGATES: int | None = 1
Maximum meeting delegates
Maximum number of delegates for one meeting
- field MAX_MEETINGS_PER_USER: int = 50
Le nombre maximum de séminaires que peut créer un utilisateur.
- field MAX_PARTICIPANTS: int = 200
Nombre moyen de participants indicatif sur la plateforme.
Seulement utilisé à des fins d’affichage.
- field MEETING_LOCALE_VARIANT: MeetingLocaleVariant = MeetingLocaleVariant.REUNION
Variante de locale pour le vocabulaire des réunions.
Peut être
coursouseminaire. Si vide : réunion par défaut.
- field MEETING_LOGOUT_URL: str | None = None
URL vers laquelle sont redirigés les utilisateurs après un séminaire.
- field MEETING_MAIL_SUBJECT: Any = l'Invitation à une réunion en ligne immédiate du Webinaire de l’Etat'
Formulation du titre du mail d’invitation à une réunion.
- field NC_LOGIN_API_URL: str | None = None
URL du fournisseur d’accès utilisé par Nextcloud.
Par exemple
https://auth.example.org.
- field NC_LOGIN_TIMEDELTA_DAYS: int = 30
Durée en jours avant l’expiration des autorisations Nextcloud.
- field OIDC_ATTENDEE_CLAIMS_MAPPING: dict[str, str] = {}
Correspondance entre les champs utilisateur de B3Desk (clés) et les claims renvoyés par le serveur d’identité des participants authentifiés (valeurs).
Si non renseigné, prend la valeur de
OIDC_CLAIMS_MAPPING.Exemple en variable d’environnementOIDC_ATTENDEE_CLAIMS_MAPPING='{"given_name":"given_name","family_name":"usual_name"}'
- field OIDC_ATTENDEE_CLIENT_AUTH_METHOD: str | None = None
Méthode de communication avec le point d’entrée
token_endpointdu serveur d’identité des participants authentifiés.Si non renseigné, prend la valeur de
OIDC_CLIENT_AUTH_METHOD.
- field OIDC_ATTENDEE_CLIENT_ID: str | None = None
ID du client auprès du serveur d’identité des participants authentifiés.
Si non renseigné, prend la valeur de
OIDC_CLIENT_ID.
- field OIDC_ATTENDEE_CLIENT_SECRET: str | None = None
Secret permettant d’identifier le client auprès du serveur d’identité des participants authentifiés.
Si non renseigné, prend la valeur de
OIDC_CLIENT_ID.
- field OIDC_ATTENDEE_ENABLED: bool | None = True
Indique si le serveur d’authentification des participants est activé ou non.
Si le serveur est KO, en passant cette variable à
False, l’authentification ne sera plus nécessaire pour les liens d’invitation authentifiés, ce qui permet de faire en sorte que les liens restent valides.
- field OIDC_ATTENDEE_INTROSPECTION_AUTH_METHOD: str = 'client_secret_basic'
Méthode de communication avec le point d’entrée d’introspection
token_introspectiondu serveur d’identité des participants authentifiés.Si non renseigné, prend la valeur de
OIDC_INTROSPECTION_AUTH_METHOD.
- field OIDC_ATTENDEE_ISSUER: str | None = None
URL du serveur d’identité des participants authentifiés.
Si non renseigné, prend la valeur de
OIDC_ISSUER.
- field OIDC_ATTENDEE_SCOPES: Annotated[list[str], BeforeValidator(func=split_comma_separated_strings, json_schema_input_type=PydanticUndefined)] | None = None
Liste des scopes OpenID Connect pour lesquels une autorisation sera demandée au serveur d’identité des participants authentifiés, séparés par des virgules.
Si non renseigné, prend la valeur de
OIDC_SCOPES.Passé en paramètre
auth_request_paramsde flask-pyoidc. Plus d’infos sur https://flask-pyoidc.readthedocs.io/en/latest/api.html#module-flask_pyoidc.provider_configuration
- field OIDC_ATTENDEE_SERVICE_NAME: str | None = None
Nom du service d’authentification des participants authentifiés. Utilisé pour l’affichage dans la modale d’invitation de participants authentifés.
Si non renseigné, prend la valeur de
OIDC_SERVICE_NAME.
- field OIDC_ATTENDEE_USERINFO_HTTP_METHOD: str | None = None
Méthode
GETouPOSTà utiliser pour les requêtes sur le point d’entrée UserInfo du serveur d’identité.Si non renseigné, prend la valeur de
OIDC_USERINFO_HTTP_METHOD.Plus d’infos sur https://flask-pyoidc.readthedocs.io/en/latest/api.html?highlight=userinfo_http_method#flask_pyoidc.provider_configuration.ProviderConfiguration
- field OIDC_CLAIMS_MAPPING: dict[str, str] = {}
Correspondance entre les champs utilisateur de B3Desk (clés) et les claims renvoyés par le serveur d’identité (valeurs).
Permet d’adapter B3Desk à des serveurs OIDC qui n’utilisent pas les claims standards, par exemple ProConnect où le nom de famille est renvoyé dans le claim
usual_nameplutôt quefamily_name.Les champs utilisateurs supportés sont
given_name,family_name,emailetpreferred_username. Tout champ absent de la configuration est lu directement depuis le claim de même nom.Si laissé vide (valeur par défaut), aucun mapping n’est appliqué et les claims sont lus tels quels.
Exemple en variable d’environnementOIDC_CLAIMS_MAPPING='{"given_name":"given_name","family_name":"usual_name","email":"email"}'
- field OIDC_CLIENT_AUTH_METHOD: str | None = 'client_secret_post'
Méthode de communication avec le point d’entrée
token_endpointdu serveur d’identité des organisateurs.
- field OIDC_CLIENT_ID: str | None = None
ID du client auprès du serveur d’identité des organisateurs.
- field OIDC_CLIENT_SECRET: str | None = None
Secret permettant d’identifier le client auprès du serveur d’identité des organisateurs.
- field OIDC_ID_TOKEN_COOKIE_SECURE: bool = False
Probablement un relicat de flask-oidc, semble inutilisé.
- field OIDC_INTROSPECTION_AUTH_METHOD: str = 'client_secret_basic'
Méthode de communication avec le point d’entrée d’introspection
token_introspectiondu serveur d’identité des organisateurs.
- field OIDC_ISSUER: str | None = None
URL du serveur d’identité des organisateurs de réunion.
Par exemple : https://auth.example.com
- field OIDC_REDIRECT_URI: str | None = None
URL de B3Desk vers laquelle le serveur d’identité redirige les utilisateurs après authentification.
Par exemple
https://visio-test.education.fr/oidc_callbackPlus d’infos sur https://flask-pyoidc.readthedocs.io/en/latest/configuration.html?highlight=OIDC_REDIRECT_URI#static-client-registration
- field OIDC_REQUIRE_VERIFIED_EMAIL: bool = False
Probablement un relicat de flask-oidc, semble inutilisé.
- field OIDC_SCOPES: Annotated[list[str], BeforeValidator(func=split_comma_separated_strings, json_schema_input_type=PydanticUndefined)] = ['openid', 'email', 'profile']
Liste des scopes OpenID Connect pour lesquels une autorisation sera demandée au serveur d’identité, séparés par des virgules.
Passé en paramètre
auth_request_paramsde flask-pyoidc. Plus d’infos sur https://flask-pyoidc.readthedocs.io/en/latest/api.html#module-flask_pyoidc.provider_configurationExemple dans un fichier de configuration TOMLOIDC_SCOPES = "openid, email, profile, siret, usual_name"
Exemple en variable d’environnementOIDC_SCOPES="openid,email,profile,siret,usual_name"
- Constraints:
func = <function split_comma_separated_strings at 0x723da370c930>
json_schema_input_type = PydanticUndefined
- field OIDC_SERVICE_NAME: str | None = None
Probablement un relicat de flask-oidc, semble inutilisé à part en valeur par défaut de
OIDC_ATTENDEE_SERVICE_NAME.
- field OIDC_USERINFO_HTTP_METHOD: str = 'POST'
Méthode
GETouPOSTà utiliser pour les requêtes sur le point d’entrée UserInfo du serveur d’identité.Plus d’infos sur https://flask-pyoidc.readthedocs.io/en/latest/api.html?highlight=userinfo_http_method#flask_pyoidc.provider_configuration.ProviderConfiguration
- field OIDC_USERINFO_URI: str | None = None
Probablement un relicat de flask-oidc, semble inutilisé.
- field PISTE_OAUTH_API_URL: str | None = 'https://oauth.piste.gouv.fr/api'
PISTE OAUTH APU url
basic url for PISTE OAUTH API used to get access token to captchetat API
- field PISTE_OAUTH_CLIENT_ID: str | None = None
Piste Oauth client_id
Oauth client id can be retrieved from the PISTE site under APPLICATION on the following line: Identifiants Oauth
- field PISTE_OAUTH_CLIENT_SECRET: str | None = None
Piste Oauth client_secret
Oauth client secret can be retrieved from the PISTE site under APPLICATION on the following line: Identifiants Oauth under the following column: Secret Key
- field PREFERRED_URL_SCHEME: str = 'https'
La méthode préférée utilisée pour générer des URL. Peut être http ou https.
Plus d’infos sur https://flask.palletsprojects.com/en/3.0.x/config/#PREFERRED_URL_SCHEME.
- field PRIVATE_KEY: str | None = None
Private key generated by joserfc, double quotes are mandatory.
It will be used to generate a token for SIPMediaGW connection security. Changing the private-key makes all tokens invalid. Required if SIP is enabled.
- field QUICK_MEETING_ATTENDEE_LINK_INTRODUCTION: Any = l' Lien Participant '
Formulation de « Lien Participant » dans les liens BBB.
- field QUICK_MEETING_DEFAULT_NAME: Any = l'Réunion improvisée'
Nom par défaut des réunions improvisées.
- field QUICK_MEETING_LOGOUT_URL: str | None = None
Lien vers lequel sont redirigés les participants à la fin d’une réunion improvisée.
Par défaut, c’est la page d’accueil du service B3Desk.
- field QUICK_MEETING_MODERATOR_LINK_INTRODUCTION: Any = l' Lien Modérateur '
Formulation de « Lien Modérateur » dans les liens BBB.
- field QUICK_MEETING_MODERATOR_WELCOME_MESSAGE: Any = l'Bienvenue aux modérateurs. Pour inviter quelqu'un à cette réunion, envoyez-lui l'un de ces liens :'
Formulation du message d’accueil aux modérateurs dans BBB.
- field RECORDING_DURATION: timedelta | None = datetime.timedelta(days=365)
Durée par défaut de conservation des enregistrements.
Utilisé à des fins d’affichage seulement.
- field REDIS_URL: str | None = None
L’URL du serveur redis utilisé pour les tâches asynchrones.
Par exemple
localhost:6379.
- field RIE_NETWORK_IPS: Annotated[list[str], BeforeValidator(func=split_comma_separated_strings, json_schema_input_type=PydanticUndefined)] | None = None
Plages d’adresses IP du réseau interministériel de l’État.
Affiche un encart particulier pour les utilisateurs se connectant depuis ce réseau.
- field SECONDARY_IDENTITY_PROVIDER_CLIENT_ID: str | None = None
ID du client B3desk dans ce serveur d’identité.
- field SECONDARY_IDENTITY_PROVIDER_CLIENT_SECRET: str | None = None
Secret du client B3desk dans ce serveur d’identité.
- field SECONDARY_IDENTITY_PROVIDER_ENABLED: bool | None = False
Indique si un second serveur d’identité pour la connection a un Nextcloud est activée.
S’il y a bien besoin de ce second serveur d’identité pour connecter un utilisateur sur un Nextcloud, l’identifiant Nextcloud de l’utilisateur sera recherché à partir de son mail.
- field SECONDARY_IDENTITY_PROVIDER_REALM: str | None = None
Groupe sous lequel est enregistré l’utilisateur.
- field SECONDARY_IDENTITY_PROVIDER_URI: str | None = None
Url du serveur d’identité permettant de retrouver un id utilisateur à partir de son email.
- field SECRET_KEY: str [Required]
Clé secrète utilisée notamment pour la signature des cookies. Cette clé DOIT être différente pour TOUTES les instances de B3Desk, et être tenue secrète. Peut être générée avec
python -c 'import secrets; print(secrets.token_hex())'Plus d’infos sur https://flask.palletsprojects.com/en/3.0.x/config/#SECRET_KEY
- field SERVER_NAME: str [Required]
Le nom de domaine sur lequel est déployé l’instance B3Desk.
Par exemple
b3desk.example.org, sans https://.Plus d’infos sur https://flask.palletsprojects.com/en/3.0.x/config/#SERVER_NAME.
- field SERVICE_TAGLINE: str = 'Le service de webinaire pour les agents de l’État'
Slogan du service B3Desk.
- field SQLALCHEMY_DATABASE_URI: str [Required]
URI de configuration de la base de données.
Par exemple
postgresql://user:password@localhost:5432/bbb_visio
- field SQLALCHEMY_TRACK_MODIFICATIONS: bool = False
Traçage des évènements de modification des modèles dans SQLAlchemy.
Plus d’informations sur https://flask-sqlalchemy.palletsprojects.com/en/3.1.x/track-modifications/
- field STATS_URL: str | None = None
URL du fichier de statistiques des réunions.
Par exemple
https://visio-test.education.fr/static/local/stats.csv
- field TESTING: bool = False
Mode tests unitaires, à ne surtout pas utiliser en production.
Plus d’informations sur https://flask.palletsprojects.com/en/3.0.x/config/#TESTING
- field TIME_FORMAT: str = '%Y-%m-%d'
Format des dates utilisées lors des échanges avec l’API de Nextcloud.
Plus d’informations sur https://docs.python.org/fr/3/library/datetime.html#strftime-and-strptime-format-codes
- field TMP_DOWNLOAD_DIR: str [Required]
Chemin vers un dossier qui servira de stockage temporaire de fichiers entre Nextcloud et BBB.
- field UPLOAD_DIR: str [Required]
Chemin vers le dossier dans lequel seront stockés les fichiers téléversés par les utilisateurs.
- field VIDEO_STREAMING_LINKS: dict[str, str] | None = {}
List of streaming service for video sharing.
- field WELCOME_PAGE_SUBTITLE: Any = l'Mes salles de réunion'
Formulation du sous-titre de la page de création de réunion.
- field WTF_CSRF_TIME_LIMIT: int = 86400
Indique en secondes la durée de validité des jetons CSRF.
Il est nécessaire de mettre une valeur plus élevée que le délai de mise en cache des pages par le serveur web. Sans quoi les navigateurs des utilisateurs serviront des pages en caches contenant des jetons CSRF expirés.
Plus d’infos sur https://flask-wtf.readthedocs.io/en/1.2.x/config/
Nginx
B3Desk fournit des pages d’erreurs statiques qui peuvent être affichées en cas de problème. Pour utiliser ces pages statiques, on peut utiliser le paramètre error_page de Nginx:
error_page 500 502 503 504 /static/errors/custom_50x.html;
Avec cette configuration, dès que le service est indisponible, Nginx servira cette page d’erreur:
Jumelage avec Apps
Configuration de B3Desk
Afin que les utilisateurs de b3desk puissent accéder à leurs fichiers Nextcloud d’Apps, il faut que l’application puisse récupérer l’identifiant attendu par Nextcloud. Pour ce faire une requête est faite sur l’API Users de Keycloak.
Il est donc nécessaire de configurer les paramètres de configuration suivants :
On peut ensuite tester que la configuration est correcte grâce à la commande suivante :
docker exec -it <CONTAINER_ID/NAME> flask get-apps-id <email@example.com>
En remplaçant <CONTAINER_ID/NAME> par l’identifiant du conteneur b3desk_web ou simplement son nom, et <email@example.com> par l’email d’un utilisateur, cette commande tente une connexion à l’API keycloak d’apps, afin de récupérer l’identifiant dont l’email a été passé en paramètre.
Si la connexion à l’API de keycloak échoue, cette commande indiquera à quelle étape, et quelles sont les pistes de résolution.
Configuration de Keycloak
Pour que la connexion de B3Desk à Apps fonctionne correctement, il est nécessaire que keycloak autorise les connexion par identifiants client.
Vérifier que la configuration de Keycloak est correcte
Se rendre la console d’administration Keycloak, dans le realm
apps. Par exemple https://auth.eole3.dev/auth/admin/master/console/#/appsSe rendre dans la section « Clients » et sélectionner « b3desk »
Sélectionner l’onglet « Service account roles »
À cet endroit on doit voir deux lignes avec les droits
real-management view-usersetrealm-management query-users.
Configuration de Keycloak est correcte
Si les droits real-management view-users et realm-management query-users ne sont pas présents, il faut les ajouter :
Cliquer sur le bouton « Assign roles », une fenêtre modale doit s’ouvrir
Cliquer sur le menu déroulant des filtres en haut à gauche, et sélectionner « Filter by clients » plutôt que « Filter by realm roles »
Dans le champ de recherche, entrer « users » et valider
Cocher « view-users » et « query-users » puis sur le bouton « Assign »
Utilisation d’un materiel visio SIPMediaGW
Configuration de la SIP dans B3Desk
Afin de permettre au matériel visio SIPMediaGW de rejoindre une visio via B3Desk, il faut lui communiquer un token qui sécurisera la connexion à B3Desk.
Dans un premier temps, il faut générer une clé privée :
docker exec -it <CONTAINER_ID/NAME> flask generate-private-key
En remplaçant <CONTAINER_ID/NAME> par l’identifiant du conteneur b3desk_web ou simplement son nom, cette commande va générer une clé privée qui sera affectée à l’instance B3Desk.
Afin de permettre que les tokens générés avec cette clé privée soient reconnus par tous les serveurs, il convient d’utiliser la même clé privée sur tous les serveurs d’une même instance B3Desk.
On peut ensuite configurer les paramètres suivants de manière identique pour tous les serveurs d’une même instance B3Desk :
ENABLE_SIP=on
FQDN_SIP_SERVER=example.serveur.com
PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
ThereIsAWonderfulPrivateKey
-----END PRIVATE KEY-----"
Avertissement
Pour les données s’étalant sur plusieurs lignes, pensez à les entourer de guillements doubles ".
Il est maintenant nécessaire de redémarrer le conteneur de chaque serveur :
docker compose -f docker-compose.yml -f docker-compose.prod.yml web -d
Il est possible de vérfier que le paramétrage a été correctement effectué :
docker exec -it <CONTAINER_ID/NAME> flask check-sip-setttings
Générer un sip-token
Une fois que B3Desk est correctement paramétré, la généreration de sip-token est active :
docker exec -it <CONTAINER_ID/NAME> flask generate-sip-token
Ce token est valide sans limite de temps, tant que la clé privée reste la même. Un même token pourra servir pour plusieurs services différents de visio SIPMediaGW tant qu’ils requêtent la même instance possèdant la bonne clé privée.
Vous pouvez vérifier que le token est valide avec la commande :
docker exec -it <CONTAINER_ID/NAME> flask check-sip-token "<token>"
Il suffira de transmettre ce token au matériel SIP qui devra le joindre dans le header {"Authorization": <token>} lors de ses requêtes sur la route suivante : https://<instance_b3desk>/sip-connect/<visio_code>