mirror of https://github.com/itsmrval/somycal
web server
parent
720bc084f3
commit
245ffb5a7a
|
|
@ -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)
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
GOOGLE_KEY=""
|
||||||
|
GOOGLE_SECRET=""
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
Werkzeug==2.2.2
|
||||||
|
Flask
|
||||||
|
Flask-OAuthlib
|
||||||
|
Flask-SQLAlchemy
|
||||||
Loading…
Reference in New Issue