cosmetics
This commit is contained in:
@@ -80,7 +80,7 @@ def xml_proppatch(base_prefix: str, path: str,
|
|||||||
all_props = radicale_item.check_and_sanitize_props(all_props_with_remove)
|
all_props = radicale_item.check_and_sanitize_props(all_props_with_remove)
|
||||||
if sharing and sharing_overlay and _sharing is not None:
|
if sharing and sharing_overlay and _sharing is not None:
|
||||||
# _sharing is not None: always the case, but makes mypy happy
|
# _sharing is not None: always the case, but makes mypy happy
|
||||||
_sharing.update_sharing(ShareType=sharing['ShareType'],
|
_sharing.database_update_sharing(ShareType=sharing['ShareType'],
|
||||||
PathOrToken=sharing['PathOrToken'],
|
PathOrToken=sharing['PathOrToken'],
|
||||||
OwnerOrUser=sharing['User'],
|
OwnerOrUser=sharing['User'],
|
||||||
Properties=cast(Dict[str, str], all_props))
|
Properties=cast(Dict[str, str], all_props))
|
||||||
|
|||||||
@@ -132,36 +132,36 @@ class BaseSharing:
|
|||||||
|
|
||||||
# database tasks
|
# database tasks
|
||||||
self.sharing_db_type = configuration.get("sharing", "type")
|
self.sharing_db_type = configuration.get("sharing", "type")
|
||||||
logger.info("sharing.db_type: %s", self.sharing_db_type)
|
logger.info("sharing.database_type: %s", self.sharing_db_type)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if self.init_database() is False:
|
if self.database_init() is False:
|
||||||
logger.info("sharing disabled as no database is active")
|
logger.info("sharing disabled as no database is active")
|
||||||
self._enabled = False
|
self._enabled = False
|
||||||
return
|
return
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("sharing database cannot be initialized: %r", e)
|
logger.error("sharing database cannot be initialized: %r", e)
|
||||||
exit(1)
|
exit(1)
|
||||||
database_info = self.get_database_info()
|
database_info = self.database_get_info()
|
||||||
if database_info:
|
if database_info:
|
||||||
logger.info("sharing database info: %r", database_info)
|
logger.info("sharing database info: %r", database_info)
|
||||||
else:
|
else:
|
||||||
logger.info("sharing database info: (not provided)")
|
logger.info("sharing database info: (not provided)")
|
||||||
|
|
||||||
# overloadable functions
|
# overloadable database functions
|
||||||
def init_database(self) -> bool:
|
def database_init(self) -> bool:
|
||||||
""" initialize database """
|
""" initialize db """
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def get_database_info(self) -> Union[dict, None]:
|
def database_get_info(self) -> Union[dict, None]:
|
||||||
""" retrieve database information """
|
""" retrieve db information """
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def verify_database(self) -> bool:
|
def database_verify(self) -> bool:
|
||||||
""" verify database information """
|
""" verify db information """
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def list_sharing(self,
|
def database_list_sharing(self,
|
||||||
OwnerOrUser: Union[str, None] = None,
|
OwnerOrUser: Union[str, None] = None,
|
||||||
ShareType: Union[str, None] = None,
|
ShareType: Union[str, None] = None,
|
||||||
PathOrToken: Union[str, None] = None,
|
PathOrToken: Union[str, None] = None,
|
||||||
@@ -174,7 +174,7 @@ class BaseSharing:
|
|||||||
""" retrieve sharing """
|
""" retrieve sharing """
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def get_sharing(self,
|
def database_get_sharing(self,
|
||||||
ShareType: str,
|
ShareType: str,
|
||||||
PathOrToken: str,
|
PathOrToken: str,
|
||||||
OnlyEnabled: bool = True,
|
OnlyEnabled: bool = True,
|
||||||
@@ -182,7 +182,7 @@ class BaseSharing:
|
|||||||
""" retrieve sharing target and attributes by map """
|
""" retrieve sharing target and attributes by map """
|
||||||
return {"status": "not-implemented"}
|
return {"status": "not-implemented"}
|
||||||
|
|
||||||
def create_sharing(self,
|
def database_create_sharing(self,
|
||||||
ShareType: str,
|
ShareType: str,
|
||||||
PathOrToken: str, PathMapped: str,
|
PathOrToken: str, PathMapped: str,
|
||||||
Owner: str, User: str,
|
Owner: str, User: str,
|
||||||
@@ -194,7 +194,7 @@ class BaseSharing:
|
|||||||
""" create sharing """
|
""" create sharing """
|
||||||
return {"status": "not-implemented"}
|
return {"status": "not-implemented"}
|
||||||
|
|
||||||
def update_sharing(self,
|
def database_update_sharing(self,
|
||||||
ShareType: str,
|
ShareType: str,
|
||||||
PathOrToken: str,
|
PathOrToken: str,
|
||||||
OwnerOrUser: Union[str, None] = None,
|
OwnerOrUser: Union[str, None] = None,
|
||||||
@@ -210,7 +210,7 @@ class BaseSharing:
|
|||||||
""" update sharing """
|
""" update sharing """
|
||||||
return {"status": "not-implemented"}
|
return {"status": "not-implemented"}
|
||||||
|
|
||||||
def delete_sharing(self,
|
def database_delete_sharing(self,
|
||||||
ShareType: str,
|
ShareType: str,
|
||||||
PathOrToken: str) -> dict:
|
PathOrToken: str) -> dict:
|
||||||
""" delete sharing """
|
""" delete sharing """
|
||||||
@@ -221,7 +221,7 @@ class BaseSharing:
|
|||||||
""" verify database """
|
""" verify database """
|
||||||
logger.info("sharing database verification begin")
|
logger.info("sharing database verification begin")
|
||||||
logger.info("sharing database verification call: %s", self.sharing_db_type)
|
logger.info("sharing database verification call: %s", self.sharing_db_type)
|
||||||
result = self.verify_database()
|
result = self.database_verify()
|
||||||
if result is not True:
|
if result is not True:
|
||||||
logger.error("sharing database verification call -> PROBLEM: %s", self.sharing_db_type)
|
logger.error("sharing database verification call -> PROBLEM: %s", self.sharing_db_type)
|
||||||
return False
|
return False
|
||||||
@@ -231,7 +231,7 @@ class BaseSharing:
|
|||||||
# check all entries
|
# check all entries
|
||||||
logger.info("sharing database verification content start")
|
logger.info("sharing database verification content start")
|
||||||
with self._storage.acquire_lock("r"):
|
with self._storage.acquire_lock("r"):
|
||||||
for entry in self.list_sharing():
|
for entry in self.database_list_sharing():
|
||||||
logger.debug("analyze: %r", entry)
|
logger.debug("analyze: %r", entry)
|
||||||
if entry['ShareType'] not in SHARE_TYPES_V1:
|
if entry['ShareType'] not in SHARE_TYPES_V1:
|
||||||
logger.error("ShareType not supported: %r", entry['ShareType'])
|
logger.error("ShareType not supported: %r", entry['ShareType'])
|
||||||
@@ -285,7 +285,7 @@ class BaseSharing:
|
|||||||
|
|
||||||
# retrieve collections which are enabled and not hidden by owner+user
|
# retrieve collections which are enabled and not hidden by owner+user
|
||||||
if active:
|
if active:
|
||||||
shared_collection_list = self.list_sharing(
|
shared_collection_list = self.database_list_sharing(
|
||||||
ShareType="map",
|
ShareType="map",
|
||||||
OwnerOrUser=user,
|
OwnerOrUser=user,
|
||||||
User=user,
|
User=user,
|
||||||
@@ -295,7 +295,7 @@ class BaseSharing:
|
|||||||
HiddenByUser=False)
|
HiddenByUser=False)
|
||||||
else:
|
else:
|
||||||
# unconditional
|
# unconditional
|
||||||
shared_collection_list = self.list_sharing(
|
shared_collection_list = self.database_list_sharing(
|
||||||
ShareType="map",
|
ShareType="map",
|
||||||
OwnerOrUser=user,
|
OwnerOrUser=user,
|
||||||
User=user)
|
User=user)
|
||||||
@@ -320,7 +320,7 @@ class BaseSharing:
|
|||||||
# TODO add token validity checks
|
# TODO add token validity checks
|
||||||
if logger.isEnabledFor(logging.DEBUG):
|
if logger.isEnabledFor(logging.DEBUG):
|
||||||
logger.debug("TRACE/sharing/token: supported token found in path: %r (token=%r)", path, match[1])
|
logger.debug("TRACE/sharing/token: supported token found in path: %r (token=%r)", path, match[1])
|
||||||
return self.get_sharing(
|
return self.database_get_sharing(
|
||||||
ShareType="token",
|
ShareType="token",
|
||||||
PathOrToken=match[1])
|
PathOrToken=match[1])
|
||||||
else:
|
else:
|
||||||
@@ -337,7 +337,7 @@ class BaseSharing:
|
|||||||
if self.sharing_collection_by_map:
|
if self.sharing_collection_by_map:
|
||||||
if logger.isEnabledFor(logging.DEBUG):
|
if logger.isEnabledFor(logging.DEBUG):
|
||||||
logger.debug("TRACE/sharing/map/resolver: check path: %r", path)
|
logger.debug("TRACE/sharing/map/resolver: check path: %r", path)
|
||||||
result = self.get_sharing(
|
result = self.database_get_sharing(
|
||||||
ShareType="map",
|
ShareType="map",
|
||||||
PathOrToken=path,
|
PathOrToken=path,
|
||||||
User=user)
|
User=user)
|
||||||
@@ -348,7 +348,7 @@ class BaseSharing:
|
|||||||
parent_path = pathutils.parent_path(path)
|
parent_path = pathutils.parent_path(path)
|
||||||
if logger.isEnabledFor(logging.DEBUG):
|
if logger.isEnabledFor(logging.DEBUG):
|
||||||
logger.debug("TRACE/sharing/map/resolver: check parent path: %r", parent_path)
|
logger.debug("TRACE/sharing/map/resolver: check parent path: %r", parent_path)
|
||||||
result = self.get_sharing(
|
result = self.database_get_sharing(
|
||||||
ShareType="map",
|
ShareType="map",
|
||||||
PathOrToken=parent_path,
|
PathOrToken=parent_path,
|
||||||
User=user)
|
User=user)
|
||||||
@@ -644,13 +644,13 @@ class BaseSharing:
|
|||||||
logger.debug("TRACE/" + api_info + ": filter: %r", PathOrToken)
|
logger.debug("TRACE/" + api_info + ": filter: %r", PathOrToken)
|
||||||
|
|
||||||
if ShareType != "all":
|
if ShareType != "all":
|
||||||
result_array = self.list_sharing(
|
result_array = self.database_list_sharing(
|
||||||
ShareType=ShareType,
|
ShareType=ShareType,
|
||||||
OwnerOrUser=user,
|
OwnerOrUser=user,
|
||||||
PathMapped=PathMapped,
|
PathMapped=PathMapped,
|
||||||
PathOrToken=PathOrToken)
|
PathOrToken=PathOrToken)
|
||||||
else:
|
else:
|
||||||
result_array = self.list_sharing(
|
result_array = self.database_list_sharing(
|
||||||
OwnerOrUser=user,
|
OwnerOrUser=user,
|
||||||
PathMapped=PathMapped,
|
PathMapped=PathMapped,
|
||||||
PathOrToken=PathOrToken)
|
PathOrToken=PathOrToken)
|
||||||
@@ -725,7 +725,7 @@ class BaseSharing:
|
|||||||
if logger.isEnabledFor(logging.DEBUG):
|
if logger.isEnabledFor(logging.DEBUG):
|
||||||
logger.debug("TRACE/" + api_info + ": %r (Permissions=%r token=%r)", PathMapped, Permissions, token)
|
logger.debug("TRACE/" + api_info + ": %r (Permissions=%r token=%r)", PathMapped, Permissions, token)
|
||||||
|
|
||||||
result = self.create_sharing(
|
result = self.database_create_sharing(
|
||||||
ShareType=ShareType,
|
ShareType=ShareType,
|
||||||
PathOrToken=token,
|
PathOrToken=token,
|
||||||
PathMapped=PathMapped,
|
PathMapped=PathMapped,
|
||||||
@@ -750,7 +750,7 @@ class BaseSharing:
|
|||||||
PathOrToken = str(PathOrToken)
|
PathOrToken = str(PathOrToken)
|
||||||
|
|
||||||
# retrieve existing share
|
# retrieve existing share
|
||||||
share = self.get_sharing(ShareType=ShareType, PathOrToken=PathOrToken, OnlyEnabled=False)
|
share = self.database_get_sharing(ShareType=ShareType, PathOrToken=PathOrToken, OnlyEnabled=False)
|
||||||
if share is not None:
|
if share is not None:
|
||||||
logger.error("Sharing/create/%s: already exists: %r", ShareType, PathOrToken)
|
logger.error("Sharing/create/%s: already exists: %r", ShareType, PathOrToken)
|
||||||
return httputils.CONFLICT
|
return httputils.CONFLICT
|
||||||
@@ -792,7 +792,7 @@ class BaseSharing:
|
|||||||
if logger.isEnabledFor(logging.DEBUG):
|
if logger.isEnabledFor(logging.DEBUG):
|
||||||
logger.debug("TRACE/" + api_info + ": %r (Permissions=%r PathOrToken=%r user=%r)", PathMapped, Permissions, PathOrToken, User)
|
logger.debug("TRACE/" + api_info + ": %r (Permissions=%r PathOrToken=%r user=%r)", PathMapped, Permissions, PathOrToken, User)
|
||||||
|
|
||||||
result = self.create_sharing(
|
result = self.database_create_sharing(
|
||||||
ShareType=ShareType,
|
ShareType=ShareType,
|
||||||
PathOrToken=PathOrToken,
|
PathOrToken=PathOrToken,
|
||||||
PathMapped=PathMapped,
|
PathMapped=PathMapped,
|
||||||
@@ -840,7 +840,7 @@ class BaseSharing:
|
|||||||
PathOrToken = str(PathOrToken)
|
PathOrToken = str(PathOrToken)
|
||||||
|
|
||||||
# retrieve existing share
|
# retrieve existing share
|
||||||
share = self.get_sharing(ShareType=ShareType, PathOrToken=PathOrToken, OnlyEnabled=False)
|
share = self.database_get_sharing(ShareType=ShareType, PathOrToken=PathOrToken, OnlyEnabled=False)
|
||||||
if share is None:
|
if share is None:
|
||||||
return httputils.NOT_FOUND
|
return httputils.NOT_FOUND
|
||||||
|
|
||||||
@@ -852,7 +852,7 @@ class BaseSharing:
|
|||||||
logger.warning("Update sharing: access to PathMapped %r not allowed for user %r", PathMapped, user)
|
logger.warning("Update sharing: access to PathMapped %r not allowed for user %r", PathMapped, user)
|
||||||
return httputils.NOT_ALLOWED
|
return httputils.NOT_ALLOWED
|
||||||
|
|
||||||
result = self.update_sharing(
|
result = self.database_update_sharing(
|
||||||
ShareType=ShareType,
|
ShareType=ShareType,
|
||||||
PathMapped=PathMapped,
|
PathMapped=PathMapped,
|
||||||
Permissions=Permissions,
|
Permissions=Permissions,
|
||||||
@@ -887,7 +887,7 @@ class BaseSharing:
|
|||||||
return httputils.NOT_ALLOWED
|
return httputils.NOT_ALLOWED
|
||||||
|
|
||||||
# limited update as user
|
# limited update as user
|
||||||
result = self.update_sharing(
|
result = self.database_update_sharing(
|
||||||
ShareType=ShareType,
|
ShareType=ShareType,
|
||||||
PathOrToken=str(PathOrToken), # verification above that it is not None
|
PathOrToken=str(PathOrToken), # verification above that it is not None
|
||||||
EnabledByUser=Enabled,
|
EnabledByUser=Enabled,
|
||||||
@@ -930,12 +930,12 @@ class BaseSharing:
|
|||||||
PathOrToken = str(PathOrToken)
|
PathOrToken = str(PathOrToken)
|
||||||
|
|
||||||
# check whether share exists
|
# check whether share exists
|
||||||
share = self.get_sharing(ShareType=ShareType, PathOrToken=PathOrToken, OnlyEnabled=False)
|
share = self.database_get_sharing(ShareType=ShareType, PathOrToken=PathOrToken, OnlyEnabled=False)
|
||||||
if share is None:
|
if share is None:
|
||||||
return httputils.NOT_FOUND
|
return httputils.NOT_FOUND
|
||||||
|
|
||||||
if user == share['Owner']:
|
if user == share['Owner']:
|
||||||
result = self.delete_sharing(
|
result = self.database_delete_sharing(
|
||||||
ShareType=ShareType,
|
ShareType=ShareType,
|
||||||
PathOrToken=PathOrToken) # verification above that it is not None
|
PathOrToken=PathOrToken) # verification above that it is not None
|
||||||
else:
|
else:
|
||||||
@@ -982,7 +982,7 @@ class BaseSharing:
|
|||||||
else:
|
else:
|
||||||
PathOrToken = str(PathOrToken)
|
PathOrToken = str(PathOrToken)
|
||||||
|
|
||||||
share = self.get_sharing(ShareType=ShareType, PathOrToken=PathOrToken, OnlyEnabled=False)
|
share = self.database_get_sharing(ShareType=ShareType, PathOrToken=PathOrToken, OnlyEnabled=False)
|
||||||
if share is None:
|
if share is None:
|
||||||
return httputils.NOT_FOUND
|
return httputils.NOT_FOUND
|
||||||
|
|
||||||
@@ -1001,7 +1001,7 @@ class BaseSharing:
|
|||||||
if user == share['Owner']:
|
if user == share['Owner']:
|
||||||
if user == share['User']:
|
if user == share['User']:
|
||||||
# user is Owner and User
|
# user is Owner and User
|
||||||
result = self.update_sharing(
|
result = self.database_update_sharing(
|
||||||
ShareType=ShareType,
|
ShareType=ShareType,
|
||||||
PathOrToken=PathOrToken,
|
PathOrToken=PathOrToken,
|
||||||
EnabledByOwner=Enabled,
|
EnabledByOwner=Enabled,
|
||||||
@@ -1010,7 +1010,7 @@ class BaseSharing:
|
|||||||
HiddenByUser=Hidden,
|
HiddenByUser=Hidden,
|
||||||
Timestamp=Timestamp)
|
Timestamp=Timestamp)
|
||||||
else:
|
else:
|
||||||
result = self.update_sharing(
|
result = self.database_update_sharing(
|
||||||
ShareType=ShareType,
|
ShareType=ShareType,
|
||||||
PathOrToken=PathOrToken,
|
PathOrToken=PathOrToken,
|
||||||
EnabledByOwner=Enabled,
|
EnabledByOwner=Enabled,
|
||||||
@@ -1018,7 +1018,7 @@ class BaseSharing:
|
|||||||
Timestamp=Timestamp)
|
Timestamp=Timestamp)
|
||||||
|
|
||||||
elif user == share['User']:
|
elif user == share['User']:
|
||||||
result = self.update_sharing(
|
result = self.database_update_sharing(
|
||||||
ShareType=ShareType,
|
ShareType=ShareType,
|
||||||
PathOrToken=str(PathOrToken), # verification above that it is not None
|
PathOrToken=str(PathOrToken), # verification above that it is not None
|
||||||
EnabledByUser=Enabled,
|
EnabledByUser=Enabled,
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class Sharing(sharing.BaseSharing):
|
|||||||
_sharing_db_file: str
|
_sharing_db_file: str
|
||||||
|
|
||||||
# Overloaded functions
|
# Overloaded functions
|
||||||
def init_database(self) -> bool:
|
def database_init(self) -> bool:
|
||||||
logger.debug("sharing database initialization for type 'csv'")
|
logger.debug("sharing database initialization for type 'csv'")
|
||||||
sharing_db_file = self.configuration.get("sharing", "database_path")
|
sharing_db_file = self.configuration.get("sharing", "database_path")
|
||||||
if sharing_db_file == "":
|
if sharing_db_file == "":
|
||||||
@@ -76,11 +76,11 @@ class Sharing(sharing.BaseSharing):
|
|||||||
self._sharing_db_file = sharing_db_file
|
self._sharing_db_file = sharing_db_file
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def get_database_info(self) -> Union[dict, None]:
|
def database_get_info(self) -> Union[dict, None]:
|
||||||
database_info = {'type': "csv"}
|
database_info = {'type': "csv"}
|
||||||
return database_info
|
return database_info
|
||||||
|
|
||||||
def verify_database(self) -> bool:
|
def database_verify(self) -> bool:
|
||||||
logger.info("sharing database (csv) verification begin")
|
logger.info("sharing database (csv) verification begin")
|
||||||
logger.info("sharing database (csv) file: %r", self._sharing_db_file)
|
logger.info("sharing database (csv) file: %r", self._sharing_db_file)
|
||||||
logger.info("sharing database (csv) loaded entries: %d", self._lines)
|
logger.info("sharing database (csv) loaded entries: %d", self._lines)
|
||||||
@@ -88,7 +88,7 @@ class Sharing(sharing.BaseSharing):
|
|||||||
logger.info("sharing database (csv) verification end")
|
logger.info("sharing database (csv) verification end")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def get_sharing(self,
|
def database_get_sharing(self,
|
||||||
ShareType: str,
|
ShareType: str,
|
||||||
PathOrToken: str,
|
PathOrToken: str,
|
||||||
OnlyEnabled: bool = True,
|
OnlyEnabled: bool = True,
|
||||||
@@ -143,7 +143,7 @@ class Sharing(sharing.BaseSharing):
|
|||||||
"Properties": Properties}
|
"Properties": Properties}
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def list_sharing(self,
|
def database_list_sharing(self,
|
||||||
OwnerOrUser: Union[str, None] = None,
|
OwnerOrUser: Union[str, None] = None,
|
||||||
ShareType: Union[str, None] = None,
|
ShareType: Union[str, None] = None,
|
||||||
PathOrToken: Union[str, None] = None,
|
PathOrToken: Union[str, None] = None,
|
||||||
@@ -201,7 +201,7 @@ class Sharing(sharing.BaseSharing):
|
|||||||
index += 1
|
index += 1
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def create_sharing(self,
|
def database_create_sharing(self,
|
||||||
ShareType: str,
|
ShareType: str,
|
||||||
PathOrToken: str, PathMapped: str,
|
PathOrToken: str, PathMapped: str,
|
||||||
Owner: str, User: str,
|
Owner: str, User: str,
|
||||||
@@ -264,7 +264,7 @@ class Sharing(sharing.BaseSharing):
|
|||||||
logger.error("sharing/%s/create: cannot update CSV database", ShareType)
|
logger.error("sharing/%s/create: cannot update CSV database", ShareType)
|
||||||
return {"status": "error"}
|
return {"status": "error"}
|
||||||
|
|
||||||
def update_sharing(self,
|
def database_update_sharing(self,
|
||||||
ShareType: str,
|
ShareType: str,
|
||||||
PathOrToken: str,
|
PathOrToken: str,
|
||||||
OwnerOrUser: Union[str, None] = None,
|
OwnerOrUser: Union[str, None] = None,
|
||||||
@@ -337,7 +337,7 @@ class Sharing(sharing.BaseSharing):
|
|||||||
else:
|
else:
|
||||||
return {"status": "not-found"}
|
return {"status": "not-found"}
|
||||||
|
|
||||||
def delete_sharing(self,
|
def database_delete_sharing(self,
|
||||||
ShareType: str,
|
ShareType: str,
|
||||||
PathOrToken: str) -> dict:
|
PathOrToken: str) -> dict:
|
||||||
""" delete sharing """
|
""" delete sharing """
|
||||||
|
|||||||
@@ -29,19 +29,19 @@ DB_VERSION: str = "1"
|
|||||||
|
|
||||||
|
|
||||||
class Sharing(sharing.BaseSharing):
|
class Sharing(sharing.BaseSharing):
|
||||||
_sharing_db_path_ShareType: dict = {}
|
_sharing_database_path_ShareType: dict = {}
|
||||||
|
|
||||||
# Overloaded functions
|
# Overloaded functions
|
||||||
def init_database(self) -> bool:
|
def database_init(self) -> bool:
|
||||||
logger.debug("sharing database initialization for type 'files'")
|
logger.debug("sharing database initialization for type 'files'")
|
||||||
sharing_db_path = self.configuration.get("sharing", "database_path")
|
sharing_database_path = self.configuration.get("sharing", "database_path")
|
||||||
if sharing_db_path == "":
|
if sharing_database_path == "":
|
||||||
folder = self.configuration.get("storage", "filesystem_folder")
|
folder = self.configuration.get("storage", "filesystem_folder")
|
||||||
folder_db = os.path.join(folder, "collection-db")
|
folder_db = os.path.join(folder, "collection-db")
|
||||||
sharing_db_path = os.path.join(folder_db, "files")
|
sharing_database_path = os.path.join(folder_db, "files")
|
||||||
logger.info("sharing database path not provided, use default: %r", sharing_db_path)
|
logger.info("sharing database path not provided, use default: %r", sharing_database_path)
|
||||||
else:
|
else:
|
||||||
logger.info("sharing database path: %r", sharing_db_path)
|
logger.info("sharing database path: %r", sharing_database_path)
|
||||||
|
|
||||||
if not os.path.exists(folder_db):
|
if not os.path.exists(folder_db):
|
||||||
logger.warning("sharing database folder is not existing: %r (create now)", folder_db)
|
logger.warning("sharing database folder is not existing: %r (create now)", folder_db)
|
||||||
@@ -52,18 +52,18 @@ class Sharing(sharing.BaseSharing):
|
|||||||
return False
|
return False
|
||||||
logger.info("sharing database folder successfully created: %r", folder_db)
|
logger.info("sharing database folder successfully created: %r", folder_db)
|
||||||
|
|
||||||
if not os.path.exists(sharing_db_path):
|
if not os.path.exists(sharing_database_path):
|
||||||
logger.warning("sharing database path is not existing: %r", sharing_db_path)
|
logger.warning("sharing database path is not existing: %r", sharing_database_path)
|
||||||
try:
|
try:
|
||||||
os.mkdir(sharing_db_path)
|
os.mkdir(sharing_database_path)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("sharing database path cannot be created (check permissions): %r (%r)", sharing_db_path, e)
|
logger.error("sharing database path cannot be created (check permissions): %r (%r)", sharing_database_path, e)
|
||||||
return False
|
return False
|
||||||
logger.info("sharing database path successfully created: %r", sharing_db_path)
|
logger.info("sharing database path successfully created: %r", sharing_database_path)
|
||||||
|
|
||||||
for ShareType in sharing.SHARE_TYPES_V1:
|
for ShareType in sharing.SHARE_TYPES_V1:
|
||||||
path = os.path.join(sharing_db_path, ShareType)
|
path = os.path.join(sharing_database_path, ShareType)
|
||||||
self._sharing_db_path_ShareType[ShareType] = path
|
self._sharing_database_path_ShareType[ShareType] = path
|
||||||
if not os.path.exists(path):
|
if not os.path.exists(path):
|
||||||
logger.warning("sharing database path for %r is not existing: %r", ShareType, path)
|
logger.warning("sharing database path for %r is not existing: %r", ShareType, path)
|
||||||
try:
|
try:
|
||||||
@@ -74,19 +74,19 @@ class Sharing(sharing.BaseSharing):
|
|||||||
logger.info("sharing database path for %r successfully created: %r", ShareType, path)
|
logger.info("sharing database path for %r successfully created: %r", ShareType, path)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def get_database_info(self) -> Union[dict, None]:
|
def database_get_info(self) -> Union[dict, None]:
|
||||||
database_info = {'type': "files"}
|
database_info = {'type': "files"}
|
||||||
return database_info
|
return database_info
|
||||||
|
|
||||||
def verify_database(self) -> bool:
|
def database_verify(self) -> bool:
|
||||||
logger.info("sharing database (files) verification begin")
|
logger.info("sharing database (files) verification begin")
|
||||||
for ShareType in sharing.SHARE_TYPES_V1:
|
for ShareType in sharing.SHARE_TYPES_V1:
|
||||||
logger.info("sharing database (files) path for %r: %r", ShareType, self._sharing_db_path_ShareType[ShareType])
|
logger.info("sharing database (files) path for %r: %r", ShareType, self._sharing_database_path_ShareType[ShareType])
|
||||||
# TODO: count amount of files
|
# TODO: count amount of files
|
||||||
logger.info("sharing database (files) verification end")
|
logger.info("sharing database (files) verification end")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def get_sharing(self,
|
def database_get_sharing(self,
|
||||||
ShareType: str,
|
ShareType: str,
|
||||||
PathOrToken: str,
|
PathOrToken: str,
|
||||||
OnlyEnabled: bool = True,
|
OnlyEnabled: bool = True,
|
||||||
@@ -96,7 +96,7 @@ class Sharing(sharing.BaseSharing):
|
|||||||
if logger.isEnabledFor(logging.DEBUG):
|
if logger.isEnabledFor(logging.DEBUG):
|
||||||
logger.debug("TRACE/sharing/%s/get: PathOrToken=%r User=%r)", ShareType, PathOrToken, User)
|
logger.debug("TRACE/sharing/%s/get: PathOrToken=%r User=%r)", ShareType, PathOrToken, User)
|
||||||
|
|
||||||
sharing_config_file = os.path.join(self._sharing_db_path_ShareType[ShareType], self._encode_path(PathOrToken))
|
sharing_config_file = os.path.join(self._sharing_database_path_ShareType[ShareType], self._encode_path(PathOrToken))
|
||||||
|
|
||||||
if not os.path.isfile(sharing_config_file):
|
if not os.path.isfile(sharing_config_file):
|
||||||
return None
|
return None
|
||||||
@@ -141,7 +141,7 @@ class Sharing(sharing.BaseSharing):
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def list_sharing(self,
|
def database_list_sharing(self,
|
||||||
OwnerOrUser: Union[str, None] = None,
|
OwnerOrUser: Union[str, None] = None,
|
||||||
ShareType: Union[str, None] = None,
|
ShareType: Union[str, None] = None,
|
||||||
PathOrToken: Union[str, None] = None,
|
PathOrToken: Union[str, None] = None,
|
||||||
@@ -162,7 +162,7 @@ class Sharing(sharing.BaseSharing):
|
|||||||
# skip
|
# skip
|
||||||
continue
|
continue
|
||||||
|
|
||||||
path = self._sharing_db_path_ShareType[_ShareType]
|
path = self._sharing_database_path_ShareType[_ShareType]
|
||||||
with self._storage.acquire_lock("r", OwnerOrUser, path=path):
|
with self._storage.acquire_lock("r", OwnerOrUser, path=path):
|
||||||
for entry in os.scandir(path):
|
for entry in os.scandir(path):
|
||||||
if not entry.is_file():
|
if not entry.is_file():
|
||||||
@@ -213,7 +213,7 @@ class Sharing(sharing.BaseSharing):
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def create_sharing(self,
|
def database_create_sharing(self,
|
||||||
ShareType: str,
|
ShareType: str,
|
||||||
PathOrToken: str, PathMapped: str,
|
PathOrToken: str, PathMapped: str,
|
||||||
Owner: str, User: str,
|
Owner: str, User: str,
|
||||||
@@ -225,7 +225,7 @@ class Sharing(sharing.BaseSharing):
|
|||||||
""" create sharing """
|
""" create sharing """
|
||||||
row: dict
|
row: dict
|
||||||
|
|
||||||
sharing_config_file = os.path.join(self._sharing_db_path_ShareType[ShareType], self._encode_path(PathOrToken))
|
sharing_config_file = os.path.join(self._sharing_database_path_ShareType[ShareType], self._encode_path(PathOrToken))
|
||||||
|
|
||||||
if logger.isEnabledFor(logging.DEBUG):
|
if logger.isEnabledFor(logging.DEBUG):
|
||||||
logger.debug("TRACE/sharing/%s/create: sharing_config_file=%r", ShareType, sharing_config_file)
|
logger.debug("TRACE/sharing/%s/create: sharing_config_file=%r", ShareType, sharing_config_file)
|
||||||
@@ -262,7 +262,7 @@ class Sharing(sharing.BaseSharing):
|
|||||||
logger.error("sharing/%s/create: cannot store share-config: %r (%r)", ShareType, sharing_config_file, e)
|
logger.error("sharing/%s/create: cannot store share-config: %r (%r)", ShareType, sharing_config_file, e)
|
||||||
return {"status": "error"}
|
return {"status": "error"}
|
||||||
|
|
||||||
def update_sharing(self,
|
def database_update_sharing(self,
|
||||||
ShareType: str,
|
ShareType: str,
|
||||||
PathOrToken: str,
|
PathOrToken: str,
|
||||||
OwnerOrUser: Union[str, None] = None,
|
OwnerOrUser: Union[str, None] = None,
|
||||||
@@ -279,7 +279,7 @@ class Sharing(sharing.BaseSharing):
|
|||||||
if logger.isEnabledFor(logging.DEBUG):
|
if logger.isEnabledFor(logging.DEBUG):
|
||||||
logger.debug("TRACE/sharing/%s/update: PathOrToken=%r OwnerOrUser=%r User=%r Properties=%r", ShareType, PathOrToken, OwnerOrUser, User, Properties)
|
logger.debug("TRACE/sharing/%s/update: PathOrToken=%r OwnerOrUser=%r User=%r Properties=%r", ShareType, PathOrToken, OwnerOrUser, User, Properties)
|
||||||
|
|
||||||
sharing_config_file = os.path.join(self._sharing_db_path_ShareType[ShareType], self._encode_path(PathOrToken))
|
sharing_config_file = os.path.join(self._sharing_database_path_ShareType[ShareType], self._encode_path(PathOrToken))
|
||||||
|
|
||||||
if not os.path.isfile(sharing_config_file):
|
if not os.path.isfile(sharing_config_file):
|
||||||
return {"status": "not-found"}
|
return {"status": "not-found"}
|
||||||
@@ -331,14 +331,14 @@ class Sharing(sharing.BaseSharing):
|
|||||||
logger.error("sharing/%s/create: cannot store share-config: %r (%r)", ShareType, sharing_config_file, e)
|
logger.error("sharing/%s/create: cannot store share-config: %r (%r)", ShareType, sharing_config_file, e)
|
||||||
return {"status": "error"}
|
return {"status": "error"}
|
||||||
|
|
||||||
def delete_sharing(self,
|
def database_delete_sharing(self,
|
||||||
ShareType: str,
|
ShareType: str,
|
||||||
PathOrToken: str) -> dict:
|
PathOrToken: str) -> dict:
|
||||||
""" delete sharing """
|
""" delete sharing """
|
||||||
if logger.isEnabledFor(logging.DEBUG):
|
if logger.isEnabledFor(logging.DEBUG):
|
||||||
logger.debug("TRACE/sharing/%s/delete: PathOrToken=%r", ShareType, PathOrToken)
|
logger.debug("TRACE/sharing/%s/delete: PathOrToken=%r", ShareType, PathOrToken)
|
||||||
|
|
||||||
sharing_config_file = os.path.join(self._sharing_db_path_ShareType[ShareType], self._encode_path(PathOrToken))
|
sharing_config_file = os.path.join(self._sharing_database_path_ShareType[ShareType], self._encode_path(PathOrToken))
|
||||||
|
|
||||||
if not os.path.isfile(sharing_config_file):
|
if not os.path.isfile(sharing_config_file):
|
||||||
return {"status": "not-found"}
|
return {"status": "not-found"}
|
||||||
|
|||||||
@@ -470,7 +470,7 @@ class TestSharingApiSanity(BaseTest):
|
|||||||
assert "Status=success" in answer
|
assert "Status=success" in answer
|
||||||
assert "Lines=1" in answer
|
assert "Lines=1" in answer
|
||||||
|
|
||||||
logging.info("\n*** disable token#2 as iwner (form->text)")
|
logging.info("\n*** disable token#2 as owner (form->text)")
|
||||||
form_array = ["PathOrToken=" + token2]
|
form_array = ["PathOrToken=" + token2]
|
||||||
_, headers, answer = self._sharing_api_form("token", "disable", check=200, login="owner:ownerpw", form_array=form_array)
|
_, headers, answer = self._sharing_api_form("token", "disable", check=200, login="owner:ownerpw", form_array=form_array)
|
||||||
assert "Status=success" in answer
|
assert "Status=success" in answer
|
||||||
|
|||||||
Reference in New Issue
Block a user