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))
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))
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")
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')
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')
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')
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))
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')
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')
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))
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')
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')
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')
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')
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')
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')
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')
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")
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')
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')
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')
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))
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')
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')
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')
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')
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))
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')
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')
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))