Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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