from flask import render_template, redirect from flask_sqlalchemy import SQLAlchemy from flask import jsonify from werkzeug.security import gen_salt from flask_oauthlib.provider import OAuth1Provider import logging # configuration DEBUG = True # DATABASE = './templates/my_db.sqlite' # can't SECRET_KEY = 'hi secret' # app = Flask(__name__) db = SQLAlchemy(app) oauth = OAuth1Provider(app) # logger = logging.getLogger('flask_oauthlib') logger.addHandler(logging.StreamHandler()) logger.setLevel(logging.DEBUG) # app.config.from_object(__name__) app.config.update({ 'SQLALCHEMY_DATABASE_URI': 'sqlite:///./templates/my_db.sqlite', 'OAUTH1_PROVIDER_ENFORCE_SSL': False, 'OAUTH1_PROVIDER_KEY_LENGTH': (10, 100), })
def create_server(app): app = prepare_app(app) oauth = OAuth1Provider(app) @oauth.clientgetter def get_client(client_key): return Client.query.filter_by(client_key=client_key).first() @oauth.tokengetter def load_access_token(client_key, token, *args, **kwargs): t = Token.query.filter_by(client_key=client_key, token=token).first() return t @oauth.tokensetter def save_access_token(token, req): tok = Token( client_key=req.client.client_key, user_id=req.user.id, token=token['oauth_token'], secret=token['oauth_token_secret'], _realms=token['oauth_authorized_realms'], ) db.session.add(tok) db.session.commit() @oauth.grantgetter def load_request_token(token): grant = Grant.query.filter_by(token=token).first() return grant @oauth.grantsetter def save_request_token(token, oauth): if oauth.realms: realms = ' '.join(oauth.realms) else: realms = None grant = Grant( token=token['oauth_token'], secret=token['oauth_token_secret'], client_key=oauth.client.client_key, redirect_uri=oauth.redirect_uri, _realms=realms, ) db.session.add(grant) db.session.commit() return grant @oauth.verifiergetter def load_verifier(verifier, token): return Grant.query.filter_by(verifier=verifier, token=token).first() @oauth.verifiersetter def save_verifier(token, verifier, *args, **kwargs): tok = Grant.query.filter_by(token=token).first() tok.verifier = verifier['oauth_verifier'] tok.user_id = g.user.id db.session.add(tok) db.session.commit() return tok @oauth.noncegetter def load_nonce(*args, **kwargs): return None @oauth.noncesetter def save_nonce(*args, **kwargs): return None @app.before_request def load_current_user(): user = User.query.get(1) g.user = user @app.route('/home') def home(): return render_template('home.html') @app.route('/oauth/authorize', methods=['GET', 'POST']) @oauth.authorize_handler def authorize(*args, **kwargs): # NOTICE: for real project, you need to require login if request.method == 'GET': # render a page for user to confirm the authorization return render_template('confirm.html') confirm = request.form.get('confirm', 'no') return confirm == 'yes' @app.route('/oauth/request_token') @oauth.request_token_handler def request_token(): return {} @app.route('/oauth/access_token') @oauth.access_token_handler def access_token(): return {} @app.route('/api/email') @oauth.require_oauth('email') def email_api(): oauth = request.oauth return jsonify(email='*****@*****.**', username=oauth.user.username) @app.route('/api/address/<city>') @oauth.require_oauth('address') def address_api(city): oauth = request.oauth return jsonify(address=city, username=oauth.user.username) @app.route('/api/method', methods=['GET', 'POST', 'PUT', 'DELETE']) @oauth.require_oauth() def method_api(): return jsonify(method=request.method) return app
log = logging.getLogger(__name__) app = Flask(__name__) app.debug = True app.secret_key = 'development' app.config.update({ 'OAUTH1_PROVIDER_ENFORCE_SSL': False, 'OAUTH1_PROVIDER_KEY_LENGTH': (3, 30), 'OAUTH1_PROVIDER_REALMS': ['email', 'address'] }) # Not present in Flask-OAuthlib tests: #os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1' app.trc = app.test_request_context provider = OAuth1Provider(app) provider.clientgetter(load_client) provider.grantgetter(load_request_token) provider.grantsetter(save_request_token) provider.verifiergetter(load_verifier) provider.verifiersetter(save_verifier) provider.tokengetter(load_access_token) provider.tokensetter(save_access_token) provider.noncegetter(load_nonce) provider.noncesetter(save_nonce) @app.route('/') @login_required('login') def index(): return render_template('index.html')
app = Flask(__name__, static_url_path="") admin = Admin(app, name='Movie Recommender', template_mode='bootstrap3') #admin.add_view(ModelView(Post, db.session)) api = Api(app) auth = HTTPBasicAuth() app.config.from_object('config') db = SQLAlchemy(app) ma = Marshmallow(app) # https://flask-migrate.readthedocs.io/en/latest/ manager = Manager(app) manager.add_command('db', MigrateCommand) # oauth provider oauth = OAuth1Provider() from app import views, models from app.models import User, UserPreferences, Movie, Video, TVSeries, FilmIndustry, Award, Actor, Genre, Application, Client, Grant, Token admin.add_view(ModelView(User, db.session)) admin.add_view(ModelView(UserPreferences, db.session)) admin.add_view(ModelView(Movie, db.session)) admin.add_view(ModelView(Video, db.session)) admin.add_view(ModelView(TVSeries, db.session)) admin.add_view(ModelView(FilmIndustry, db.session)) admin.add_view(ModelView(Award, db.session)) admin.add_view(ModelView(Actor, db.session)) admin.add_view(ModelView(Genre, db.session)) admin.add_view(ModelView(Application, db.session)) admin.add_view(ModelView(Client, db.session))