diff --git a/scripts/_common.sh b/scripts/_common.sh index 8bb05b4..b062844 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -18,3 +18,38 @@ pkg_dependencies="deb1 deb2" #================================================= # FUTURE OFFICIAL HELPERS #================================================= + +# Check if a permission exists +# +# While waiting for this new helper https://github.com/YunoHost/yunohost/pull/905 +# We have to use another one because the new helper use a new YunoHost command, not available for now. +# +# usage: ynh_permission_has_user --permission=permission --user=user +# | arg: -p, --permission - the permission to check +# | arg: -u, --user - the user seek in the permission +# +# example: ynh_permission_has_user --permission=main --user=visitors +# +# Requires YunoHost version 3.7.1 or higher. +ynh_permission_has_user() { + local legacy_args=pu + # Declare an array to define the options of this helper. + declare -Ar args_array=( [p]=permission= [u]=user= ) + local permission + local user + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + + if ! ynh_permission_exists --permission=$permission + then + return 1 + fi + + # List all permissions + # Filter only the required permission with a multiline sed (Here a cut from the permission to the next one), remove the url and his value + perm="$(yunohost user permission list --full --output-as plain | sed --quiet "/^#$app.$permission/,/^#[[:alnum:]]/p" | sed "/^##url/,+1d")" + # Remove all lines starting by # (got from the plain output before) + allowed_users="$(echo "$perm" | grep --invert-match '^#')" + # Grep the list of users an return the result if the user is indeed into the list + echo "$allowed_users" | grep --quiet --word "$user" +} diff --git a/scripts/upgrade b/scripts/upgrade index 97815e3..544b891 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -59,17 +59,19 @@ fi is_public=$(ynh_app_setting_get --app=$app --key=is_public) if [ -n "$is_public" ]; then - # Remove skipped_uris - ynh_app_setting_delete --app=$app --key=skipped_uris # Remove unprotected_uris ynh_app_setting_delete --app=$app --key=unprotected_uris # Remove protected_uris ynh_app_setting_delete --app=$app --key=protected_uris # Removing skipped/unprotected_uris under certain conditions, remove the visitors group added during the migration process of 3.7 - # If the app was public, add visitors again to the main permission - if [ $is_public -eq 1 ]; then + # Remove skipped_uris. If the app was public, add visitors again to the main permission + if ynh_permission_has_user --permission=main --user=visitors + then + ynh_app_setting_delete --app=$app --key=skipped_uris ynh_permission_update --permission "main" --add "visitors" + else + ynh_app_setting_delete --app=$app --key=skipped_uris fi ynh_app_setting_delete --app=$app --key=is_public fi