adds template structure
This commit is contained in:
parent
bcb3b1bbac
commit
53a1f201f8
45
app.py
45
app.py
@ -42,7 +42,9 @@ GOOGLE_DISCOVERY_URL = (
|
|||||||
"https://accounts.google.com/.well-known/openid-configuration"
|
"https://accounts.google.com/.well-known/openid-configuration"
|
||||||
)
|
)
|
||||||
# Flask app setup
|
# Flask app setup
|
||||||
app = Flask(__name__)
|
app = Flask(__name__,
|
||||||
|
static_folder='static',
|
||||||
|
template_folder='template')
|
||||||
app.secret_key = os.environ.get("SECRET_KEY") or os.urandom(24)
|
app.secret_key = os.environ.get("SECRET_KEY") or os.urandom(24)
|
||||||
|
|
||||||
# User session management setup
|
# User session management setup
|
||||||
@ -66,27 +68,43 @@ def load_user(user_id):
|
|||||||
return User.get(user_id)
|
return User.get(user_id)
|
||||||
|
|
||||||
@app.route("/")
|
@app.route("/")
|
||||||
|
def account():
|
||||||
|
return flask.redirect('account')
|
||||||
|
|
||||||
|
@app.route("/account")
|
||||||
def index():
|
def index():
|
||||||
if current_user.is_authenticated:
|
if current_user.is_authenticated:
|
||||||
return (
|
return (flask.render_template('account.html',
|
||||||
"<p>Hello, {}! You're logged in! Email: {}</p>"
|
username = current_user.name, email = current_user.email, profile_img=current_user.profile_pic
|
||||||
"<div><p>Google Profile Picture:</p>"
|
|
||||||
'<img src="{}" alt="Google profile pic"></img></div>'
|
|
||||||
'<a class="button" href="/logout">Logout</a>'
|
|
||||||
'<a class="button" href="/test">test API</a>'.format(
|
|
||||||
current_user.name, current_user.email, current_user.profile_pic
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return '<a class="button" href="/login">Google Login</a>'
|
return flask.render_template('login.html')
|
||||||
|
|
||||||
def get_google_provider_cfg():
|
def get_google_provider_cfg():
|
||||||
return requests.get(GOOGLE_DISCOVERY_URL).json()
|
return requests.get(GOOGLE_DISCOVERY_URL).json()
|
||||||
|
|
||||||
|
class Calendar:
|
||||||
|
def __init__(self, name, color):
|
||||||
|
self.name = name
|
||||||
|
self.color = color
|
||||||
|
|
||||||
|
@app.route("/calendar")
|
||||||
|
def calendar():
|
||||||
|
ca1 = Calendar("Hightower", "#30ff30")
|
||||||
|
ca2 = Calendar("Toast", "#66e230")
|
||||||
|
calendars = [ca1, ca2]
|
||||||
|
return flask.render_template('calendar.html', calendars=calendars)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/test')
|
@app.route('/test')
|
||||||
def test_api_request():
|
def test_api_request():
|
||||||
if 'credentials' not in flask.session:
|
if 'credentials' not in flask.session:
|
||||||
return flask.redirect('login')
|
return flask.redirect('login/google')
|
||||||
|
|
||||||
# Load credentials from the session.
|
# Load credentials from the session.
|
||||||
credentials = google.oauth2.credentials.Credentials(
|
credentials = google.oauth2.credentials.Credentials(
|
||||||
@ -102,7 +120,7 @@ def test_api_request():
|
|||||||
|
|
||||||
return flask.jsonify(todaysCal)
|
return flask.jsonify(todaysCal)
|
||||||
|
|
||||||
@app.route("/login")
|
@app.route("/login/google")
|
||||||
def login():
|
def login():
|
||||||
|
|
||||||
'''
|
'''
|
||||||
@ -140,12 +158,9 @@ def login():
|
|||||||
# Store the state so the callback can verify the auth server response.
|
# Store the state so the callback can verify the auth server response.
|
||||||
flask.session['state'] = state
|
flask.session['state'] = state
|
||||||
|
|
||||||
print("auth_url: " + authorization_url)
|
|
||||||
print("state: " + state)
|
|
||||||
|
|
||||||
return flask.redirect(authorization_url)
|
return flask.redirect(authorization_url)
|
||||||
|
|
||||||
@app.route("/login/callback")
|
@app.route("/login/google/callback")
|
||||||
def callback():
|
def callback():
|
||||||
# Specify the state when creating the flow in the callback so that it can
|
# Specify the state when creating the flow in the callback so that it can
|
||||||
# verified in the authorization server response.
|
# verified in the authorization server response.
|
||||||
|
8
template/account.html
Normal file
8
template/account.html
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{% extends "sidebar.html" %}
|
||||||
|
{% block body%}
|
||||||
|
<p>Hello, {{ username }}! You're logged in! Email: {{email}}</p>
|
||||||
|
<div><p>Google Profile Picture:</p>
|
||||||
|
<img src={{ profile_img }} alt="Google profile pic"></img></div>
|
||||||
|
<a class="button" href="/logout">Logout</a>
|
||||||
|
<a class="button" href="/test">test API</a>
|
||||||
|
{% endblock %}
|
35
template/calendar.html
Normal file
35
template/calendar.html
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{% extends "sidebar.html" %}
|
||||||
|
{% block body%}
|
||||||
|
<div>
|
||||||
|
<div style="width: 30%; float: left" align="center" >Calendar</div>
|
||||||
|
<div style="width: 30%; float: left" align="center">Show on device</div>
|
||||||
|
<div style="width: 30%; float: left" align="center">Color</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="margin-top: 50px">
|
||||||
|
{% for item in calendars %}
|
||||||
|
<div style="width: 30%; float: left" align="center" >{{ item.name }}</div>
|
||||||
|
|
||||||
|
<div style="width: 30%; float: left" align="center">
|
||||||
|
<!-- Rounded switch -->
|
||||||
|
<label class="switch">
|
||||||
|
<input type="checkbox">
|
||||||
|
<span class="slider round"></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="width: 30%; float: left" align="center">
|
||||||
|
<div>
|
||||||
|
<input type="color" id="head" name="head"
|
||||||
|
value="#e66465">
|
||||||
|
<label for="head">Test</label>
|
||||||
|
</div>
|
||||||
|
<!--svg height="20" width="20">
|
||||||
|
<circle cx="10" cy="10" r="10" stroke="black" stroke-width="0" fill={{ item.color }} />
|
||||||
|
</svg-->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
46
template/login.html
Normal file
46
template/login.html
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
|
<link rel="stylesheet" type="text/css" href="/static/css/main.css">
|
||||||
|
<title>Index</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1 style="color: blue">Login Page</h1>
|
||||||
|
|
||||||
|
<!--Google Login-->
|
||||||
|
<div class="center-align">
|
||||||
|
<div class="col s12 m6 offset-m3 center-align" style=" margin: 5px;">
|
||||||
|
<a class="oauth-container btn darken-4 white black-text" href="/login/google" style="text-transform:none">
|
||||||
|
<div class="left">
|
||||||
|
<img width="20px" style="margin-top:7px; margin-right:8px" alt="Google sign-in"
|
||||||
|
src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/53/Google_%22G%22_Logo.svg/512px-Google_%22G%22_Logo.svg.png" />
|
||||||
|
</div class="login_google">
|
||||||
|
<div class="login_google">Login with Google</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--Email Login-->
|
||||||
|
<div class="col s12 m6 offset-m3 center-align" style=" margin: 5px;">
|
||||||
|
<a class="oauth-container btn darken-4 white black-text" href="/login/email" style="text-transform:none">
|
||||||
|
<div class="left">
|
||||||
|
<img width="20px" style="margin-top:7px; margin-right:8px" alt="E-mail sign-in"
|
||||||
|
src="http://assets.stickpng.com/thumbs/585e4bf3cb11b227491c339a.png" />
|
||||||
|
</div>
|
||||||
|
<div class="login_email">Login with Email</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Compiled and minified CSS -->
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/css/materialize.min.css">
|
||||||
|
|
||||||
|
<!-- Compiled and minified JavaScript -->
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/js/materialize.min.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
31
template/sidebar.html
Normal file
31
template/sidebar.html
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
|
<link rel="stylesheet" type="text/css" href="/static/css/main.css">
|
||||||
|
<title>Index</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- Side navigation -->
|
||||||
|
<div class="sidenav">
|
||||||
|
<a href="/view">View</a>
|
||||||
|
<a href="/calendar">Calendar</a>
|
||||||
|
<a href="/account">Account</a>
|
||||||
|
<a href="/devices">Devices</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Page content -->
|
||||||
|
<div class="main">
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
// content here
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user