def before_scenario(context, senario): context.resources = { 'namespace': {}, 'collection': {}, 'document': {}, } context.ignored_auth = [] for v in EphemeralBackend._cls_cache.values(): v.clear() context.manager = NamespaceManager()
class NamespaceView(View): name = 'namespace' plural = 'namespaces' MANAGER = NamespaceManager() @classmethod def load(self, id): return self.MANAGER.get_namespace(id) def __init__(self, resource=None): super().__init__(resource=resource) self._namespace = resource self.loaded = (resource, ) if resource else (self.MANAGER, ) def get_required_permissions(self, request): if request.method == 'GET' and self.resource is None: return Permissions.NONE if request.method == 'DELETE' and self.resource is not None: return Permissions.ADMIN return super().get_required_permissions(request) def do_create(self, id, attributes, user): return self.MANAGER.create_namespace(id, user.uid, **attributes).document def read(self, user): return self._namespace.document def update(self, patch, user): return self.MANAGER.update(self._namespace.ref, patch, user.uid) def list(self, filter, sort, page, page_size, user): query = functools.reduce(operator.or_, [ Q('data.permissions.*', 'and', Permissions.READ), Q('data.permissions.{0.type}-*'.format(user), 'and', Permissions.READ), Q('data.permissions.{0.type}-{0.provider}-*'.format(user), 'and', Permissions.READ), Q('data.permissions.{0.type}-{0.provider}-{0.id}'.format(user), 'and', Permissions.READ), ]) if filter: filter &= query else: filter = query return self.MANAGER.select().where(filter).page( page, page_size).order_by(sort)
import asyncio import bcrypt from jam import exceptions from jam import NamespaceManager from jam.plugins.user import UserPlugin from jam.auth.providers.base import BaseAuthProvider manager = NamespaceManager() class SelfAuthProvider(BaseAuthProvider): name = 'self' type = 'jam' PASSWORD_SCHEMA = { 'id': 'password', 'type': 'string', 'pattern': '^\$2b\$1[0-3]\$\S{53}$' } async def _authenticate(self, data): namespace = manager.get_namespace(data['namespace']) collection = namespace.get_collection(data['collection']) if not UserPlugin.is_enabled(collection): raise exceptions.PluginNotEnabled(UserPlugin.NAME) if not ( collection.schema