def create_team(self): """ Create a new team """ if not self.config.teams: team = Team.by_name(self.get_argument("handle", "")) if team is None: team = Team() team.name = self.get_argument("handle", "") else: logging.info( "Team %s already exists - Player Mode: reset team." % team.name ) team.flags = [] team.hints = [] team.boxes = [] team.items = [] team.game_levels = [] team.purchased_source_code = [] team.motto = self.get_argument("motto", "") team._avatar = identicon(team.name, 6) if self.config.banking: team.money = self.config.starting_team_money else: team.money = 0 levels = GameLevel.all() for level in levels: if level.type == "none": team.game_levels.append(level) elif level.type != "hidden" and level.buyout == 0: team.game_levels.append(level) return team elif self.config.public_teams: if Team.by_name(self.get_argument("team_name", "")) is not None: raise ValidationError( "This team name is already registered. Use team code to join that team." ) team = Team() team.name = self.get_argument("team_name", "") team.motto = self.get_argument("motto", "") if len(filter_avatars("team")) == 0: team._avatar = identicon(team.name, 6) if not self.config.banking: team.money = 0 level_0 = GameLevel.by_number(0) if not level_0: level_0 = GameLevel.all()[0] team.game_levels.append(level_0) return team else: raise ValidationError("Public teams are not enabled")
def create_team(self): ''' Admins can create teams manually ''' try: name = self.get_argument('team_name', '') if Team.by_name(name) is not None: raise ValidationError("Team already exists") team = Team() team.name = self.get_argument('team_name', '') team.motto = self.get_argument('motto', '') if not self.config.banking: team.money = 0 level_0 = GameLevel.by_number(0) if not level_0: level_0 = GameLevel.all()[0] team.game_levels.append(level_0) self.dbsession.add(team) self.dbsession.commit() # Avatar avatar_select = self.get_argument('team_avatar_select', '') if avatar_select and len(avatar_select) > 0: team._avatar = avatar_select elif hasattr(self.request, 'files') and 'avatar' in self.request.files: team.avatar = self.request.files['avatar'][0]['body'] self.dbsession.add(team) self.dbsession.commit() self.redirect('/admin/users') except ValidationError as error: self.render("admin/create/team.html", errors=[ str(error), ])
def create_team(self): """ Admins can create teams manually """ try: name = self.get_argument("team_name", "") if Team.by_name(name) is not None: raise ValidationError("Team already exists") team = Team() team.name = self.get_argument("team_name", "") team.motto = self.get_argument("motto", "") if not self.config.banking: team.money = 0 level_0 = GameLevel.by_number(0) if not level_0: level_0 = GameLevel.all()[0] team.game_levels.append(level_0) self.dbsession.add(team) self.dbsession.commit() # Avatar avatar_select = self.get_argument("team_avatar_select", "") if avatar_select and len(avatar_select) > 0: team._avatar = avatar_select elif hasattr(self.request, "files") and "avatar" in self.request.files: team.avatar = self.request.files["avatar"][0]["body"] self.dbsession.add(team) self.dbsession.commit() self.event_manager.push_score_update() self.redirect("/admin/users") except ValidationError as error: self.render("admin/create/team.html", errors=[str(error)])
def create_team(self): ''' Admins can create teams manually ''' try: name = self.get_argument('team_name', '') if Team.by_name(name) is not None: raise ValidationError("Team already exists") team = Team() team.name = self.get_argument('team_name', '') team.motto = self.get_argument('motto', '') if not self.config.banking: team.money = 0 level_0 = GameLevel.by_number(0) if not level_0: level_0 = GameLevel.all()[0] team.game_levels.append(level_0) self.dbsession.add(team) self.dbsession.commit() # Avatar avatar_select = self.get_argument('team_avatar_select', '') if avatar_select and len(avatar_select) > 0: team._avatar = avatar_select elif hasattr(self.request, 'files') and 'avatar' in self.request.files: team.avatar = self.request.files['avatar'][0]['body'] self.dbsession.add(team) self.dbsession.commit() self.redirect('/admin/users') except ValidationError as error: self.render("admin/create/team.html", errors=[str(error), ])
def transfer(self): user = self.get_current_user() source = Team.by_name(self.get_argument('source', '')) destination = Team.by_name(self.get_argument('destination', '')) try: amount = int(self.get_argument('amount', 0)) except ValueError: amount = 0 victim_user = User.by_handle(self.get_argument('user', None)) password = self.get_argument('password', '') user = self.get_current_user() # Validate what we got from the user if source is None: self.write({"error": "Source account does not exist"}) elif destination is None: self.write({"error": "Destination account does not exist"}) elif victim_user is None or not victim_user in source.members: self.write({"error": "User is not authorized for this account"}) elif victim_user in user.team.members: self.write({"error": "You cannot steal from your own team"}) elif not 0 < amount <= source.money: self.write({ "error": "Invalid transfer amount; must be greater than 0 and less than $%d" % source.money }) elif destination == source: self.write( {"error": "Source and destination are the same account"}) elif victim_user.validate_bank_password(password): logging.info("Transfer request from %s to %s for $%d by %s" % (source.name, destination.name, amount, user.handle)) xfer = self.theft(victim_user, destination, amount, password) self.write({ "success": "Confirmed transfer to '%s' for $%d (after 15%s commission)" % ( destination.name, xfer, '%', ) }) else: self.write({"error": "Incorrect password for account, try again"}) self.finish()
def create_team(self): ''' Create a new team ''' if not self.config.teams: team = Team.by_name(self.get_argument('handle', '')) if team is None: team = Team() team.name = self.get_argument('handle', '') else: logging.info( "Team %s already exists - Player Mode: reset team." % team.name) team.flags = [] team.hints = [] team.boxes = [] team.items = [] team.game_levels = [] team.purchased_source_code = [] team.motto = self.get_argument('motto', '') if self.config.banking: team.money = self.config.starting_team_money else: team.money = 0 level_0 = GameLevel.by_number(0) if not level_0: level_0 = GameLevel.all()[0] team.game_levels.append(level_0) return team elif self.config.public_teams: if Team.by_name(self.get_argument('team_name', '')) is not None: raise ValidationError( "This team name is already registered. Use team code to join that team." ) team = Team() team.name = self.get_argument('team_name', '') team.motto = self.get_argument('motto', '') if not self.config.banking: team.money = 0 level_0 = GameLevel.by_number(0) if not level_0: level_0 = GameLevel.all()[0] team.game_levels.append(level_0) return team else: raise ValidationError("Public teams are not enabled")
def transfer(self): user = self.get_current_user() source = Team.by_name(self.get_argument('source', '')) destination = Team.by_name(self.get_argument('destination', '')) try: amount = int(self.get_argument('amount', 0)) except ValueError: amount = 0 victim_user = User.by_handle(self.get_argument('user', None)) password = self.get_argument('password', '') user = self.get_current_user() # Validate what we got from the user if source is None: self.write({"error": "Source account does not exist"}) elif destination is None: self.write({"error": "Destination account does not exist"}) elif victim_user is None or victim_user not in source.members: self.write({"error": "User is not authorized for this account"}) elif victim_user in user.team.members: self.write({"error": "You cannot steal from your own team"}) elif not 0 < amount <= source.money: self.write({ "error": "Invalid transfer amount; must be greater than 0 and less than $%d" % source.money }) elif destination == source: self.write({ "error": "Source and destination are the same account" }) elif victim_user.validate_bank_password(password): logging.info("Transfer request from %s to %s for $%d by %s" % ( source.name, destination.name, amount, user.handle )) xfer = self.theft(victim_user, destination, amount, password) self.write({ "success": "Confirmed transfer to '%s' for $%d (15%s commission)" % ( destination.name, xfer, '%' ) }) else: self.write({"error": "Incorrect password for account, try again"}) self.finish()
def info(self): team_name = self.get_argument('account') team = Team.by_name(team_name) if team is not None: self.write({ 'name': team.name, 'balance': team.money, 'users': [user.handle for user in team.members] }) else: self.write({'error': 'Account does not exist'}) self.finish()
def info(self): team_name = self.get_argument("account", "") team = Team.by_name(team_name) if team is not None: self.write({ "name": team.name, "balance": team.money, "users": [user.handle for user in team.members], }) else: self.write({"error": "Account does not exist"}) self.finish()
def create_team(self): ''' Create a new team ''' if not self.config.teams: team = Team.by_name(self.get_argument('handle', '')) if team is None: team = Team() team.name = self.get_argument('handle', '') else: logging.info("Team %s already exists - Player Mode: reset team." % team.name) team.flags = [] team.hints = [] team.boxes = [] team.items = [] team.game_levels = [] team.purchased_source_code = [] team.motto = self.get_argument('motto', '') if self.config.banking: team.money = self.config.starting_team_money else: team.money = 0 level_0 = GameLevel.by_number(0) if not level_0: level_0 = GameLevel.all()[0] team.game_levels.append(level_0) return team elif self.config.public_teams: if Team.by_name(self.get_argument('team_name', '')) is not None: raise ValidationError("This team name is already registered. Use team code to join that team.") team = Team() team.name = self.get_argument('team_name', '') team.motto = self.get_argument('motto', '') if not self.config.banking: team.money = 0 level_0 = GameLevel.by_number(0) if not level_0: level_0 = GameLevel.all()[0] team.game_levels.append(level_0) return team else: raise ValidationError("Public teams are not enabled")
def create_team(self): ''' Create a new team ''' if self.config.public_teams: if Team.by_name(self.get_argument('team_name', '')) is not None: raise ValidationError("This team name is already registered") team = Team() team.name = self.get_argument('team_name', '') team.motto = self.get_argument('motto', '') level_0 = GameLevel.all()[0] team.game_levels.append(level_0) return team else: raise ValidationError("Public teams are not enabled")
def create_team(self): ''' Admins can create teams manually ''' try: name = self.get_argument('team_name', '') motto = self.get_argument('motto', '') if Team.by_name(name) is not None: raise ValidationError("Team already exists") team = Team(name=name, motto=motto) self.dbsession.add(team) self.dbsession.commit() self.redirect('/admin/users') except ValidationError as error: self.render("admin/create/team.html", errors=[str(error), ])
def create_team(self): ''' Admins can create teams manually ''' try: name = self.get_argument('team_name', '') motto = self.get_argument('motto', '') if Team.by_name(name) is not None: raise ValidationError("Team already exists") team = Team() team.name = self.get_argument('team_name', '') team.motto = self.get_argument('motto', '') level_0 = GameLevel.all()[0] self.dbsession.add(team) self.dbsession.commit() self.redirect('/admin/users') except ValidationError as error: self.render("admin/create/team.html", errors=[ str(error), ])
def create_demo_user(): from models.Team import Team from models.User import User from models.GameLevel import GameLevel from models import dbsession if Team.by_name("player") is None: user = User() user.handle = "player" user.password = "******" user.name = "player" user.email = "*****@*****.**" team = Team() team.name = "player" team.motto = "Don't hate the player" team.money = 0 team.game_levels.append(GameLevel.all()[0]) team.members.append(user) dbsession.add(user) dbsession.add(team) dbsession.commit()
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", "") 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 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)])