Skip to content
This repository has been archived by the owner on Feb 27, 2019. It is now read-only.

Commit

Permalink
added user_id column in Credential, modified create_user and adapted …
Browse files Browse the repository at this point in the history
…tests
  • Loading branch information
bongi23 committed Nov 27, 2018
1 parent e56be52 commit b263de5
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 27 deletions.
25 changes: 14 additions & 11 deletions flaskapp/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
from flask import Flask
from flaskapp.views import blueprints
from flaskapp.auth import login_manager
from flaskapp.database import db, Credential



def create_app():
Expand All @@ -12,29 +14,30 @@ def create_app():
app.config['WTF_CSRF_SECRET_KEY'] = 'A SECRET KEY'
app.config['SECRET_KEY'] = 'ANOTHER ONE'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///beepbeep.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['STRAVA_CLIENT_ID'] = os.environ['STRAVA_CLIENT_ID']
app.config['STRAVA_CLIENT_SECRET'] = os.environ['STRAVA_CLIENT_SECRET']

for blueprint in blueprints:
app.register_blueprint(blueprint)
blueprint.app = app

from flaskapp.database import db, Credential
db.init_app(app)
db.create_all(app=app)
login_manager.init_app(app)

# create a first admin user
# with app.app_context():
# q = db.session.query(Credential).filter(Credential.email == 'example@example.com')
# user_credential = q.first()
# if user_credential is None:
# example = Credential()
# example.email = 'example@example.com'
# example.is_admin = True
# example.set_password('admin')
# db.session.add(example)
# db.session.commit()
with app.app_context():
q = db.session.query(Credential).filter(Credential.email == 'example@example.com')
user_credential = q.first()
if user_credential is None:
example = Credential()
example.email = 'example@example.com'
example.is_admin = True
example.user_id = -1;
example.set_password('admin')
db.session.add(example)
db.session.commit()
return app


Expand Down
15 changes: 15 additions & 0 deletions flaskapp/auth.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,25 @@
import functools
from flask_login import current_user, LoginManager, fresh_login_required
from flaskapp.database import Credential
from stravalib import Client
import os

login_manager = LoginManager()


def _strava_auth_url():
client = Client()
client_id = os.environ['STRAVA_CLIENT_ID']
redirect = 'http://127.0.0.1:5001/strava_auth'
url = client.authorization_url(client_id=client_id,
redirect_uri=redirect)
return url


def strava_auth_url(config):
return _strava_auth_url()


def admin_required(func):
@functools.wraps(func)
def _admin_required(*args, **kw):
Expand Down
1 change: 1 addition & 0 deletions flaskapp/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class Credential(db.Model):
email = db.Column(db.Unicode(128), nullable=False)
password = db.Column(db.Unicode(128), nullable=False)
user_id = db.Column(db.Integer, nullable=False)
authorized_strava = db.Column(db.Boolean)
is_active = db.Column(db.Boolean, default=True)
is_admin = db.Column(db.Boolean, default=False)

Expand Down
4 changes: 3 additions & 1 deletion flaskapp/utils.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@

def SingletonDecorator(class_):
instances = {}

def getinstance(*args, **kwargs):
if class_ not in instances:
instances[class_] = class_(*args, **kwargs)
return instances[class_]
return getinstance
return getinstance
30 changes: 29 additions & 1 deletion flaskapp/views/auth.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,39 @@
from flask import Blueprint, render_template, redirect, flash, make_response
from flask import Blueprint, render_template, redirect, flash, make_response, request
from flask_login import current_user, login_user, logout_user, login_required
from flaskapp.database import db, Credential
from flaskapp.forms import LoginForm
from flaskapp.views.home import index
from stravalib import Client
from flaskapp.auth import strava_auth_url
import os
import requests

auth = Blueprint('auth', __name__)

DATASERVICE = os.environ['DATA_SERVICE']


@auth.route('/strava_auth')
@login_required
def _strava_auth(): # pragma: no cover
code = request.args.get('code')
client = Client()
xc = client.exchange_code_for_token
access_token = xc(client_id=os.environ['STRAVA_CLIENT_ID'],
client_secret=os.environ['STRAVA_CLIENT_SECRET'],
code=code)
user_id = db.session.query(Credential).filter(current_user.id == Credential.id).first().user_id
reply = requests.post(DATASERVICE + '/users/'+str(user_id), json={'strava_token': access_token})

if reply.status_code == 409:
return make_response(render_template('strava_error.html', auth_url=strava_auth_url()), 409)

current_user.authorized_strava = True
db.session.merge(current_user)
db.session.commit()

return redirect('/')


@auth.route('/login', methods=['GET', 'POST'])
def login():
Expand Down
17 changes: 3 additions & 14 deletions flaskapp/views/home.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,12 @@
from flask import Blueprint, render_template
from flask_login import current_user
from flaskapp.services import DataService
from flaskapp.auth import strava_auth_url
from stravalib import Client

home = Blueprint('home', __name__)


def _strava_auth_url(config):
client = Client()
client_id = config['STRAVA_CLIENT_ID']
redirect = 'http://127.0.0.1:5000/strava_auth'
url = client.authorization_url(client_id=client_id,
redirect_uri=redirect)
return url


def strava_auth_url(config):
return _strava_auth_url(config)


@home.route('/')
def index():
user = None
Expand All @@ -36,4 +24,5 @@ def index():
print("ERROR: ", ex)
# TODO: Add an error message

return render_template("index.html", current_user=current_user, strava_auth_url=strava_auth_url(home.app.config), total_average_speed=total_average_speed)
return render_template("index.html", current_user=current_user, strava_auth_url=strava_auth_url(home.app.config),
total_average_speed=total_average_speed)

0 comments on commit b263de5

Please sign in to comment.