# Python standard libraries import json import os import sqlite3 # Third-party libraries import flask from flask import render_template, flash from flask import Flask, redirect, request, url_for from flask_login import ( LoginManager, current_user, login_required, login_user, logout_user, ) import requests import server.googleHandler as google from server import login_manager, app, db from server.forms import LoginForm, RegistrationForm from server.models import User, Calendar @app.route("/") def account(): return flask.redirect('account') @app.route("/account") def index(): if current_user.is_authenticated: google.updateCalendars() return (flask.render_template('account.html', username = current_user.username, email = current_user.email, profile_img=current_user.profile_pic ) ) else: return flask.render_template('login.html') @app.route("/calendar") @login_required def calendar(): calendars = google.calendarsFromDb() return flask.render_template('calendar.html', calendars=calendars) @app.route('/login/email', methods=['GET', 'POST']) def emaillogin(): if current_user.is_authenticated: return redirect(url_for('account') ) form = LoginForm() if form.validate_on_submit(): user = User.query.filter_by(username=form.username.data).first() if user is None or not user.checkPassword(form.password.data): flash('invalid username or password') return redirect(url_for('emaillogin')) login_user(user, remember=form.remember_me.data) return redirect(url_for('account')) return render_template('emaillogin.html', title='Sign In', form=form) @app.route('/register', methods=['GET', 'POST']) def register(): if current_user.is_authenticated: return redirect(url_for('account')) form = RegistrationForm() if form.validate_on_submit(): user = User(id=form.username.data, username=form.username.data, email=form.email.data) user.setPassword(form.password.data) db.session.add(user) db.session.commit() flash('Congratulations, you are now a registered user!') return redirect(url_for('emaillogin')) return render_template('register.html', title='Register', form=form) @app.route("/login/google") def googlelogin(): authorization_url = google.login() return flask.redirect(authorization_url) @app.route("/login/google/callback") def callback(): session = google.verifyResponse() userinfo = session.get('https://www.googleapis.com/userinfo/v2/me').json() # Create a user in your db with the information provided # by Google # Doesn't exist? Add it to the database. if not User.query.get(userinfo['id']): newser = User( id=userinfo['id'], username=userinfo['name'], email=userinfo['email'], profile_pic=userinfo['picture'], password_hash="" ) db.session.add(newser) db.session.commit() user = User.query.get(userinfo['id']) # Begin user session by logging the user in print("login:" + user.id) login_user(user) return flask.redirect(flask.url_for('index')) @app.route("/logout") @login_required def logout(): logout_user() return redirect(url_for("index")) def credentials_to_dict(credentials): return {'token': credentials.token, 'refresh_token': credentials.refresh_token, 'token_uri': credentials.token_uri, 'client_id': credentials.client_id, 'client_secret': credentials.client_secret, 'scopes': credentials.scopes} @app.route("/userinfo//calendarevents.json") def downloader(user): print(user) path = "/home/raphael/dev/website_ws/website/userinfo/" + user return flask.send_from_directory(path, "calendarevents.json") # POST @app.route('/calendar', methods = ['POST', 'DELETE']) @login_required def user(): if request.method == 'POST': calName = request.json.get('calendar_id') color = request.json.get('color') toggle = request.json.get('toggle') if color != None: Calendar.updateCalendar(current_user.id, calName, color=color) if toggle != None: Calendar.updateCalendar(current_user.id, calName, toggle=toggle) # toggle specific calendar of user elif request.method == 'DELETE': # do nothing return 'NONE' else: # POST Error 405 print("405") return 'OK'