diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..771b624 --- /dev/null +++ b/setup.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +# Copyright 2014 OpenStack, LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from setuptools import setup + +import swiftpolicy + + +setup(name='swiftpolicy', + version=swiftpolicy.version, + description='Swift Policy Middleware', + author='CloudWatt', + author_email='nassim.babaci@cloudwatt.com', + url='https://git.corp.cloudwatt.com/nassim.babaci/swiftpolicy', + packages=['swiftpolicy'], + requires=['swift(>=1.7)'], + entry_points={'paste.filter_factory': + ['swiftpolicy=swiftpolicy.swiftpolicy:filter_factory']}) diff --git a/swiftpolicy/__init__.py b/swiftpolicy/__init__.py index b66fe8d..79e96cb 100644 --- a/swiftpolicy/__init__.py +++ b/swiftpolicy/__init__.py @@ -12,6 +12,11 @@ # License for the specific language governing permissions and limitations # under the License. -from keystoneauth import filter_factory +from swiftpolicy import filter_factory -__all__ = [filter_factory] +__all__ = [filter_factory, 'version_info', 'version'] + +#: Version information ``(major, minor, revision)``. +version_info = (1, 0, 0) +#: Version string ``'major.minor.revision'``. +version = '.'.join(map(str, version_info)) diff --git a/swiftpolicy/enforcer.py b/swiftpolicy/enforcer.py index 0a10cd4..eea6e68 100644 --- a/swiftpolicy/enforcer.py +++ b/swiftpolicy/enforcer.py @@ -16,7 +16,6 @@ from policy import register from policy import Enforcer from policy import Check from policy import Rules -from string import Template def get_enforcer(operators_roles, reseller_role, is_admin, logger, policy_file=None): @@ -76,6 +75,7 @@ class FileBasedEnforcer(Enforcer): policy = self._get_policy() try: rules = Rules.load_json(policy, self.default_rule) + #TODO error is not used except ValueError as error: raise self.set_rules(rules) diff --git a/swiftpolicy/keystoneauth.py b/swiftpolicy/swiftpolicy.py similarity index 95% rename from swiftpolicy/keystoneauth.py rename to swiftpolicy/swiftpolicy.py index 70b3b78..7454a83 100644 --- a/swiftpolicy/keystoneauth.py +++ b/swiftpolicy/swiftpolicy.py @@ -20,19 +20,19 @@ from swift.common.utils import register_swift_info from enforcer import get_enforcer -class KeystoneAuth(object): +class SwiftPolicy(object): """Swift middleware to Keystone authorization system. In Swift's proxy-server.conf add this middleware to your pipeline:: [pipeline:main] - pipeline = catch_errors cache authtoken keystoneauth proxy-server + pipeline = catch_errors cache authtoken swiftpolicy proxy-server Make sure you have the authtoken middleware before the - keystoneauth middleware. + swiftpolicy middleware. The authtoken middleware will take care of validating the user and - keystoneauth will authorize access. + swiftpolicy will authorize access. The authtoken middleware is shipped directly with keystone it does not have any other dependences than itself so you can either @@ -53,8 +53,8 @@ class KeystoneAuth(object): And add a swift authorization filter section, such as:: - [filter:keystoneauth] - use = egg:swift#keystoneauth + [filter:swiftpolicy] + use = egg:swift#swiftpolicy operator_roles = admin, swiftoperator This maps tenants to account in Swift. @@ -66,7 +66,7 @@ class KeystoneAuth(object): If you need to have a different reseller_prefix to be able to mix different auth servers you can configure the option - ``reseller_prefix`` in your keystoneauth entry like this:: + ``reseller_prefix`` in your swiftpolicy entry like this:: reseller_prefix = NEWAUTH @@ -76,7 +76,7 @@ class KeystoneAuth(object): def __init__(self, app, conf): self.app = app self.conf = conf - self.logger = swift_utils.get_logger(conf, log_route='keystoneauth') + self.logger = swift_utils.get_logger(conf, log_route='swiftpolicy') self.reseller_prefix = conf.get('reseller_prefix', 'AUTH_').strip() if self.reseller_prefix and self.reseller_prefix[-1] != '_': self.reseller_prefix += '_' @@ -264,8 +264,8 @@ def filter_factory(global_conf, **local_conf): """Returns a WSGI filter app for use with paste.deploy.""" conf = global_conf.copy() conf.update(local_conf) - register_swift_info('keystoneauth') + register_swift_info('swiftpolicy') def auth_filter(app): - return KeystoneAuth(app, conf) + return SwiftPolicy(app, conf) return auth_filter