diff --git a/config b/config index 3f59c2a..2845169 100644 --- a/config +++ b/config @@ -100,6 +100,9 @@ committer = Firstname Lastname [rights] +# Rights backend +backend = "regex" + # Rights management method # Value: None | owner_only | owner_write | from_file type = None diff --git a/radicale/__init__.py b/radicale/__init__.py index b383638..9222e9c 100644 --- a/radicale/__init__.py +++ b/radicale/__init__.py @@ -127,6 +127,7 @@ class Application(object): super(Application, self).__init__() auth.load() storage.load() + rights.load() self.encoding = config.get("encoding", "request") if config.getboolean("logging", "full_environment"): self.headers_log = lambda environ: environ diff --git a/radicale/config.py b/radicale/config.py index 71d27a8..36dbb76 100644 --- a/radicale/config.py +++ b/radicale/config.py @@ -75,6 +75,7 @@ INITIAL_CONFIG = { "git": { "committer": "Radicale "}, "rights": { + "backend": "regex", "type": "None", "file": "~/.config/radicale/rights"}, "storage": { diff --git a/radicale/rights/__init__.py b/radicale/rights/__init__.py new file mode 100644 index 0000000..5e9770f --- /dev/null +++ b/radicale/rights/__init__.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# +# This file is part of Radicale Server - Calendar Server +# Copyright © 2012-2013 Guillaume Ayoub +# +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Radicale. If not, see . + +""" +Rights backends. + +This module loads the rights backend, according to the rights +configuration. + +""" +import sys + +from .. import config + + +def load(): + """Load list of available storage managers.""" + storage_type = config.get("rights", "backend") + root_module = __import__( + "rights.%s" % storage_type, globals=globals(), level=2) + module = getattr(root_module, storage_type) + sys.modules[__name__].authorized = module.authorized + return module + + +def authorized(user, collection, right): + """ Check when user has rights on collection + This method is overriden when appropriate rights backend loaded. + """ + raise NotImplementedError() diff --git a/radicale/rights.py b/radicale/rights/regex.py similarity index 99% rename from radicale/rights.py rename to radicale/rights/regex.py index c772c1a..21a828b 100644 --- a/radicale/rights.py +++ b/radicale/rights/regex.py @@ -38,7 +38,7 @@ Leading or ending slashes are trimmed from collection's path. import re import os.path -from . import config, log +from .. import config, log # Manage Python2/3 different modules # pylint: disable=F0401 diff --git a/setup.py b/setup.py index afe8e96..7318dd0 100755 --- a/setup.py +++ b/setup.py @@ -54,7 +54,7 @@ setup( "Radicale-%s.tar.gz" % radicale.VERSION), license="GNU GPL v3", platforms="Any", - packages=["radicale", "radicale.auth", "radicale.storage"], + packages=["radicale", "radicale.auth", "radicale.storage", "radicale.rights"], provides=["radicale"], scripts=["bin/radicale"], keywords=["calendar", "addressbook", "CalDAV", "CardDAV"],