diff --git a/README.md b/README.md index c1adbb2..0beb6ab 100644 --- a/README.md +++ b/README.md @@ -30,9 +30,10 @@ A modern open source flat-file CMS * You can access the administration panel at `yourdomain.tld/path/admin`. Users created within YunoHost can log in, provided their were given the appropriate permissions: * To make users administrators, give them the `grav.admin` permission. * To allow users to log in, without extended rights, give them the `grav.user` permission. -* Grav provides a command line interface. Refer to its documentation, but you will need to specifically call for the PHP version currently used for the app: - * Go to your app's directory: `cd /var/www/grav` (or `grav__2`, etc. if you have multiple ones) - * `php7.3 bin/grav ...` or `php7.3 bin/gpm ...` +* Grav offers an SSH or SFTP access, which can be enabled in its YunoHost admin configuration panel. + * You can thus use its GPM command line binary. + Refer to is documentation, but bear in mind you need to call it by specifying the PHP version used by the app: + `php7.3 bin/grav ...` or `php7.3 bin/gpm ...` * You can install plugins through the admin panel, or through the GPM. * If installing Grav at the root of a domain, bear in mind that paths starting by `/yunohost` are reserved. diff --git a/README_fr.md b/README_fr.md index 9c6ddf9..0f08fd1 100644 --- a/README_fr.md +++ b/README_fr.md @@ -30,9 +30,10 @@ Un CMS moderne basé sur des fichiers plats * Vous pouvez accéder au panneau d'adminstration à l'adresse `votredomaine.tld/votrechemin/admin`. Les utilisateurs créés dans YunoHost peuvent se connecter, à condition de leur avoir octroyé la permission adéquate: * `grav.admin` pour qu'ils soient administrateur de Grav ; * `grav.user` pour qu'ils puissent se connecter, mais sans droit étendu. -* Grav dispose d'une interface par ligne de commande. Référez-vous à sa documentation, mais sachez que vous devrez préciser la version de PHP utilisée par l'app: - * Allez dans le répertoire de Grav: `cd /var/www/grav` (ou `grav__2`, etc. si vous avez de multiples instances) - * `php7.3 bin/grav ...` ou `php7.3 bin/gpm ...` +* Grav offre un accès par SSH ou SFTP, activable dans le panneau de configuration de l'application dans l'administration de YunoHost. + * Vous pouvez ainsi utiliser sa ligne de commande GPM. + Référez-vous à sa documentation, mais sachez que vous devrez préciser la version de PHP utilisée par l'app: + `php7.3 bin/grav ...` ou `php7.3 bin/gpm ...` * Vous pouvez installer les extensions soit via le panneau d'administration, soit via GPM. * Si vous installez Grav à la racin d'un domaine, sachez que les chemins d'accès commançant par `/yunohost` sont réservés. diff --git a/config_panel.toml b/config_panel.toml new file mode 100644 index 0000000..2b1a213 --- /dev/null +++ b/config_panel.toml @@ -0,0 +1,19 @@ +version = "1.0" + +[main] +name = "Grav configuration" + + [main.sftp] + name = "SSH and SFTP access" + + [main.sftp.with_sftp] + ask = "Do you need an SSH and SFTP access?" + type = "boolean" + default = false + + [main.sftp.password] + ask = "Set a password for the SSH and SFTP access" + type = "password" + optional = true + visible = "with_sftp" + help = "If a password already exists, leave blank and it will not be replaced." diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md index 9b37b3c..6369cf6 100644 --- a/doc/DISCLAIMER.md +++ b/doc/DISCLAIMER.md @@ -1,8 +1,9 @@ * You can access the administration panel at `yourdomain.tld/path/admin`. Users created within YunoHost can log in, provided their were given the appropriate permissions: * To make users administrators, give them the `grav.admin` permission. * To allow users to log in, without extended rights, give them the `grav.user` permission. -* Grav provides a command line interface. Refer to its documentation, but you will need to specifically call for the PHP version currently used for the app: - * Go to your app's directory: `cd /var/www/grav` (or `grav__2`, etc. if you have multiple ones) - * `php7.3 bin/grav ...` or `php7.3 bin/gpm ...` +* Grav offers an SSH or SFTP access, which can be enabled in its YunoHost admin configuration panel. + * You can thus use its GPM command line binary. + Refer to is documentation, but bear in mind you need to call it by specifying the PHP version used by the app: + `php7.3 bin/grav ...` or `php7.3 bin/gpm ...` * You can install plugins through the admin panel, or through the GPM. * If installing Grav at the root of a domain, bear in mind that paths starting by `/yunohost` are reserved. diff --git a/doc/DISCLAIMER_fr.md b/doc/DISCLAIMER_fr.md index 7468b27..e21bd6b 100644 --- a/doc/DISCLAIMER_fr.md +++ b/doc/DISCLAIMER_fr.md @@ -1,8 +1,9 @@ * Vous pouvez accéder au panneau d'adminstration à l'adresse `votredomaine.tld/votrechemin/admin`. Les utilisateurs créés dans YunoHost peuvent se connecter, à condition de leur avoir octroyé la permission adéquate: * `grav.admin` pour qu'ils soient administrateur de Grav ; * `grav.user` pour qu'ils puissent se connecter, mais sans droit étendu. -* Grav dispose d'une interface par ligne de commande. Référez-vous à sa documentation, mais sachez que vous devrez préciser la version de PHP utilisée par l'app: - * Allez dans le répertoire de Grav: `cd /var/www/grav` (ou `grav__2`, etc. si vous avez de multiples instances) - * `php7.3 bin/grav ...` ou `php7.3 bin/gpm ...` +* Grav offre un accès par SSH ou SFTP, activable dans le panneau de configuration de l'application dans l'administration de YunoHost. + * Vous pouvez ainsi utiliser sa ligne de commande GPM. + Référez-vous à sa documentation, mais sachez que vous devrez préciser la version de PHP utilisée par l'app: + `php7.3 bin/grav ...` ou `php7.3 bin/gpm ...` * Vous pouvez installer les extensions soit via le panneau d'administration, soit via GPM. * Si vous installez Grav à la racin d'un domaine, sachez que les chemins d'accès commançant par `/yunohost` sont réservés. diff --git a/scripts/_common.sh b/scripts/_common.sh index f10bf59..51e19ec 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -13,3 +13,38 @@ pkg_dependencies="php${YNH_PHP_VERSION}-zip php${YNH_PHP_VERSION}-mbstring php${ #================================================= # EXPERIMENTAL HELPERS #================================================= + +ynh_system_user_add_group() { + # Declare an array to define the options of this helper. + local legacy_args=uhs + local -A args_array=([u]=username= [g]=groups=) + local username + local groups + + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + groups="${groups:-}" + + local group + for group in $groups; do + usermod -a -G "$group" "$username" + done +} + + +ynh_system_user_del_group() { + # Declare an array to define the options of this helper. + local legacy_args=uhs + local -A args_array=([u]=username= [g]=groups=) + local username + local groups + + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + groups="${groups:-}" + + local group + for group in $groups; do + gpasswd -d "$username" "$group" + done +} diff --git a/scripts/config b/scripts/config new file mode 100644 index 0000000..756c326 --- /dev/null +++ b/scripts/config @@ -0,0 +1,72 @@ +#!/bin/bash + +#================================================= +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +ynh_abort_if_errors + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +final_path=$(ynh_app_setting_get $app final_path) + +#================================================= +# SPECIFIC GETTERS FOR TOML SHORT KEY +#================================================= + +#================================================= +# SPECIFIC VALIDATORS FOR TOML SHORT KEYS +#================================================= + +#================================================= +# SPECIFIC SETTERS FOR TOML SHORT KEYS +#================================================= + +set__password() { + if [ "$password" == "" ] + then + ynh_app_setting_set --app=$app --key=password --value="$password" + fi +} + +#================================================= +# GENERIC FINALIZATION +#================================================= + +ynh_app_config_validate() { + _ynh_app_config_validate + + if [ "${changed[with_sftp]}" == "true" ] && [ $with_sftp -eq 1 ] && [ "$password" == "" ] + then + ynh_die --message="You need to set a password to enable SSH and SFTP" + fi +} + +ynh_app_config_apply() { + _ynh_app_config_apply + + if [ "${changed[with_sftp]}" == "true" ] && [ $with_sftp -eq 1 ] + then + ynh_system_user_add_group --username=$app --groups="sftp.app ssh.app" + usermod --shell /bin/bash $app + + if [ ! "$password" == "" ] + then + chpasswd <<< "${app}:${password}" + fi + elif [ "${changed[with_sftp]}" == "true" ] && [ $with_sftp -eq 0 ] + then + ynh_system_user_del_group --username=$app --groups="sftp.app ssh.app" + usermod --shel /usr/sbin/nologin $app + fi + +} + +ynh_app_config_run $1 diff --git a/scripts/install b/scripts/install index c34f502..87e836e 100644 --- a/scripts/install +++ b/scripts/install @@ -48,6 +48,8 @@ ynh_app_setting_set --app=$app --key=domain --value=$domain ynh_app_setting_set --app=$app --key=path --value=$path_url ynh_app_setting_set --app=$app --key=admin --value=$admin ynh_app_setting_set --app=$app --key=language --value=$language +ynh_app_setting_set --app=$app --key=with_sftp --value="false" +ynh_app_setting_set --app=$app --key=password --value=$(ynh_string_random) #================================================= # INSTALL DEPENDENCIES diff --git a/scripts/upgrade b/scripts/upgrade index 853f65d..4abb584 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -25,6 +25,9 @@ language=$(ynh_app_setting_get --app=$app --key=language) fpm_footprint=$(ynh_app_setting_get --app=$app --key=fpm_footprint) fpm_usage=$(ynh_app_setting_get --app=$app --key=fpm_usage) +with_sftp=$(ynh_app_setting_get --app=$app --key=with_sftp) +password=$(ynh_app_setting_get --app=$app --key=password) + #================================================= # CHECK VERSION #================================================= @@ -79,6 +82,12 @@ if [ -z "$fpm_usage" ]; then ynh_app_setting_set --app=$app --key=fpm_usage --value=$fpm_usage fi +# If with_sftp or password don't exist, create them +if [ -z "$with_sftp" ] || [ -z "$password" ]; then + ynh_app_setting_set --app=$app --key=with_sftp --value="false" + ynh_app_setting_set --app=$app --key=password --value=$(ynh_string_random) +fi + #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #=================================================