Exemple #1
0
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'))
Exemple #2
0
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'))
Exemple #4
0
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'))