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'))
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"
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'))
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'))
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'))
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"
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"))
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"
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'))
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")
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'))
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"
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'))
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'))
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)
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)
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'))
def logout(): if logged_in(): session.clear() return redirect(url_for('core.home'))
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'))