def mutate(self, info, username, password=None, email=None, hidden=None, token=None, active=None, newUsername=None): user = info.context.user # Validate user is admin validate_user_is_admin(user) if User.objects.filter(username__iexact=username).exists(): targetUser = User.objects.get(username__iexact=username) if newUsername is not None: validate_username(newUsername) validate_username_unique(newUsername) targetUser.username = newUsername if password is not None: targetUser.set_password = password if email is not None: validate_email(email) validate_email_unique(email) targetUser.email = email if hidden is not None: targetUser.hidden = hidden if active is not None: targetUser.active = active targetUser.save() else: raise Exception('Error - can\'t find user: %s' % (username)) return UpdateUser(status='User Updated: %s' % (username))
def makeUser(user_name, user_email, user_password, hidden): # Validate admin user command line arguments validate_username(user_name) validate_email(user_email) validate_password(user_password) # Create team for admin user token = str(uuid.uuid4()) while Team.objects.filter(token__iexact=token).exists(): token = str(uuid.uuid4()) user_team = Team(name=user_name, token=token, hidden=hidden) user_team.save() user = User(username=user_name, email=user_email, team=user_team, hidden=hidden) user.set_password(user_password) user.save() # Push admin team to rethinkdb database connection = r.connect(host=RDB_HOST, port=RDB_PORT) try: r.db(CTF_DB).table('teams').insert({ 'sid': user.team.id, 'name': user.team.name, 'points': user.team.points, 'hidden': hidden, 'correct_flags': user.team.correct_flags, 'wrong_flags': user.team.wrong_flags, 'solved': [], 'created': format(user.team.created, 'U') }).run(connection) except RqlRuntimeError as e: raise Exception('Error adding user team to realtime database: %s' % (e)) finally: connection.close()
def mutate(self, info, username, password, email, hidden, token): # Validate active Ctf if Ctf.objects.filter(start__lt=timezone.now(), end__gt=timezone.now()): # Validate username, password, and email validate_username(username) validate_username_unique(username) validate_email(email) validate_email_unique(email) # validate_password(password) # Validate token validate_token(token) if not Team.objects.filter(token__iexact=token).exists(): raise Exception('Invalid team token') # # ======================== # # # Temp fix for stage 1 dev # # # ======================== # # token = str(uuid.uuid4()) # while Team.objects.filter(token__iexact=token).exists(): # token = str(uuid.uuid4()) # team = Team(name=username, token=token, hidden=hidden) # team.save() # # ======================== # # # Temp fix for stage 1 dev # # # ======================== # user = User( username=username, email=email, team=Team.objects.get(token=token), hidden=hidden ) user.set_password(password) user.save() try: threadedScaleAllChallenges() except Exception as ex: raise Exception('error when registering user') # # ======================== # # # Temp fix for stage 1 dev # # # ======================== # # # Push the realtime data to rethinkdb # connection = r.connect(host=RDB_HOST, port=RDB_PORT) # try: # r.db(CTF_DB).table('teams').insert({ 'sid': user.team.id, 'name': user.team.name, 'points': user.team.points, 'hidden': user.team.hidden, 'correct_flags': user.team.correct_flags, 'wrong_flags': user.team.wrong_flags, 'solved': [], 'created': format(user.team.created, 'U')}).run(connection) # except RqlRuntimeError as e: # raise Exception('Error adding team to realtime database: %s' % (e)) # finally: # connection.close() # # ======================== # # # Temp fix for stage 1 dev # # # ======================== # return CreateUser(status='User account created', user=user) else: #no active ctf raise Exception('No currently active CTF')
def mutate(self, info, teamname, username, email, password, hidden): # Validate active Ctf if Ctf.objects.filter(start__lt=timezone.now(), end__gt=timezone.now()): # Validate teamname validate_teamname(teamname) validate_teamname_unique(teamname) # Validate username, password, and email validate_username(username) validate_username_unique(username) validate_email(email) validate_email_unique(email) # validate_password(password) # Create unique team token token = str(uuid.uuid4()) while Team.objects.filter(token__iexact=token).exists(): token = str(uuid.uuid4()) # Create and Save Team team = Team(name=teamname, token=token, hidden=hidden) team.save() # Push team to rethinkdb database connection = r.connect(host=RDB_HOST, port=RDB_PORT) try: r.db(CTF_DB).table('teams').insert({ 'sid': team.id, 'name': team.name, 'points': team.points, 'hidden': team.hidden, 'correct_flags': team.correct_flags, 'wrong_flags': team.wrong_flags, 'solved': [], 'created': format(team.created, 'U') }).run(connection) except RqlRuntimeError as e: raise Exception('Error adding team to realtime database: %s' % (e)) finally: connection.close() # Return Success return CreateTeam(status=('Created Team Successfully'), token=token) else: #no active ctf raise Exception('No currently active CTF')
def test_email(self): with self.assertRaises(ValidationError): validators.validate_email(self.user.email)