From a66fccbd5bcccbd800eb21ac7041647309b172eb Mon Sep 17 00:00:00 2001 From: tituspijean Date: Thu, 6 Apr 2023 23:21:57 +0200 Subject: [PATCH 1/3] Support variables in permissions declaration --- src/utils/resources.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/utils/resources.py b/src/utils/resources.py index bd50cca04..c3c4f6555 100644 --- a/src/utils/resources.py +++ b/src/utils/resources.py @@ -17,6 +17,7 @@ # along with this program. If not, see . # import os +import re import copy import shutil import random @@ -562,14 +563,16 @@ class PermissionsResource(AppResource): super().__init__({"permissions": properties}, *args, **kwargs) for perm, infos in self.permissions.items(): - if infos.get("url") and "__DOMAIN__" in infos.get("url", ""): - infos["url"] = infos["url"].replace( - "__DOMAIN__", self.get_setting("domain") - ) - infos["additional_urls"] = [ - u.replace("__DOMAIN__", self.get_setting("domain")) - for u in infos.get("additional_urls", []) - ] + if infos.get("url"): + for variable in re.findall(r"(__[A-Z0-9_]+__)", infos.get("url", "")): + infos["url"] = infos["url"].replace( + variable, self.get_setting(variable.lower().replace("__","")) + ) + for i in range(0, len(infos.get("additional_urls", []))): + for variable in re.findall(r"(__[A-Z0-9_]+__)", infos.get("additional_urls", [])[i])): + infos["additional_urls"][i] = infos["additional_urls"][i].replace( + variable, self.get_setting(variable.lower().replace("__","")) + ) def provision_or_update(self, context: Dict = {}): from yunohost.permission import ( From fa26574b512ee289befdaac66d66cc1cbd973e22 Mon Sep 17 00:00:00 2001 From: tituspijean Date: Thu, 6 Apr 2023 23:32:46 +0200 Subject: [PATCH 2/3] Ooops --- src/utils/resources.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/resources.py b/src/utils/resources.py index c3c4f6555..82c61de8a 100644 --- a/src/utils/resources.py +++ b/src/utils/resources.py @@ -569,7 +569,7 @@ class PermissionsResource(AppResource): variable, self.get_setting(variable.lower().replace("__","")) ) for i in range(0, len(infos.get("additional_urls", []))): - for variable in re.findall(r"(__[A-Z0-9_]+__)", infos.get("additional_urls", [])[i])): + for variable in re.findall(r"(__[A-Z0-9_]+__)", infos.get("additional_urls", [])[i]): infos["additional_urls"][i] = infos["additional_urls"][i].replace( variable, self.get_setting(variable.lower().replace("__","")) ) From 8ca756dbd362e2c36e0d8df4fc5ba694e5ed917b Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Tue, 11 Apr 2023 13:57:50 +0200 Subject: [PATCH 3/3] appsv2: simplify code to hydrate url/additional_urls with app settings --- src/utils/resources.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/utils/resources.py b/src/utils/resources.py index 82c61de8a..876fe46a4 100644 --- a/src/utils/resources.py +++ b/src/utils/resources.py @@ -17,7 +17,6 @@ # along with this program. If not, see . # import os -import re import copy import shutil import random @@ -562,17 +561,15 @@ class PermissionsResource(AppResource): super().__init__({"permissions": properties}, *args, **kwargs) + from yunohost.app import _get_app_settings, _hydrate_app_template + + settings = _get_app_settings(self.app) for perm, infos in self.permissions.items(): - if infos.get("url"): - for variable in re.findall(r"(__[A-Z0-9_]+__)", infos.get("url", "")): - infos["url"] = infos["url"].replace( - variable, self.get_setting(variable.lower().replace("__","")) - ) - for i in range(0, len(infos.get("additional_urls", []))): - for variable in re.findall(r"(__[A-Z0-9_]+__)", infos.get("additional_urls", [])[i]): - infos["additional_urls"][i] = infos["additional_urls"][i].replace( - variable, self.get_setting(variable.lower().replace("__","")) - ) + if infos.get("url") and "__" in infos.get("url"): + infos["url"] = _hydrate_app_template(infos["url"], settings) + + if infos.get("additional_urls"): + infos["additional_urls"] = [_hydrate_app_template(url) for url in infos["additional_urls"]] def provision_or_update(self, context: Dict = {}): from yunohost.permission import (