diff --git a/app.py b/app.py new file mode 100644 index 0000000..8d7b2ca --- /dev/null +++ b/app.py @@ -0,0 +1,80 @@ +from flask import Flask, redirect, url_for, session +from flask_oauthlib.client import OAuth +from flask_sqlalchemy import SQLAlchemy +import os +from dotenv import load_dotenv +load_dotenv() + +app = Flask(__name__) + +app.config['SECRET_KEY'] = 'fjlksjfnklsdfnsdklfnsdkjfnsdjkfnds' +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.db' +app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False +db = SQLAlchemy(app) + +oauth = OAuth(app) + +google = oauth.remote_app( + 'google', + consumer_key=os.getenv('GOOGLE_KEY'), + consumer_secret=os.getenv('GOOGLE_SECRET'), + request_token_params={ + 'scope': 'email', + }, + base_url='https://www.googleapis.com/oauth2/v1/', + request_token_url=None, + access_token_method='POST', + access_token_url='https://accounts.google.com/o/oauth2/token', + authorize_url='https://accounts.google.com/o/oauth2/auth', +) + +class User(db.Model): + id = db.Column(db.Integer, primary_key=True) + email = db.Column(db.String(120), unique=True) + +class Team(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(120), unique=True) + idUser = db.Column(db.Integer, db.ForeignKey('user.id')) + +@app.route('/') +def index(): + if 'google_token' in session: + me = google.get('userinfo') + user = User.query.filter_by(google_id=me.data['id']).first() + if user is None: + user = User(google_id=me.data['id'], email=me.data['email']) + db.session.add(user) + db.session.commit() + return 'Logged in as: ' + me.data['email'] + return redirect("/login", code=302) + +@app.route('/login') +def login(): + return google.authorize(callback=url_for('authorized', _external=True)) + +@app.route('/logout') +def logout(): + session.pop('google_token', None) + return 'Logged out' + +@app.route('/login/authorized') +def authorized(): + response = google.authorized_response() + if response is None or response.get('access_token') is None: + return 'Access denied: reason={} error={}'.format( + request.args['error_reason'], + request.args['error_description'] + ) + session['google_token'] = (response['access_token'], '') + me = google.get('userinfo') + return redirect("/", code=302) + +@google.tokengetter +def get_google_oauth_token(): + return session.get('google_token') + +if __name__ == '__main__': + with app.app_context(): + db.create_all() + app.run(debug=True) \ No newline at end of file diff --git a/example.env b/example.env new file mode 100644 index 0000000..728f5fd --- /dev/null +++ b/example.env @@ -0,0 +1,2 @@ +GOOGLE_KEY="" +GOOGLE_SECRET="" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2caba87 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +Werkzeug==2.2.2 +Flask +Flask-OAuthlib +Flask-SQLAlchemy \ No newline at end of file