From 3b56b36b1d7450cc25f31167814411734a871346 Mon Sep 17 00:00:00 2001 From: admiralobvious <aferlandqc@gmail.com> Date: Mon, 18 Aug 2014 22:38:54 -0400 Subject: [PATCH] added example using blueprints/factories --- examples/blueprints/blueprints/__init__.py | 0 examples/blueprints/blueprints/app.py | 49 +++++++++++++++++++ examples/blueprints/blueprints/config.py | 11 +++++ .../blueprints/blueprints/core/__init__.py | 1 + examples/blueprints/blueprints/core/views.py | 41 ++++++++++++++++ examples/blueprints/blueprints/extensions.py | 2 + .../blueprints/blueprints/foo/__init__.py | 1 + examples/blueprints/blueprints/foo/views.py | 10 ++++ examples/blueprints/run.py | 7 +++ examples/{ => groups}/app.py | 0 10 files changed, 122 insertions(+) create mode 100644 examples/blueprints/blueprints/__init__.py create mode 100644 examples/blueprints/blueprints/app.py create mode 100644 examples/blueprints/blueprints/config.py create mode 100644 examples/blueprints/blueprints/core/__init__.py create mode 100644 examples/blueprints/blueprints/core/views.py create mode 100644 examples/blueprints/blueprints/extensions.py create mode 100644 examples/blueprints/blueprints/foo/__init__.py create mode 100644 examples/blueprints/blueprints/foo/views.py create mode 100644 examples/blueprints/run.py rename examples/{ => groups}/app.py (100%) diff --git a/examples/blueprints/blueprints/__init__.py b/examples/blueprints/blueprints/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/examples/blueprints/blueprints/app.py b/examples/blueprints/blueprints/app.py new file mode 100644 index 0000000..13e5652 --- /dev/null +++ b/examples/blueprints/blueprints/app.py @@ -0,0 +1,49 @@ +from flask import Flask, g, session + +from .config import BaseConfig +from .extensions import ldap +from .core import core +from .foo import foo + +DEFAULT_BLUEPRINTS = ( + core, + foo +) + + +def create_app(config=None, app_name=None, blueprints=None): + if app_name is None: + app_name = BaseConfig.PROJECT + if blueprints is None: + blueprints = DEFAULT_BLUEPRINTS + app = Flask(app_name) + configure_app(app, config) + register_hooks(app) + register_blueprints(app, blueprints) + register_extensions(app) + return app + + +def configure_app(app, config=None): + if config: + app.config.from_object(config) + + +def register_hooks(app): + @app.before_request + def before_request(): + g.user = None + if 'user_id' in session: + # This is where you'd query your database to get the user info. + g.user = {} + # Create a global with the LDAP groups the user is a member of. + g.ldap_groups = ldap.get_user_groups(user=session['user_id']) + + +def register_blueprints(app, blueprints): + for blueprint in blueprints: + app.register_blueprint(blueprint) + + +def register_extensions(app): + ldap.init_app(app) diff --git a/examples/blueprints/blueprints/config.py b/examples/blueprints/blueprints/config.py new file mode 100644 index 0000000..a7353cd --- /dev/null +++ b/examples/blueprints/blueprints/config.py @@ -0,0 +1,11 @@ +class BaseConfig(object): + PROJECT = 'foo' + SECRET_KEY = 'dev key' + DEBUG = True + + # LDAP + LDAP_HOST = 'ldap.example.org' + LDAP_BASE_DN = 'OU=users,dc=example,dc=org' + LDAP_USERNAME = 'CN=user,OU=Users,DC=example,DC=org' + LDAP_PASSWORD = 'password' + LDAP_LOGIN_VIEW = 'core.login' diff --git a/examples/blueprints/blueprints/core/__init__.py b/examples/blueprints/blueprints/core/__init__.py new file mode 100644 index 0000000..0b96c5d --- /dev/null +++ b/examples/blueprints/blueprints/core/__init__.py @@ -0,0 +1 @@ +from .views import core diff --git a/examples/blueprints/blueprints/core/views.py b/examples/blueprints/blueprints/core/views.py new file mode 100644 index 0000000..ad4a806 --- /dev/null +++ b/examples/blueprints/blueprints/core/views.py @@ -0,0 +1,41 @@ +from flask import Blueprint, g, request, session, redirect, url_for +from ..extensions import ldap + +core = Blueprint('core', __name__) + + +@core.route('/') +@ldap.login_required +def index(): + return 'Successfully logged in!' + + +@core.route('/login', methods=['GET', 'POST']) +def login(): + if g.user: + return redirect(url_for('index')) + if request.method == 'POST': + user = request.form['user'] + passwd = request.form['passwd'] + test = ldap.bind_user(user, passwd) + if test is None: + return 'Invalid credentials' + else: + session['user_id'] = request.form['user'] + return redirect('/') + return """<form action="" method="post"> + user: <input name="user"><br> + password:<input type="password" name="passwd"><br> + <input type="submit" value="Submit"></form>""" + + +@core.route('/group') +@ldap.group_required(groups=['Web Developers', 'QA']) +def group(): + return 'Group restricted page' + + +@core.route('/logout') +def logout(): + session.pop('user_id', None) + return redirect(url_for('index')) diff --git a/examples/blueprints/blueprints/extensions.py b/examples/blueprints/blueprints/extensions.py new file mode 100644 index 0000000..cd5765e --- /dev/null +++ b/examples/blueprints/blueprints/extensions.py @@ -0,0 +1,2 @@ +from flask.ext.simpleldap import LDAP +ldap = LDAP() diff --git a/examples/blueprints/blueprints/foo/__init__.py b/examples/blueprints/blueprints/foo/__init__.py new file mode 100644 index 0000000..088f543 --- /dev/null +++ b/examples/blueprints/blueprints/foo/__init__.py @@ -0,0 +1 @@ +from .views import foo diff --git a/examples/blueprints/blueprints/foo/views.py b/examples/blueprints/blueprints/foo/views.py new file mode 100644 index 0000000..4150518 --- /dev/null +++ b/examples/blueprints/blueprints/foo/views.py @@ -0,0 +1,10 @@ +from flask import Blueprint +from ..extensions import ldap + +foo = Blueprint('foo', __name__, url_prefix='/foo') + + +@foo.route('/group') +@ldap.group_required(groups=['Web Developers', 'QA']) +def group(): + return 'Group restricted page in foo module' diff --git a/examples/blueprints/run.py b/examples/blueprints/run.py new file mode 100644 index 0000000..edc0f51 --- /dev/null +++ b/examples/blueprints/run.py @@ -0,0 +1,7 @@ +from blueprints.app import create_app +from blueprints.config import BaseConfig + +app = create_app(BaseConfig) + +if __name__ == "__main__": + app.run() diff --git a/examples/app.py b/examples/groups/app.py similarity index 100% rename from examples/app.py rename to examples/groups/app.py -- GitLab