def add_source_code(self): form = Form( box_uuid="Please select a box", price="Please input a price for the source code", description="Please enter a description", ) if form.validate(self.request.arguments): box = Box.by_uuid(self.get_argument('box_uuid')) if box is not None: if not 'source_archive' in self.request.files and 0 < len(self.request.files['source_archive']): self.render('admin/upgrades/source_code_market.html', errors=["No file data"] ) else: try: price = abs(int(self.get_argument('price', 'NaN'))) self.create_source_code(box, price) self.render('admin/upgrades/source_code_market.html', errors=None ) except ValueError: self.render('admin/upgrades/source_code_market.html', errors=["Price must be an integer"] ) else: self.render('admin/upgrades/source_code_market.html', errors=["The selected box does not exist"] ) else: self.render('admin/upgrades/source_code_market.html', errors=form.errors )
def edit_ipv6(self): ''' Add ipv6 addresses to a box (sorta edits the box object) ''' form = Form(box_uuid="Select a box", ipv6="Please provide a list of IPv6 addresses") if form.validate(self.request.arguments): errors = [] box = Box.by_uuid(self.get_argument('box_uuid')) if box is not None: ips_string = self.get_argument('ipv6').replace('\n', ',').lower() ips = filter(lambda char: char in "1234567890abcdef:,", ips_string).split(",") for ip in filter(lambda ip: 0 < len(ip), ips): try: box = Box.by_ip_address(ip) if box is None: addr = IpAddress(box_id=box.id, v6=ip) dbsession.add(addr) else: errors.append( "%s has already been assigned to %s." % ( ip, box.name, )) except ValueError: errors.append("'%s' is not a valid IPv6 address" % str(ip[:39])) dbsession.flush() else: errors.append("Box does not exist") self.render("admin/view/game_objects.html", errors=errors) else: self.render("admin/view/game_objects.html", errors=form.errors)
def create_flag(self): ''' Create a flag ''' form = Form( box_uuid="Please select a box", flag_name="Please enter a name", token="Please enter a token value", reward="Please enter a reward value", is_file="Please select a file setting", description="Please enter a flag description", ) if form.validate(self.request.arguments): try: if Flag.by_name(self.get_argument('flag_name')) is not None: self.render('admin/create/flag.html', errors=["Name already exists"] ) elif Flag.by_token(self.get_argument('token')) is not None: self.render('admin/create/flag.html', errors=["Token value is not unique"] ) elif Box.by_uuid(self.get_argument('box_uuid')) is None: self.render('admin/create/flag.html', errors=["Box does not exist"] ) else: reward = int(self.get_argument('reward', 'NaN')) self.__mkflag__(reward) self.redirect('/admin/view/game_objects') except ValueError: self.render('admin/create/flag.html', errors=["Invalid reward value"] ) else: self.render("admin/create/flag.html", errors=form.errors)
def add_source_code(self): form = Form( box_uuid="Please select a box", price="Please input a price for the source code", description="Please enter a description", ) if form.validate(self.request.arguments): box = Box.by_uuid(self.get_argument('box_uuid')) if box is not None: if not 'source_archive' in self.request.files and 0 < len( self.request.files['source_archive']): self.render('admin/upgrades/source_code_market.html', errors=["No file data"]) else: try: price = abs(int(self.get_argument('price', 'NaN'))) self.create_source_code(box, price) self.render('admin/upgrades/source_code_market.html', errors=None) except ValueError: self.render('admin/upgrades/source_code_market.html', errors=["Price must be an integer"]) else: self.render('admin/upgrades/source_code_market.html', errors=["The selected box does not exist"]) else: self.render('admin/upgrades/source_code_market.html', errors=form.errors)
def edit_ipv6(self): ''' Add ipv6 addresses to a box (sorta edits the box object) ''' form = Form(box_uuid="Select a box", ipv6="Please provide a list of IPv6 addresses") if form.validate(self.request.arguments): errors = [] box = Box.by_uuid(self.get_argument('box_uuid')) if box is not None: ips_string = self.get_argument('ipv6').replace('\n', ',').lower() ips = filter(lambda char: char in "1234567890abcdef:,", ips_string).split(",") for ip in filter(lambda ip: 0 < len(ip), ips): try: box = Box.by_ip_address(ip) if box is None: addr = IpAddress(box_id=box.id, v6=ip) dbsession.add(addr) else: errors.append( "%s has already been assigned to %s." % (ip, box.name,) ) except ValueError: errors.append( "'%s' is not a valid IPv6 address" % str(ip[:39]) ) dbsession.flush() else: errors.append("Box does not exist") self.render("admin/view/game_objects.html", errors=errors) else: self.render("admin/view/game_objects.html", errors=form.errors)
def create_flag(self): ''' Create a flag ''' form = Form( box_uuid="Please select a box", flag_name="Please enter a name", token="Please enter a token value", reward="Please enter a reward value", is_file="Please select a file setting", description="Please enter a flag description", ) if form.validate(self.request.arguments): try: if Flag.by_name(self.get_argument('flag_name')) is not None: self.render('admin/create/flag.html', errors=["Name already exists"]) elif Flag.by_token(self.get_argument('token')) is not None: self.render('admin/create/flag.html', errors=["Token value is not unique"]) elif Box.by_uuid(self.get_argument('box_uuid')) is None: self.render('admin/create/flag.html', errors=["Box does not exist"]) else: reward = int(self.get_argument('reward', 'NaN')) self.__mkflag__(reward) self.redirect('/admin/view/game_objects') except ValueError: self.render('admin/create/flag.html', errors=["Invalid reward value"]) else: self.render("admin/create/flag.html", errors=form.errors)
def edit_boxes(self): ''' Edit existing boxes in the database ''' form = Form( uuid="Object not selected", name="Missing box name", corporation_uuid="Please select a corporation", description="Please enter a description", difficulty="Please enter a difficulty", ) if form.validate(self.request.arguments): box = Box.by_uuid(self.get_argument('uuid')) if box is not None: errors = [] if self.get_argument('name') != box.name: if Box.by_name(self.get_argument('name')) is None: logging.info("Updated box name %s -> %s" % ( box.name, self.get_argument('name'), )) box.name = unicode(self.get_argument('name')) else: errors.append("Box name already exists") corp = Corporation.by_uuid( self.get_argument('corporation_uuid')) if corp is not None and corp.id != box.corporation_id: logging.info("Updated %s's corporation %s -> %s" % ( box.name, box.corporation_id, corp.id, )) box.corporation_id = corp.id elif corp is None: errors.append("Corporation does not exist") if self.get_argument('description') != box.description: logging.info("Updated %s's description %s -> %s" % ( box.name, box.description, self.get_argument('description'), )) box.description = unicode(self.get_argument('description')) if self.get_argument('difficulty') != box.difficulty: logging.info("Updated %s's difficulty %s -> %s" % ( box.name, box.difficulty, self.get_argument('difficulty'), )) box.difficulty = unicode(self.get_argument('difficulty')) dbsession.add(box) dbsession.flush() self.render("admin/view/game_objects.html", errors=errors) else: self.render("admin/view/game_objects.html", errors=["Box does not exist"]) else: self.render("admin/view/game_objects.html", errors=form.errors)
def __mkflag__(self, reward): ''' Creates a flag in the database ''' box = Box.by_uuid(self.get_argument('box_uuid')) flag = Flag( name=unicode(self.get_argument('flag_name')), token=unicode(self.get_argument('token')), description=unicode(self.get_argument('description')), is_file=bool(self.get_argument('is_file', 'false') == 'true'), box_id=box.id, value=reward, ) dbsession.add(flag) dbsession.flush()
def get(self, *args, **kwargs): ''' Renders the box details page ''' uuid = self.get_argument('uuid', '') box = Box.by_uuid(uuid) if box is not None: user = self.get_current_user() self.render('missions/box.html', box=box, team=user.team, errors=[], ) else: self.render('public/404.html')
def get(self, *args, **kwargs): ''' Renders the box details page ''' uuid = self.get_argument('uuid', '') box = Box.by_uuid(uuid) if box is not None: user = self.get_current_user() self.render( 'missions/box.html', box=box, team=user.team, errors=[], ) else: self.render('public/404.html')
def post(self, *args, **kwargs): form = Form(box_uuid="Please select leaked code to buy") if form.validate(self.request.arguments): box = Box.by_uuid(self.get_argument('box_uuid', '')) if box is not None and box.source_code is not None: user = self.get_current_user() if box.source_code.price <= user.team.money: self.purchase_code(box) self.redirect("/source_code_market") else: self.render_page(["You cannot afford to purchase this code"]) else: self.render_page(["Box does not exist"]) else: self.render_page(form.errors)
def edit_boxes(self): ''' Edit existing boxes in the database ''' form = Form( uuid="Object not selected", name="Missing box name", corporation_uuid="Please select a corporation", description="Please enter a description", difficulty="Please enter a difficulty", ) if form.validate(self.request.arguments): box = Box.by_uuid(self.get_argument('uuid')) if box is not None: errors = [] if self.get_argument('name') != box.name: if Box.by_name(self.get_argument('name')) is None: logging.info("Updated box name %s -> %s" % (box.name, self.get_argument('name'),) ) box.name = unicode(self.get_argument('name')) else: errors.append("Box name already exists") corp = Corporation.by_uuid(self.get_argument('corporation_uuid')) if corp is not None and corp.id != box.corporation_id: logging.info("Updated %s's corporation %s -> %s" % (box.name, box.corporation_id, corp.id,)) box.corporation_id = corp.id elif corp is None: errors.append("Corporation does not exist") if self.get_argument('description') != box.description: logging.info("Updated %s's description %s -> %s" % (box.name, box.description, self.get_argument('description'),) ) box.description = unicode(self.get_argument('description')) if self.get_argument('difficulty') != box.difficulty: logging.info("Updated %s's difficulty %s -> %s" % (box.name, box.difficulty, self.get_argument('difficulty'),) ) box.difficulty = unicode(self.get_argument('difficulty')) dbsession.add(box) dbsession.flush() self.render("admin/view/game_objects.html", errors=errors) else: self.render("admin/view/game_objects.html", errors=["Box does not exist"] ) else: self.render("admin/view/game_objects.html", errors=form.errors)
def box_level(self): ''' Changes a boxs level ''' form = Form(box_uuid="No box selected", level_uuid="No level selected") if form.validate(self.request.arguments): errors = [] box = Box.by_uuid(self.get_argument('box_uuid')) level = GameLevel.by_uuid(self.get_argument('level_uuid')) if box is not None and level is not None: box.game_level_id = level.id dbsession.add(box) dbsession.flush() elif box is None: errors.append("Box does not exist") elif level is None: errors.append("GameLevel does not exist") self.render("admin/view/game_levels.html", errors=errors) else: self.render("admin/view/game_levels.html", errors=form.errors)
def delete_source_code(self): ''' Delete source code file ''' uuid = self.get_argument('box_uuid', '') box = Box.by_uuid(uuid) if box is not None and box.source_code is not None: source_code_uuid = box.source_code.uuid dbsession.delete(box.source_code) dbsession.flush() root = self.application.settings['source_code_market_dir'] source_code_path = root + '/' + source_code_uuid logging.info("Delete souce code market file: %s (box: %s)" % (source_code_path, box.name,) ) if os.path.exists(source_code_path): os.unlink(source_code_path) errors = None else: errors = ["Box does not exist, or contains no source code"] self.render('admin/upgrades/source_code_market.html', errors=errors)
def delete_source_code(self): ''' Delete source code file ''' uuid = self.get_argument('box_uuid', '') box = Box.by_uuid(uuid) if box is not None and box.source_code is not None: source_code_uuid = box.source_code.uuid dbsession.delete(box.source_code) dbsession.flush() root = self.application.settings['source_code_market_dir'] source_code_path = root + '/' + source_code_uuid logging.info("Delete souce code market file: %s (box: %s)" % ( source_code_path, box.name, )) if os.path.exists(source_code_path): os.unlink(source_code_path) errors = None else: errors = ["Box does not exist, or contains no source code"] self.render('admin/upgrades/source_code_market.html', errors=errors)
def get(self, *args, **kwargs): ''' Send file to user if their team owns it ''' uuid = self.get_argument('uuid', '') box = Box.by_uuid(uuid) if box is not None and box.source_code is not None: user = self.get_current_user() if box.source_code in user.team.purchased_source_code: root = self.application.settings['source_code_market_dir'] src_file = open(root + '/' + box.source_code.uuid, 'r') src_data = b64decode(src_file.read()) src_file.close() content_type = guess_type(box.source_code.file_name)[0] if content_type is None: content_type = 'unknown/data' self.set_header('Content-Type', content_type) self.set_header('Content-Length', len(src_data)) self.set_header( 'Content-Disposition', 'attachment; filename=%s' % box.source_code.file_name) self.write(src_data) self.finish() else: self.render('public/404.html') else: self.render('public/404.html')
def get(self, *args, **kwargs): ''' Send file to user if their team owns it ''' uuid = self.get_argument('uuid', '') box = Box.by_uuid(uuid) if box is not None and box.source_code is not None: user = self.get_current_user() if box.source_code in user.team.purchased_source_code: root = self.application.settings['source_code_market_dir'] src_file = open(root + '/' + box.source_code.uuid, 'r') src_data = b64decode(src_file.read()) src_file.close() content_type = guess_type(box.source_code.file_name)[0] if content_type is None: content_type = 'unknown/data' self.set_header('Content-Type', content_type) self.set_header('Content-Length', len(src_data)) self.set_header('Content-Disposition', 'attachment; filename=%s' % box.source_code.file_name ) self.write(src_data) self.finish() else: self.render('public/404.html') else: self.render('public/404.html')
def edit_flags(self): ''' Super ugly code, yes - Edit existing flags in the database ''' form = Form( uuid="Object not selected", name="Please enter a name", token="Please enter a toke value", description="Please provide a description", value="Please enter a reward value", box_uuid="Please select a box", ) if form.validate(self.request.arguments): flag = Flag.by_uuid(self.get_argument('uuid')) if flag is not None: errors = [] if flag.name != self.get_argument('name'): if Flag.by_name(unicode( self.get_argument('name'))) is None: logging.info("Updated flag name %s -> %s" % ( flag.name, self.get_argument('name'), )) flag.name = unicode(self.get_argument('name')) else: errors.append("Flag name already exists") if flag.token != self.get_argument('token'): if Flag.by_token(unicode( self.get_argument('token'))) is None: logging.info("Updated %s's token %s -> %s" % ( flag.name, flag.token, self.get_argument('token'), )) flag.token = unicode(self.get_argument('token')) else: errors.append("Token is not unique") if flag.description != self.get_argument('description'): logging.info("Updated %s's description %s -> %s" % ( flag.name, flag.description, self.get_argument('description'), )) flag.description = unicode( self.get_argument('description')) try: reward_value = int(self.get_argument('value')) if reward_value != flag.value: logging.info("Updated %s's value %d -> %d" % ( flag.name, flag.value, reward_value, )) flag.value = reward_value except ValueError: errors.append("Invalid reward amount") box = Box.by_uuid(self.get_argument('box_uuid')) if box is not None and box.id != flag.box_id: logging.info("Updated %s's box %d -> %d" % (flag.name, flag.box_id, box.id)) flag.box_id = box.id elif box is None: errors.append("Box does not exist") dbsession.add(flag) dbsession.flush() self.render("admin/view/game_objects.html", errors=errors) else: self.render("admin/view/game_objects.html", errors=["Flag does not exist"]) else: self.render("admin/view/game_objects.html", errors=form.errors)
def edit_flags(self): ''' Super ugly code, yes - Edit existing flags in the database ''' form = Form( uuid="Object not selected", name="Please enter a name", token="Please enter a toke value", description="Please provide a description", value="Please enter a reward value", box_uuid="Please select a box", ) if form.validate(self.request.arguments): flag = Flag.by_uuid(self.get_argument('uuid')) if flag is not None: errors = [] if flag.name != self.get_argument('name'): if Flag.by_name(unicode(self.get_argument('name'))) is None: logging.info("Updated flag name %s -> %s" % (flag.name, self.get_argument('name'),) ) flag.name = unicode(self.get_argument('name')) else: errors.append("Flag name already exists") if flag.token != self.get_argument('token'): if Flag.by_token(unicode(self.get_argument('token'))) is None: logging.info("Updated %s's token %s -> %s" % (flag.name, flag.token, self.get_argument('token'),) ) flag.token = unicode(self.get_argument('token')) else: errors.append("Token is not unique") if flag.description != self.get_argument('description'): logging.info("Updated %s's description %s -> %s" % (flag.name, flag.description, self.get_argument('description'),) ) flag.description = unicode(self.get_argument('description')) try: reward_value = int(self.get_argument('value')) if reward_value != flag.value: logging.info("Updated %s's value %d -> %d" % (flag.name, flag.value, reward_value,) ) flag.value = reward_value except ValueError: errors.append("Invalid reward amount") box = Box.by_uuid(self.get_argument('box_uuid')) if box is not None and box.id != flag.box_id: logging.info("Updated %s's box %d -> %d" % (flag.name, flag.box_id, box.id) ) flag.box_id = box.id elif box is None: errors.append("Box does not exist") dbsession.add(flag) dbsession.flush() self.render("admin/view/game_objects.html", errors=errors) else: self.render("admin/view/game_objects.html", errors=["Flag does not exist"] ) else: self.render("admin/view/game_objects.html", errors=form.errors)