Merge pull request #2060 from pbiering/sharing-info-overlay

sharing info hook extension related to properties overlay
This commit is contained in:
Peter Bieringer
2026-03-30 06:41:36 +02:00
committed by GitHub
3 changed files with 22 additions and 4 deletions

View File

@@ -253,7 +253,7 @@ Can be selected by `HTTP_ACCEPT` - default is equal to provided `CONTENT_TYPE`
##### API Hook "info" ##### API Hook "info"
Shows what kind of ShareTypes are supported Shows what is active/supported like ShareTypes(Feature), Conversions or permission to create or use properties overlay (depending on config options)
* Output: text/plain|application/json * Output: text/plain|application/json
@@ -270,6 +270,8 @@ PermittedCreateCollectionByMap=True
FeatureEnabledCollectionByToken=True FeatureEnabledCollectionByToken=True
PermittedCreateCollectionByToken=True PermittedCreateCollectionByToken=True
SupportedConversions=(bday none) SupportedConversions=(bday none)
PermittedPropertiesOverlay=True
SupportedPropertiesOverlay=(C:calendar-description ICAL:calendar-color CR:addressbook-description INF:addressbook-color D:displayname)
``` ```
* json->json, parsed with `jq` * json->json, parsed with `jq`
@@ -284,7 +286,9 @@ curl -u user:$userpw --silent -H "accept: application/json" -d "" http://localho
"PermittedCreateCollectionByMap": true, "PermittedCreateCollectionByMap": true,
"FeatureEnabledCollectionByToken": true, "FeatureEnabledCollectionByToken": true,
"PermittedCreateCollectionByToken": true, "PermittedCreateCollectionByToken": true,
"SupportedConversions": ["bday", "none"] "SupportedConversions": ["bday", "none"],
"PermittedPropertiesOverlay": true,
"SupportedPropertiesOverlay": ["C:calendar-description", "ICAL:calendar-color", "CR:addressbook-description", "INF:addressbook-color", "D:displayname"]
} }
``` ```

View File

@@ -117,6 +117,8 @@ API_TYPES_V1: dict[str, type] = {
"Conversion": str, "Conversion": str,
"Actions": dict, "Actions": dict,
"SupportedConversions": list, "SupportedConversions": list,
"PermittedPropertiesOverlay": bool,
"SupportedPropertiesOverlay": list,
} }
@@ -1261,8 +1263,10 @@ class BaseSharing:
if ShareType in ["all", "token"]: if ShareType in ["all", "token"]:
answer['FeatureEnabledCollectionByToken'] = self.sharing_collection_by_token answer['FeatureEnabledCollectionByToken'] = self.sharing_collection_by_token
answer['PermittedCreateCollectionByToken'] = self.permit_create_token answer['PermittedCreateCollectionByToken'] = self.permit_create_token
if ShareType in ["all", "map", "token"]: if ShareType in SHARE_TYPES:
answer['SupportedConversions'] = CONVERSIONS_WHITELIST answer['SupportedConversions'] = CONVERSIONS_WHITELIST
answer['PermittedPropertiesOverlay'] = self.permit_properties_overlay
answer['SupportedPropertiesOverlay'] = OVERLAY_PROPERTIES_WHITELIST
# action: TOGGLE # action: TOGGLE
elif action in API_SHARE_TOGGLES_V1: elif action in API_SHARE_TOGGLES_V1:

View File

@@ -366,6 +366,7 @@ class TestSharingApiSanity(BaseTest):
"collection_by_map": "True", "collection_by_map": "True",
"collection_by_token": "True", "collection_by_token": "True",
"permit_create_map": "True", "permit_create_map": "True",
"permit_properties_overlay": "True",
"permit_create_token": "True"} "permit_create_token": "True"}
}) })
logging.info("\n*** check API hook: info/all") logging.info("\n*** check API hook: info/all")
@@ -376,7 +377,16 @@ class TestSharingApiSanity(BaseTest):
assert answer_dict['FeatureEnabledCollectionByToken'] is True, f'FeatureEnabledCollectionByToken {db_type}' assert answer_dict['FeatureEnabledCollectionByToken'] is True, f'FeatureEnabledCollectionByToken {db_type}'
assert answer_dict['PermittedCreateCollectionByMap'] is True, f'PermittedCreateCollectionByMap {db_type}' assert answer_dict['PermittedCreateCollectionByMap'] is True, f'PermittedCreateCollectionByMap {db_type}'
assert answer_dict['PermittedCreateCollectionByToken'] is True, f'PermittedCreateCollectionByToken {db_type}' assert answer_dict['PermittedCreateCollectionByToken'] is True, f'PermittedCreateCollectionByToken {db_type}'
assert answer_dict['SupportedConversions'] == ["bday", "none"] assert answer_dict['SupportedConversions'] == list(sharing.CONVERSIONS_WHITELIST)
assert answer_dict['PermittedPropertiesOverlay'] is True
assert answer_dict['SupportedPropertiesOverlay'] == list(sharing.OVERLAY_PROPERTIES_WHITELIST)
logging.info("\n*** check API hook: info/all (2)")
self.configure({"sharing": {"permit_properties_overlay": "False"}})
json_dict = {}
_, headers, answer = self._sharing_api_json("all", "info", check=200, login="owner:ownerpw", json_dict=json_dict)
answer_dict = json.loads(answer)
assert answer_dict['PermittedPropertiesOverlay'] is False
def test_sharing_api_list_with_auth(self) -> None: def test_sharing_api_list_with_auth(self) -> None:
"""POST/list with authentication.""" """POST/list with authentication."""