示例#1
0
def createsuperuser():
    """
    Create a super user of the system, requiring Email and password.
    """

    email = prompt('User E-Mail')
    email_confirm = prompt('Confirm E-Mail')

    if not email == email_confirm:
        sys.exit('\nCould not create user: E-Mail did not match')

    if not EMAIL_REGEX.match(email):
        sys.exit('\nCould not create user: Invalid E-Mail addresss')

    password = prompt_pass('User password')
    password_confirm = prompt_pass('Confirmed password')

    if not password == password_confirm:
        sys.exit('\nCould not create user: Passwords did not match')

    datastore = SQLAlchemyUserDatastore(db, User, Role)
    datastore.create_user(
        email=email,
        password=encrypt_password(password),
        active=True,
        super_user=True)

    db.session.commit()
示例#2
0
 def run(self, user):
     from app import db
     user_datastore = SQLAlchemyUserDatastore(db, User, Role)
     u = User.query.filter_by(email=user).first()
     role = user_datastore.find_or_create_role('admin')
     user_datastore.add_role_to_user(u, role)
     db.session.commit()
示例#3
0
 def run(self, user):
     from app import db
     user_datastore = SQLAlchemyUserDatastore(db, User, Role)
     u = User.query.filter_by(email=user).first()
     role = user_datastore.find_or_create_role('admin')
     user_datastore.add_role_to_user(u, role)
     db.session.commit()
示例#4
0
class UserRepository(object):
    def __init__(self):
        self.ud = SQLAlchemyUserDatastore(db, User, Role)

    def get(self, email):
        return self.ud.get_user(email)

    def create(self, username, email, pwd):
        user = self.ud.create_user(
            email=email,
            username=username,
            password=pwd
        )
        db.session.commit()
        return user

    def login(self, email, pwd):
        user = self.get(email)
        if user:
            if user.password == pwd:
                return login_user(user)
        return False

    def register(self, username, email, pwd):
        user = self.get(email)
        if not user:
            user_obj = self.create(username, email, pwd)
            return login_user(user_obj)
        else:
            return False
示例#5
0
    def setUp(self):
        self.user_datastore = SQLAlchemyUserDatastore(tutorial.db, User, Role)
        tutorial.db.create_all()
        # u = User( nickname='test1', email='*****@*****.**' )
        self.remap_from = "University of Oxford"
        self.remap_to = "Oxford, United Kingdom"
        self.cache_loc = "Oxford, United Kingdom"
        self.cache_lat = 51.7519
        self.cache_lon = -1.2578

        self.user = self.user_datastore.create_user(nickname='test1',
                                                    email='*****@*****.**',
                                                    password='******')
        tutorial.db.session.add(self.user)
        tutorial.db.session.commit()

        oxford_remap = Gps_remap(from_location=self.remap_from,
                                 to_location=self.remap_to)
        tutorial.db.session.add(oxford_remap)

        oxford_lookup = Gps_cache(location=self.cache_loc,
                                  latitude=self.cache_lat,
                                  longitude=self.cache_lon)
        tutorial.db.session.add(oxford_lookup)

        tutorial.db.session.commit()
示例#6
0
文件: views.py 项目: napplebee/culog
def data():
    return
    db.drop_all()
    db.create_all()
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    from flask_security.utils import encrypt_password
    role = user_datastore.create_role(name="root", description="Site administrator")
    db.session.commit()
    return "OK"
示例#7
0
文件: tut_tests.py 项目: vputz/marion
 def setUp(self):
     self.user_datastore = SQLAlchemyUserDatastore(tutorial.db, User, Role)
     tutorial.db.create_all()
     #u = User( nickname='test1', email='*****@*****.**' )
     self.user = self.user_datastore.create_user(nickname='test1',
                                                 email='*****@*****.**',
                                                 password='******')
     tutorial.db.session.add(self.user)
     tutorial.db.session.commit()
     # must commit before ID exists
     self.first_id = self.user.id
示例#8
0
    def run(self):
        command.upgrade(alembic_cfg, "head")
        roles = ['admin', 'user', 'superuser']

        user_datastore = SQLAlchemyUserDatastore(db, User, Role)
        for r in roles:
            user_datastore.find_or_create_role(r)
        try:
            db.session.commit()
        except IntegrityError:
            # Happens if records already exist.
            db.session.rollback()
示例#9
0
    def run(self):
        command.upgrade(alembic_cfg, "head")
        roles = ['admin', 'user', 'superuser']

        user_datastore = SQLAlchemyUserDatastore(db, User, Role)
        for r in roles:
            user_datastore.find_or_create_role(r)
        try:
            db.session.commit()
        except IntegrityError:
            # Happens if records already exist.
            db.session.rollback()
示例#10
0
文件: setup.py 项目: vnthang/pgadmin4
def do_setup(app):
    """Create a new settings database from scratch"""
    if config.SERVER_MODE is False:
        print("NOTE: Configuring authentication for DESKTOP mode.")
        email = config.DESKTOP_USER
        p1 = ''.join([
            random.choice(string.ascii_letters + string.digits)
            for n in range(32)
        ])

    else:
        print("NOTE: Configuring authentication for SERVER mode.\n")

        # Prompt the user for their default username and password.
        print("""
Enter the email address and password to use for the initial pgAdmin user \
account:\n""")
        email = ''
        while email == '':
            email = input("Email address: ")

        def pprompt():
            return getpass.getpass(), getpass.getpass('Retype password:'******'Passwords do not match. Try again')
            p1, p2 = pprompt()

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

    with app.app_context():
        password = encrypt_password(p1)

        db.create_all()
        user_datastore.create_role(name='Administrators',
                                   description='pgAdmin Administrators Role')
        user_datastore.create_user(email=email, password=password)
        db.session.flush()
        user_datastore.add_role_to_user(email, 'Administrators')

        # Get the user's ID and create the default server group
        user = User.query.filter_by(email=email).first()
        server_group = ServerGroup(user_id=user.id, name="Servers")
        db.session.merge(server_group)

        # Set the schema version
        version = Version(name='ConfigDB',
                          value=config.SETTINGS_SCHEMA_VERSION)
        db.session.merge(version)

        db.session.commit()

    # Done!
    print("")
    print("The configuration database has been created at {0}".format(
        config.SQLITE_PATH))
示例#11
0
    def ext_security(self, app_models=None, **kwargs):
        """
        Initialize Security for application.

        :param kwargs: parameters that will be passed through to Flask-Security
        :type kwargs: dict
        :returns: None

        A number of common User account operations are provided by `Flask-
        Security <http://pythonhosted.org/Flask-Security/>`_. This function is
        responsible for associating User models in the database with the
        Security object.

        In case you need to override a Flask-Security form (as is the case
        with implementing CAPTCHA) then you must use super() from within your
        application and provide any arguments destined for Flask-Security.

        >>> def ext_security(self):
        >>>    super(MyApp, self).ext_security(confirm_register_form=CaptchaRegisterForm)
        """

        if not app_models:
            from . import models
        else:
            models = app_models

        user_datastore = SQLAlchemyUserDatastore(db, models.User, models.Role)
        security.init_app(self.app, datastore=user_datastore, **kwargs)
        security._state = self.app.extensions["security"]
        security.datastore = user_datastore
示例#12
0
def init_accounts(self, user=None, role=None):
    """
    Initialize Security for application.

    :param kwargs: parameters that will be passed through to Flask-Security
    :type kwargs: dict
    :returns: None

    A number of common User account operations are provided by `Flask-
    Security <http://pythonhosted.org/Flask-Security/>`_. This function is
    responsible for associating User models in the database with the
    Security object.

    In case you need to override a Flask-Security form (as is the case
    with implementing CAPTCHA) then you must use super() from within your
    application and provide any arguments destined for Flask-Security.

    >>> def ext_security(self):
    >>>    super(MyApp, self).ext_security(confirm_register_form=CaptchaRegisterForm)
    """

    # import database
    from .. import db

    if not user or not role:
        raise Exception

    # create datastore
    user_datastore = SQLAlchemyUserDatastore(db, user, role)
    setattr(Security, "user_datastore", user_datastore)
    security.init_app(self.app, datastore=user_datastore)
示例#13
0
    def setUp(self):
        self.user_datastore = SQLAlchemyUserDatastore(tutorial.db, User, Role)
        tutorial.db.create_all()
        # u = User( nickname='test1', email='*****@*****.**' )
        self.remap_from = "University of Oxford"
        self.remap_to = "Oxford, United Kingdom"
        self.cache_loc = "Oxford, United Kingdom"
        self.cache_lat = 51.7519
        self.cache_lon = -1.2578

        self.user = self.user_datastore.create_user(nickname='test1',
                                                    email='*****@*****.**',
                                                    password='******')
        tutorial.db.session.add(self.user)
        tutorial.db.session.commit()

        oxford_remap = Gps_remap(from_location=self.remap_from,
                                 to_location=self.remap_to)
        tutorial.db.session.add(oxford_remap)

        oxford_lookup = Gps_cache(location=self.cache_loc,
                                  latitude=self.cache_lat,
                                  longitude=self.cache_lon)
        tutorial.db.session.add(oxford_lookup)

        tutorial.db.session.commit()
示例#14
0
def configure_extensions(app):
    # configure extensions
    # sqlalchemy
    db.init_app(app)
    db_ean.init_app(app)
    # mail
    mail.init_app(app)
    # cache
    cache.init_app(app)
    # babel
    babel = Babel(app)
    # login
    login_manager.login_view = 'frontend.login'
    login_manager.refresh_view = 'frontend.reauth'

    @login_manager.user_loader
    def load_user(id):
        return User.query.get(int(id))

    login_manager.setup_app(app)
    # security and Social
    app.flask_security = Security(app, SQLAlchemyUserDatastore(db, User, Role))
    #app.flask_social = Social(app, SQLAlchemyConnectionDatastore(db, Connection))
    # admin
    admin = Admin(app)
    #admin.add_view(ModelView(GenomeRule, db.session))
    admin.add_view(GenomeRuleView(db.session, name="Genome Rules"))
    admin.add_view(GenomeCategoryView(db.session, name="Genome Categories"))
示例#15
0
def init_security(self):
    from .. import db
    from ..models import Role
    from ..models import User
    from ..forms import ExtendedLoginForm

    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    security.init_app(
        self.app,
        datastore=user_datastore,
        login_form=ExtendedLoginForm,
    )

    try:
        from wtforms.fields import HiddenField
    except ImportError:

        def is_hidden_field_filter(field):
            raise RuntimeError('WTForms is not installed.')
    else:

        def is_hidden_field_filter(field):
            return isinstance(field, HiddenField)

    self.app.jinja_env.globals['is_hidden_field'] = is_hidden_field_filter
示例#16
0
def create_app(package_name=__name__, package_path=__path__, has_blueprints=True, **config_overrides):
    app = Flask(package_name, static_url_path='')
    app.config.update(APP)
    app.config.update(SECURITY)

    # Apply overrides.
    app.config.update(config_overrides)

    # Initialize the database and declarative Base class.
    db.init_app(app)
    Migrate(app, db)

    # Setup security.
    from argos.web import models
    user_db = SQLAlchemyUserDatastore(db, models.User, models.Role)
    Security(app, user_db)

    # Create the database tables.
    # Flask-SQLAlchemy needs to know which
    # app context to create the tables in.
    with app.app_context():
        db.create_all()

    # Register blueprints.
    if has_blueprints:
        register_blueprints(app, package_name, package_path)

    return app
示例#17
0
def create_app(package_name,
               package_path,
               config_name,
               debug_override=None,
               register_security_blueprint=True):
    """Returns a :class:`Flask` application instance configured with common
    functionality for the Longboxed platform.

    :param package_name: application package name
    :param package_path: application package path
    :param settings_override: a dictionary of settings to override
    :param debug_overide: :class:`Bool` value that overrides the debug settings
    """
    app = Flask(package_name, instance_relative_config=True)

    app.config.from_object(config[config_name])
    app.config.from_pyfile('settings.cfg', silent=True)
    if debug_override is not None:
        app.debug = debug_override

    #: Additional Settings setup
    config[config_name].init_app(app, store=store)

    #: Setup Flask Extensions
    cache.init_app(app, config=app.config.get('CACHE_CONFIG'))
    db.init_app(app)
    mail.init_app(app)
    s3_assets.init_app(app)
    #: Setup Flask-Security
    security.init_app(app,
                      SQLAlchemyUserDatastore(db, User, Role),
                      register_blueprint=register_security_blueprint,
                      confirm_register_form=ExtendedConfirmRegisterForm)

    # Register all blueprints
    register_blueprints(app, package_name, package_path)

    # Register all signal handlers
    signals.init_app(app)

    app.wsgi_app = HTTPMethodOverrideMiddleware(app.wsgi_app)

    @app.before_request
    def start_implicit_store_context():
        push_store_context(store)

    @app.teardown_request
    def stop_implicit_store_context(exception=None):
        try:
            pop_store_context()
        except IndexError:
            pass

    #: Setup Logging if not debug
    setup_logging()

    return app
示例#18
0
def create_app(package_name,
               package_path,
               settings_override=None,
               security_register_blueprint=False):
    """
    Returns a :class:`Flask` application instance configured with common
    functionality for the webapp.

    :param package_name: application package name
    :param package_path: application package path
    :param settings_override: a dictionary of settings to override
    :param security_register_blueprint: register views for flask-security
    """
    # Instance Path
    instance_path = os.environ.get(
        "{{ cookiecutter.app_name | upper }}_INSTANCE_PATH", None)

    app = Flask(package_name,
                instance_relative_config=True,
                instance_path=instance_path)

    # Initialize settings
    app.config.from_object("{{ cookiecutter.app_name }}.settings")
    app.config.from_pyfile("settings.cfg", silent=True)
    app.config.from_object(settings_override)

    # Flask-SQLAlchemy
    db.init_app(app)

    # Flask-Migrate
    migrate.init_app(app, db)

    # Flask-Mail
    mail.init_app(app)

    # Flask-Security
    security.init_app(app,
                      SQLAlchemyUserDatastore(db, User, Role),
                      register_blueprint=security_register_blueprint)

    # Flask-JWT
    jwt.init_app(app)
    jwt.authentication_handler(authenticate)
    jwt.payload_handler(make_payload)
    jwt.user_handler(load_user)

    # Sentry - only for production
    if not app.debug and not app.testing and 'SENTRY_DSN' in app.config:
        sentry = Sentry(app)

    # Middleware
    app.wsgi_app = HTTPMethodOverrideMiddleware(app.wsgi_app)

    _log.info("Flask framework app created.")
    return app
示例#19
0
def initialise_app(app, configclass):
    # Load the default configuration
    app.config.from_object(configclass)

    # Load the configuration from the instance folder
    try:
        app.config.from_pyfile('config.py')
    except:
        print 'No instance config file'

    if app.config['USE_PROXY']:
        app.wsgi_app = ProxyFix(app.wsgi_app)

    toolbar = DebugToolbarExtension(app)

    db.init_app(app)
    mail.init_app(app)

    assets = Environment(app)
    assets.register(bundles)

    from .models import User, Feed, Entry, Author, Role

    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    app.security = Security(app, user_datastore)

    wtf.add_helpers(app)

    admin = Admin(app, 'Admin', index_view=SecuredAdminIndexView())
    admin.add_view(SecuredModelView(User, db.session))
    admin.add_view(SecuredModelView(Feed, db.session))
    admin.add_view(SecuredModelView(Entry, db.session))
    admin.add_view(SecuredModelView(Author, db.session))

    app.register_blueprint(frontend_blueprint)
    identity_loaded.connect_via(app)(on_identity_loaded)

    add_errorhandlers(app)

    Principal(app)

    if not app.debug:
        import logging
        from .utils.loggers import add_logger_filehandler, add_logger_external

        add_logger_filehandler(app)

        if app.config['LOG_ADDRESS']:
            add_logger_external(app)

        app.logger.setLevel(logging.INFO)
        app.logger.info(u'{0} startup'.format(app.config['PROJECT_NAME']))

    return app
示例#20
0
def create_app():
    app = Flask(__name__)
    app.config.from_object('jobs_board.settings')
    db.init_app(app)
    foundation.init_app(app)
    mail.init_app(app)
    from .users.models import Role, User
    security.init_app(app, SQLAlchemyUserDatastore(db, User, Role))
    from .jobs.views import blueprint as jobs
    app.register_blueprint(jobs)
    return app
示例#21
0
def register_extensions(app):
    cache.init_app(app)
    db.init_app(app)
    admin.init_app(app)
    register_admin_views(admin)
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    security = Security(app, user_datastore, confirm_register_form=ExtendedRegisterForm)
    mail.init_app(app)
    debug_toolbar.init_app(app)

    return None
示例#22
0
def init(app):
    # --> Extension setup
    db.init_app(app)
    admin.init_app(app)

    modules["migrate"] = Migrate(app, db)

    modules["user_datastore"] = SQLAlchemyUserDatastore(db, User, Role)
    modules["security"] = Security(app,
                                   modules["user_datastore"],
                                   confirm_register_form=MyRegisterForm)

    # --> Register blueprints
    from modules.play.play import play

    app.register_blueprint(play, url_prefix='/play')

    from modules.api.core import api_core

    app.register_blueprint(api_core, url_prefix='/kcsapi')

    # Declare API v1 blueprints.
    from modules.api.v1.user import api_user
    from modules.api.v1.actions import api_actions
    app.register_blueprint(api_user, url_prefix='/kcsapi')
    app.register_blueprint(api_actions, url_prefix='/kcsapi')

    # Declare API v2 blueprints.
    from modules.api.v2.AdmiralAPI import AdmiralAPIv2
    from modules.api.v2.DockAPI import DockAPIv2
    app.register_blueprint(AdmiralAPIv2, url_prefix='/api/v2/admiral')
    app.register_blueprint(DockAPIv2, url_prefix='/api/v2/docks')

    from modules.resources import resources

    app.register_blueprint(resources, url_prefix='/kcs')

    # --> Base application routes
    @app.route('/')
    def index():
        return render_template('index.html')

    @app.route('/kcs/<path:path>')
    def kcs(path):
        return send_from_directory('kcs', path)

    # --> Signals
    @user_logged_in.connect_via(app)
    def u_logged_in(sender, user):
        """
        Regenerate the API token every login.
        """
        user.api_token = generate_api_token()
示例#23
0
def register_extensions(app):
    db.init_app(app)
    bcrypt.init_app(app)
    babel.init_app(app)
    login_manager.init_app(app)
    login_manager.login_view = '/login'
    s3.init_app(app)
    mail.init_app(app)

    from app.models import AppUser, Role
    user_datastore = SQLAlchemyUserDatastore(db, AppUser, Role)
    Security(app, user_datastore)
示例#24
0
def create_app(config=None, debug=True):
    app = create_base_app(config, debug)
    app.config[
        'SQLALCHEMY_DATABASE_URI'] = 'mysql://root@localhost/flask_social_test'

    db = SQLAlchemy(app)

    roles_users = db.Table(
        'roles_users',
        db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
        db.Column('role_id', db.Integer(), db.ForeignKey('role.id')))

    class Role(db.Model, RoleMixin):
        id = db.Column(db.Integer(), primary_key=True)
        name = db.Column(db.String(80), unique=True)
        description = db.Column(db.String(255))

    class User(db.Model, UserMixin):
        id = db.Column(db.Integer, primary_key=True)
        email = db.Column(db.String(255), unique=True)
        password = db.Column(db.String(120))
        active = db.Column(db.Boolean())
        roles = db.relationship('Role',
                                secondary=roles_users,
                                backref=db.backref('users', lazy='dynamic'))
        connections = db.relationship('Connection',
                                      backref=db.backref('user',
                                                         lazy='joined'))

    class Connection(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
        provider_id = db.Column(db.String(255))
        provider_user_id = db.Column(db.String(255))
        access_token = db.Column(db.String(255))
        secret = db.Column(db.String(255))
        display_name = db.Column(db.String(255))
        profile_url = db.Column(db.String(512))
        image_url = db.Column(db.String(512))
        rank = db.Column(db.Integer)

    app.security = Security(app, SQLAlchemyUserDatastore(db, User, Role))
    app.social = Social(app, SQLAlchemyConnectionDatastore(db, Connection))

    @app.before_first_request
    def before_first_request():
        db.drop_all()
        db.create_all()
        populate_data()
        pass

    return app
示例#25
0
def create_app(config):
    app = Flask(
        __name__,
        template_folder="../dist/",
        static_folder="static/",
        static_url_path="/static")
    app.config.from_object(config)

    for key, value in security_messages.items():
        app.config['SECURITY_MSG_' + key] = value
    # app.config['SESSION_TYPE'] = 'filesystem'
    app.config['SECRET_KEY'] = os.urandom(24)
    # Session(app)
    _log_config(app)

    app.db = db
    db.init_app(app)
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    security = Security(app, user_datastore)
    app.user_datastore = user_datastore


    @app.route('/')
    def to_app():
        return redirect(url_for('ngapp.home'))

    @app.route('/_uploads/photos/<path:path>')
    def do_not_allow_uploads(path):
        return abort(404)

    from .response import init as response_init
    response_init(app)

    import ngapp
    app.register_blueprint(ngapp.bp)

    @app.before_request
    def populate_user():
        header_key = app.config.get('SECURITY_TOKEN_AUTHENTICATION_HEADER', 'Authentication-Token')
        args_key = app.config.get('SECURITY_TOKEN_AUTHENTICATION_KEY', 'token')
        header_token = request.headers.get(header_key, None)
        token = request.args.get(args_key, header_token)
        if request.get_json(silent=True):
            token = request.json.get(args_key, token)

        if token:
            user = app.extensions['security'].login_manager.token_callback(token)
            _request_ctx_stack.top.user = user

    return app
示例#26
0
def do_setup(app):
    """Create a new settings database from scratch"""
    if config.SERVER_MODE is False:
        print("NOTE: Configuring authentication for DESKTOP mode.")
        email = config.DESKTOP_USER
        p1 = "".join([random.choice(string.ascii_letters + string.digits) for n in xrange(32)])

    else:
        print("NOTE: Configuring authentication for SERVER mode.\n")

        # Prompt the user for their default username and password.
        print("Enter the email address and password to use for the initial pgAdmin user account:\n")
        email = ""
        while email == "":
            email = raw_input("Email address: ")

        pprompt = lambda: (getpass.getpass(), getpass.getpass("Retype password: "******"Passwords do not match. Try again")
            p1, p2 = pprompt()

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

    with app.app_context():
        password = encrypt_password(p1)

        db.create_all()
        user_datastore.create_role(name="Administrators", description="pgAdmin Administrators Role")
        user_datastore.create_user(email=email, password=password)
        db.session.flush()
        user_datastore.add_role_to_user(email, "Administrators")

        # Get the user's ID and create the default server group
        user = User.query.filter_by(email=email).first()
        server_group = ServerGroup(user_id=user.id, name="Servers")
        db.session.merge(server_group)

        # Set the schema version
        version = Version(name="ConfigDB", value=config.SETTINGS_SCHEMA_VERSION)
        db.session.merge(version)

        db.session.commit()

    # Done!
    print("")
    print("The configuration database has been created at %s" % config.SQLITE_PATH)
示例#27
0
def create_app():
    app = Flask(__name__)
    app.config.from_object('transcriber.app_config')
    app.config['SQLALCHEMY_DATABASE_URI'] = app.config['DB_CONN']

    app.register_blueprint(views)
    app.register_blueprint(auth)

    db.init_app(app)

    datastore = SQLAlchemyUserDatastore(db, User, Role)
    security.init_app(app,
                      datastore,
                      login_form=LoginForm,
                      confirm_register_form=RegisterForm)

    mail.init_app(app)
    csrf.init_app(app)
    flask_bcrypt.init_app(app)

    @app.template_filter('format_number')
    def format_number(s): # pragma: no cover
        if s:
            return '{:,}'.format(s)
        return s

    @app.template_filter('format_date')
    def format_date(s, fmt='%H:%M%p %b %d, %Y'): # pragma: no cover
        if s:
            return s.strftime(fmt)
        else:
            return '0'

    @app.template_filter('format_date_sort')
    def format_date_sort(s, fmt='%Y%m%d%H%M'): # pragma: no cover
        if s:
            return s.strftime(fmt)
        else:
            return '0'

    app.config['sentry'] = None

    if sentry:
        sentry.init_app(app)
        app.config['sentry'] = sentry

    return app
示例#28
0
    def create_user(self):

        if self.email is None or self.password is None:
            logging.warning('Email and Password cannot be null')
            return None
        try:
            SQLAlchemyUserDatastore(db, UsersModel, RolesModel).create_user(
                email=self.email,
                password=self.password,
                first_name=self.first_name,
                last_name=self.last_name,
                token=generate_token(),
                active=self.active)
            db.session.commit()
            return self
        except Exception as ex:
            logging.warning(ex)
示例#29
0
def create_app(config, **kwargs):
    app = create_base_app(config)

    #app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root@localhost/flask_security_test'
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'

    db = SQLAlchemy(app)

    roles_users = db.Table(
        'roles_users',
        db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
        db.Column('role_id', db.Integer(), db.ForeignKey('role.id')))

    class Role(db.Model, RoleMixin):
        id = db.Column(db.Integer(), primary_key=True)
        name = db.Column(db.String(80), unique=True)
        description = db.Column(db.String(255))

    class User(db.Model, UserMixin):
        id = db.Column(db.Integer, primary_key=True)
        email = db.Column(db.String(255), unique=True)
        password = db.Column(db.String(255))
        last_login_at = db.Column(db.DateTime())
        current_login_at = db.Column(db.DateTime())
        last_login_ip = db.Column(db.String(100))
        current_login_ip = db.Column(db.String(100))
        login_count = db.Column(db.Integer)
        active = db.Column(db.Boolean())
        confirmed_at = db.Column(db.DateTime())
        roles = db.relationship('Role',
                                secondary=roles_users,
                                backref=db.backref('users', lazy='dynamic'))

    @app.before_first_request
    def before_first_request():
        db.drop_all()
        db.create_all()
        populate_data(app.config.get('USER_COUNT', None))

    app.security = Security(app,
                            datastore=SQLAlchemyUserDatastore(db, User, Role),
                            **kwargs)

    add_context_processors(app.security)

    return app
示例#30
0
def create_app(settings_override=None):
    """Creates and returns a configured :class:`~flask.Flask` application.

    :param package_name: application package name.
    :param settings_override: ``dict`` containing settings to override.
    """
    if settings_override is None:
        settings_override = {}
    app = Flask(__name__)
    app.config.from_object('ivadb.settings')
    app.config.update(settings_override)

    api.init_app(app)
    db.init_app(app)
    security.init_app(app, SQLAlchemyUserDatastore(db, User, Role))
    app.register_blueprint(bp)
    return app
示例#31
0
def create_app(env):
    init_config(env)
    app = _initialize_flask_app()
    app.wsgi_app = RequestLoggerMiddleware(app.wsgi_app)
    app = _configure_logging(app)
    app.config.from_object(Ivysaur.Config)
    app = _register_blueprints(app)
    app = _register_version_and_log(app)

    db = SQLAlchemy(app, session_options={"autoflush": False})
    reg = get_registry()
    reg['DB'] = db

    mail = Mail(app)
    reg['MAIL'] = mail

    reg['TOKBOX'] = OpenTok(
        Ivysaur.Config.TOKBOX_API_KEY, Ivysaur.Config.TOKBOX_API_SECRET
    )

    from lib.models.user import User
    from lib.models.role import Role

    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    Security(app, user_datastore)

    from lib.repo.user_repo import UserRepo
    from lib.repo.device_repo import DeviceRepo
    from lib.repo.deck_repo import DeckRepo
    from lib.repo.notification_repo import NotificationRepo
    from lib.repo.ask_repo import AskRepo

    # see comment for this method
    _initialize_models()

    reg['USER_DATASTORE'] = user_datastore
    reg['USER_REPO'] = UserRepo()
    reg['DEVICE_REPO'] = DeviceRepo()
    reg['DECK_REPO'] = DeckRepo()
    reg['NOTIFICATION_REPO'] = NotificationRepo()
    reg['ASK_REPO'] = AskRepo()

    app = _initialize_managers(app)
    app.json_encoder = AppJSONEncoder
    return app
示例#32
0
def init_webapp():
    """Initialize the web application."""

    # logging.getLogger('flask_cors').level = logging.DEBUG
    # app.wsgi_app = LoggingMiddleware(app.wsgi_app)

    # Note, this url namespace also exists for the Flask-Restless
    # extension and is where CRUD interfaces live, so be careful not to
    # collide with model names here. We could change this, but it's nice
    # to have API live in the same url namespace.
    app.register_blueprint(api, url_prefix='/api')

    # Initialize Flask configuration
    app.config['SQLALCHEMY_DATABASE_URI'] = make_conn_str()
    app.config['SECRET_KEY'] = 'abc123'
    app.config['WTF_CSRF_ENABLED'] = False
    app.config['SECURITY_TOKEN_MAX_AGE'] = 60
    app.config['SECURITY_TOKEN_AUTHENTICATION_HEADER'] = 'Auth-Token'
    # app.config['SECURITY_POST_LOGIN_VIEW'] = 'http://127.0.0.1:4200'
    # app.config['CORS_HEADERS'] = 'Content-Type'

    # Initialize Flask-CORS
    CORS(app, supports_credentials=True)
    # CORS(app, supports_credentials=True, resources={r"/*": {"origins": "*"}})

    # Initialize Flask-Bootstrap
    Bootstrap(app)

    # Initialize Flask-Security
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    security = Security(app, user_datastore)

    # Initialize Flask-SQLAlchemy
    db.app = app
    db.init_app(app)
    db.create_all()

    # Initialize Flask-Restless
    manager = APIManager(
        app,
        flask_sqlalchemy_db=db,
        preprocessors=dict(GET_MANY=[restless_api_auth_func]),
    )
    manager.create_api(Employee, methods=['GET', 'POST', 'OPTIONS'])
    return app
示例#33
0
def setup_app(app):
    from adsws.core import db, User, Role
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)

    app.config.setdefault('SECURITY_PASSWORD_HASH', 'pbkdf2_sha512')
    app.config.setdefault('SECURITY_PASSWORD_SALT',
                          app.config.get('SECRET_KEY'))
    register_blueprint = app.config.get('SECURITY_REGISTER_BLUEPRINT', True)

    # if desired, we'll use ADS Classic as a source for authenticating
    # users
    if app.config.get('FALL_BACK_ADS_CLASSIC_LOGIN', False):

        from .ads_classic_login import AdsClassicFallBackLoginForm
        security.init_app(app,
                          user_datastore,
                          register_blueprint=register_blueprint,
                          login_form=AdsClassicFallBackLoginForm)
    else:
        security.init_app(app,
                          user_datastore,
                          register_blueprint=register_blueprint)

    # if there is Flask-Email extension, we'll use that one for sending
    # emails
    if 'email' in app.extensions:
        from flask_email import EmailMessage

        def send_email(msg):
            if not 'email' in app.extensions:
                warn(
                    "Flask-Email extension has disappeared from app.extensions"
                )
                return

            email = EmailMessage(subject=msg.subject,
                                 body=msg.body,
                                 from_email=msg.sender,
                                 to=msg.recipients)
            email.send(app.extensions['email'])

        app.extensions['security'].send_mail_task(send_email)

    return app
示例#34
0
def do_setup(app):
    """Create a new settings database from scratch"""
    if config.SERVER_MODE is False:
        print("NOTE: Configuring authentication for DESKTOP mode.")
        email = config.DESKTOP_USER
        p1 = ''.join([
                         random.choice(string.ascii_letters + string.digits)
                         for n in range(32)
                         ])

    else:
        print("NOTE: Configuring authentication for SERVER mode.\n")

        # Prompt the user for their default username and password.
        print("""
Enter the email address and password to use for the initial pgAdmin user \
account:\n""")
        email_filter = re.compile(
            "^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9]"
            "(?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9]"
            "(?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$")

        email = ''
        input("Email address: ")
        while email == '' or not email_filter.match(email):
            print('Invalid email address. Please try again.')
            email = input("Email address: ")

        def pprompt():
            return getpass.getpass(), getpass.getpass('Retype password:'******'Passwords do not match. Please try again.')
            p1, p2 = pprompt()

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

    with app.app_context():
        password = encrypt_password(p1)

        db.create_all()
        user_datastore.create_role(
            name='Administrator',
            description='pgAdmin Administrator Role'
        )
        user_datastore.create_role(
            name='User',
            description='pgAdmin User Role'
        )

        user_datastore.create_user(email=email, password=password)
        db.session.flush()
        user_datastore.add_role_to_user(email, 'Administrator')

        # Get the user's ID and create the default server group
        user = User.query.filter_by(email=email).first()
        server_group = ServerGroup(user_id=user.id, name="Servers")
        db.session.merge(server_group)

        # Set the schema version
        version = Version(
            name='ConfigDB', value=config.SETTINGS_SCHEMA_VERSION
        )
        db.session.merge(version)

        db.session.commit()

    # Done!
    print("")
    print(
        "The configuration database has been created at {0}".format(
            config.SQLITE_PATH
        )
    )
示例#35
0
 def __init__(self):
     self.ud = SQLAlchemyUserDatastore(db, User, Role)
示例#36
0
class GPSTest(MarionTest):

    """
    Tests both the GPS lookup and some biblio functions that rely on it
    """
    def setUp(self):
        self.user_datastore = SQLAlchemyUserDatastore(tutorial.db, User, Role)
        tutorial.db.create_all()
        # u = User( nickname='test1', email='*****@*****.**' )
        self.remap_from = "University of Oxford"
        self.remap_to = "Oxford, United Kingdom"
        self.cache_loc = "Oxford, United Kingdom"
        self.cache_lat = 51.7519
        self.cache_lon = -1.2578

        self.user = self.user_datastore.create_user(nickname='test1',
                                                    email='*****@*****.**',
                                                    password='******')
        tutorial.db.session.add(self.user)
        tutorial.db.session.commit()

        oxford_remap = Gps_remap(from_location=self.remap_from,
                                 to_location=self.remap_to)
        tutorial.db.session.add(oxford_remap)

        oxford_lookup = Gps_cache(location=self.cache_loc,
                                  latitude=self.cache_lat,
                                  longitude=self.cache_lon)
        tutorial.db.session.add(oxford_lookup)

        tutorial.db.session.commit()

    def _logout(self):
        logout_user()

    def tearDown(self):
        self._logout()
        tutorial.db.session.remove()
        tutorial.db.drop_all()

    def test_retrieval(self):
        remap = Gps_remap.query.get(self.remap_from)
        self.assertEqual(remap.from_location, self.remap_from)

        cache = Gps_cache.query.get(self.cache_loc)
        self.assertAlmostEqual(cache.latitude, self.cache_lat)
        self.assertAlmostEqual(cache.longitude, self.cache_lon)

    def test_has_keys(self):
        self.assertAlmostEqual(remap_has_key(self.remap_from), True)
        self.assertAlmostEqual(cache_has_key(self.cache_loc), True)

    def test_simplified_guess(self):
        self.assertEqual(next_guess("Inst Angew Phys, D-76131 Karlsruhe, Germany"),
                         "Inst Angew Phys, D-76131 Karlsruhe, Germany")
        self.assertEqual(next_guess("Soochow Univ, Sch Phys Sci & Technol, Suzhou 215006, Jiangsu, Peoples R China"),
                         "Sch Phys Sci & Technol, Suzhou 215006, Jiangsu, Peoples R China")

    def test_get_location(self):
        self.assertEqual(get_location("blorfing"), None)
        self.assertAlmostEqual(get_location(self.cache_loc)['lat'],
                               self.cache_lat)
        self.assertAlmostEqual(get_location("london")['lon'], -0.1277583)

    def test_get_locations_and_unknowns(self):
        locs, unks = get_locations_and_unknowns(
            ["University of Oxford", "blorfing"],
            False)
        self.assertAlmostEqual(locs["University of Oxford"]['lon'],
                               self.cache_lon)
        self.assertEqual(unks[0], "blorfing")

    def test_paper_lat_lon_query(self):
        """
        """
        with wos_reader.open_wos_h5("test_data/irwin.h5") as w5:
            locresults = wos_reader_query.paperLatLonQuery(
                w5, get_locations_and_unknowns_nocache)
        tmp = self.maxDiff
        self.maxDiff = None
        irwin_network = {'not_located': ['Kyushu Univ, Dept Phys, Fukuoka 812, Japan', 'Natl Res Inst Astron & Geophys, Dept Astron, Cairo 11421, Egypt; Natl Res Inst Astron & Geophys, Kottamia Ctr Sci Excellence Astron & Space Sci KC, Cairo 11421, Egypt', 'Natl Res Inst Astron & Geophys, Dept Astron, Cairo 11421, Egypt'], 'paper_locations': {'10.1051/mmnp/20138208': {'edges': {0: {'to': 1, 'text': '10.1051/mmnp/20138208', 'from': 0, 'val': 0}, 1: {'to': 2, 'text': '10.1051/mmnp/20138208', 'from': 0, 'val': 0}, 2: {'to': 3, 'text': '10.1051/mmnp/20138208', 'from': 0, 'val': 0}, 3: {'to': 4, 'text': '10.1051/mmnp/20138208', 'from': 0, 'val': 0}, 4: {'to': 2, 'text': '10.1051/mmnp/20138208', 'from': 1, 'val': 0}, 5: {'to': 3, 'text': '10.1051/mmnp/20138208', 'from': 1, 'val': 0}, 6: {'to': 4, 'text': '10.1051/mmnp/20138208', 'from': 1, 'val': 0}, 7: {'to': 3, 'text': '10.1051/mmnp/20138208', 'from': 2, 'val': 0}, 8: {'to': 4, 'text': '10.1051/mmnp/20138208', 'from': 2, 'val': 0}, 9: {'to': 4, 'text': '10.1051/mmnp/20138208', 'from': 3, 'val': 0}}, 'nodes': {0: {'text': '10.1051/mmnp/20138208: Univ Southern Denmark, MEMPHYS Ctr Biomembrane Phys, Dept Phys Chem & Pharm, DK-5230 Odense M, Denmark', 'val': 0, 'lon': 10.4033399, 'lat': 55.37906169999999}, 1: {'text': '10.1051/mmnp/20138208: Univ Potsdam, Inst Phys & Astron, D-14476 Potsdam, Germany; Tech Univ Tampere, Dept Phys, FI-33101 Tampere, Finland', 'val': 0, 'lon': 23.7610254, 'lat': 61.4981508}, 2: {'text': '10.1051/mmnp/20138208: Univ Oxford, Rudolf Peierls Ctr Theoret Phys, Oxford OX1 3NP, England', 'val': 0, 'lon': -1.259116, 'lat': 51.7595933}, 3: {'text': '10.1051/mmnp/20138208: Inst Theoret Phys NSC KIPT, UA-61108 Kharkov, Ukraine; Max Planck Inst Phys Komplexer Syst, D-01187 Dresden, Germany', 'val': 0, 'lon': 13.7090684, 'lat': 51.0266014}, 4: {'text': '10.1051/mmnp/20138208: Humboldt Univ, Inst Phys, D-12489 Berlin, Germany', 'val': 0, 'lon': 13.5470509, 'lat': 52.4370179}}}}, 'failed_papers': ['', '10.1016/j.newast.2014.02.011']}
        self.assertEqual(locresults['paper_locations'].keys(),
                         irwin_network['paper_locations'].keys())
        self.assertEqual(set(locresults['failed_papers']),
                         set(irwin_network['failed_papers']))
        self.assertEqual(set(locresults['not_located']),
                         set(irwin_network['not_located']))
        self.maxDiff = tmp

    def test_paper_hexbin_query(self):
        with wos_reader.open_wos_h5("test_data/irwin.h5") as w5:
            locresults = wos_reader_query.paperHexbinQuery(
                w5,
                get_locations_and_unknowns_nocache)
        expected_results = {'not_located': ['Kyushu Univ, Dept Phys, Fukuoka 812, Japan', 'Natl Res Inst Astron & Geophys, Dept Astron, Cairo 11421, Egypt', 'Natl Res Inst Astron & Geophys, Dept Astron, Cairo 11421, Egypt; Natl Res Inst Astron & Geophys, Kottamia Ctr Sci Excellence Astron & Space Sci KC, Cairo 11421, Egypt'], 'paper_locations': {'10.1051/mmnp/20138208': {'nodes': {'3': {'val': 0, 'text': '10.1051/mmnp/20138208: Humboldt Univ, Inst Phys, D-12489 Berlin, Germany', 'lat': 52.4370179, 'lon': 13.5470509}, '2': {'val': 0, 'text': '10.1051/mmnp/20138208: Univ Potsdam, Inst Phys & Astron, D-14476 Potsdam, Germany; Tech Univ Tampere, Dept Phys, FI-33101 Tampere, Finland', 'lat': 61.4981508, 'lon': 23.7610254}, '1': {'val': 0, 'text': '10.1051/mmnp/20138208: Univ Oxford, Rudolf Peierls Ctr Theoret Phys, Oxford OX1 3NP, England', 'lat': 51.7595933, 'lon': -1.259116}, '0': {'val': 0, 'text': '10.1051/mmnp/20138208: Univ Southern Denmark, MEMPHYS Ctr Biomembrane Phys, Dept Phys Chem & Pharm, DK-5230 Odense M, Denmark', 'lat': 55.37906169999999, 'lon': 10.4033399}, '4': {'val': 0, 'text': '10.1051/mmnp/20138208: Inst Theoret Phys NSC KIPT, UA-61108 Kharkov, Ukraine; Max Planck Inst Phys Komplexer Syst, D-01187 Dresden, Germany', 'lat': 51.0266014, 'lon': 13.7090684}}, 'edges': {'3': {'val': 0, 'to': 4, 'from': 0, 'text': '10.1051/mmnp/20138208'}, '2': {'val': 0, 'to': 3, 'from': 0, 'text': '10.1051/mmnp/20138208'}, '1': {'val': 0, 'to': 2, 'from': 0, 'text': '10.1051/mmnp/20138208'}, '0': {'val': 0, 'to': 1, 'from': 0, 'text': '10.1051/mmnp/20138208'}, '7': {'val': 0, 'to': 3, 'from': 2, 'text': '10.1051/mmnp/20138208'}, '6': {'val': 0, 'to': 4, 'from': 1, 'text': '10.1051/mmnp/20138208'}, '5': {'val': 0, 'to': 3, 'from': 1, 'text': '10.1051/mmnp/20138208'}, '4': {'val': 0, 'to': 2, 'from': 1, 'text': '10.1051/mmnp/20138208'}, '9': {'val': 0, 'to': 4, 'from': 3, 'text': '10.1051/mmnp/20138208'}, '8': {'val': 0, 'to': 4, 'from': 2, 'text': '10.1051/mmnp/20138208'}}}}, 'failed_papers': ['', '10.1016/j.newast.2014.02.011'], 'hexbin': {'nodes': [{'text': '10.1051/mmnp/20138208: Univ Southern Denmark, MEMPHYS Ctr Biomembrane Phys, Dept Phys Chem & Pharm, DK-5230 Odense M, Denmark', 'lng': 10.4033399, 'lat': 55.37906169999999, 'pubcount': 1}, {'text': '10.1051/mmnp/20138208: Univ Oxford, Rudolf Peierls Ctr Theoret Phys, Oxford OX1 3NP, England', 'lng': -1.259116, 'lat': 51.7595933, 'pubcount': 1}, {'text': '10.1051/mmnp/20138208: Univ Potsdam, Inst Phys & Astron, D-14476 Potsdam, Germany; Tech Univ Tampere, Dept Phys, FI-33101 Tampere, Finland', 'lng': 23.7610254, 'lat': 61.4981508, 'pubcount': 1}, {'text': '10.1051/mmnp/20138208: Humboldt Univ, Inst Phys, D-12489 Berlin, Germany', 'lng': 13.5470509, 'lat': 52.4370179, 'pubcount': 1}, {'text': '10.1051/mmnp/20138208: Inst Theoret Phys NSC KIPT, UA-61108 Kharkov, Ukraine; Max Planck Inst Phys Komplexer Syst, D-01187 Dresden, Germany', 'lng': 13.7090684, 'lat': 51.0266014, 'pubcount': 1}], 'edges': [{'fromlng': 10.4033399, 'fromlat': 55.37906169999999, 'tolng': -1.259116, 'weight': 1, 'tolat': 51.7595933}, {'fromlng': 10.4033399, 'fromlat': 55.37906169999999, 'tolng': 23.7610254, 'weight': 1, 'tolat': 61.4981508}, {'fromlng': 10.4033399, 'fromlat': 55.37906169999999, 'tolng': 13.5470509, 'weight': 1, 'tolat': 52.4370179}, {'fromlng': 10.4033399, 'fromlat': 55.37906169999999, 'tolng': 13.7090684, 'weight': 1, 'tolat': 51.0266014}, {'fromlng': -1.259116, 'fromlat': 51.7595933, 'tolng': 23.7610254, 'weight': 1, 'tolat': 61.4981508}, {'fromlng': -1.259116, 'fromlat': 51.7595933, 'tolng': 13.5470509, 'weight': 1, 'tolat': 52.4370179}, {'fromlng': -1.259116, 'fromlat': 51.7595933, 'tolng': 13.7090684, 'weight': 1, 'tolat': 51.0266014}, {'fromlng': 23.7610254, 'fromlat': 61.4981508, 'tolng': 13.5470509, 'weight': 1, 'tolat': 52.4370179}, {'fromlng': 23.7610254, 'fromlat': 61.4981508, 'tolng': 13.7090684, 'weight': 1, 'tolat': 51.0266014}, {'fromlng': 13.5470509, 'fromlat': 52.4370179, 'tolng': 13.7090684, 'weight': 1, 'tolat': 51.0266014}]}}
        self.assertEqual(len(locresults['hexbin']['nodes']),
                         len(expected_results['hexbin']['nodes']))
        self.assertEqual(len(locresults['hexbin']['edges']),
                         len(expected_results['hexbin']['edges']))
示例#37
0
def create_app(option):
    app = FlaskOpinewExt(__name__)
    config = config_factory.get(option)
    app.config.from_object(config)

    from common import create_jinja_filters, random_pwd, verify_initialization

    create_jinja_filters(app)
    from webapp.client import client
    from webapp.media import media

    app.register_blueprint(client)
    app.register_blueprint(media, url_prefix=Constants.MEDIA_URL_PREFIX)

    compress.init_app(app)
    gravatar.init_app(app)
    resize.init_app(app)
    db.init_app(app)
    admin.init_app(app)
    mail.init_app(app)
    migrate.init_app(app, db)
    babel.init_app(app)
    from models import User, Role
    from webapp.forms import ExtendedRegisterForm

    assets.init_app(app)
    assets.register('js_all', js_assets)
    assets.register('css_all', css_assets)

    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    security.init_app(app,
                      user_datastore,
                      confirm_register_form=ExtendedRegisterForm)
    with app.app_context():
        from providers import database, payment

        if not app.testing:
            verify_initialization()

        if app.testing:
            from async import tasks
        api_manager.init_app(app, flask_sqlalchemy_db=db)

        @app.before_request
        def before_request():
            # hack to allow browsers who don't set 3rd party cookies
            x_session = request.headers.get('X-Session')
            if x_session:
                rc = dict(request.cookies)
                rc['session'] = x_session
                request.cookies = ImmutableTypeConversionDict(rc)
                # refresh session
                refreshed_csrf_token = app.session_interface.open_session(
                    app, request).get('csrf_token')
                session['csrf_token'] = refreshed_csrf_token
            user_agent = parse(request.user_agent.string)
            g.mobile = False
            if user_agent.is_mobile or user_agent.is_tablet:
                g.mobile = True
            g.constants = Constants
            g.config = app.config
            g.mode = app.config.get('MODE')
            g.response_context = []
            g.s = strings
            g.payment = payment.StripeAPI()
            g.db = database.OpinewSQLAlchemyFacade()

        @app.after_request
        def redirect_if_next(response_class):
            if request.endpoint == 'static':
                response_class.headers['Access-Control-Allow-Origin'] = '*'
            payload = request.args if request.method == 'GET' else request.form
            if 'api_next' in payload:
                if not response_class.status_code == 200:
                    flash(response_class.data)
                    return redirect(request.referrer)
                return redirect(payload.get('api_next'))
            return response_class

    # register here CSRF so that the before_request is executed after the hack above
    csrf.init_app(app)
    patch_request_class(app, Constants.MAX_FILE_SIZE)

    from webapp.common import make_json_error

    for code in default_exceptions.iterkeys():
        app.error_handler_spec[None][code] = make_json_error

    configure_uploads(app, (
        user_images,
        review_images,
        shop_images,
    ))
    admins = [email for name, email in config.ADMINS]

    if not (app.debug or app.testing):
        mail_handler = SMTPHandler(
            app.config.get('MAIL_SERVER'),
            '*****@*****.**',
            admins,
            'Your Application Failed',
            credentials=(app.config.get('MAIL_USERNAME'),
                         app.config.get('MAIL_PASSWORD')),
            secure=())
        mail_handler.setLevel(logging.ERROR)
        mail_handler.setFormatter(
            Formatter('''
Time        : %(asctime)s
Location    : %(pathname)s:%(lineno)d
Module      : %(module)s
Function    : %(funcName)s

%(message)s'''))
        app.logger.addHandler(mail_handler)

    return app
示例#38
0
# -*- coding: utf-8 -*-

from flask.ext.security import SQLAlchemyUserDatastore

from app import create_app
from app.core import db
from app.data.users import User, Role

app = create_app("dev")
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
# security = Security(app, user_datastore)

# Create a user to test with
# db.drop_all()
# db.create_all()
role = user_datastore.create_role(name="root", description="Site administrator")
user_datastore.create_user(email='*****@*****.**', password='******', roles=[role])
user_datastore.create_user(email='*****@*****.**', password='******')

db.session.commit()

class Test(object):
    id = 1
    en_title = "title"
    ru_title = u"тайтл"
示例#39
0
    comment = db.Column(db.String(1000))
    rating = db.Column(db.Integer)
    created_at = db.Column(db.DateTime, default=datetime.now)

    def __repr__(self):
        return str(self.id)

    @property
    def admin_url(self):
        return "%s/%s/%s" % (app.config['ADMIN_URL'], 'review', self.id)

    @property
    def url(self):
        return "%s/%s/" % ('review', self.id)

users = SQLAlchemyUserDatastore(db, User, Role)
# social = Social(app, SQLAlchemyConnectionDatastore(db, Connection))


class ExtendedRegisterForm(RegisterForm):
    name = TextField(u'İsim Soyisim', [Required(u'İsmini girmen gerekli')])
    why = TextAreaField(
        u'Eşya Kütüphanesi\'ne neden geldiğinden kısaca bahsedebilir misin? '
        u'Mesela buradan beklentilerin neler? '
        u'Bizi nereden duydun?',
        [Length(min=0, max=1000, message=u'En fazla 1000 karakter girebilirsin.'),
         Required(u'Seni daha yakından tanımayı istiyoruz.')]
    )
    about = TextAreaField(
        u'Hobilerin neler? Bir ejderhan olsa adını ne koyardın? '
        u'En sevdiğin yemek ne? Boş zamanlarında ne yapmaktan hoşlanırsın?',
示例#40
0
from flask.ext.admin import Admin
from flask_admin.base import MenuLink
from flask.ext.security import Security, SQLAlchemyUserDatastore
from flask_wtf.csrf import CsrfProtect
from config import FIRST_USER_PASS, FIRST_USER_NAME

# Initialize the app and database, import the config
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
CsrfProtect(app)
app.killswitch = 0

# setup db, create the db, setup security, and add first user
from app import models
userstore = SQLAlchemyUserDatastore(db, models.User, None)
sec = Security(app, userstore)
db.create_all()
try:
    userstore.create_user(email=FIRST_USER_NAME, password=FIRST_USER_PASS)
    db.session.commit()
except: db.session.rollback()

#this loads all views
from app.views import main, admin

#admin setup
_admin = Admin(app, 'NYX Admin', template_mode='bootstrap3',
              index_view=admin.ProtectedIndexView())
_admin.add_link(MenuLink(name='Back to Site', url='/'))
_admin.add_view(admin.UserModelView(models.User, db.session))
示例#41
0
    :return: security_monkey.datastore.User object
    """
    app.logger.info("Inside load_user!")
    user = User.query.filter(User.email == email).first()
    if not user:
        user = User(email=email)
        db.session.add(user)
        db.session.commit()
        db.session.close()
        user = User.query.filter(User.email == email).first()
    return user


### Flask-Security ###
from flask.ext.security import Security, SQLAlchemyUserDatastore
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security = Security(app, user_datastore)

### Flask Mail ###
from flask_mail import Mail
mail = Mail(app=app)
from security_monkey.common.utils import send_email as common_send_email


@security.send_mail_task
def send_email(msg):
    """
    Overrides the Flask-Security/Flask-Mail integration
    to send emails out via boto and ses.
    """
    common_send_email(subject=msg.subject,
示例#42
0
文件: app.py 项目: LACMTA/places
def create_app(config_name):
	from models import (
		User, 
		Role, 
		)
	from places.models import (
		Category, 
		Feature, 
		Place,
		)

	app = Flask(__name__)
	app.config.from_object(config[config_name])
	config[config_name].init_app(app)
	user_datastore = SQLAlchemyUserDatastore(db, User, Role)

	security.init_app(app,user_datastore)
	principal.init_app(app)
	# jwt.init_app(app)
	api.init_app(app)
	admin.init_app(app)
	assets.init_app(app)
	assets.register('css_all', css_all)
	assets.register('js_vendor', js_vendor)

	with app.app_context():
		db.init_app(app)
		db.create_all()

		if not Role.query.first():
			admin_role = Role(name='admin',description='Administrator')
			db.session.add(admin_role)
			db.session.commit()
		else:
			admin_role = Role.query.filter(Role.name=='admin').first()

		if not User.query.first():
			user_datastore.create_user(
				email='*****@*****.**',
				password=encrypt_password('Haukola'),
				roles=[admin_role]
				)
			db.session.commit()

	# attach routes and custom error pages here
	admin.add_view(UserModelView(User, db.session, category='Auth'))
	admin.add_view(AdminModelView(Role, db.session, category='Auth'))
	admin.add_view(PlaceAdmin(Place, db.session))
	admin.add_view(CategoryAdmin(Category, db.session))
	admin.add_view(FeatureAdmin(Feature, db.session))
	admin.add_view(LogoutView(name='Logout', endpoint='logout'))
	admin.add_view(LoginView(name='Login', endpoint='login'))

	sitemap_view = Sitemap.as_view('sitemap')
	app.add_url_rule('/sitemap', view_func=sitemap_view)
	
	tapvendors_csv_view = TAPVendorsCSV.as_view('tapvendors_csv')
	app.add_url_rule('/csv/tapvendors', view_func=tapvendors_csv_view)
	railstations_csv_view = RailStationsCSV.as_view('railstations_csv')
	app.add_url_rule('/csv/railstations', view_func=railstations_csv_view)

	placemap_view = Placemap.as_view('placemap')
	app.add_url_rule('/placemap/', 
		view_func=placemap_view,
		methods=['GET'],
		)
	placemaptapvendors_view = Placemap.as_view('placemaptapvendors')
	app.add_url_rule('/placemap/tapvendors', 
		view_func=placemaptapvendors_view,
		methods=['GET'],
		)
	placemaprailstations_view = Railmap.as_view('placemaprailstations')
	app.add_url_rule('/placemap/railstations', 
		view_func=placemaprailstations_view,
		methods=['GET'],
		)

	return app
示例#43
0
        filename="hexbin_query.json", template="hexbin_query.html")

    # create tabdata queries
    replace_tabdata_query(
        db, name="Tabdata_hexbin",
        description="Hexbin of geographical data", 
        parameters='{ "locationColumn" : 0, "valueColumn" : 0, "textColumn" : 0 }',
        template="tabdata_hexbin_query.html")
    replace_tabdata_query(
        db, name="Tabdata_markercluster",
        description="Markercluster map of geographical data",
        parameters='{ "locationColumn" : 0, "valueColumn" : 0, "textColumn" : 0 }', 
        template="tabdata_markercluster_query.html")

        # create users
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    if user_datastore.find_user(nickname="admin") is None:
        admin = user_datastore.create_user(
            nickname="admin", email="*****@*****.**", password="******")
        db.session.add(admin)
        db.session.commit()

    create_gps_cache()


if not os.path.exists(SQLALCHEMY_MIGRATE_REPO):
    api.create(SQLALCHEMY_MIGRATE_REPO, 'database repository')
    api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
else:
    api.version_control(SQLALCHEMY_DATABASE_URI,
                        SQLALCHEMY_MIGRATE_REPO,
示例#44
0
文件: dhbox.py 项目: sabo/dhbox
        user = User.query.filter_by(
            name=self.name.data).first()
        if user is None:
            self.name.errors.append('Unknown username')
            return False

        if not user.check_password(self.password.data):
            self.password.errors.append('Invalid password')
            return False

        self.user = user
        return True

# Setup Flask-Security
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security = Security(app, user_datastore, login_form=ExtendedLoginForm)


# Create an admin user to test with
def create_user_and_role():
    first_user = User.query.filter(User.name == str('admin')).first()
    if not first_user:
        user_email = '*****@*****.**'
        username = '******'
        user_pass = app.config['ADMIN_PASS']
        the_user = user_datastore.create_user(email=user_email, name=username, password=user_pass, dhbox_duration=1000000000)
        the_role = user_datastore.create_role(name='admin', description='The administrator')
        user_datastore.add_role_to_user(the_user, the_role)
        db.session.commit()
        try: