mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Kill the old 'unprotected/protected/skipped' setting hell
This commit is contained in:
parent
276cf11c4d
commit
22681a4f24
2 changed files with 3 additions and 130 deletions
|
@ -18,11 +18,7 @@ ynh_app_setting_get() {
|
||||||
ynh_handle_getopts_args "$@"
|
ynh_handle_getopts_args "$@"
|
||||||
app="${app:-$_globalapp}"
|
app="${app:-$_globalapp}"
|
||||||
|
|
||||||
if [[ $key =~ (unprotected|protected|skipped)_ ]]; then
|
ynh_app_setting "get" "$app" "$key"
|
||||||
yunohost app setting $app $key
|
|
||||||
else
|
|
||||||
ynh_app_setting "get" "$app" "$key"
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Set an application setting
|
# Set an application setting
|
||||||
|
@ -45,11 +41,7 @@ ynh_app_setting_set() {
|
||||||
ynh_handle_getopts_args "$@"
|
ynh_handle_getopts_args "$@"
|
||||||
app="${app:-$_globalapp}"
|
app="${app:-$_globalapp}"
|
||||||
|
|
||||||
if [[ $key =~ (unprotected|protected|skipped)_ ]]; then
|
ynh_app_setting "set" "$app" "$key" "$value"
|
||||||
yunohost app setting $app $key -v $value
|
|
||||||
else
|
|
||||||
ynh_app_setting "set" "$app" "$key" "$value"
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Delete an application setting
|
# Delete an application setting
|
||||||
|
@ -70,11 +62,7 @@ ynh_app_setting_delete() {
|
||||||
ynh_handle_getopts_args "$@"
|
ynh_handle_getopts_args "$@"
|
||||||
app="${app:-$_globalapp}"
|
app="${app:-$_globalapp}"
|
||||||
|
|
||||||
if [[ "$key" =~ (unprotected|skipped|protected)_ ]]; then
|
ynh_app_setting "delete" "$app" "$key"
|
||||||
yunohost app setting $app $key -d
|
|
||||||
else
|
|
||||||
ynh_app_setting "delete" "$app" "$key"
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Small "hard-coded" interface to avoid calling "yunohost app" directly each
|
# Small "hard-coded" interface to avoid calling "yunohost app" directly each
|
||||||
|
|
115
src/app.py
115
src/app.py
|
@ -1492,119 +1492,6 @@ def app_setting(app, key, value=None, delete=False):
|
||||||
"""
|
"""
|
||||||
app_settings = _get_app_settings(app) or {}
|
app_settings = _get_app_settings(app) or {}
|
||||||
|
|
||||||
#
|
|
||||||
# Legacy permission setting management
|
|
||||||
# (unprotected, protected, skipped_uri/regex)
|
|
||||||
#
|
|
||||||
|
|
||||||
is_legacy_permission_setting = any(
|
|
||||||
key.startswith(word + "_") for word in ["unprotected", "protected", "skipped"]
|
|
||||||
)
|
|
||||||
|
|
||||||
if is_legacy_permission_setting:
|
|
||||||
from yunohost.permission import (
|
|
||||||
user_permission_list,
|
|
||||||
user_permission_update,
|
|
||||||
permission_create,
|
|
||||||
permission_delete,
|
|
||||||
permission_url,
|
|
||||||
)
|
|
||||||
|
|
||||||
permissions = user_permission_list(full=True, apps=[app])["permissions"]
|
|
||||||
key_ = key.split("_")[0]
|
|
||||||
permission_name = f"{app}.legacy_{key_}_uris"
|
|
||||||
permission = permissions.get(permission_name)
|
|
||||||
|
|
||||||
# GET
|
|
||||||
if value is None and not delete:
|
|
||||||
return (
|
|
||||||
",".join(permission.get("uris", []) + permission["additional_urls"])
|
|
||||||
if permission
|
|
||||||
else None
|
|
||||||
)
|
|
||||||
|
|
||||||
# DELETE
|
|
||||||
if delete:
|
|
||||||
# If 'is_public' setting still exists, we interpret this as
|
|
||||||
# coming from a legacy app (because new apps shouldn't manage the
|
|
||||||
# is_public state themselves anymore...)
|
|
||||||
#
|
|
||||||
# In that case, we interpret the request for "deleting
|
|
||||||
# unprotected/skipped" setting as willing to make the app
|
|
||||||
# private
|
|
||||||
if (
|
|
||||||
"is_public" in app_settings
|
|
||||||
and "visitors" in permissions[app + ".main"]["allowed"]
|
|
||||||
):
|
|
||||||
if key.startswith("unprotected_") or key.startswith("skipped_"):
|
|
||||||
user_permission_update(app + ".main", remove="visitors")
|
|
||||||
|
|
||||||
if permission:
|
|
||||||
permission_delete(permission_name)
|
|
||||||
|
|
||||||
# SET
|
|
||||||
else:
|
|
||||||
urls = value
|
|
||||||
# If the request is about the root of the app (/), ( = the vast majority of cases)
|
|
||||||
# we interpret this as a change for the main permission
|
|
||||||
# (i.e. allowing/disallowing visitors)
|
|
||||||
if urls == "/":
|
|
||||||
if key.startswith("unprotected_") or key.startswith("skipped_"):
|
|
||||||
permission_url(app + ".main", url="/", sync_perm=False)
|
|
||||||
user_permission_update(app + ".main", add="visitors")
|
|
||||||
else:
|
|
||||||
user_permission_update(app + ".main", remove="visitors")
|
|
||||||
else:
|
|
||||||
urls = urls.split(",")
|
|
||||||
if key.endswith("_regex"):
|
|
||||||
urls = ["re:" + url for url in urls]
|
|
||||||
|
|
||||||
if permission:
|
|
||||||
# In case of new regex, save the urls, to add a new time in the additional_urls
|
|
||||||
# In case of new urls, we do the same thing but inversed
|
|
||||||
if key.endswith("_regex"):
|
|
||||||
# List of urls to save
|
|
||||||
current_urls_or_regex = [
|
|
||||||
url
|
|
||||||
for url in permission["additional_urls"]
|
|
||||||
if not url.startswith("re:")
|
|
||||||
]
|
|
||||||
else:
|
|
||||||
# List of regex to save
|
|
||||||
current_urls_or_regex = [
|
|
||||||
url
|
|
||||||
for url in permission["additional_urls"]
|
|
||||||
if url.startswith("re:")
|
|
||||||
]
|
|
||||||
|
|
||||||
new_urls = urls + current_urls_or_regex
|
|
||||||
# We need to clear urls because in the old setting the new setting override the old one and dont just add some urls
|
|
||||||
permission_url(permission_name, clear_urls=True, sync_perm=False)
|
|
||||||
permission_url(permission_name, add_url=new_urls)
|
|
||||||
else:
|
|
||||||
from yunohost.utils.legacy import legacy_permission_label
|
|
||||||
|
|
||||||
# Let's create a "special" permission for the legacy settings
|
|
||||||
permission_create(
|
|
||||||
permission=permission_name,
|
|
||||||
# FIXME find a way to limit to only the user allowed to the main permission
|
|
||||||
allowed=["all_users"]
|
|
||||||
if key.startswith("protected_")
|
|
||||||
else ["all_users", "visitors"],
|
|
||||||
url=None,
|
|
||||||
additional_urls=urls,
|
|
||||||
auth_header=not key.startswith("skipped_"),
|
|
||||||
label=legacy_permission_label(app, key.split("_")[0]),
|
|
||||||
show_tile=False,
|
|
||||||
protected=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
#
|
|
||||||
# Regular setting management
|
|
||||||
#
|
|
||||||
|
|
||||||
# GET
|
# GET
|
||||||
if value is None and not delete:
|
if value is None and not delete:
|
||||||
return app_settings.get(key, None)
|
return app_settings.get(key, None)
|
||||||
|
@ -1616,8 +1503,6 @@ def app_setting(app, key, value=None, delete=False):
|
||||||
|
|
||||||
# SET
|
# SET
|
||||||
else:
|
else:
|
||||||
if key in ["redirected_urls", "redirected_regex"]:
|
|
||||||
value = yaml.safe_load(value)
|
|
||||||
app_settings[key] = value
|
app_settings[key] = value
|
||||||
|
|
||||||
_set_app_settings(app, app_settings)
|
_set_app_settings(app, app_settings)
|
||||||
|
|
Loading…
Add table
Reference in a new issue