Beispiel #1
0
def new_event():
    if request.method == 'POST' and len(request.form) == 7:
        if logged_in():
            errors = []
            try:
                name = request.form['name']
                url = request.form['url']
                start = datetime.strptime(request.form['start'],
                                          '%Y-%m-%dT%H:%M')
                end = datetime.strptime(request.form['end'], '%Y-%m-%dT%H:%M')
                login = request.form['login']
                password = request.form['password']
            except:
                errors.append("Error: missing one or more required fields")

            if len(errors) > 0:
                return jsonify(errors)
            else:
                new_event = Event(name, url, start, end, login, password)
                db.session.add(new_event)
                db.session.commit()
                eid = new_event.eid
                db.session.close()
                flash("Successfully created event")
                return redirect('/event/{}'.format(eid))
        else:
            flash('Must be logged in to do this action')
            return redirect(url_for('auth.login'))
    else:
        return redirect(url_for('core.home'))
Beispiel #2
0
def invite():
    if logged_in():
        invite = Invite()
        db.session.add(invite)
        db.session.commit()
        token = invite.token
        db.session.close()
        return request.url_root + 'register?token=' + token
    return "Must be logged in to generate invite"
Beispiel #3
0
def event(event_id):
    if logged_in():
        event = Event.query.filter_by(eid=event_id).first()
        if event:
            return render_template('event.html', event=event)
        else:
            flash("Error: Event not found")
            return redirect(url_for('core.home'))
    flash('Must be logged in to access events')
    return redirect(url_for('auth.login'))
Beispiel #4
0
def challenge(chal_id):
    if logged_in():
        chal = Challenge.query.filter_by(cid=chal_id).first()
        event = Event.query.filter_by(eid=chal.eid).first()
        db.session.close()
        if chal and event:
            return render_template('challenge.html', chal=chal, event=event)
        else:
            return "Error"
    flash('Must be logged in to access challenges')
    return redirect(url_for('auth.login'))
Beispiel #5
0
def archive(event_id):
    if logged_in():
        e = Event.query.filter_by(eid=event_id).first()
        if e:
            e.archived = True
            db.session.commit()
            db.session.close()
            flash("Event successfully archived")
            return redirect('/event/{}'.format(event_id))
        flash("Event not found")
        return redirect(url_for('core.home'))
    return redirect(url_for('auth.login'))
Beispiel #6
0
def update_challenge():
    if request.method == 'POST' and len(request.form) >= 6:
        if logged_in():
            errors = []
            try:
                eid = request.form['eid']
                name = request.form['name']
                category = request.form['category']
                value = int(request.form['value'])
                desc = request.form['description']
            except:
                errors.append("Error: One or more fields missing or incorrect")

            if len(errors) > 0:
                return "Failed to update challenge"
            else:
                chal = Challenge.query.filter_by(
                    cid=request.form['cid']).first()
                if chal:
                    chal.name = name
                    chal.category = category
                    chal.value = value
                    chal.description = desc
                    db.session.commit()
                    cid = chal.cid

                    #try:
                    files = request.files.getlist('file[]')
                    if files and len(files) > 0:
                        for f in files:
                            if f and len(f.filename) > 0:
                                #try:
                                upload_file(f)
                                new_file = File(cid, f.filename)
                                db.session.add(new_file)
                                db.session.commit()
                                #except:
                            #errors.append("Something went wrong")
                            else:
                                errors.append(
                                    "Error: something wrong with the file or filename"
                                )
                #except:
                #    errors.append("No files recieved")
                    db.session.close()
                    return redirect('/challenge/{}'.format(cid))
                db.session.close()
                return redirect(request.url)
        else:
            flash('Must be logged in to do this action')
            return redirect(url_for('auth.login'))
    else:
        return "Failed to add challenge"
Beispiel #7
0
def before_request():
    """
    Jokaisen HTTP-pyynnön alussa tarkistetaan onko käyttäjä kirjautunut,
    (onko sessiotiedoissa access token ja secret), ja jos ei ole,
    ohjataan kirjautumissivulle. Lisäksi poistetaan urlista "www.".
    """
    if "www." in request.url:
        return redirect(request.url.replace("www.", ""))

    if request.endpoint in ["index", "login", "callback"]:
        return
    elif not logged_in():
        return redirect(url_for("index"))
Beispiel #8
0
def before_request():
    """
    Jokaisen HTTP-pyynnön alussa tarkistetaan onko käyttäjä kirjautunut,
    (onko sessiotiedoissa access token ja secret), ja jos ei ole,
    ohjataan kirjautumissivulle. Lisäksi poistetaan urlista "www.".
    """
    if "www." in request.url:
        return redirect(request.url.replace("www.", ""))

    if request.endpoint in ["index", "login", "callback"]:
        return
    elif not logged_in():
        return redirect(url_for("index"))
Beispiel #9
0
def new_entry():
    if request.method == 'POST':
        if logged_in():
            errors = []
            try:
                entry_type = int(request.form['type'])
            except:
                errors.append("Error: missing type")
                flash("Error: missing type", "error")
                return redirect('/challenge/{}'.format(request.form['cid']))

            chal_id = request.form['cid']
            name = request.form['name']

            if entry_type in range(0, 2):
                desc = request.form['description']
                new_entry = Entry(
                    chal_id,
                    entry_type,
                    name,
                    desc,
                )
            elif entry_type == 2:
                if 'file' in request.files:
                    f = request.files['file']
                    if f and len(f.filename) > 0:
                        try:
                            upload_file(f)
                            new_entry = Entry(chal_id, entry_type, name, None,
                                              f.filename)
                        except:
                            errors.append("Something went wrong")
                    else:
                        errors.append(
                            "Error: something wrong with the file or filename")
                else:
                    errors.append("No file recieved")
            else:
                errors.append("Error: invalid type")
            if len(errors) > 0:
                return str(errors)
            else:
                db.session.add(new_entry)
                db.session.commit()
                db.session.close()
                return redirect('/challenge/{}'.format(chal_id))
        else:
            flash('Must be logged in to do this action')
            return redirect(url_for('auth.login'))
    else:
        return "Failed to add entry"
Beispiel #10
0
def register():
    if not logged_in():
        if request.method == 'GET':
            if request.args.get('token'):
                return render_template('register.html',
                                       token=request.args.get('token'))
        elif request.method == 'POST' and len(request.form) == 5:
            errors = []
            if len(request.form['username']) > 0 and User.query.filter_by(
                    name=request.form['username']).first():
                errors.append('This username is taken')
            else:
                name = request.form['username']

            if re.match(r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)",
                        request.form['email']):
                if User.query.filter_by(email=request.form['email']).first():
                    errors.append('This email has already been used')
                else:
                    email = request.form['email']
            else:
                errors.append('Invalid email')

            if len(request.form['token']) > 0:
                invite = Invite.query.filter_by(
                    token=request.form['token']).first()
                if invite and not invite.expired():
                    invite.used = True
                else:
                    errors.append('Token is invalid or may have expired')
            else:
                errors.append('Token cannot be empty')

            if len(request.form['password']) > 0:
                password = bcrypt.hash(request.form['password'])
            else:
                errors.append('Password cannot be blank')

            if len(errors) > 0:
                return jsonify(errors)
            else:
                user = User(name, email, password)
                db.session.add(user)
                db.session.commit()
                db.session.close()
                return redirect(url_for('auth.login'))
        return render_template('register.html')
    return redirect(url_for('core.home'))
Beispiel #11
0
def index():
    """
    Kirjautuneelle käyttäjälle näytetään "oma sivu", jossa seurattujen
    pelaajien/joukkueiden kauden tilastot sekä uusimpien otteluiden tiedot.

    Kirjautumatonta käyttäjää kehotetaan kirjautumaan sisään.
    """
    if logged_in():
        user_data = get_followed(ids_only=False)
        if not user_data:
            # TODO tähän parempi virheenkäsittely
            return render_template(
                "error.html", e="Jotain mystista tapahtui..")

        # Joukkueet viimeisimmän ottelun mukaan järjestettyyn listaan
        # Lista sisältää vain templatelle olennaisen datan
        teams = []
        for k, v in user_data['teams'].iteritems():
            if v['games'] and v['stats']:
                latest_game = get_latest_game(v['games'])
                stats = v['stats']
                new_team = {
                    'id': k,
                    'stats': v['stats'],
                    'latest_game': get_latest_game(v['games'])}
                teams.append(new_team)
        teams.sort(key=lambda v: v['latest_game']['date'], reverse=True)

        # Samoin pelaajat
        players = []
        for k, v in user_data['players'].iteritems():
            if v['games'] and v['stats']:
                latest_game = get_latest_game(v['games'])
                stats = v['stats']

                new_player = {
                    'id': k,
                    'stats': stats,
                    'latest_game': latest_game}
                players.append(new_player)

        players.sort(key=lambda v: v['latest_game']['date'], reverse=True)

        return render_template("index.html", teams=teams, players=players)
    else:
        return render_template("login.html")
Beispiel #12
0
def working(chal_id):
    if logged_in():
        chal = Challenge.query.filter_by(cid=chal_id).first()
        user = User.query.filter_by(name=session['username']).first()
        if chal and user:
            work = WorkingOn.query.filter_by(cid=chal.cid).filter_by(
                uid=user.uid).first()
            if work:
                work.working = True
            else:
                work = WorkingOn(user.uid, chal.cid)
                db.session.add(work)
            db.session.commit()
            db.session.close()
            return "Success"
        return "User or challenge not found"
    return redirect(url_for('auth.login'))
Beispiel #13
0
def new_challenge():
    if request.method == 'POST' and len(request.form) >= 6:
        if logged_in():
            errors = []
            #try:
            eid = request.form['eid']
            name = request.form['name']
            category = request.form['category']
            value = int(request.form['value'])
            desc = request.form['description']
            #except:

            if len(errors) > 0:
                return "Failed to add challenge [2]"
            else:
                new_chal = Challenge(eid, name, category, desc, value)
                db.session.add(new_chal)
                db.session.commit()

                cid = new_chal.cid
                #try:
                files = request.files.getlist('file[]')
                if files and len(files) > 0:
                    for f in files:
                        if f and len(f.filename) > 0:
                            #try:
                            upload_file(f)
                            new_file = File(cid, f.filename)
                            db.session.add(new_file)
                            db.session.commit()
                            #except:
                        #errors.append("Something went wrong")
                        else:
                            errors.append(
                                "Error: something wrong with the file or filename"
                            )
                    #except:
                    #    errors.append("No files recieved")

                db.session.close()
                return redirect('/event/{}'.format(eid))
        else:
            flash('Must be logged in to create challenges')
            return redirect(url_for('auth.login'))
    else:
        return "Failed to add challenge"
Beispiel #14
0
def login():
    if not logged_in():
        if request.method == 'POST' and len(request.form) == 3:
            errors = []
            user = User.query.filter_by(name=request.form['username']).first()
            db.session.close()
            if user and bcrypt.verify(request.form['password'], user.password):
                session['username'] = user.name
                if user.admin:
                    session['admin'] = True
                else:
                    session['admin'] = False
                flash("Login Successful")
                return redirect(url_for('core.home'))
            flash("Username or password incorrect")
            return redirect(url_for('auth.login'))
        return render_template('login.html')
    else:
        return redirect(url_for('core.home'))
Beispiel #15
0
def stop_working(chal_id):
    if logged_in():
        chal = Challenge.query.filter_by(cid=chal_id).first()
        user = User.query.filter_by(name=session['username']).first()
        if chal and user:
            work = WorkingOn.query.filter_by(cid=chal.cid).filter_by(
                uid=user.uid).first()
            if work:
                work.working = False
                db.session.commit()
                db.session.close()
                return "Success"
            else:
                db.session.close()
                return "You are not working on this challenge"
        else:
            db.session.close()
            return "Challenge or user not found"
    return redirect(url_for('auth.login'))
Beispiel #16
0
def update_event():
    if request.method == 'POST' and len(request.form) == 8:
        if logged_in():
            errors = []
            try:
                name = request.form['name']
                url = request.form['url']
                start = datetime.strptime(request.form['start'],
                                          '%Y-%m-%dT%H:%M:%S')
                end = datetime.strptime(request.form['end'],
                                        '%Y-%m-%dT%H:%M:%S')
                login = request.form['login']
                password = request.form['password']
            except:
                errors.append("Error: missing one or more required fields")

            if len(errors) > 0:
                return redirect(url_for('core.home', errors=errors))
            else:
                event = Event.query.filter_by(eid=request.form['eid']).first()
                if event:
                    event.name = name
                    event.url = url
                    event.start = start
                    event.end = end
                    event.login = login
                    event.password = password
                    db.session.commit()
                    eid = event.eid
                    flash("Successfully created event")
                    return redirect('/event/{}'.format(eid))
                db.session.close()
                flash('Event not found')
                return redirect(request.url)
        flash('Must be logged in to edit events')
        return redirect(url_for('auth.login'))
    return redirect(request.url)
Beispiel #17
0
def submit_flag():
    if request.method == 'POST' and len(request.form) == 3:
        if logged_in():
            errors = []
            try:
                chal_id = request.form['cid']
                flag = request.form['flag']
                chal = Challenge.query.filter_by(cid=chal_id).first()
            except:
                errors.append(
                    "Error: one or more required fields missing or invalid")

            if chal and len(errors) == 0:
                chal.flag = flag
                chal.solved = True
                db.session.commit()
                db.session.close()
                return redirect("/challenge/{}".format(chal_id))
            else:
                return jsonify(errors)
        else:
            flash('Must be logged in to do this action')
            return redirect(url_for('auth.login'))
    return redirect(request.url)
Beispiel #18
0
def make_story():
	if utils.logged_in():
		author = session['username']
		title = get_form_value('title')
		value = str(utils.make_story(title, author))
	return redirect(url_for('index'))
Beispiel #19
0
def logout():
    if logged_in():
        session.clear()
    return redirect(url_for('core.home'))
Beispiel #20
0
def archives():
    if logged_in():
        return render_template('archives.html', events=get_archived_events())
    flash('Must be logged in to access archives')
    return redirect(url_for('auth.login'))