#!/bin/bash readonly MEDIA_GROUP=multimedia readonly MEDIA_DIRECTORY=/home/yunohost.multimedia # Initialize the multimedia directory system # # usage: ynh_multimedia_build_main_dir # # Requires YunoHost version 4.2 or higher. ynh_multimedia_build_main_dir() { ## Création du groupe multimedia groupadd -f $MEDIA_GROUP ## Création des dossiers génériques mkdir -p "$MEDIA_DIRECTORY" mkdir -p "$MEDIA_DIRECTORY/share" mkdir -p "$MEDIA_DIRECTORY/share/Music" mkdir -p "$MEDIA_DIRECTORY/share/Picture" mkdir -p "$MEDIA_DIRECTORY/share/Video" mkdir -p "$MEDIA_DIRECTORY/share/eBook" ## Création des dossiers utilisateurs for user in $(yunohost user list --output-as json | jq -r '.users | keys[]'); do mkdir -p "$MEDIA_DIRECTORY/$user" mkdir -p "$MEDIA_DIRECTORY/$user/Music" mkdir -p "$MEDIA_DIRECTORY/$user/Picture" mkdir -p "$MEDIA_DIRECTORY/$user/Video" mkdir -p "$MEDIA_DIRECTORY/$user/eBook" ln -sfn "$MEDIA_DIRECTORY/share" "$MEDIA_DIRECTORY/$user/Share" # Création du lien symbolique dans le home de l'utilisateur. #link will only be created if the home directory of the user exists and if it's located in '/home' folder local user_home="$(getent passwd $user | cut -d: -f6 | grep '^/home/')" if [[ -d "$user_home" ]]; then ln -sfn "$MEDIA_DIRECTORY/$user" "$user_home/Multimedia" fi # Propriétaires des dossiers utilisateurs. chown -R $user "$MEDIA_DIRECTORY/$user" done # Default yunohost hooks for post_user_create,delete will take care # of creating/deleting corresponding multimedia folders when users # are created/deleted in the future... ## Application des droits étendus sur le dossier multimedia. # Droit d'écriture pour le groupe et le groupe multimedia en acl et droit de lecture pour other: setfacl -RnL -m g:$MEDIA_GROUP:rwX,g::rwX,o:r-X "$MEDIA_DIRECTORY" || true # Application de la même règle que précédemment, mais par défaut pour les nouveaux fichiers. setfacl -RnL -m d:g:$MEDIA_GROUP:rwX,g::rwX,o:r-X "$MEDIA_DIRECTORY" || true # Réglage du masque par défaut. Qui garantie (en principe...) un droit maximal à rwx. Donc pas de restriction de droits par l'acl. setfacl -RL -m m::rwx "$MEDIA_DIRECTORY" || true } # Add a directory in yunohost.multimedia # # usage: ynh_multimedia_addfolder --source_dir="source_dir" --dest_dir="dest_dir" # # | arg: -s, --source_dir= - Source directory - The real directory which contains your medias. # | arg: -d, --dest_dir= - Destination directory - The name and the place of the symbolic link, relative to "/home/yunohost.multimedia" # # This "directory" will be a symbolic link to a existing directory. # # Requires YunoHost version 4.2 or higher. ynh_multimedia_addfolder() { # Declare an array to define the options of this helper. local legacy_args=sd local -A args_array=([s]=source_dir= [d]=dest_dir=) local source_dir local dest_dir # Manage arguments with getopts ynh_handle_getopts_args "$@" # Ajout d'un lien symbolique vers le dossier à partager ln -sfn "$source_dir" "$MEDIA_DIRECTORY/$dest_dir" ## Application des droits étendus sur le dossier ajouté # Droit d'écriture pour le groupe et le groupe multimedia en acl et droit de lecture pour other: setfacl -RnL -m g:$MEDIA_GROUP:rwX,g::rwX,o:r-X "$source_dir" # Application de la même règle que précédemment, mais par défaut pour les nouveaux fichiers. setfacl -RnL -m d:g:$MEDIA_GROUP:rwX,g::rwX,o:r-X "$source_dir" # Réglage du masque par défaut. Qui garantie (en principe...) un droit maximal à rwx. Donc pas de restriction de droits par l'acl. setfacl -RL -m m::rwx "$source_dir" } # Allow an user to have an write authorisation in multimedia directories # # usage: ynh_multimedia_addaccess user_name # # | arg: -u, --user_name= - The name of the user which gain this access. # # Requires YunoHost version 4.2 or higher. ynh_multimedia_addaccess() { # Declare an array to define the options of this helper. local legacy_args=u declare -Ar args_array=([u]=user_name=) local user_name # Manage arguments with getopts ynh_handle_getopts_args "$@" groupadd -f multimedia usermod -a -G multimedia $user_name }