def put(self, user_id): if not flask.g.user.uid == user_id and not flask.g.user.admin: raise errors.AccessDeniedError('No access to that user.') user = models.User.query.get_or_404(user_id) data = flask.request.get_json() promoting = False if utils.is_admin() and 'admin' in data: if data['admin'] and not user.admin: user.promote() promoting = True else: user.admin = False if data.get('password'): user.set_password(data['password']) if utils.is_admin(): user.nick = data['nick'] if not app.config.get('TEAMS', False): user.team.name = data['nick'] try: models.commit() except AssertionError: if promoting: raise errors.ValidationError('Error promoting. ' 'Has player solved challenges?') raise return user
def put(self, user_id): if not flask.g.uid == user_id and not flask.g.admin: raise errors.AccessDeniedError('No access to that user.') user = models.User.query.get_or_404(user_id) data = flask.request.get_json() if utils.is_admin() and 'admin' in data: if data['admin'] and not user.admin: try: user.promote() except AssertionError: raise errors.ValidationError( 'Error promoting. Has player solved challenges?') else: user.admin = False if data.get('password'): user.set_password(data['password']) if utils.is_admin(): user.nick = data['nick'] if not app.config.get('TEAMS') and user.team: user.team.name = data['nick'] try: models.commit() except AssertionError: raise errors.ValidationError( 'Error in updating user. Details are logged.') return user
def get(self): q = models.Challenge.get_joined_query() challs = [] t = models.Team.current() for chall in q.all(): if utils.is_admin() or chall.unlocked_for_team(t): challs.append(chall) elif chall.teaser: challs.append(self._tease_challenge(chall)) return {'challenges': challs}
def get(self): q = (models.Challenge.query.outerjoin( models.Challenge.answers).add_columns( models.Challenge.answers.label("solves"))) challs = [] t = models.Team.current() for chall, solves in q.all(): chall._solves = solves if utils.is_admin() or chall.unlocked_for_team(t): challs.append(chall) elif chall.teaser: challs.append(self._tease_challenge(chall)) return {'challenges': challs}
def post(self): data = flask.request.get_json() if utils.is_admin(): return self.post_admin(data) return self.post_player(data)