def team_details(self): print self.get_argument('uuid', '') team = Team.by_uuid(self.get_argument('uuid', '')) if team is not None: self.write(team.to_dict()) else: self.write({})
def edit_team(self): ''' Edits the team object ''' try: team = Team.by_uuid(self.get_argument('uuid', '')) if team is None: raise ValidationError("Team does not exist") team.name = self.get_argument('name', team.name) team.motto = self.get_argument('motto', team.motto) team.money = self.get_argument('money', team.money) self.dbsession.add(team) self.dbsession.commit() self.redirect('/admin/users') except ValidationError as error: self.render('admin/view/users.html', errors=[str(error), ] )
def edit_user(self): ''' Update user objects in the database ''' try: user = User.by_uuid(self.get_argument('uuid', '')) if user is None: raise ValidationError("User does not exist") handle = self.get_argument('handle', '') if user.handle != handle: if User.by_handle(handle) is None: logging.info("Updated user handle %s -> %s" % ( user.handle, handle )) user.handle = handle else: raise ValidationError("Handle is already in use") hash_algorithm = self.get_argument('hash_algorithm', '') if hash_algorithm != user.algorithm: if hash_algorithm in user.algorithms: if 0 < len(self.get_argument('bank_password', '')): logging.info("Updated %s's hashing algorithm %s -> %s" % ( user.handle, user.algorithm, hash_algorithm, )) user.algorithm = hash_algorithm else: raise ValidationError( "You must provide a new bank password when updating the hashing algorithm") else: raise ValidationError("Not a valid hash algorithm") user.password = self.get_argument('password', '') if len(self.get_argument('bank_password', '')): user.bank_password = self.get_argument('bank_password', '') team = Team.by_uuid(self.get_argument('team_uuid', '')) if team is not None: if user not in team.members: logging.info("Updated %s's team %s -> %s" % ( user.handle, user.team_id, team.name )) user.team_id = team.id else: raise ValidationError("Team does not exist in database") self.dbsession.add(user) self.dbsession.commit() self.redirect('/admin/users') except ValidationError as error: self.render("admin/view/users.html", errors=[str(error), ] )
def edit_teams(self): ''' Edit existing team objects in the database ''' team = Team.by_uuid(self.get_argument('uuid', '')) if team is not None: try: name = self.get_argument('name', '') if team.name != name: logging.info("Updated team name %s -> %s" % (team.name, name)) team.name = name motto = self.get_argument('motto', '') if team.motto != motto: logging.info("Updated %s's motto %s -> %s" % (team.name, team.motto, motto)) team.motto = motto self.dbsession.add(team) self.dbsession.close() self.redirect("/admin/view/user_objects") except ValueError as error: self.render("admin/view/user_objects.html", errors=["%s" % error]) else: self.render("admin/view/user_objects.html", errors=["Team does not exist"])
def team_details(self): ''' Returns team details in JSON form ''' uuid = self.get_argument('uuid', '') team = Team.by_uuid(uuid) if team is not None: details = { 'name': team.name, 'game_levels': [], } for lvl in team.levels: lvl_details = { 'number': lvl.number, 'captured': [flag.name for flag in team.level_flags(lvl.number)], 'total': len(lvl.flags), } details['game_levels'].append(lvl_details) self.write(details) else: self.write({'error': 'Team does not exist'}) self.finish()
def del_team(self): ''' Delete team objects in the database. ''' team = Team.by_uuid(self.get_argument('uuid', '')) for user in team.members: if user == self.get_current_user(): self.render("admin/view/users.html", errors=["Unable to delete user %s" % user.handle] ) return if team is not None: logging.info("Deleted Team: '%s'" % str(team.name)) self.dbsession.delete(team) self.dbsession.commit() self.flush_memcached() self.redirect("/admin/users") else: self.render("admin/view/users.html", errors=["Team does not exist"] )
def post(self, *args, **kwargs): try: group = self.get_argument('team_uuid', 'all') message = self.get_argument('message', '') value = int(self.get_argument('money', 0)) if group == 'all': teams = Team.all() for team in teams: team.money += value self.dbsession.add(team) self.event_manager.admin_score_update(team, message, value) else: team = Team.by_uuid(group) team.money += value self.dbsession.add(team) self.event_manager.admin_score_update(team, message, value) self.dbsession.commit() self.redirect('/admin/users') except ValidationError as error: self.render('admin/view/users.html', errors=[str(error), ] )
def edit_team(self): ''' Edits the team object ''' try: team = Team.by_uuid(self.get_argument('uuid', '')) if team is None: raise ValidationError("Team does not exist") team.name = self.get_argument('name', team.name) team.motto = self.get_argument('motto', team.motto) team.money = self.get_argument('money', team.money) if hasattr(self.request, 'files') and 'avatarfile' in self.request.files: team.avatar = self.request.files['avatarfile'][0]['body'] else: avatar = self.get_argument('avatar', team.avatar) if team.avatar != avatar and avatar != "": #allow for default without setting team._avatar = avatar self.dbsession.add(team) self.dbsession.commit() self.redirect('/admin/users') except ValidationError as error: self.render('admin/view/users.html', errors=[str(error), ] )
def get_team(self): ''' Create a team object, or pull the existing one ''' team = Team.by_uuid(self.get_argument('team', '')) if team is not None and self.config.max_team_size <= len(team.members): raise ValidationError("Team %s is already full" % team.name) return team if team is not None else self.create_team()
def edit_user(self): ''' Update user objects in the database ''' try: user = User.by_uuid(self.get_argument('uuid', '')) if user is None: raise ValidationError("User does not exist") handle = self.get_argument('handle', '') if user.handle != handle: if User.by_handle(handle) is None: logging.info("Updated user handle %s -> %s" % ( user.handle, handle )) user.handle = handle else: raise ValidationError("Handle is already in use") name = self.get_argument('name', '') email = self.get_argument('email', '') if user.name != name: logging.info("Updated user Name %s -> %s" % ( user.name, name )) user.name = name if user.email != email: logging.info("Updated user Email %s -> %s" % ( user.email, email )) user.email = email if options.banking: hash_algorithm = self.get_argument('hash_algorithm', '') if hash_algorithm != user.algorithm: if hash_algorithm in user.algorithms: if 0 < len(self.get_argument('bank_password', '')): logging.info("Updated %s's hashing algorithm %s -> %s" % ( user.handle, user.algorithm, hash_algorithm, )) user.algorithm = hash_algorithm else: raise ValidationError( "You must provide a new bank password when updating the hashing algorithm") else: raise ValidationError("Not a valid hash algorithm") if len(self.get_argument('bank_password', '')): user.bank_password = self.get_argument('bank_password', '') password = self.get_argument('password', '') if password and len(password) > 0: user.password = password if hasattr(self.request, 'files') and 'avatarfile' in self.request.files: user.avatar = self.request.files['avatarfile'][0]['body'] else: avatar = self.get_argument('avatar', user.avatar) #allow for default without setting user._avatar = avatar team = Team.by_uuid(self.get_argument('team_uuid', '')) if team is not None: if user not in team.members: logging.info("Updated %s's team %s -> %s" % ( user.handle, user.team_id, team.name )) user.team_id = team.id elif options.teams: raise ValidationError("Team does not exist in database") self.dbsession.add(user) admin = self.get_argument('admin', 'false') if admin == 'true' and not user.is_admin(): permission = Permission() permission.name = ADMIN_PERMISSION permission.user_id = user.id self.dbsession.add(permission) elif admin == 'false' and user.is_admin(): permissions = Permission.by_user_id(user.id) for permission in permissions: if permission.name == ADMIN_PERMISSION: self.dbsession.delete(permission) self.dbsession.commit() self.redirect('/admin/users') except ValidationError as error: self.render("admin/view/users.html", errors=[str(error), ] )
def post(self, *args, **kwargs): if args[0] == "statistics" or args[0] == "game_objects": uri = { "game_objects": "admin/view/game_objects.html", "statistics": "admin/view/statistics.html", } flag_uuid = self.get_argument("flag_uuid", "") team_uuid = self.get_argument("team_uuid", "") flag = Flag.by_uuid(flag_uuid) team = Team.by_uuid(team_uuid) errors = [] success = [] if flag: point_restore = self.get_argument("point_restore", "") accept_answer = self.get_argument("accept_answer", "") answer_token = self.get_argument("answer_token", "") if point_restore == "on" and options.penalize_flag_value and team: value = int(flag.value * (options.flag_penalty_cost * 0.01)) team.money += value penalty = Penalty.by_team_token(flag, team, answer_token) if penalty: self.dbsession.delete(penalty) self.dbsession.add(team) self.event_manager.admin_score_update( team, "%s penalty reversed - score has been updated." % team.name, value, ) if flag not in team.flags: team.flags.append(flag) team.money += flag.value self.dbsession.add(team) if self.config.dynamic_flag_value: depreciation = float( old_div(self.config.flag_value_decrease, 100.0) ) flag.value = int(flag.value - (flag.value * depreciation)) self.dbsession.add(flag) self.event_manager.flag_captured(team, flag) self._check_level(flag, team) success.append("%s awarded %d" % (team.name, value)) if ( accept_answer == "on" and (flag.type == "static" or flag.type == "regex") and not flag.capture(answer_token) ): flag.type = "regex" if flag.token.startswith("(") and flag.token.endwith(")"): token = "%s|(%s)" % (flag.token, answer_token) else: token = "(%s)|(%s)" % (flag.token, answer_token) if len(token) < 256: flag.token = token self.dbsession.add(flag) success.append( "Token succesfully added for Flag %s" % flag.name ) else: errors.append("Flag token too long. Can not expand token.") self.dbsession.commit() self.render(uri[args[0]], errors=errors, success=success) else: self.render("public/404.html")
def edit_user(self): ''' Update user objects in the database ''' try: user = User.by_uuid(self.get_argument('uuid', '')) if user is None: raise ValidationError("User does not exist") handle = self.get_argument('handle', '') if user.handle != handle: if User.by_handle(handle) is None: logging.info("Updated user handle %s -> %s" % ( user.handle, handle )) user.handle = handle else: raise ValidationError("Handle is already in use") name = self.get_argument('name', '') email = self.get_argument('email', '') if user.name != name: logging.info("Updated user Name %s -> %s" % ( user.name, name )) user.name = name if user.email != email: logging.info("Updated user Email %s -> %s" % ( user.email, email )) user.email = email if options.banking: hash_algorithm = self.get_argument('hash_algorithm', '') if hash_algorithm != user.algorithm: if hash_algorithm in user.algorithms: if 0 < len(self.get_argument('bank_password', '')): logging.info("Updated %s's hashing algorithm %s -> %s" % ( user.handle, user.algorithm, hash_algorithm, )) user.algorithm = hash_algorithm else: raise ValidationError( "You must provide a new bank password when updating the hashing algorithm") else: raise ValidationError("Not a valid hash algorithm") if len(self.get_argument('bank_password', '')): user.bank_password = self.get_argument('bank_password', '') password = self.get_argument('password', '') if password and len(password) > 0: user.password = password if hasattr(self.request, 'files') and 'avatarfile' in self.request.files: user.avatar = self.request.files['avatarfile'][0]['body'] else: avatar = self.get_argument('avatar', user.avatar) #allow for default without setting user._avatar = avatar team = Team.by_uuid(self.get_argument('team_uuid', '')) if team is not None: if user not in team.members: logging.info("Updated %s's team %s -> %s" % ( user.handle, user.team_id, team.name )) user.team_id = team.id elif options.teams: raise ValidationError("Team does not exist in database") self.dbsession.add(user) self.dbsession.commit() self.redirect('/admin/users') except ValidationError as error: self.render("admin/view/users.html", errors=[str(error), ] )
def edit_user(self): """ Update user objects in the database """ try: user = User.by_uuid(self.get_argument("uuid", "")) if user is None: raise ValidationError("User does not exist") handle = self.get_argument("handle", "") if user.handle != handle: if User.by_handle(handle) is None: logging.info("Updated user handle %s -> %s" % (user.handle, handle)) user.handle = handle else: raise ValidationError("Handle is already in use") name = self.get_argument("name", "") email = self.get_argument("email", "") notes = self.get_argument("notes", "") expire = self.get_argument("expire", "") if user.name != name: logging.info("Updated user Name %s -> %s" % (user.name, name)) user.name = name if user.email != email: logging.info("Updated user Email %s -> %s" % (user.email, email)) user.email = email if user.notes != notes: logging.info("Updated user Notes %s -> %s" % (user.notes, notes)) user.notes = notes if user.expire != expire: logging.info("Updated user Expire %s -> %s" % (user.expire, expire)) user.expire = expire if options.banking: hash_algorithm = self.get_argument("hash_algorithm", "") if hash_algorithm != user.algorithm: if hash_algorithm in user.algorithms: if 0 < len(self.get_argument("bank_password", "")): logging.info( "Updated %s's hashing algorithm %s -> %s" % (user.handle, user.algorithm, hash_algorithm)) user.algorithm = hash_algorithm else: raise ValidationError( "You must provide a new bank password when updating the hashing algorithm" ) else: raise ValidationError("Not a valid hash algorithm") if len(self.get_argument("bank_password", "")): user.bank_password = self.get_argument("bank_password", "") password = self.get_argument("password", "") if password and len(password) > 0: user.password = password if hasattr(self.request, "files") and "avatarfile" in self.request.files: user.avatar = self.request.files["avatarfile"][0]["body"] else: avatar = self.get_argument("avatar", user.avatar) # allow for default without setting user._avatar = avatar admin = self.get_argument("admin", "false") team = Team.by_uuid(self.get_argument("team_uuid", "")) if team is not None: if user not in team.members: logging.info("Updated %s's team %s -> %s" % (user.handle, user.team_id, team.name)) user.team_id = team.id elif options.teams and admin != "true": raise ValidationError("Please select a valid Team.") if admin == "true" and not user.is_admin(): logging.info("Promoted user %s to Admin" % user.handle) permission = Permission() permission.name = ADMIN_PERMISSION permission.user_id = user.id user.team_id = None self.dbsession.add(permission) elif admin == "false" and user.is_admin(): logging.info("Demoted user %s to Player" % user.handle) if user == self.get_current_user(): self.render("admin/view/users.html", errors=["You cannont demote yourself."]) return if team is None: team = Team.by_name(user.handle) if team is None: team = self.create_team(user) user.team_id = team.id permissions = Permission.by_user_id(user.id) for permission in permissions: if permission.name == ADMIN_PERMISSION: self.dbsession.delete(permission) self.dbsession.add(user) self.dbsession.commit() self.event_manager.push_score_update() self.redirect("/admin/users") except ValidationError as error: self.render("admin/view/users.html", errors=[str(error)])