calendarwatch_frontend/server/routes.py
raphael f156d38739 adds more advanced database handling unsing sql alchemy
- moves app into package
- adds sql alchemy equipment
- moves templates into server package
- add app.db sqlite file
2020-04-22 20:15:21 +00:00

125 lines
3.2 KiB
Python

# Python standard libraries
import json
import os
import sqlite3
# Third-party libraries
import flask
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.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/google")
def login():
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/<path:user>/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'