Beispiel #1
0
    def new_user(self, format='json'):
        params = validate_new_user(request.params)
        new_user = User(cert_dn=params['cert_dn'],
                        user_name=params['user_name'],
                        email=params['email'])
        new_user.full_name = params['full_name']
        new_user.suspended = params['suspended']

        # Deal with user groups
        groups = params['groups']
        if not groups:
            groups = [app_globals.default_user_group]
        else:
            groups = groups.rstrip(',').split(',')
            # Check for default user group
            if 'users' not in groups:
                groups.append(app_globals.default_user_group)

        # Do group membership
        #TODO: change from group name to group uuid for membership?
        group_q = meta.Session.query(Group)
        groups = [group_q.filter(Group.name == g).first() for g in groups]
        if None in groups:
            # abort if any specified group does not exist
            abort(400, '400 Bad Request')
        else:
            [new_user.groups.append(g) for g in groups]

        # Update the database
        meta.Session.add(new_user)
        meta.Session.commit()
        response.headers['content-type'] = app_globals.json_content_type
        return h.render_json(beautify.user(new_user))
Beispiel #2
0
    def new_user(self, format='json'):
        params = validate_new_user(request.params)
        new_user = User(cert_dn=params['cert_dn'],
                        user_name=params['user_name'],
                        email=params['email'])
        new_user.full_name = params['full_name']
        new_user.suspended = params['suspended']

        # Deal with user groups
        groups = params['groups']
        if not groups:
            groups = [app_globals.default_user_group]
        else:
            groups = groups.rstrip(',').split(',')
            # Check for default user group
            if 'users' not in groups:
                groups.append(app_globals.default_user_group)

        # Do group membership
        #TODO: change from group name to group uuid for membership?
        group_q = meta.Session.query(Group)
        groups = [group_q.filter(Group.name==g).first() for g in groups]
        if None in groups:
            # abort if any specified group does not exist
            abort(400, '400 Bad Request')
        else:
            [new_user.groups.append(g) for g in groups]

        # Update the database
        meta.Session.add(new_user)
        meta.Session.commit()
        response.headers['content-type'] = app_globals.json_content_type
        return h.render_json(beautify.user(new_user))
Beispiel #3
0
 def list_all(self, format="json"):
     images = meta.Session.query(Image).all()
     urls = [url("image_by_user", user=i.owner.user_name, image=i.name, qualified=True) for i in images]
     if format == "json":
         response.headers["content-type"] = app_globals.json_content_type
         return h.render_json(urls)
     else:
         abort(501, "501 Not Implemented")
Beispiel #4
0
 def list_all(self, format='json'):
     user_q = meta.Session.query(User).filter(User.deleted!=True)
     users = [user.user_name for user in user_q]
     urls = [url('user', user=u, qualified=True) for u in users]
     if format == 'json':
         response.headers['content-type'] = app_globals.json_content_type
         return h.render_json(urls)
     else:
         abort(501, '501 Not Implemented')
Beispiel #5
0
 def list_all(self, format='json'):
     group_q = meta.Session.query(Group)
     groups = [g for g in group_q]
     urls = [url('group', group=g.name, qualified=True) for g in groups]
     if format == 'json':
         response.headers['content-type'] = app_globals.json_content_type
         return h.render_json(urls)
     else:
         abort(501, '501 Not Implemented')
Beispiel #6
0
 def list_all(self, format='json'):
     user_q = meta.Session.query(User).filter(User.deleted != True)
     users = [user.user_name for user in user_q]
     urls = [url('user', user=u, qualified=True) for u in users]
     if format == 'json':
         response.headers['content-type'] = app_globals.json_content_type
         return h.render_json(urls)
     else:
         abort(501, '501 Not Implemented')
Beispiel #7
0
 def list_all(self, format='json'):
     group_q = meta.Session.query(Group)
     groups = [g for g in group_q]
     urls = [url('group', group=g.name, qualified=True) for g in groups]
     if format == 'json':
         response.headers['content-type'] = app_globals.json_content_type
         return h.render_json(urls)
     else:
         abort(501, '501 Not Implemented')
Beispiel #8
0
    def new(self, format='json'):
        params = validate_new_image(request.params)

        if params['user_name']:
            user_q = meta.Session.query(User)
            user = user_q.filter(User.user_name==params['user_name']).first()
        else:
            user = request.environ['REPOMAN_USER']

        if not user:
                abort(400, '400 Bad Request')

        # check for conflict
        image_q = meta.Session.query(Image).filter(Image.name==params['name'])
        image = image_q.filter(Image.owner.has(User.user_name==user.user_name)).first()
        if image:
            abort(409, '409 Conflict')

        # TODO: setting these values is overly verbose.  make it simple
        new_image = Image()
        # User settable values
        new_image.name = params['name']
        new_image.os_variant = params['os_variant']
        new_image.os_type = params['os_type']
        new_image.os_arch = params['os_arch']
        if params['hypervisor']:
            new_image.hypervisor = params['hypervisor']
        else:
             new_image.hypervisor = 'xen'
        new_image.description = params['description']
        new_image.expires = params['expires']
        new_image.read_only = params['read_only']
        new_image.unauthenticated_access = params['unauthenticated_access']

        # Non-user settable values
        uuid = h.image_uuid()
        current_time = datetime.utcfromtimestamp(time())
        file_name = uuid + '_' + new_image.name

        new_image.owner = user
        new_image.uuid = uuid
        new_image.uploaded = None
        new_image.modified = current_time
        new_image.path = file_name
        new_image.raw_uploaded = False

        meta.Session.add(new_image)
        meta.Session.commit()

        response.headers['content-type'] = app_globals.json_content_type
        response.headers['Location'] = url('get_raw_by_user',
                                           user=user.user_name,
                                           image=new_image.name,
                                           hypervisor='__hypervisor__')
        response.status = ("201 Object created.  upload raw file(s) to 'Location'")
        return h.render_json(beautify.image(new_image))
Beispiel #9
0
 def show(self, user, format='json'):
     user = meta.Session.query(User).filter(User.user_name==user).first()
     if user:
         if format=='json':
             response.headers['content-type'] = app_globals.json_content_type
             return h.render_json(beautify.user(user))
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #10
0
 def show(self, group, format='json'):
     group = meta.Session.query(Group).filter(Group.name==group).first()
     if group:
         if format == 'json':
             response.headers['content-type'] = app_globals.json_content_type
             return h.render_json(beautify.group(group))
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #11
0
    def new(self, format='json'):
        params = validate_new_image(request.params)

        if params['user_name']:
            user_q = meta.Session.query(User)
            user = user_q.filter(User.user_name == params['user_name']).first()
        else:
            user = request.environ['REPOMAN_USER']

        if not user:
            abort(400, '400 Bad Request')

        # check for conflict
        image_q = meta.Session.query(Image).filter(
            Image.name == params['name'])
        image = image_q.filter(
            Image.owner.has(User.user_name == user.user_name)).first()
        if image:
            abort(409, '409 Conflict')

        # TODO: setting these values is overly verbose.  make it simple
        new_image = Image()
        # User settable values
        new_image.name = params['name']
        new_image.os_variant = params['os_variant']
        new_image.os_type = params['os_type']
        new_image.os_arch = params['os_arch']
        new_image.hypervisor = params['hypervisor']
        new_image.description = params['description']
        new_image.expires = params['expires']
        new_image.read_only = params['read_only']
        new_image.unauthenticated_access = params['unauthenticated_access']

        # Non-user settable values
        uuid = h.image_uuid()
        current_time = datetime.utcfromtimestamp(time())
        file_name = uuid + '_' + new_image.name

        new_image.owner = user
        new_image.uuid = uuid
        new_image.uploaded = current_time
        new_image.modified = current_time
        new_image.path = file_name
        new_image.raw_uploaded = False

        meta.Session.add(new_image)
        meta.Session.commit()

        response.headers['content-type'] = app_globals.json_content_type
        response.headers['Location'] = url('raw_by_user',
                                           user=user.user_name,
                                           image=new_image.name)
        response.status = (
            "201 Object created.  upload raw file to 'Location'")
        return h.render_json(beautify.image(new_image))
Beispiel #12
0
 def list_images(self, user, format='json'):
     user = meta.Session.query(User).filter(User.user_name==user).first()
     if user:
         images = user.images
         if format=='json':
             response.headers['content-type'] = app_globals.json_content_type
             return h.render_json([url('image_by_user', image=i.name, user=user.user_name, qualified=True) for i in images])
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #13
0
 def list_groups(self, user, format='json'):
     user = meta.Session.query(User).filter(User.user_name==user).first()
     if user:
         groups = user.groups
         if format=='json':
             response.headers['content-type'] = app_globals.json_content_type
             return h.render_json([url('group', group=g.name, qualified=True) for g in groups])
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #14
0
 def list_permissions(self, group, format='json'):
     group = meta.Session.query(Group).filter(Group.name==group).first()
     if group:
         urls = [p.permission_name for p in group.permissions]
         if format == 'json':
             response.headers['content-type'] = app_globals.json_content_type
             return h.render_json(urls)
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #15
0
 def list_users(self, group, format='json'):
     group = meta.Session.query(Group).filter(Group.name==group).first()
     if group:
         urls = [url('user', user=u.user_name, qualified=True) for u in group.users]
         if format == 'json':
             response.headers['content-type'] = app_globals.json_content_type
             return h.render_json(urls)
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #16
0
 def show(self, user, format='json'):
     user = meta.Session.query(User).filter(User.user_name == user).first()
     if user:
         if format == 'json':
             response.headers[
                 'content-type'] = app_globals.json_content_type
             return h.render_json(beautify.user(user))
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #17
0
 def show(self, group, format='json'):
     group = meta.Session.query(Group).filter(Group.name == group).first()
     if group:
         if format == 'json':
             response.headers[
                 'content-type'] = app_globals.json_content_type
             return h.render_json(beautify.group(group))
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #18
0
 def list_permissions(self, group, format='json'):
     group = meta.Session.query(Group).filter(Group.name == group).first()
     if group:
         urls = [p.permission_name for p in group.permissions]
         if format == 'json':
             response.headers[
                 'content-type'] = app_globals.json_content_type
             return h.render_json(urls)
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #19
0
    def show_meta_by_user(self, user, image, format="json"):
        image_q = meta.Session.query(Image)
        image = image_q.filter(Image.name == image).filter(Image.owner.has(User.user_name == user)).first()

        if image:
            inline_auth(AnyOf(OwnsImage(image), SharedWith(image)), auth_403)
            if format == "json":
                response.headers["content-type"] = app_globals.json_content_type
                return h.render_json(beautify.image(image))
            else:
                abort(501, "501 Not Implemented")
        else:
            abort(404, "404 Not Found")
Beispiel #20
0
 def list_all(self, format='json'):
     images = meta.Session.query(Image).all()
     urls = [
         url('image_by_user',
             user=i.owner.user_name,
             image=i.name,
             qualified=True) for i in images
     ]
     if format == 'json':
         response.headers['content-type'] = app_globals.json_content_type
         return h.render_json(urls)
     else:
         abort(501, '501 Not Implemented')
Beispiel #21
0
 def list_groups(self, user, format='json'):
     user = meta.Session.query(User).filter(User.user_name == user).first()
     if user:
         groups = user.groups
         if format == 'json':
             response.headers[
                 'content-type'] = app_globals.json_content_type
             return h.render_json([
                 url('group', group=g.name, qualified=True) for g in groups
             ])
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #22
0
 def get_shared_with_me(self, user, format='json'):
     user = meta.Session.query(User).filter(User.user_name==user).first()
     if user:
         shared = user.shared_images
         for g in user.groups:
             shared.extend(g.shared_images)
         shared = list(set(shared))
         if format=='json':
             response.headers['content-type'] = app_globals.json_content_type
             return h.render_json([url('image_by_user', image=s.image.name, user=s.image.owner.user_name, qualified=True) for s in shared])
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #23
0
    def new(self, format="json"):
        params = validate_new_image(request.params)

        if params["user_name"]:
            user_q = meta.Session.query(User)
            user = user_q.filter(User.user_name == params["user_name"]).first()
        else:
            user = request.environ["REPOMAN_USER"]

        if not user:
            abort(400, "400 Bad Request")

        # check for conflict
        image_q = meta.Session.query(Image).filter(Image.name == params["name"])
        image = image_q.filter(Image.owner.has(User.user_name == user.user_name)).first()
        if image:
            abort(409, "409 Conflict")

        # TODO: setting these values is overly verbose.  make it simple
        new_image = Image()
        # User settable values
        new_image.name = params["name"]
        new_image.os_variant = params["os_variant"]
        new_image.os_type = params["os_type"]
        new_image.os_arch = params["os_arch"]
        new_image.hypervisor = params["hypervisor"]
        new_image.description = params["description"]
        new_image.expires = params["expires"]
        new_image.read_only = params["read_only"]
        new_image.unauthenticated_access = params["unauthenticated_access"]

        # Non-user settable values
        uuid = h.image_uuid()
        current_time = datetime.utcfromtimestamp(time())
        file_name = uuid + "_" + new_image.name

        new_image.owner = user
        new_image.uuid = uuid
        new_image.uploaded = current_time
        new_image.modified = current_time
        new_image.path = file_name
        new_image.raw_uploaded = False

        meta.Session.add(new_image)
        meta.Session.commit()

        response.headers["Location"] = url("raw_by_user", user=user.user_name, image=new_image.name)
        response.status = "201 Object created.  upload raw file to 'Location'"
        return h.render_json(beautify.image(new_image))
Beispiel #24
0
 def list_users(self, group, format='json'):
     group = meta.Session.query(Group).filter(Group.name == group).first()
     if group:
         urls = [
             url('user', user=u.user_name, qualified=True)
             for u in group.users
         ]
         if format == 'json':
             response.headers[
                 'content-type'] = app_globals.json_content_type
             return h.render_json(urls)
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #25
0
 def list_shared_images(self, group, format='json'):
     group = meta.Session.query(Group).filter(Group.name==group).first()
     if group:
         images = group.shared_images
         urls = [url('image_by_user',
                     user=i.image.owner.user_name,
                     image=i.image.name,
                     qualified=True) for i in images]
         if format == 'json':
             response.headers['content-type'] = app_globals.json_content_type
             return h.render_json(urls)
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #26
0
    def show_meta_by_user(self, user, image, format='json'):
        image_q = meta.Session.query(Image)
        image = image_q.filter(Image.name==image)\
                       .filter(Image.owner.has(User.user_name==user))\
                       .first()

        if image:
            inline_auth(AnyOf(OwnsImage(image), SharedWith(image)), auth_403)
            if format == 'json':
                response.headers[
                    'content-type'] = app_globals.json_content_type
                return h.render_json(beautify.image(image))
            else:
                abort(501, '501 Not Implemented')
        else:
            abort(404, '404 Not Found')
Beispiel #27
0
 def list_images(self, user, format='json'):
     user = meta.Session.query(User).filter(User.user_name == user).first()
     if user:
         images = user.images
         if format == 'json':
             response.headers[
                 'content-type'] = app_globals.json_content_type
             return h.render_json([
                 url('image_by_user',
                     image=i.name,
                     user=user.user_name,
                     qualified=True) for i in images
             ])
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #28
0
    def new_group(self, format='json'):
        params = validate_new_group(request.params)
        new_group = Group(name=params['name'])
        users = params.get('users')
        if users:
            user_names = [u for u in users.split(',')]
            user_q = meta.Session.query(User)
            users = [user_q.filter(User.user_name==u).first() for u in user_names]
            if None in users:
                # abort if any specified user does not exist
                abort(400, '400 Bad Request - user does not exist')
            else:
                [new_group.repo_users.append(u) for u in users]

        meta.Session.add(new_group)
        meta.Session.commit()
        return h.render_json(beautify.group(new_group))
Beispiel #29
0
 def list_shared_images(self, group, format='json'):
     group = meta.Session.query(Group).filter(Group.name == group).first()
     if group:
         images = group.shared_images
         urls = [
             url('image_by_user',
                 user=i.image.owner.user_name,
                 image=i.image.name,
                 qualified=True) for i in images
         ]
         if format == 'json':
             response.headers[
                 'content-type'] = app_globals.json_content_type
             return h.render_json(urls)
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #30
0
 def get_shared_with_me(self, user, format='json'):
     user = meta.Session.query(User).filter(User.user_name == user).first()
     if user:
         shared = user.shared_images
         for g in user.groups:
             shared.extend(g.shared_images)
         shared = list(set(shared))
         if format == 'json':
             response.headers[
                 'content-type'] = app_globals.json_content_type
             return h.render_json([
                 url('image_by_user',
                     image=s.image.name,
                     user=s.image.owner.user_name,
                     qualified=True) for s in shared
             ])
         else:
             abort(501, '501 Not Implemented')
     else:
         abort(404, '404 Not Found')
Beispiel #31
0
    def new_group(self, format='json'):
        params = validate_new_group(request.params)
        new_group = Group(name=params['name'])
        users = params.get('users')
        if users:
            user_names = [u for u in users.split(',')]
            user_q = meta.Session.query(User)
            users = [
                user_q.filter(User.user_name == u).first() for u in user_names
            ]
            if None in users:
                # abort if any specified user does not exist
                abort(400, '400 Bad Request - user does not exist')
            else:
                [new_group.repo_users.append(u) for u in users]

        meta.Session.add(new_group)
        meta.Session.commit()
        response.headers['content-type'] = app_globals.json_content_type
        return h.render_json(beautify.group(new_group))