Configuration de la plateforme

Les variables suivantes sont utilisées par la plateforme pour son fonctionnement. Leurs valeurs peuvent être changées dans votre fichier de configuration :

(django_pod) pod@pod:/usr/local/django_projects/podv2$ vim pod/custom/settings_local.py

La documentation suivante précise pour chaque variable son nom, son usage et sa valeur par défaut.

Configuration principale

Property Description Default Value
SECRET_KEY La clé secrète d’une installation Django. Elle est utilisée dans le contexte de la signature cryptographique, et doit être définie à une valeur unique et non prédictible. https://docs.djangoproject.com/fr/1.11/ref/settings/#secret-key 'A_CHANGER'
DEBUG Une valeur booléenne qui active ou désactive le mode de débogage. Ne déployez jamais de site en production avec le réglage DEBUG activé. https://docs.djangoproject.com/fr/1.11/ref/settings/#debug True
ALLOWED_HOSTS Une liste de chaînes représentant des noms de domaine/d’hôte que ce site Django peut servir. C’est une mesure de sécurité pour empêcher les attaques d’en-tête Host HTTP, qui sont possibles même avec bien des configurations de serveur Web apparemment sécurisées. https://docs.djangoproject.com/fr/1.11/ref/settings/#allowed-hosts ['localhost']
SESSION_COOKIE_AGE L’âge des cookies de sessions, en secondes. https://docs.djangoproject.com/fr/1.11/ref/settings/#session-cookie-age 14400
SESSION_EXPIRE_AT_BROWSER_CLOSE Indique s’il faut que la session expire lorsque l’utilisateur ferme son navigateur. https://docs.djangoproject.com/fr/1.11/ref/settings/#session-cookie-age True
ADMINS Une liste de toutes les personnes qui reçoivent les notifications d’erreurs dans le code. Lorsque DEBUG=False et qu’une vue lève une exception, Django envoie un courriel à ces personnes contenant les informations complètes de l’exception. Chaque élément de la liste doit être un tuple au format « (nom complet, adresse électronique) ». Exemple : [('John', 'john@example.com'), ('Mary', 'mary@example.com')] Dans Pod, les "admins" sont également destinataires des courriels de contact, d'encodage ou de flux rss si la variable CONTACT_US_EMAIL n'est pas renseignée. ( ('Name', 'adminmail@univ.fr'),)
MANAGERS Dans Pod, les "managers" sont destinataires des courriels de fin d'encodage (et ainsi des vidéos déposées sur la plateforme). Le premier managers renseigné est également contact des flus rss. Ils sont aussi destinataires des courriels de contact si la variable CONTACT_US_EMAIL n'est pas renseignée. ADMINS
DATABASES Un dictionnaire contenant les réglages de toutes les bases de données à utiliser avec Django. C’est un dictionnaire imbriqué dont les contenus font correspondre l’alias de base de données avec un dictionnaire contenant les options de chacune des bases de données. https://docs.djangoproject.com/fr/1.11/ref/settings/#databases
{
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
LANGUAGE_CODE Langue par défaut si non détectée fr
LANGUAGES Langue disponible et traduite
( ('fr', 'Français'), ('en', 'English'), ('nl', 'Dutch (Netherlands)'))
TIME_ZONE Une chaîne représentant le fuseau horaire pour cette installation. https://docs.djangoproject.com/fr/1.11/ref/settings/#std:setting-TIME_ZONE UTC
FILE_UPLOAD_TEMP_DIR Le répertoire dans lequel stocker temporairement les données (typiquement pour les fichiers plus grands que FILE_UPLOAD_MAX_MEMORY_SIZE) lors des téléversements de fichiers. https://docs.djangoproject.com/fr/1.11/ref/settings/#file-upload-temp-dir /var/tmp
STATIC_ROOT Le chemin absolu vers le répertoire dans lequel collectstatic rassemble les fichiers statiques en vue du déploiement. https://docs.djangoproject.com/fr/1.11/ref/settings/#std:setting-STATIC_ROOT /pod/static
MEDIA_ROOT Chemin absolu de système de fichiers pointant vers le répertoire qui contiendra les fichiers téléversés par les utilisateurs. https://docs.djangoproject.com/fr/1.11/ref/settings/#std:setting-MEDIA_ROOT /pod/media
EMAIL_HOST nom du serveur smtp smtp.univ.fr
EMAIL_PORT port d'écoute du serveur smtp 25
SERVER_EMAIL courriel utilisé par défaut pour les envois automatique (erreur de code etc.) noreply@univ.fr
DEFAULT_FROM_EMAIL courriel utilisé par défaut pour les envois de courriel (contact, encodage etc.) noreply@univ.fr
MENUBAR_HIDE_INACTIVE_OWNERS Les utilisateurs inactif ne sont plus affichés dans la barre de menu utilisateur True
MENUBAR_SHOW_STAFF_OWNERS_ONLY Les utilisateurs non staff ne sont plus affichés dans la barre de menu utilisateur False
HOMEPAGE_SHOWS_PASSWORDED Afficher les vidéos dont l'accès est protégé par mot de passe sur la page d'accueil False
HOMEPAGE_SHOWS_RESTRICTED Afficher les vidéos dont l'accès est protégé par authentification sur la page d'accueil False
FORCE_LOWERCASE_TAGS Les mots clés saisis lors de l'ajout de vidéo sont convertis automatiquement en minuscule True
MAX_TAG_LENGTH Les mots clés saisis lors de l'ajout de vidéo ne peuvent dépassé la longueur saisie 50
USE_PODFILE Utiliser l'application de gestion de fichier fourni avec le projet. Si False, chaque fichier envoyé ne pourra être utilisé qu'une seule fois. False
THIRD_PARTY_APPS Liste des applications tierces accessibles. []
FILES_DIR Nom du répertoire racine ou les fichiers "complémentaires" (hors videos etc.) sont téléversés. files
SUBJECT_CHOICES Choix de sujet pour les courriels envoyés depuis la plateforme ( ('', '-----'), ('info', ('Request more information')), ('contribute', ('Learn more about how to contribute')), ('request_password', ('Password request for a video')), ('inappropriate_content', ('Report inappropriate content')), ('bug', ('Correction or bug report')), ('other', ('Other (please specify)')) )

Configuration des templates / de l'affichage

L'ensemble des variables ci-après doivent être contnu dans un dictionnnaire TEMPLATE_VISIBLE_SETTINGS.

Voici sa valeur par défaut :

TEMPLATE_VISIBLE_SETTINGS = {
    'TITLE_SITE': 'Pod',
    'TITLE_ETB': 'University name',
    'LOGO_SITE': 'img/logoPod.svg',
    'LOGO_ETB': 'img/logo_etb.svg',
    'LOGO_PLAYER': 'img/logoPod.svg',
    'LINK_PLAYER': '',
    'FOOTER_TEXT': ('',),
    'FAVICON': 'img/logoPod.svg',
    'CSS_OVERRIDE' : ''
}

Property Description Default Value
TITLE_SITE Titre du site. 'Pod'
TITLE_ETB Titre de l'etablissement. 'University name'
LOGO_SITE Logo affiché en haut à gauche sur toutes les pages. Doit se situer dans le répertoire static 'img/logoPod.svg'
LOGO_ETB Logo affiché dans le footer sur toutes les pages. Doit se situer dans le répertoire static 'img/logo_etb.svg'
LOGO_PLAYER Logo affiché sur le player video. Doit se situer dans le répertoire static 'img/logoPod.svg'
LINK_PLAYER Lien de destination du logo affiché sur le player ''
FOOTER_TEXT Texte affiché dans le footer. Une ligne par entrée, accepte du code html. Par exmple : ( '42, rue Paul Duez', '59000 Lille - France', ('<a href="https://goo.gl/maps/AZnyBK4hHaM2"' ' target="_blank">Google maps</a>') ) ('',)
FAVICON Icon affiché dans la barre d'adresse du navigateur 'img/logoPod.svg'
CSS_OVERRIDE Si souhaitée, à créer et sauvegarder dans le répertoire static de 'lapplciation custom et préciser le chemin d'accès. Par exemple : "custom/etab.css" ''

Configuration application recherche

Property Description Default Value
ES_URL adresse du ou des instances d'Elasticsearch utilisées pour l'indexation et la recherche de vidéo. ['http://127.0.0.1:9200/']

Configuration encodage

Property Description Default Value
FFMPEG commande ffmpeg ffmpeg
FFPROBE commande ffprobe ffprobe
SEGMENT_TARGET_DURATION durée en seconde des segment HLS 2
RATE_MONITOR_BUFFER_RATIO la taille du buffer est égale au bitrate vidéo du rendu multiplié par cette valeur 2
FFMPEG_NB_THREADS nombre de thread possible pour ffmpeg (0 égale maximum possible) 0
GET_INFO_VIDEO Commande utilisée pour récupérer les informations de la première piste video du fichier envoyé "%(ffprobe)s -v quiet -show_format -show_streams -select_streams v:0 -print_format json -i %(source)s"
GET_INFO_AUDIO Commande utilisée pour récupérer les informations de la première piste audio du fichier envoyé "%(ffprobe)s -v quiet -show_format -show_streams -select_streams a:0 -print_format json -i %(source)s"
FFMPEG_STATIC_PARAMS paramètres de la commande ffmpeg utilisés pour encoder toutes les vidéos, peu importe le rendu " -c:a aac -ar 48000 -c:v h264 -profile:v high -pix_fmt yuv420p -crf 20 -sc_threshold 0 -force_key_frames \"expr:gte(t,n_forced*1)\" -deinterlace -threads %(nb_threads)s "
FFMPEG_MISC_PARAMS autres paramètres qui sont placés au début de la commande " -hide_banner -y "
AUDIO_BITRATE bitrate audio pour l'encodage M4A (encodage des fichiers audio envoyés sur la plateforme) 192k
ENCODING_M4A commande utilisée pour l'encodage des fichiers audio envoyés sur la plateforme %(ffmpeg)s -i %(source)s %(misc_params)s -c:a aac -b:a %(audio_bitrate)s -vn -threads %(nb_threads)s \"%(output_dir)s/audio_%(audio_bitrate)s.m4a\"
ENCODE_MP3_CMD commande utilisée pour l'encodage audio pour tous les fichiers envoyés sur la plateforme "%(ffmpeg)s -i %(source)s %(misc_params)s -vn -b:a %(audio_bitrate)s -vn -f mp3 -threads %(nb_threads)s \"%(output_dir)s/audio_%(audio_bitrate)s.mp3\""
EMAIL_ON_ENCODING_COMPLETION Si True, un courriel est envoyé aux managers et à l'auteur (si DEBUG est à True) à la fin de l'encodage True
FILE_UPLOAD_TEMP_DIR Répertoire temporaire pour la création des thumbnails '/tmp'
CELERY_TO_ENCODE Utilisation de Celery pour la gestion des taches d'encodage False

Configuration flux RSS

Property Description Default Value
DEFAULT_DC_COVERAGE couverture du droit pour chaque vidéo TITLE_ETB + " - Town - Country"
DEFAULT_DC_RIGHTS droit par défaut affichés dans le flux RSS si non renseigné "BY-NC-SA"

Configuration application vidéo

Property Description Default Value
RESTRICT_EDIT_VIDEO_ACCESS_TO_STAFF_ONLY Si True, seule les personnes "Staff" peuvent déposer des vidéos sur la plateforme False
DEFAULT_THUMBNAIL image par défaut affichée comme poster ou vignette, utilisée pour présenter la vidéo. Cette image doit se situer dans le répertoire static. 'img/default.png'
ENCODING_CHOICES Encodage possible sur la plateforme. Associé à un rendu dans le cas d'une vidéo. ( ("audio", "audio"), ("360p", "360p"), ("480p", "480p"), ("720p", "720p"), ("1080p", "1080p"), ("playlist", "playlist") )
FORMAT_CHOICES Format d'encodage réalisé sur la plateforme. ( ("video/mp4", 'video/mp4'), ("video/mp2t", 'video/mp2t'), ("video/webm", 'video/webm'), ("audio/mp3", "audio/mp3"), ("audio/wav", "audio/wav"), ("application/x-mpegURL", application/x-mpegURL"), )
LICENCE_CHOICES Licence proposées pour les vidéos. ( ('by', ("Attribution 4.0 International (CC BY 4.0)")), ('by-nd', ("Attribution-NoDerivatives 4.0 " "International (CC BY-ND 4.0)" )), ('by-nc-nd', ( "Attribution-NonCommercial-NoDerivatives 4.0 " "International (CC BY-NC-ND 4.0)" )), ('by-nc', ("Attribution-NonCommercial 4.0 " "International (CC BY-NC 4.0)")), ('by-nc-sa', ( "Attribution-NonCommercial-ShareAlike 4.0 " "International (CC BY-NC-SA 4.0)" )), ('by-sa', ( "Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)")) )
DEFAULT_TYPE_ID Les vidéos créées sans type (par importation par exemple) seront affectées au type par défaut (en général, le type ayant pour identifiant '1' est 'Other') 1
CURSUS_CODES Liste des cursus proposés lors de l'ajout des vidéos. Affichés en dessous d'une vidéos, ils sont aussi utilisés pour affiner la recherche. ( ('0', ("None / All")), ('L', ("Bachelor’s Degree")), ('M', ("Master’s Degree")), ('D', ("Doctorate")), ('1', _("Other")) )
LANG_CHOICES Liste des langues proposées lors de l'ajout des vidéos. Affichés en dessous d'une vidéos, ils sont aussi utilisés pour affiner la recherche. ( settings.PREF_LANG_CHOICES + (('', '----------'),) + settings.ALL_LANG_CHOICES )
VIDEOS_DIR Répertoire par défaut pour le téléversement des vidéos. videos
ENCODE_VIDEO Fonction appelée pour lancer l'encodage des vidéos start_encode
VIDEO_ALLOWED_EXTENSIONS Extension autorisée pour le téléversement sur la plateforme ( '3gp', 'avi', 'divx', 'flv', 'm2p', 'm4v', 'mkv', 'mov', 'mp4', 'mpeg', 'mpg', 'mts', 'wmv', 'mp3', 'ogg', 'wav', 'wma' )
VIDEO_MAX_UPLOAD_SIZE Taille maximum en Go des fichiers téléversés sur la plateforme 1
VIDEO_FORM_FIELDS_HELP_TEXT Ensemble des textes d'aide affichés avec le formulaire d'envoi de vidéo voir pod/video/forms.py
VIDEO_FORM_FIELDS Liste des champs du formulaire d'édition de vidéos affichés __all__
CHANNEL_FORM_FIELDS_HELP_TEXT Ensemble des textes d'aide affichés avec le formulaire d'édition de chaine. voir pod/video/forms.py
THEME_FORM_FIELDS_HELP_TEXT Ensemble des textes d'aide affichés avec le formulaire d'édition de theme. voir pod/video/forms.py

Configuration application recorder (enregistreur)

Property Description Default Value
RECORDER_TYPE Type d'enregistrement géré par la plateforme. Un enregistreur ne peut déposer que des fichier de type proposé par la plateforme. Le traitement se fait en fonction du type de fichier déposé. ( ('video', ('Video')), ('audiovideocast', ('Audiovideocast')), )
DEFAULT_RECORDER_PATH Chemin du répertoire où sont déposés les enregistrements (chemin du serveur FTP) "/data/ftp-pod/ftp/"
DEFAULT_RECORDER_USER_ID Identifiant du propriétaire par défaut (si non spécifié) des enregistrements déposés 1

Configuration application podfile (gestion de fichier)

Property Description Default Value
FILE_ALLOWED_EXTENSIONS Extensions autorisées pour les documents téléversés dans le gestionnaire de fichier ( 'doc', 'docx', 'odt', 'pdf', 'xls', 'xlsx', 'ods', 'ppt', 'pptx', 'txt', 'html', 'htm', 'vtt', 'srt', 'webm', 'ts', )
IMAGE_ALLOWED_EXTENSIONS Extensions autorisées pour les images téléversés dans le gestionnaire de fichier ( 'jpg', 'jpeg', 'bmp', 'png', 'gif', 'tiff', )
FILE_MAX_UPLOAD_SIZE Poids maximum en Mo par fichier téléversé dans le gestionnaire de fichier 10

Configuration application completion (contributeur, sous-titre, document à télécharger, superposition)

Property Description Default Value
ROLE_CHOICES Liste de rôle possible pour un contributeur ( ('actor', ('actor')), ('author', ('author')), ('designer', ('designer')), ('consultant', ('consultant')), ('contributor', ('contributor')), ('editor', ('editor')), ('speaker', ('speaker')), ('soundman', ('soundman')), ('director', ('director')), ('writer', ('writer')), ('technician', ('technician')), ('voice-over', ('voice-over')), )
KIND_CHOICES Liste de type de piste possible pour une vidéo (sous-titre, légende etc.) ( ('subtitles', ('subtitles')), ('captions', ('captions')), )

Configuration application authentification (Local, CAS et LDAP)

Property Description Default Value
AUTH_TYPE Type d'authentification possible sur votre instance. Pour l'instant local ou cas (('local', _('local')), ('CAS', 'CAS'))
USE_CAS Activation de l'authentification CAS en plus de l'authentification locale False
CAS_SERVER_URL Url du serveur cas de l'établissement. Format http://url_cas sso_cas
CAS_GATEWAY Si True, authentifie automatiquement l'individu si déjà authentifié sur le serveur CAS False
POPULATE_USER Si utilisation de la connection CAS, renseigne les champs du compte de la personne depuis une source externe. Valeur possible : None (pas de renseignement), CAS (renseigne les champs de la personne depuis les informations renvoyées par le CAS), LDAP (Interroge le serveur LDAP pour renseigner les champs du compte de la personne) None
AUTH_CAS_USER_SEARCH variable utilisée pour trouver les informations de l'individu connecté dans le fichier renvoyé par le CAS lors de l'authentification user
USER_CAS_MAPPING_ATTRIBUTES liste de correspondance entre les champs d'un compte de Pod et les champs renvoyés par le CAS { "uid": "uid", "mail": "mail", "last_name": "sn", "first_name": "givenname", "affiliation": "eduPersonAffiliation" }
CREATE_GROUP_FROM_AFFILIATION Si True, des groupes sont créés automatiquement à partir des affiliations des individus qui se connectent sur la plateforme et l'individu qui se connecte est ajouté automatiquement à ses groupes False
AFFILIATION_STAFF Les personnes ayant pour affiliation les valeurs renseignées dans cette variable sont automatiquement la valeur staff de leur compte à True ('faculty', 'employee', 'staff')
AFFILIATION Valeurs possibles pour l'Affiliation du compte ( ('student', ('student')), ('faculty', ('faculty')), ('staff', ('staff')), ('employee', ('employee')), ('member', ('member')), ('affiliate', ('affiliate')), ('alum', ('alum')), ('library-walk-in', ('library-walk-in')), ('researcher', ('researcher')), ('retired', ('retired')), ('emeritus', ('emeritus')), ('teacher', ('teacher')), ('registered-reader', _('registered-reader')) )
LDAP_SERVER Information de connection au serveur LDAP {'url': '', 'port': 389, 'use_ssl': False}
AUTH_LDAP_BIND_DN Identifiant (DN) du compte pour se connecter au serveur LDAP ''
AUTH_LDAP_BIND_PASSWORD Mot de passe du compte pour se connecter au serveur LDAP ''
AUTH_LDAP_USER_SEARCH Filtre LDAP permettant la recherche de l'individu dans le serveur LDAP ('ou=people,dc=univ,dc=fr', "(uid=%(uid)s)")
USER_LDAP_MAPPING_ATTRIBUTES liste de correspondance entre les champs d'un compte de Pod et les champs renvoyés par le LDAP { "uid": "uid", "mail": "mail", "last_name": "sn", "first_name": "givenname", "primaryAffiliation": "eduPersonPrimaryAffiliation", "affiliations": "eduPersonAffiliation" }

Si utilisation de l'authentification CAS, il y a une modification à faire dans l'application tierce (django-cas-sso==1.1.7) permettant cette authentification. Cette application est proposée par l'université de Strasbourg mais un problème compatibilité avec Python 3.X empèche sa parfaite utilisation (avec le gateway). Voici la modification à faire :

(django_pod) pod@pod:~/django_projects/podv2$ vim /home/pod/.virtualenvs/django_pod/lib/python3.5/site-packages/django_cas/views.py
[...]L.34
        if gateway:
            """ If gateway, capture params and reencode them before returning a url """
            """
            gateway_params = [(REDIRECT_FIELD_NAME, redirect_to), ('gatewayed','true')]
            query_dict = request.GET.copy()
            try:
                del query_dict['ticket']
            except:
                pass
            query_list = query_dict.items()
            #remove duplicate params
            for item in query_list:
                for index, item2 in enumerate(gateway_params):
                    if item[0] == item2[0]:
                        gateway_params.pop(index)
            extra_params = gateway_params + query_list

            extra_params = set(gateway_params).union(set(query_dict.items()))

            #Sort params by key name so they are always in the same order.
            sorted_params = sorted(extra_params, key=itemgetter(0))
            service += urlencode(sorted_params)
            """
            gateway_params = { REDIRECT_FIELD_NAME: redirect_to, 'gatewayed':'true'}
            query_dict = request.GET.copy()
            try:
                del query_dict['ticket']
            except:
                pass
            if query_dict.get(REDIRECT_FIELD_NAME):
                del gateway_params[REDIRECT_FIELD_NAME]
            if query_dict.get('gatewayed'):
                del gateway_params['gatewayed']
            query_dict.update(gateway_params)
            service += urlencode(query_dict)
        else:
            service += urlencode({REDIRECT_FIELD_NAME: redirect_to})
[...]