Skip to content

Instantly share code, notes, and snippets.

@cstpraveen
Forked from chris-allan/server.py
Created July 19, 2022 15:36
Show Gist options
  • Save cstpraveen/8abf0eb1c57a11e56457ca1f75512c3c to your computer and use it in GitHub Desktop.
Save cstpraveen/8abf0eb1c57a11e56457ca1f75512c3c to your computer and use it in GitHub Desktop.

Revisions

  1. @chris-allan chris-allan revised this gist Jul 1, 2014. 1 changed file with 16 additions and 7 deletions.
    23 changes: 16 additions & 7 deletions server.py
    Original file line number Diff line number Diff line change
    @@ -1,27 +1,24 @@
    from flask import Flask
    from flask.ext.mongoengine import MongoEngine, MongoEngineSessionInterface
    from flask.ext.mongoengine import MongoEngine
    from flask.ext.security import Security, MongoEngineUserDatastore, \
    UserMixin, RoleMixin, login_required
    from flask.ext.principal import Principal
    from flask.ext.principal import Permission, RoleNeed


    # Create app
    app = Flask(__name__)
    app.config['DEBUG'] = True
    app.config['SECRET_KEY'] = 'super-secret'

    # Load the Flask-Principal extension
    principals = Principal(app)

    # MongoDB Config
    app.config["MONGODB_HOST"] = "mongodb://localhost:27017/flask_security"
    app.config["MONGODB_DB"] = True

    # Create database connection object
    db = MongoEngine(app)

    # Use MongoDB to store sessions
    app.session_interface = MongoEngineSessionInterface(db)
    # Create a permission with a single Need, in this case a RoleNeed.
    admin_permission = Permission(RoleNeed('admin'))


    class Role(db.Document, RoleMixin):
    @@ -49,6 +46,11 @@ def create_user():
    user_datastore.create_user(
    email='[email protected]', password='abc123', roles=[test_role]
    )
    admin_role = user_datastore.find_or_create_role('admin')
    user_datastore.create_user(
    email='[email protected]', password='abcd1234',
    roles=[admin_role]
    )


    # Views
    @@ -58,5 +60,12 @@ def home():
    return 'private'


    @app.route('/protected')
    @login_required
    @admin_permission.require()
    def protected():
    return 'protected'


    if __name__ == '__main__':
    app.run()
  2. @chris-allan chris-allan created this gist Jul 1, 2014.
    62 changes: 62 additions & 0 deletions server.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,62 @@
    from flask import Flask
    from flask.ext.mongoengine import MongoEngine, MongoEngineSessionInterface
    from flask.ext.security import Security, MongoEngineUserDatastore, \
    UserMixin, RoleMixin, login_required
    from flask.ext.principal import Principal


    # Create app
    app = Flask(__name__)
    app.config['DEBUG'] = True
    app.config['SECRET_KEY'] = 'super-secret'

    # Load the Flask-Principal extension
    principals = Principal(app)

    # MongoDB Config
    app.config["MONGODB_HOST"] = "mongodb://localhost:27017/flask_security"
    app.config["MONGODB_DB"] = True

    # Create database connection object
    db = MongoEngine(app)

    # Use MongoDB to store sessions
    app.session_interface = MongoEngineSessionInterface(db)


    class Role(db.Document, RoleMixin):
    name = db.StringField(max_length=80, unique=True)
    description = db.StringField(max_length=255)


    class User(db.Document, UserMixin):
    email = db.StringField(max_length=255)
    password = db.StringField(max_length=255)
    active = db.BooleanField(default=True)
    confirmed_at = db.DateTimeField()
    roles = db.ListField(db.ReferenceField(Role), default=[])


    # Setup Flask-Security
    user_datastore = MongoEngineUserDatastore(db, User, Role)
    security = Security(app, user_datastore)


    # Create a user to test with
    @app.before_first_request
    def create_user():
    test_role = user_datastore.find_or_create_role('test')
    user_datastore.create_user(
    email='[email protected]', password='abc123', roles=[test_role]
    )


    # Views
    @app.route('/')
    @login_required
    def home():
    return 'private'


    if __name__ == '__main__':
    app.run()