コード例 #1
0
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),
})

コード例 #2
0
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
コード例 #3
0
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')
コード例 #4
0
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))