def add_shout(): if not session.get('logged_in'): abort(401) shout = bleach.clean( request.form['shout'], tags=app.config['ALLOWED_TAGS']['shout_message'], attributes=app.config['ALLOWED_ATTRS']['shout_message'], ) save_shout(session['username'], shout) flash('Your shout is heard.') return redirect(url_for('show_home'))
def add_tag_to_player(): if not session.get('logged_in'): abort(401) if request.form.get('player') is None or len(request.form['player']) == 0: abort(401) if request.form.get('tag') is None or len(request.form['tag'].strip()) == 0: flash('Please enter a valid tag', 'error') return redirect(url_for('show_players')) tag = bleach.clean( request.form['tag'].lower(), tags=app.config['ALLOWED_TAGS']['tag'], attributes=app.config['ALLOWED_ATTRS']['tag'], ) add_tag(request.form['player'], tag) flash("Tag was saved") save_shout(None, "Someone saw it fit to attribute <b>{player}</b> with the tag <span class=\"tag\">{tag}</span>.".format( tag=tag, player=request.form['player'], )) return redirect(url_for('show_players'))
def add_challenge_page(): if not session.get('logged_in'): abort(401) if request.form['player1'] not in g.ranking: abort(401) if request.form['player2'] not in g.ranking: abort(401) # deny 'serial' challenges fromt the challenger # (placed too quickly after last played challenge) can_challenge = may_challenge( request.form['player1'], app.config['CHALLENGE_COOLDOWN_DURATION_M'], app.config['COOLDOWN_RANDOMIZE_SALT'] ) if not can_challenge: flash( "Serial challenging is not allowed. You are in a cool-down period " "after your last challenge.".format( **request.form ), 'error' ) save_shout( None, "The serial-challenge detection system blocked an attempt by <b>{player}</b>. " "Nice try though.".format( player=request.form['player1'] ) ) # do log the challenge for statistics add_challenge(request.form['player1'], request.form['player2'], active=False) return redirect(url_for('show_challenges')) # deny 'too fast' challenges' of a just-challenged challengee can_be_challenged = may_be_challenged( request.form['player2'], app.config['CHALLENGE_COOLDOWN_DURATION_M'], app.config['COOLDOWN_RANDOMIZE_SALT'] ) if not can_be_challenged: flash( "Player {challengee} has just played a defensive challenge. He/she is still in " "a cool-down period where you cannot challenge him/her yet. Patience!".format( challengee=request.form['player2'], ), 'error' ) # no shout necessary # do log the challenge for statistics add_challenge(request.form['player1'], request.form['player2'], active=False) return redirect(url_for('show_challenges')) # deny challenges to anyone who is already in a challenge if any(chal for chal in g.challenges if chal.challenger.name == request.form['player1']): flash("You already have an open challenge.", 'error') return redirect(url_for('show_challenges')) if any(chal for chal in g.challenges if chal.defender.name == request.form['player1']): flash("You are already challanged.", 'error') return redirect(url_for('show_challenges')) if any(chal for chal in g.challenges if chal.challenger.name == request.form['player2']): flash("Player {player2} already has an open challenge.".format(**request.form), 'error') return redirect(url_for('show_challenges')) if any(chal for chal in g.challenges if chal.defender.name == request.form['player2']): flash("Player {player2} is already challenged.".format(**request.form), 'error') return redirect(url_for('show_challenges')) add_challenge(request.form['player1'], request.form['player2']) flash("Challenge was saved") save_shout(None, "<b>{player1}</b> challenged <b>{player2}</b>".format(**request.form)) send_email( player_name=request.form['player2'], title='You have been challenged by {challenger}'.format(challenger=request.form['player1']), body_text='Hi {challengee},\n\nPlayer {challenger} has just challenged you on the PingPongLadder.\n\nSee more at {website_url}.\n\n--\nThe PingPongLadder'.format( website_url=app.config['WEBSITE_URL'], challenger=request.form['player1'], challengee=request.form['player2'], ), cc=[request.form['player1']], ) return redirect(url_for('show_challenges'))
def add_game(): if not session.get('logged_in'): abort(401) if request.form['player1'] not in g.ranking: abort(401) if request.form['player2'] not in g.ranking: abort(401) scores = ( (request.form['player1_score1'], request.form['player2_score1']), (request.form['player1_score2'], request.form['player2_score2']), (request.form['player1_score3'], request.form['player2_score3']), ) for game in scores: for score in game: if len(score) > 0 and not score.isnumeric(): abort(401) comment = bleach.clean( request.form.get('comment', ''), tags=app.config['ALLOWED_TAGS']['game_comment'], attributes=app.config['ALLOWED_ATTRS']['game_comment'], ) game = save_game( request.form['player1'], request.form['player2'], scores, comment, date=datetime.utcnow() ) flash("Game result was saved") link_challenge_to_game(game) flash("Open challenge (if any) was removed") challenger_lost = player2_won( [scores[0][0], scores[1][0], scores[2][0]], [scores[0][1], scores[1][1], scores[2][1]] ) if challenger_lost: winner = game.defender shout_message = '<b>{player1}</b> could not win from {nick} <b>{player2}</b> {score[0][0]}-{score[0][1]} {score[1][0]}-{score[1][1]} {score[2][0]}{dash}{score[2][1]}{comment}' else: winner = game.challenger shout_message = '{nick}<b>{player1}</b> beat <b>{player2}</b> {score[0][0]}-{score[0][1]} {score[1][0]}-{score[1][1]} {score[2][0]}{dash}{score[2][1]}{comment}' if len(comment) > 0: comment = '<div class="gamecomment">{comment}</div>'.format(comment=comment) # pick one of the winner's nicknames nickname = '' if any(winner.tags): nickname = " '<span class=\"tag\">{random_tag}</span>' ".format( random_tag=random.choice(winner.tags).tag ) save_shout(None, shout_message.format( player1=request.form['player1'], player2=request.form['player2'], nick=nickname, score=scores, dash='-' if request.form['player1_score3'] else '', comment=comment )) return redirect(url_for('show_games'))