Page tree
Skip to end of metadata
Go to start of metadata

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

PropertyDescriptionDefault Value
SECRET_KEYLa 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'
DEBUGUne 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/#debugTrue
ALLOWED_HOSTSUne 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_AGEL’âge des cookies de sessions, en secondes. https://docs.djangoproject.com/fr/1.11/ref/settings/#session-cookie-age14400
SESSION_EXPIRE_AT_BROWSER_CLOSEIndique s’il faut que la session expire lorsque l’utilisateur ferme son navigateur. https://docs.djangoproject.com/fr/1.11/ref/settings/#session-cookie-ageTrue
ADMINSUne 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'),)
MANAGERSDans 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
DATABASESUn 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_CODELangue par défaut si non détectéefr
LANGUAGESLangue disponible et traduite

( ('fr', 'Français'), ('en', 'English'), ('nl', 'Dutch (Netherlands)'))

TIME_ZONEUne chaîne représentant le fuseau horaire pour cette installation. https://docs.djangoproject.com/fr/1.11/ref/settings/#std:setting-TIME_ZONEUTC
FILE_UPLOAD_TEMP_DIRLe 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_ROOTLe 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_ROOTChemin 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_HOSTnom du serveur smtpsmtp.univ.fr
EMAIL_PORTport d'écoute du serveur smtp25
SERVER_EMAILcourriel utilisé par défaut pour les envois automatique (erreur de code etc.)noreply@univ.fr
DEFAULT_FROM_EMAILcourriel utilisé par défaut pour les envois de courriel (contact, encodage etc.)noreply@univ.fr
MENUBAR_HIDE_INACTIVE_OWNERSLes utilisateurs inactif ne sont plus affichés dans la barre de menu utilisateurTrue
MENUBAR_SHOW_STAFF_OWNERS_ONLYLes utilisateurs non staff ne sont plus affichés dans la barre de menu utilisateurFalse
HOMEPAGE_SHOWS_PASSWORDEDAfficher les vidéos dont l'accès est protégé par mot de passe sur la page d'accueilFalse
HOMEPAGE_SHOWS_RESTRICTEDAfficher les vidéos dont l'accès est protégé par authentification sur la page d'accueilFalse
FORCE_LOWERCASE_TAGSLes mots clés saisis lors de l'ajout de vidéo sont convertis automatiquement en minusculeTrue
MAX_TAG_LENGTHLes mots clés saisis lors de l'ajout de vidéo ne peuvent dépassé la longueur saisie50
USE_PODFILEUtiliser 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_APPSListe des applications tierces accessibles.[]
FILES_DIRNom du répertoire racine ou les fichiers "complémentaires" (hors videos etc.) sont téléversés.files
SUBJECT_CHOICESChoix 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)')) )
USE_RGPDSi True, l'onglet Utilisateur ainsi que le filtre utilisateur ne sont plus disponibles en anonyme (compatibilité avec le RGPD)False

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' : ''
}

PropertyDescriptionDefault Value
TITLE_SITETitre du site.'Pod'
TITLE_ETBTitre de l'etablissement.'University name'
LOGO_SITELogo affiché en haut à gauche sur toutes les pages. Doit se situer dans le répertoire static'img/logoPod.svg'
LOGO_ETBLogo affiché dans le footer sur toutes les pages. Doit se situer dans le répertoire static'img/logo_etb.svg'
LOGO_PLAYERLogo affiché sur le player video. Doit se situer dans le répertoire static'img/logoPod.svg'
LINK_PLAYERLien de destination du logo affiché sur le player''
FOOTER_TEXTTexte 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>') )('',)
FAVICONIcon affiché dans la barre d'adresse du navigateur'img/logoPod.svg'
CSS_OVERRIDESi 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

PropertyDescriptionDefault Value
ES_URLadresse du ou des instances d'Elasticsearch utilisées pour l'indexation et la recherche de vidéo.['http://127.0.0.1:9200/']
ES_INDEXValeur pour l’index de ElasticSearchpod

Configuration encodage

PropertyDescriptionDefault Value
FFMPEGcommande ffmpegffmpeg
FFPROBEcommande ffprobeffprobe
SEGMENT_TARGET_DURATIONdurée en seconde des segment HLS2
RATE_MONITOR_BUFFER_RATIOla taille du buffer est égale au bitrate vidéo du rendu multiplié par cette valeur2
FFMPEG_NB_THREADSnombre de thread possible pour ffmpeg (0 égale maximum possible)0
GET_INFO_VIDEOCommande 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_AUDIOCommande 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_PARAMSparamè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_PARAMSautres paramètres qui sont placés au début de la commande" -hide_banner -y "
AUDIO_BITRATEbitrate audio pour l'encodage M4A (encodage des fichiers audio envoyés sur la plateforme)192k
ENCODING_M4Acommande 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_CMDcommande 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_COMPLETIONSi True, un courriel est envoyé aux managers et à l'auteur (si DEBUG est à True) à la fin de l'encodageTrue
FILE_UPLOAD_TEMP_DIRRépertoire temporaire pour la création des thumbnails'/tmp'
CELERY_TO_ENCODEUtilisation de Celery pour la gestion des taches d'encodageFalse

Configuration flux RSS

PropertyDescriptionDefault Value
DEFAULT_DC_COVERAGEcouverture du droit pour chaque vidéoTITLE_ETB + " - Town - Country"
DEFAULT_DC_RIGHTSdroit par défaut affichés dans le flux RSS si non renseigné"BY-NC-SA"

Configuration application vidéo

PropertyDescriptionDefault Value
RESTRICT_EDIT_VIDEO_ACCESS_TO_STAFF_ONLYSi True, seule les personnes "Staff" peuvent déposer des vidéos sur la plateformeFalse
DEFAULT_THUMBNAILimage 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_CHOICESEncodage 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_CHOICESFormat 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_CHOICESLicence 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_IDLes 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_CODESListe 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_CHOICESListe 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_DIRRépertoire par défaut pour le téléversement des vidéos.videos
ENCODE_VIDEOFonction appelée pour lancer l'encodage des vidéosstart_encode
VIDEO_ALLOWED_EXTENSIONSExtension 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_SIZETaille maximum en Go des fichiers téléversés sur la plateforme1
VIDEO_FORM_FIELDS_HELP_TEXTEnsemble des textes d'aide affichés avec le formulaire d'envoi de vidéovoir pod/video/forms.py
VIDEO_FORM_FIELDSListe des champs du formulaire d'édition de vidéos affichés__all__
CHANNEL_FORM_FIELDS_HELP_TEXTEnsemble des textes d'aide affichés avec le formulaire d'édition de chaine.voir pod/video/forms.py
THEME_FORM_FIELDS_HELP_TEXTEnsemble des textes d'aide affichés avec le formulaire d'édition de theme.voir pod/video/forms.py

Configuration application recorder (enregistreur)

PropertyDescriptionDefault Value
RECORDER_TYPEType 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_PATHChemin du répertoire où sont déposés les enregistrements (chemin du serveur FTP)"/data/ftp-pod/ftp/"
DEFAULT_RECORDER_USER_IDIdentifiant du propriétaire par défaut (si non spécifié) des enregistrements déposés1

Configuration application podfile (gestion de fichier)

PropertyDescriptionDefault Value
FILE_ALLOWED_EXTENSIONSExtensions 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_EXTENSIONSExtensions autorisées pour les images téléversés dans le gestionnaire de fichier( 'jpg', 'jpeg', 'bmp', 'png', 'gif', 'tiff', )
FILE_MAX_UPLOAD_SIZEPoids maximum en Mo par fichier téléversé dans le gestionnaire de fichier10

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

PropertyDescriptionDefault Value
ROLE_CHOICESListe 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_CHOICESListe 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)

PropertyDescriptionDefault Value
AUTH_TYPEType d'authentification possible sur votre instance. Pour l'instant local ou cas(('local', _('local')), ('CAS', 'CAS'))
USE_CASActivation de l'authentification CAS en plus de l'authentification localeFalse
CAS_SERVER_URLUrl du serveur cas de l'établissement. Format http://url_cassso_cas
CAS_GATEWAYSi True, authentifie automatiquement l'individu si déjà authentifié sur le serveur CASFalse
POPULATE_USERSi 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_SEARCHvariable utilisée pour trouver les informations de l'individu connecté dans le fichier renvoyé par le CAS lors de l'authentificationuser
USER_CAS_MAPPING_ATTRIBUTESliste 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_AFFILIATIONSi 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 groupesFalse
AFFILIATION_STAFFLes personnes ayant pour affiliation les valeurs renseignées dans cette variable sont automatiquement la valeur staff de leur compte à True('faculty', 'employee', 'staff')
AFFILIATIONValeurs 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_SERVERInformation de connection au serveur LDAP{'url': '', 'port': 389, 'use_ssl': False}
AUTH_LDAP_BIND_DNIdentifiant (DN) du compte pour se connecter au serveur LDAP''
AUTH_LDAP_BIND_PASSWORDMot de passe du compte pour se connecter au serveur LDAP''
AUTH_LDAP_USER_SEARCHFiltre LDAP permettant la recherche de l'individu dans le serveur LDAP('ou=people,dc=univ,dc=fr', "(uid=%(uid)s)")
USER_LDAP_MAPPING_ATTRIBUTESliste 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})
[...]
  • No labels