示例#1
0
 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({})
示例#2
0
 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), ]
                     )
示例#3
0
 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), ]
                     )
示例#4
0
 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()
示例#6
0
 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"]
                     )
示例#7
0
 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), ]
                     )
示例#8
0
 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), ]
                     )
示例#9
0
 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()
示例#10
0
    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), ]
                        )
示例#11
0
 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()
示例#12
0
 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")
示例#13
0
 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), ]
                     )
示例#14
0
    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)])