Exemplo n.º 1
0
def labView():
    labs = []
    labs.append(Lab('rmre', '文本去重复工具'))
    labs.append(Lab('xsspayload', 'xss常用payload'))
    labs.append(Lab('xsshex', 'xss编码工具'))
    labs.append(Lab('base64', 'base64编解码工具'))
    labs.append(Lab('ujscanner', '扫描器web UI'))
    return render_template("lab.html", labs=labs)
Exemplo n.º 2
0
 async def get(self, request, id):
     with db_session:
         if id == 'all':
             return self.response_status(200,
                                         Lab.select(lambda x: x.active))
         if not Lab.exists(id=id):
             return self.response_status(404)
         return self.response_status(200, Lab.select(x.id == id
                                                     and x.active))
Exemplo n.º 3
0
 async def delete(self, request, id):
     with db_session:
         if not Lab.exists(id=id):
             return self.response_status(404)
         try:
             Lab.get_for_update(id=id)
             Lab[id].set(modified=datetime.now(), active=False)
         except Exception as e:
             return self.response_status(500)
         else:
             return self.response_status(200, Lab[id])
Exemplo n.º 4
0
async def list_containers(name):
    # hosts = Host.select()
    if not os.path.exists(lab_path(name)):
        abort(404)

    containers = []

    show_containers = 'show_containers' in request.args and request.args[
        'show_containers'] == 'True'

    if show_containers:
        try:
            lab = Lab.get(Lab.name == name)
            containers = lab.list_containers()
        except peewee.DoesNotExist:
            pass

    stats = Messenger.get_stats(name)
    if stats and 'start_time' in stats:
        stats['uptime'] = int(time.time() - stats['start_time'])

    return await render_template('containers_list.html',
                                 containers=containers,
                                 lab=name,
                                 stats=stats,
                                 show_containers=show_containers)
Exemplo n.º 5
0
async def stop_lab_api():

    data = await request.json

    if data is None or 'name' not in data:
        return abort(400)

    name = data.get('name')

    try:
        lab = Lab.get(Lab.name == name)
    except peewee.DoesNotExist:
        abort(404)

    try:
        args = []
        if lab.runtime == 'cluster':
            args.extend((lab.get_host_map(), Host.get_all_configs()))

        stop_lab(lab_path(name),
                 prefix(name),
                 *args,
                 runtime=lab.runtime,
                 remove=True)
        lab.delete_instance()
        msg_cache.delete(name)
        return 'OK', 200

    except FileNotFoundError:
        return abort(404)
Exemplo n.º 6
0
    def run(self):
        try:
            ips = []
            nets = []
            for l in self.instance.links:
                ips.append(l['ip'])
                net = NetworkNode.fetchone(gid=l['network']['gid'],
                                           slice_id=self.lab_slice.id)
                nets.append(net)

            instance = self.instance
            public_ip, attrs = self.openstack.create_instance(
                instance.name, nets, ips, instance.configurations,
                self.sec_group_id, instance.image, instance.flavor)
            instance.update(status='active',
                            public_ip=public_ip,
                            cloud_attrs=attrs)
        except Exception as ex:
            error_type = 'Create instances error'
            error_msgs = [error_type + ': ' + str(ex)]

            lab = Lab.fetchone(id=self.lab_id)
            lab.update(status='deployfailed',
                       error_msgs=lab.error_msgs + error_msgs)
            raise Exception(error_type + str(error_msgs))
Exemplo n.º 7
0
def create_networks(cloudconfig, lab_id, lab_slice, topo):
    try:
        openstack = Openstack(cloudconfig.detail['openstackAuthURL'],
                              cloudconfig.detail['openstackProject'],
                              cloudconfig.detail['openstackUser'],
                              cloudconfig.detail['openstackPassword'])
        threads = []
        for n in topo['networks']:
            new_net = NetworkNode.insert(name=n['name'],
                                         cidr=n['cidr'],
                                         status='deploying',
                                         x=n['x'],
                                         y=n['y'],
                                         slice_id=lab_slice.id,
                                         gid=n['gid'])
            t = CreateNetThread(openstack, new_net)
            t.start()
            threads.append(t)

        for t in threads:
            t.join()
    except Exception as ex:
        error_type = 'Create networks error'
        error_msgs = [error_type + ': ' + str(ex)]

        lab = Lab.fetchone(id=lab_id)
        lab.update(status='deployfailed',
                   error_msgs=lab.error_msgs + error_msgs)
        raise Exception(
            error_type
        )  # Raise exception to not execute the next job in the dependency link
Exemplo n.º 8
0
def set_lab_active(lab_id, last_jobs_ids):
    if len(last_jobs_ids) > 0:
        timeout = 20
        while True:
            all_completed = True
            for id in last_jobs_ids:
                job = queue.fetch_job(id)
                if job.get_status() != JobStatus.FINISHED:
                    all_completed = False

            if all_completed:
                break
            time.sleep(5)
            timeout = timeout - 5
            if timeout == 0:
                break

        lab = Lab.fetchone(id=lab_id)
        if timeout == 0:
            error_type = 'Time out error when trying to set lab active'
            error_msgs = [error_type]

            lab.update(status='deployfailed',
                       error_msgs=lab.error_msgs + error_msgs)
        else:
            lab.update(status='active', error_msgs=[])
Exemplo n.º 9
0
 def list_assignments(self):
     course = Course(self.api_client.client, self.args.course)
     labs = [hw["name"] for hw in Lab.list(course)]
     if len(labs) == 0:
         print("Course has no labs.")
     else:
         print_list(labs)
Exemplo n.º 10
0
 def get(self, id):
     lab = Lab.fetchone(id=id)
     if lab is None:
         return jsonify(message="Lab doesn't existed"), 410
     if lab.status == 'inactive':
         return jsonify({
             'id': lab.id,
             'name': lab.name,
             'status': lab.status
         })
     else:
         slices = []
         for sl in Slice.fetchall(lab_id=lab.id):
             user = User.fetchone(id=sl.user_id)
             slices.append({
                 'id': sl.id,
                 'name': sl.name,
                 'status': sl.status,
                 'username': user.fullname
             })
         return jsonify({
             'id': lab.id,
             'name': lab.name,
             'status': lab.status,
             'slices': slices,
             'errors': lab.error_msgs
         })
Exemplo n.º 11
0
    def get(self, *args, **kwargs):
        user_id = int(kwargs['user_id'])
        name = kwargs['name'].lower()
        request_type = kwargs['type'].lower()
        last_name = kwargs['last_name'].lower()

        local_user = User.get_by_id(user_id)
        user = self.user
        if request_type == 'u':
            if local_user and local_user.name.lower(
            ) == name and local_user.key.id() == user_id:
                query = Lab.query()
                if local_user.key.id() == user.key.id():
                    labs = query.filter(
                        Lab.collaborators.IN([local_user.email_address
                                              ])).fetch()
                else:
                    labs = query.filter(
                        Lab.collaborators.IN(
                            [local_user.email_address, user.email_address])
                        and Lab.private == False).fetch()
                params = {'labs': labs, 'local_user': local_user}
                self.render_template('profile', params)
            else:
                self.display_message(
                    'The user who\'s profile you attempted to view does not exist. <a href="/u/{0}.{1}/{2}">Go your profile.</a>'
                    .format(user.name, user.last_name, user.key.id()))
        else:
            self.redirect(self.uri_for('home'))
Exemplo n.º 12
0
def delete_lab(lab_id, last_jobs_ids):
    if len(last_jobs_ids) > 0:
        timeout = 30
        while True:
            all_completed = True
            for id in last_jobs_ids:
                job = queue.fetch_job(id)
                print(job.get_status())
                if job.get_status() != JobStatus.FINISHED:
                    all_completed = False

            if all_completed:
                break
            time.sleep(5)
            timeout = timeout - 5
            if timeout == 0:
                break
        lab = Lab.fetchone(id=lab_id)
        if timeout == 0:
            error_type = 'Time out error when trying to delete lab'
            error_msgs = [error_type]
            lab.update(status='destroyfailed',
                       error_msgs=lab.error_msgs + error_msgs)
        else:
            lab.delete()
Exemplo n.º 13
0
def update_allowed_address_pairs(cloudconfig, lab_id, lab_slice, topo):
    try:
        openstack = Openstack(cloudconfig.detail['openstackAuthURL'],
                              cloudconfig.detail['openstackProject'],
                              cloudconfig.detail['openstackUser'],
                              cloudconfig.detail['openstackPassword'])
        mac_regex = '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$'
        ip_cidr_regex = '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4]' \
                        '[0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-' \
                        'f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-' \
                        '5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5' \
                        ']|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}((' \
                        '(:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0' \
                        '-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]' \
                        '{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0' \
                        '-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d' \
                        '|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1' \
                        ',4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d' \
                        '|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1' \
                        '\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(\/[0-9]{1,2})*$'
        for link in topo['links']:
            address_pairs = []
            network = NetworkNode.fetchone(gid=link['network']['gid'],
                                           slice_id=lab_slice.id)
            if link['target']['type'].lower() == 'instance':
                device = Instance.fetchone(gid=link['target']['gid'],
                                           slice_id=lab_slice.id)
            elif link['target']['type'].lower() == 'router':
                device = Router.fetchone(gid=link['target']['gid'],
                                         slice_id=lab_slice.id)
            else:
                continue
            for raw_address_pair in link.get('allowedAddressPairs', []):
                mac_address, ip_address, _ = (raw_address_pair + ',,').split(
                    ',', 2)
                if ip_address.strip() == '':
                    ip_address = mac_address
                    mac_address = ''
                if (mac_address == '' or re.match(
                        mac_regex, mac_address.strip())) and re.match(
                            ip_cidr_regex, ip_address.strip()):
                    address_pair = {'ip_address': ip_address}
                    if mac_address != '':
                        address_pair['mac_address'] = mac_address
                    address_pairs.append(address_pair)
            if address_pairs:
                openstack.update_allowed_address_pairs(
                    network, device.cloud_attrs['id'], address_pairs)

    except Exception as ex:
        error_type = 'Update allowed address pairs error'
        error_msgs = [error_type + ': ' + str(ex)]

        lab = Lab.fetchone(id=lab_id)
        lab.update(status='deployfailed',
                   error_msgs=lab.error_msgs + error_msgs)
        raise Exception(
            error_type
        )  # Raise exception to not execute the next job in the dependency link
Exemplo n.º 14
0
	def post(self):
		name = self.request.get('name')
		owner = self.request.get('owner')
		collaborators = self.request.get('emails') + ',' + owner
		private = self.request.get('private')
		if private.lower() == 'true':
			private = True
		else:
			private = False
		
		lab = Lab(name = name,
				owner = owner,
				private = private,
				collaborators = collaborators.split(","))
		lab.put()

		time.sleep(0.1)
		self.redirect(self.uri_for('home'))
Exemplo n.º 15
0
	def post(self):
		lab_id = int(self.request.get('id'))
		lab = Lab.get_by_id(lab_id)
		if lab:
			lab.key.delete()
			time.sleep(0.1)
			self.redirect(self.uri_for('home'))
		else:
			self.display_message('There is no lab by this id.')
Exemplo n.º 16
0
 def post(self):
     name = request.get_json()['name']
     description = request.get_json()['description']
     scenario_id = request.get_json()['scenarioId']
     new_lab = Lab.insert(name=name,
                          description=description,
                          scenario_id=scenario_id,
                          owner_id=g.user['id'],
                          status='inactive')
     return jsonify(id=new_lab.id)
Exemplo n.º 17
0
 async def post(self, request):
     req = request.form
     try:
         with db_session:
             if Lab.exists(email=req.get('email')):
                 return self.response_status(409)
             Lab(**self.not_null_data(
                 id=uuid4().hex,
                 name=req.get('name'),
                 email=req.get('email'),
                 web=req.get('web'),
                 phone=req.get('phone'),
                 department=req.get('department'),
                 city=req.get('city'),
                 address=req.get('address'),
                 fertilizers=[],
             ))
     except Exception as e:
         raise e
     return self.response_status(201)
Exemplo n.º 18
0
 def post(self):
     name = request.get_json()['name']
     description = request.get_json()['description']
     scenario_id = request.get_json()['scenarioId']
     preassessment_id = request.get_json()['preassessmentId']
     postassessment_id = request.get_json()['postassessmentId']
     allowed_attempts = request.get_json()['allowedAttempts']
     new_lab = Lab.insert(name=name, description=description, scenario_id=scenario_id,
                          preassessment_id=preassessment_id, postassessment_id=postassessment_id,
                          allowed_attempts=allowed_attempts,
                          owner_id=g.user['id'], status='inactive')
     return jsonify(id=new_lab.id)
Exemplo n.º 19
0
    def destroy(self, id):
        lab = Lab.fetchone(id=id)
        lab.update(status='destroying')
        cloudconfig = CloudConfig.fetchone(lab_id=id)

        if cloudconfig is None:
            """No cloud config has been set. Just delete the lab instance"""
            lab.delete()
            return jsonify(message='ok')

        if cloudconfig.provider == 'Openstack':
            return _destroy_openstack(id, cloudconfig)
Exemplo n.º 20
0
 def index(self):
     """Get labs as a owner"""
     labs = Lab.fetchall(owner_id=g.user['id'])
     ret = []
     for l in labs:
         ret.append({
             'id': l.id,
             'name': l.name,
             'description': l.description,
             'status': l.status,
             'slices': len(Slice.fetchall(lab_id=l.id))
         })
     return jsonify(sorted(ret, key=lambda i: i['id'], reverse=True))
Exemplo n.º 21
0
    def run(self):
        try:
            if self.router.status == 'active':
                self.router.update(status='destroying')
                self.openstack.delete_instance(self.router.cloud_attrs['id'])
                self.router.delete()
        except Exception as ex:
            error_type = 'Delete routers error'
            error_msgs = [error_type + ': ' + str(ex)]

            lab = Lab.fetchone(id=self.lab_id)
            lab.update(status='destroyfailed',
                       error_msgs=lab.error_msgs + error_msgs)
Exemplo n.º 22
0
def set_slice_active(lab_id, lab_slice):
    try:
        lab_slice.update(status='active')
    except Exception as ex:
        error_type = 'Set slice active error'
        error_msgs = [error_type + ': ' + str(ex)]

        lab = Lab.fetchone(id=lab_id)
        lab.update(status='deployfailed',
                   error_msgs=lab.error_msgs + error_msgs)
        raise Exception(
            error_type
        )  # Raise exception to not execute the next job in the dependency link
Exemplo n.º 23
0
 async def patch(self, request, id):
     req = request.form
     with db_session:
         if not Lab.exists(id=id):
             return self.response_status(404)
         if req.get('email') and Lab.exists(email=req.get('email')):
             return self.response_status(409)
         try:
             Lab.get_for_update(id=id)
             changes = self.not_null_data(
                 name=req.get('name'),
                 email=req.get('email'),
                 web=req.get('web'),
                 phone=req.get('phone'),
                 department=req.get('department'),
                 city=req.get('city'),
                 address=req.get('address'),
                 active=req.get('active'),
             )
             Lab[id].set(**changes)
             return self.response_status(200, changes)
         except Exception as e:
             return self.response_status(202)
Exemplo n.º 24
0
def create_routers(cloudconfig, lab_id, lab_slice, topo,
                   create_sec_group_job_id):
    try:
        openstack = Openstack(cloudconfig.detail['openstackAuthURL'],
                              cloudconfig.detail['openstackProject'],
                              cloudconfig.detail['openstackUser'],
                              cloudconfig.detail['openstackPassword'])
        sec_group_id = queue.fetch_job(create_sec_group_job_id).result

        routers = topo['routers']

        for s in routers:
            links = _extract_links(s, topo)
            configurations, password = _extract_configurations(
                lab_id, lab_slice, s, topo)

            Router.insert(name=s['name'],
                          status='deploying',
                          x=s['x'],
                          y=s['y'],
                          gid=s['gid'],
                          slice_id=lab_slice.id,
                          image=s['image'],
                          flavor=s['flavor'],
                          links=links,
                          configurations=configurations,
                          password=password)

        # Actually deployment
        threads = []
        for router in Router.fetchall(slice_id=lab_slice.id):
            t = CreateRouterThread(openstack, lab_id, router, lab_slice,
                                   sec_group_id)
            t.start()
            threads.append(t)

        for t in threads:
            t.join()

    except Exception as ex:
        error_type = 'Create routers error'
        error_msgs = [error_type + ': ' + str(ex)]

        lab = Lab.fetchone(id=lab_id)
        lab.update(status='deployfailed',
                   error_msgs=lab.error_msgs + error_msgs)
        raise Exception(
            error_type
        )  # Raise exception to not execute the next job in the dependency link
Exemplo n.º 25
0
 def get(self, *args, **kwargs):
     lab_id = kwargs['lab_id']
     lab = Lab.get_by_id(int(lab_id))
     if self.user.email_address in lab.collaborators:
         if lab:
             params = {'lab': lab}
             lab.put()
             self.render_template('lab', params)
         else:
             params = {'lab_id': lab_id}
             self.display_message(
                 'There is no such lab registered under your name. <a href="/new_lab">Create A New Lab</a>'
             )
     else:
         self.redirect(self.uri_for('home'))
Exemplo n.º 26
0
async def get_lab_containers():
    name = request.args.get('name')
    if name is None:
        return abort(400)

    if not os.path.exists(lab_path(name)):
        abort(404)

    try:
        lab = Lab.get(Lab.name == name)
        containers = lab.list_containers()
    except peewee.DoesNotExist:
        containers = []

    prefix_len = len(prefix(name))

    return jsonify({c.name[prefix_len:]: c.short_id for c in containers})
	def get(self, *args, **kwargs):
		lab_id = kwargs['lab_id']
		lab = Lab.get_by_id(int(lab_id))
		if self.user.email_address in lab.collaborators:
				if lab:
					params = {
						'lab': lab
					}
					lab.put()
					self.render_template('lab', params)
				else:
					params = {
						'lab_id': lab_id
					}
					self.display_message('There is no such lab registered under your name. <a href="/new_lab">Create A New Lab</a>')
		else: 
			self.redirect(self.uri_for('home'))
Exemplo n.º 28
0
def delete_sec_group(cloudconfig: CloudConfig, lab_id, lab_slice: Slice):
    try:
        openstack = Openstack(cloudconfig.detail['openstackAuthURL'],
                              cloudconfig.detail['openstackProject'],
                              cloudconfig.detail['openstackUser'],
                              cloudconfig.detail['openstackPassword'])
        if lab_slice.cloud_attrs.get('sec_group_id') is not None:
            openstack.delete_security_group(lab_slice.name)
    except Exception as ex:
        error_type = 'Delete security group error'
        error_msgs = [error_type + ': ' + str(ex)]
        lab = Lab.fetchone(id=lab_id)
        lab.update(status='destroyfailed',
                   error_msgs=lab.error_msgs + error_msgs)
        raise Exception(
            error_type
        )  # Raise exception to not execute the next job in the dependency link
Exemplo n.º 29
0
 def index(self):
     """ List ONLY slices that a user has been added to"""
     with Select(Slice, 'user_id = %s') as select:
         select.execute((g.user['id'], ))
         slices = select.fetchall()
     ret = []
     for sl in slices:
         lab = Lab.fetchone(id=sl.lab_id)
         ret.append({
             'id': sl.id,
             'status': sl.status,
             'lab': {
                 'name': lab.name,
                 'description': lab.description,
             }
         })
     return jsonify(sorted(ret, key=lambda i: i['id'], reverse=True))
Exemplo n.º 30
0
def load_order():
    tests = ['ldl']
    for t in tests:
        for f in glob.glob(os.path.join(data_dir, '{}*.csv'.format(t))):
            df = pd.read_csv(f)
            for ix, row in df.iterrows():
                order = session.query(Order).filter(
                    Order.order_id == row['orderid']).first()
                if order:
                    print(order.order_id)
                test = session.query(Test).filter(
                    Test.test_code == row['testid']).first()
                orderDateTime = datetime.strptime(
                    '{} {}'.format(row['orderdate'], row['ordertime']),
                    '%m/%d/%Y %I:%M %p')
                recvDateTime = orderDateTime + timedelta(
                    minutes=randint(10, 50))
                reportDateTime = recvDateTime + timedelta(
                    minutes=randint(10, 50))
                lab = Lab(
                    lab_id=row['labid'],
                    test_id=test.test_code,
                    recv_date=recvDateTime.date(),
                    recv_time=recvDateTime.time(),
                    report_date=reportDateTime.date(),
                    report_time=reportDateTime.time(),
                    results=str(row['results']),
                )
                if not order:
                    order = Order(
                        order_id=row['orderid'],
                        orderdate=parse_date(row['orderdate']),
                        ordertime=parse_time(row['ordertime']),
                        doctor=row['doctor'],
                    )
                order.labs.append(lab)
                session.add(lab)
                session.add(order)
            session.commit()
Exemplo n.º 31
0
    def deploy(self, id):
        cloudconfig_id = request.get_json()['cloudConfigId']
        cloudconfig = CloudConfig.fetchone(id=cloudconfig_id)

        users = request.get_json()['users']

        lab = Lab.fetchone(id=id)
        lab.update(status='deploying')

        """Chances are you are redeploying a lab, whose slices are already created"""
        slices = Slice.fetchall(lab_id=lab.id)

        """Otherwise, create slices for the lab"""
        if len(slices) == 0:
            for index, user in enumerate(users):
                new_slice = Slice.insert(lab_id=lab.id, status='deploying', user_id=user['id'],
                                         name=lab.name + ' / slice_' + str(index), cloud_attrs={})
                slices.append(new_slice)

        scenario = Scenario.fetchone(id=lab.scenario_id)
        if cloudconfig.provider == 'Openstack':
            return _deploy_openstack(id, cloudconfig, slices, scenario)
	def get(self, *args, **kwargs):
		user_id = int(kwargs['user_id'])
		name = kwargs['name'].lower()
		request_type = kwargs['type'].lower()
		last_name = kwargs['last_name'].lower()

		local_user = User.get_by_id(user_id)
		user = self.user
		if request_type == 'u':
			if local_user and local_user.name.lower() == name and local_user.key.id() == user_id:
				query = Lab.query()
				if local_user.key.id() == user.key.id():
					labs = query.filter(Lab.collaborators.IN([local_user.email_address])).fetch()
				else:
					labs = query.filter(Lab.collaborators.IN([local_user.email_address, user.email_address]) and Lab.private == False).fetch()
				params = {
				'labs': labs,
				'local_user': local_user
				}
				self.render_template('profile', params)
			else:
				self.display_message('The user who\'s profile you attempted to view does not exist. <a href="/u/{0}.{1}/{2}">Go your profile.</a>'.format(user.name, user.last_name, user.key.id()))
		else:
			self.redirect(self.uri_for('home'))
Exemplo n.º 33
0
def labadmin(request):
    try:
        if request.user.get_profile().utype < 2:
            return HttpResponseForbidden()
    except:
        return HttpResponseForbidden()
    pinameAdmin = request.user.username
    form = UeditorModelForm(request.POST)
    coverselect = Cover.objects.filter(username=pinameAdmin)
    articleselect = Article.objects.filter(username=pinameAdmin)
    try:
        labobj = Lab.objects.get(pi=pinameAdmin)
    except:
        labobj = Lab(pi=pinameAdmin)
        labobj.save()
    if 'cover' in request.FILES:
        img = request.FILES['cover']
        #newimg = Image.open(img) 
        #cover = newimg.thumbnail((128,128),Image.ANTIALIAS)
        if coverselect:
            coverobj = Cover.objects.get(username=pinameAdmin)
            coverobj.coverimg = img
            coverobj.save()
        else:
            coverobj = Cover(username=pinameAdmin,coverimg=img)
            coverobj.save()
            labobj.cover_set.add(coverobj)
            labobj.save()
    if 'content' in request.POST:
        text = request.POST['content']
        #form = UeditorModelForm(request.POST)
        #text = form.cd['content']
        if articleselect:
            articleobj = Article.objects.get(username=pinameAdmin)
            #form = UeditorModelForm(instance=articleobj)
            articleobj.content = text
            articleobj.save()
            return render_to_response("lab/labadmin.html", locals(), context_instance=RequestContext(request))
        else:
            articleobj = Article(username=pinameAdmin,content=text)
            articleobj.save()
            labobj.article_set.add(articleobj)
            labobj.save()
            return render_to_response("lab/labadmin.html", locals(), context_instance=RequestContext(request))
    if 'author' in request.POST:
        authorraw = request.POST['author']
        paperraw = request.POST['paper']
        urlraw = request.POST['url']
        cellraw = request.POST['cell']
        pmidraw = request.POST['pmid']
        if 'id' in request.POST:
            idraw = request.POST['id']
            pubobj = Publication.objects.get(id=idraw)
            pubobj.author = authorraw
            pubobj.paper = paperraw
            pubobj.url = urlraw 
            pubobj.cell = cellraw
            pubobj.pmid = pmidraw
            pubobj.save()
        else:
            pubobj = Publication(username=pinameAdmin,author=authorraw,paper=paperraw,url=urlraw,cell=cellraw,pmid=pmidraw)
            pubobj.save()
            labobj.publication_set.add(pubobj)
            labobj.save()
    if 'album' in request.FILES:
        photoraw = request.FILES['album']
        albumobj = Album(username=pinameAdmin,photo=photoraw)
        albumobj.save()
        labobj.album_set.add(albumobj)
        labobj.save()

    if coverselect:
        covertarget = Cover.objects.get(username=pinameAdmin)
    else:
        covertarget = 0
    if articleselect:
        articletarget = Article.objects.get(username=pinameAdmin)
    else:
        articletarget = 0
    pubtarget = Publication.objects.filter(username__contains=pinameAdmin)
    labobj = Lab.objects.get(pi=pinameAdmin)
    membertarget = labobj.labrelated.all()
    albumtarget = Album.objects.filter(username__contains=pinameAdmin)
    return render_to_response("lab/labadmin.html", locals(), context_instance=RequestContext(request))
    def post(self):

        #get data from form.
        lab_name = self.request.get('lab-name')
        project_id = self.request.get('project-id')
        lab_zone = self.request.get('lab-zone')
        instance_image = self.request.get('instance-image')
        machine_type = self.request.get('machine-type')
        number_students = int(self.request.get('total-students'))

        #get credentials stored in datastore
        user_id = users.get_current_user().user_id()
        credentials = oauth2client.StorageByKeyName(
        oauth2client.CredentialsModel, user_id, 'credentials').get()

        #configure project object
        gce_project = gce.GceProject(credentials, project_id=project_id, zone_name=lab_zone)

        #create lab entity in datastore
        lab = Lab(name=lab_name,
                  project_id=project_id,
                  lab_zone=lab_zone,
                  machine_type=machine_type,
                  instance_image=instance_image)
        lab.put()

        #create instance objects
        instances = []
        for n in range(number_students):

            # set the username to the name of the instance
            username = '******' % (lab_name, n)
            pass_phrase = security.generate_random_string(length=8)
            if not memcache.add(username, pass_phrase):
                  logging.error('Failed to set memcache')

            metadata_items = [
            {
                'key': 'user',
                'value': username
            },
            {
                'key': 'pass',
                'value': pass_phrase
            },
            {
                'key': 'startup-script-url',
                'value': 'gs://startup-scripts-compute/startup.sh'
            }
            ]

            instance = Instance(name="%s-%s" % (lab_name, n),
                                lab=lab.key,
                                metadata=metadata_items,
                                desired_state="RUNNING",
                                request_timestamp=datetime.now())
            instance.put()

            instances.append(instance)

        start_instances(gce_project, lab, instances)

        self.redirect('/lab/%s' % lab.key.id())
Exemplo n.º 35
0
def InitialData(request):
    model = Lab(name = "Test Name", description = "Test Description", address = "Test Address")
    model.save()
    lab_id = model.id

    model = Experimenter(labkey = Lab.objects.get(pk = lab_id), name = "Test Name", description = "Test Description")
    model.save()
    experimenter_id = model.id

    model = Strain(name = "Test Name", gene = "Test Gene", genotype = "Test Genotype", allele = "Test Allele", chromosome = "Test Chomosome", simulated = "Y")
    model.save()
    strain_id = model.id

    model = Worm(strainkey = Strain.objects.get(pk = strain_id), name = "Test Name", sex = "Test Sex", generationssincethawing = 3, habituation = "Test Habituation")
    model.save()
    worm_id = model.id

    model = Wormlist(wormkey = Worm.objects.get(pk = worm_id), name = "Test Name")
    model.save()
    wormlist_id = model.id

    model = Plate(wormlistkey = Wormlist.objects.get(pk = wormlist_id), experimenterkey = Experimenter.objects.get(pk = experimenter_id), name = "Test Name", sampletype = "Test Type", copyright = "Test Copyright", vulvaorientation = "Test", annotation = "Test Annotation", chemicals = "Test Chemicals", food = "Test Food", illumination = "Test Illumination", temperature = 10, tracker = "Test Tracker", agarside = "Test Agar Side", gasconcentration = "Test Gas Concentration")
    model.save()
    plate_id = model.id

    return HttpResponse(plate_id)