Example #1
0
def create_app(config=Config):
    app = Flask(__name__,
                template_folder='../templates',
                static_folder='../static')
    app.config.from_object(config)
    config.init_app(app)
    mail.init_app(app)
    db.init_app(app)
    admin.init_app(app)
    pagedown.init_app(app)
    migrate.init_app(app, db)
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    Security(app, datastore=user_datastore, login_form=ExtendedLoginForm)

    with app.test_request_context():
        db.create_all()
        user_datastore.find_or_create_role(name='admin',
                                           description='Administrator')
        if not user_datastore.get_user(app.config['ADMIN_EMAIL']):
            user_datastore.create_user(email=app.config['ADMIN_EMAIL'],
                                       password=app.config['ADMIN_PASSWORD'])
        db.session.commit()
        user_datastore.add_role_to_user(app.config['ADMIN_EMAIL'], 'admin')
        db.session.commit()

    return app
Example #2
0
def add_role(ctx, email, role):
    ds = SQLAlchemyUserDatastore(ctx.obj, User, Role)
    try:
        ds.add_role_to_user(email, role)
        ds.commit()
    except:
        log.exception("Couldn't add role")
Example #3
0
def create_init_user(user_datastore: SQLAlchemyUserDatastore) -> None:
    """
    TODO in doc:
    在这里创建初始的角色和管理用户。
    """
    user_datastore.find_or_create_role(name='root', description='系统管理员')
    user_datastore.find_or_create_role(name='admin', description='管理员')
    user_datastore.find_or_create_role(name='user', description='用户')

    if not user_datastore.get_user('*****@*****.**'):
        user_datastore.create_user(
            email='*****@*****.**',
            password=security_utils.encrypt_password('default_password'))

    # TODO in doc:
    # 如果还需要更多的初始用户,在这里创建

    db.session.commit()  # 在给用户分配角色前,必须commit这个User对象

    user_datastore.add_role_to_user('*****@*****.**', 'root')

    # TODO in doc:
    # 在这里分配其他角色给初始用户

    db.session.commit()
def create_admin_user(db, survey, email, password):
    user_datastore = SQLAlchemyUserDatastore(db, WebUser, WebUserRole)
    admin_role = user_datastore.find_or_create_role(name='admin')
    user = user_datastore.create_user(email=email,
                                      password=hash_password(password),
                                      survey_id=survey.id)
    user_datastore.add_role_to_user(user, admin_role)
Example #5
0
def make_admin(ctx, email):
    """Makes a given user an admin"""
    ds = SQLAlchemyUserDatastore(ctx.obj, User, Role)
    try:
        ds.add_role_to_user(email, 'admin')
        ds.commit()
    except:
        log.exception("Couldn't make admin")
Example #6
0
def create_roles_users():
    log.info('Insert Role data in database')
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    admin = user_datastore.find_or_create_role(name='Admin',
                                               description='Administrator')
    user_datastore.find_or_create_role(name='api', description='API user')
    user = user_datastore.create_user(email=app.config['ADMIN_EMAIL'],
                                      password=app.config['ADMIN_PASSWORD'])
    user_datastore.add_role_to_user(user, admin)
    db.session.commit()
Example #7
0
def add_user():
    user = User.query.order_by(User.id.desc()).first()
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    if request.method == 'POST':
        if 'email' in request.form:
            email = request.form.get('email')
        if 'password' in request.form:
            password = request.form.get('password')
        if 'name' in request.form:
            name = request.form.get('name')
        if 'firstname' in request.form:
            firstname = request.form.get('firstname')
        if 'phone' in request.form:
            phone = request.form.get('phone')
        if 'signing' in request.files:
            filename = str(user.id + 1) + '.jpg'
            signing = request.files.get('signing')
            path = f"APPLICATION/{admin.app['MODULES_FOLDER']}/{'admin'}/{'signing'}"
            pathlib.Path(path).mkdir(parents=True, exist_ok=True)
            try:
                signing.save(os.path.join(path, filename))
            except PermissionError:
                admin.log.error(
                    "Permission Error to create / save file to uploads folder")

        exists = db.session.query(
            db.exists().where(User.email == email)).scalar()
        if exists:
            flash("Utilisateur existe déja", "error")
            return redirect(url_for('admin.index'))

        encrypted_password = utils.hash_password(password)

        if not user_datastore.get_user(email):
            user_datastore.create_user(email=email,
                                       password=encrypted_password,
                                       last_name=name,
                                       first_name=firstname,
                                       phone=phone,
                                       signing=filename)

        try:
            db.session.commit()
        except OperationalError:
            admin.logger.error("Operational Error permission access database")
        user_datastore.add_role_to_user(email,
                                        'user')  # set Role to the new User
        try:
            db.session.commit()
        except OperationalError:
            admin.logger.error("Operational Error permission access database")
    flash("Utilisateur créer", "success")
    return redirect(url_for('admin.index'))
Example #8
0
def make_admin(manager, email):
    """Make a pre-existing user an admin."""
    # Example: python3 -m compath make_admin [email protected]

    ds = SQLAlchemyUserDatastore(manager, User, Role)
    user = ds.find_user(email=email)

    if user is None:
        click.echo('User not found')
        sys.exit(0)

    admin = ds.find_or_create_role('admin')

    ds.add_role_to_user(user, admin)
    ds.commit()
    click.echo('User {} is now admin'.format(email))
def register_users_from_manifest(user_datastore: SQLAlchemyUserDatastore, manifest: Dict) -> None:
    """Register the users and roles in a manifest.

    :param user_datastore: A user data store
    :param dict manifest: A manifest dictionary, which contains two keys: ``roles`` and ``users``. The ``roles``
     key corresponds to a list of dictionaries containing ``name`` and ``description`` entries. The ``users`` key
     corresponds to a list of dictionaries containing ``email``, ``password``, and ``name`` entries
     as well as a optional ``roles`` entry with a corresponding list relational to the names in the ``roles``
     entry in the manifest.
    """
    for role in manifest['roles']:
        user_datastore.find_or_create_role(**role)

    for user_manifest in manifest['users']:
        email = user_manifest['email']
        user = user_datastore.find_user(email=email)
        if user is None:
            logger.info(f'creating user: {email}')
            user = user_datastore.create_user(
                confirmed_at=datetime.datetime.now(),
                email=email,
                password=user_manifest['password'],
                name=user_manifest['name'],
            )

        for role_name in user_manifest.get('roles', []):
            if user_datastore.add_role_to_user(user, role_name):
                logger.info(f'registered {user} as {role_name}')

    user_datastore.commit()
Example #10
0
def create_user():
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    # db.drop_all()
    # db.create_all()
    # user_datastore.create_user(username='******', password='******')
    # db.session.commit()
    # print user_datastore.find_user(username='******')
    for permissions, (name, desc) in Permission.PERMISSION_MAP.items():
        user_datastore.find_or_create_role(name=name,
                                           description=desc,
                                           permissions=permissions)
    for username, passwd, permissions in (('xjd', '123', (Permission.LOGIN,
                                                          Permission.EDITOR)),
                                          ('xilixjd', '123',
                                           (Permission.ADMINISTER, ))):
        user = user_datastore.create_user(username=username, password=passwd)
        db.session.commit()
        for permission in permissions:
            user_datastore.add_role_to_user(
                user,
                user_datastore.find_role(
                    role=Permission.PERMISSION_MAP[permission][0]))
            db.session.commit()
Example #11
0
def load(ctx, file):
    """Dump stuff for loading later (in lieu of having proper migrations)"""
    ds = SQLAlchemyUserDatastore(ctx.obj, User, Role)
    for line in file:
        email, first, last, roles, password = line.strip().split('\t')
        u = ds.find_user(email=email)

        if not u:
            u = ds.create_user(email=email,
                               first_name=first,
                               last_name=last,
                               password=password)
            log.info('added %s', u)
            ds.commit()
        for role_name in roles.strip().split(','):
            r = ds.find_role(role_name)
            if not r:
                r = ds.create_role(name=role_name)
                ds.commit()
            if not u.has_role(r):
                ds.add_role_to_user(u, r)

    ds.commit()
Example #12
0
def add_or_update_user(username, password, is_admin=False, active=True):
    """
    :param username: username or email --> unique identification
    :param password: the password may be passed in cleartext (yeah I just \
    wrote that) as it is encrypted internally.
    :param is_admin: determines whether the account receives the 'admin' role
    :param active: determines whether users will be able to login in with the\
    account
    """
    user_datastore = SQLAlchemyUserDatastore(DB, User, Role)
    existing_user = user_datastore.find_user(email=username)
    if existing_user:
        user = User.query.filter_by(email=username).first()
        user.email = username
        user.password = encrypt_password(password)
        user.active = active
    else:
        user = user_datastore.create_user(email=username,
                                          password=encrypt_password(password),
                                          active=active)

    if is_admin:
        user_datastore.add_role_to_user(user, 'admin')
    DB.session.commit()
Example #13
0
def load_all_fixtures(db, app):

    user_datastore = SQLAlchemyUserDatastore(db, User, Role)

    # Load default fixtures
    role = user_datastore.create_role(name=app.config['VOXO_ROLE_USER'],
                                      description='User role')
    admin_role = user_datastore.create_role(name=app.config['VOXO_ROLE_ADMIN'],
                                            description='Admin role')
    server_role = user_datastore.create_role(
        name=app.config['VOXO_ROLE_SERVER'], description='Server role')

    user_vjousse = registerable.register_user(email='*****@*****.**',
                                              password='******')
    user_datastore.add_role_to_user(user_vjousse, role)

    print("{user} with token {token} created.".format(
        user=user_vjousse.email, token=user_vjousse.get_auth_token()))

    user = registerable.register_user(email='*****@*****.**',
                                      password='******')
    user_datastore.add_role_to_user(user, admin_role)
    user_datastore.add_role_to_user(user, role)

    print("{user} with token {token} created.".format(
        user=user.email, token=user.get_auth_token()))

    server = registerable.register_user(email='*****@*****.**',
                                        password='******')
    user_datastore.add_role_to_user(server, server_role)

    print("{user} with token {token} created.".format(
        user=server.email, token=server.get_auth_token()))

    asr_model_french = AsrModel(name="french.studio.fr_FR",
                                description="General purpose french model")

    asr_model_french.users.append(user_vjousse)

    db.session.add(asr_model_french)
    db.session.flush()

    asr_model_english = AsrModel(name="english.studio",
                                 description="General purpose english model")

    asr_model_english.users.append(user_vjousse)

    db.session.add(asr_model_english)
    db.session.flush()

    media_file = MediaFile(filename='fixture_file.wav',
                           status=FileStatus.Success,
                           user_id=user_vjousse.id,
                           size=2500,
                           generated_filename='fixture_file_UUID.wav',
                           duration=70)

    db.session.add(media_file)
    db.session.flush()

    process = Process(
        file_id=media_file.id,
        status=DecodeStatus.Queued,
    )

    db.session.add(process)
    db.session.flush()

    transcription = Transcription(
        auto_filename='transcription.xml',
        ref_filename='transcription.txt',
        user_id=user_vjousse.id,
    )

    db.session.add(transcription)
    db.session.flush()

    process = Process(file_id=media_file.id,
                      status=DecodeStatus.Queued,
                      type=ProcessType.TranscriptionAlignment,
                      transcription_id=transcription.id)

    db.session.add(process)
    db.session.flush()

    db.session.commit()
Example #14
0
from app import app,db
from app.models.Roles import Role,User
from flask_security import SQLAlchemyUserDatastore,Security

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


admin = user_datastore.create_user(username='******', password='******',active=True)
user_datastore.create_role(name='User', description='Generic user role')

admin_role = user_datastore.create_role(name='Admin', description='Admin user role')

user_datastore.add_role_to_user(admin, admin_role)
db.session.commit()
Example #15
0
def create_app(config_object=ProductionConfig):
    app = Flask(__name__)
    # Sentry(app, dsn='https://*****:*****@sentry.io/300199')  # noqa

    # CORS(app)
    app.config.from_object(config_object)

    db.init_app(app)
    migrate.init_app(app, db)
    csrf.init_app(app)
    from Mandark.project import models

    userstore = SQLAlchemyUserDatastore(db, models.User, models.Role)
    Security(app, userstore)

    @app.before_request
    def before_request():
        g.user = current_user

    @app.errorhandler(404)
    def not_found_error(e):
        print(e)
        return render_template('404.html', title='FourOhFour')

    @app.errorhandler(500)
    def internal_error():
        return render_template('500.html', title='A server oops happened')

    try:
        with app.app_context():
            userstore.find_or_create_role(name='admin',
                                          description='Administrator')
            userstore.find_or_create_role(name='moderator',
                                          description='Moderator')
            userstore.find_or_create_role(name='projectmgr',
                                          description='Project Manager')
            userstore.find_or_create_role(name='user',
                                          description='General User')
            userstore.create_user(email='*****@*****.**',
                                  password=hash_password('admin'))
            userstore.create_user(email='*****@*****.**',
                                  password=hash_password('user'))
            userstore.create_user(email='*****@*****.**',
                                  password=hash_password('Allanice-001'))
            userstore.add_role_to_user('*****@*****.**', 'admin')
            userstore.add_role_to_user('*****@*****.**', 'user')
            userstore.add_role_to_user('*****@*****.**', 'admin')
            db.session.commit()
            print('IGETHEE')
    except OperationalError:
        if app.debug:
            print(OperationalError)
        else:
            pass
    except Exception as e:
        with app.app_context():
            print(e)
            db.session.rollback()

    from Mandark.project.views import main, admin
    app.register_blueprint(main.main)

    app_admin = Admin(app,
                      'Administration Section',
                      template_mode='bootstrap3',
                      index_view=admin.MyAdminIndexView())
    app_admin.add_view(admin.UserModelView(models.User, db.session))
    app_admin.add_view(admin.RoleModelView(models.Role, db.session))
    app_admin.add_view(admin.ProjectModelView(models.Project, db.session))
    app_admin.add_view(admin.ProjectMgrModelView(models.Projectmgr,
                                                 db.session))
    app_admin.add_view(
        admin.OrganisationModelView(models.Organisation, db.session))
    app_admin.add_view(
        admin.ChangeRequestTypeView(models.ChangeRequestType, db.session))
    app_admin.add_view(
        admin.ChangeRequestSubmitterView(models.ChangeRequestSubmitter,
                                         db.session))
    app_admin.add_link(MenuLink(name='Back to Site', url='/'))

    return app
Example #16
0
def init_db(app):
    """
    # import all modules here that might define models so that
    # they will be registered properly on the metadata.  Otherwise
    # you will have to import them first before calling init_db()
    Initializes database and creates the tables
    """
    from app.models import db, Role, AdminLogin, Project
    from flask_security import Security, SQLAlchemyUserDatastore
    from flask_migrate import Migrate
    db.init_app(app)
    app.app_context().push()

    # Initialize the SQLAlchemy data store and Flask-Security
    user_datastore = SQLAlchemyUserDatastore(db, AdminLogin, Role)
    security_bp = Security(app, user_datastore)

    # Initialize Flask-Migrate
    migrate = Migrate(app, db)

    # db.drop_all() # drops tables, won't drop functions or anything else
    # db.create_all()

    """
    only run configure_mappers() and create_all() once, because
    create_all() will throw an error that the tsvector functions
    already exist. With tables, create_all() can recognize they already
    exist and then not create them again, but with functions it struggles
    and will try to create the functions that already exist in the database.
    """
    # db.configure_mappers() # need this to enable TsVector triggers
    # db.create_all()
    # # insert dummy data
    # from app.dummy_data import insert_dummy_data
    # insert_dummy_data(db)

    # Create a default superuser that has all permissions
    user_datastore.find_or_create_role(name="superuser_admins",
                                       table_name='admins',
                                       can_read=True,
                                       can_edit=True,
                                       can_create=True,
                                       can_delete=True)

    user_datastore.find_or_create_role(name="superuser_roles",
                                       table_name='roles',
                                       can_read=True,
                                       can_edit=True,
                                       can_create=True,
                                       can_delete=True)
    user_datastore.find_or_create_role(name="superuser_advisorapplicants",
                                       table_name='advisorapplicants',
                                       can_read=True,
                                       can_edit=True,
                                       can_create=True,
                                       can_delete=True)

    user_datastore.find_or_create_role(name="superuser_advisors",
                                       table_name='advisors',
                                       can_read=True,
                                       can_edit=True,
                                       can_create=True,
                                       can_delete=True)

    user_datastore.find_or_create_role(name="superuser_projects",
                                       table_name='projects',
                                       can_read=True,
                                       can_edit=True,
                                       can_create=True,
                                       can_delete=True)

    user_datastore.find_or_create_role(name="superuser_specialties",
                                       table_name='specialties',
                                       can_read=True,
                                       can_edit=True,
                                       can_create=True,
                                       can_delete=True)

    user_datastore.find_or_create_role(name="superuser_subspecialties",
                                       table_name='subspecialties',
                                       can_read=True,
                                       can_edit=True,
                                       can_create=True,
                                       can_delete=True)

    user_datastore.find_or_create_role(name="superuser_bigfirms",
                                       table_name='bigfirms',
                                       can_read=True,
                                       can_edit=True,
                                       can_create=True,
                                       can_delete=True)

    user_datastore.find_or_create_role(name="superuser_occupations",
                                       table_name='occupations',
                                       can_read=True,
                                       can_edit=True,
                                       can_create=True,
                                       can_delete=True)

    user_datastore.find_or_create_role(name="superuser_occupationtypes",
                                       table_name='occupationtypes',
                                       can_read=True,
                                       can_edit=True,
                                       can_create=True,
                                       can_delete=True)

    user_datastore.find_or_create_role(name="can_edit_advisorapplicants")
    user_datastore.find_or_create_role(name="can_create_advisors", )

    if not user_datastore.get_user(app.config['SUPERUSER_ADMIN_EMAIL']):
        user_datastore.create_user(email=app.config['SUPERUSER_ADMIN_EMAIL'],
                                   password=app.config['SUPERUSER_ADMIN_PASSWORD'],
                                   active=True,
                                   analytics_access=True,
                                   database_access=True)
    db.session.commit()



    user_datastore.add_role_to_user(app.config['SUPERUSER_ADMIN_EMAIL'], "superuser_admins")
    user_datastore.add_role_to_user(app.config['SUPERUSER_ADMIN_EMAIL'], "superuser_roles")
    user_datastore.add_role_to_user(app.config['SUPERUSER_ADMIN_EMAIL'], "superuser_advisorapplicants")
    user_datastore.add_role_to_user(app.config['SUPERUSER_ADMIN_EMAIL'], "superuser_advisors")
    user_datastore.add_role_to_user(app.config['SUPERUSER_ADMIN_EMAIL'], "superuser_projects")
    user_datastore.add_role_to_user(app.config['SUPERUSER_ADMIN_EMAIL'], "superuser_specialties")
    user_datastore.add_role_to_user(app.config['SUPERUSER_ADMIN_EMAIL'], "superuser_subspecialties")
    user_datastore.add_role_to_user(app.config['SUPERUSER_ADMIN_EMAIL'], "superuser_bigfirms")
    user_datastore.add_role_to_user(app.config['SUPERUSER_ADMIN_EMAIL'], "superuser_occupations")
    user_datastore.add_role_to_user(app.config['SUPERUSER_ADMIN_EMAIL'], "superuser_occupationtypes")
    user_datastore.add_role_to_user(app.config['SUPERUSER_ADMIN_EMAIL'], "can_edit_advisorapplicants")
    user_datastore.add_role_to_user(app.config['SUPERUSER_ADMIN_EMAIL'], "can_create_advisors")

    db.session.commit()

    db.session.close()

    return security_bp
Example #17
0
# set up the database model if not already set up
from app import models
db.create_all()
db.session.commit()

# setup the User/Role tables with flask-security, create base users/groups if neccessary
userstore = SQLAlchemyUserDatastore(db, models.User, models.Role)
sec = Security(app, userstore)
try:
    with app.app_context():
        userstore.find_or_create_role(name='admin', description='Administrator')
        userstore.find_or_create_role(name='user', description='General user')
        userstore.create_user(email=FIRST_USER_NAME,
                            password=utils.encrypt_password(FIRST_USER_PASS))
        userstore.add_role_to_user(FIRST_USER_NAME, 'admin')
        db.session.commit()
except: db.session.rollback()

# get the view controllers for the app
from app.views import main, admin, common

# set up main as a blueprint, add as many blueprints as necessary
app.register_blueprint(main.main)

# configure the admin interface, populate it with pages and links
app_admin = Admin(app, 'Flask Skeleton Admin', template_mode='bootstrap3', index_view=admin.AdminIndexView())
app_admin.add_view(admin.UserModelView(models.User, db.session))
app_admin.add_view(admin.RoleModelView(models.Role, db.session))
app_admin.add_link(MenuLink(name='Back to Site', url='/'))
Example #18
0
def add_student():
    form = AddStudentForm()
    name = current_user.first_name

    # for select2 fields
    colleges = College.query.all()
    buildings = Building.query.all()

    # query all rooms in database for selectfield
    form.room_id.choices = [(str(room.id), repr(room))
                            for room in Room.query.all()]

    if form.validate_on_submit():

        first_name = form.first_name.data
        last_name = form.last_name.data
        email = form.email.data
        password = form.password.data
        student = form.student.data
        parent = form.parent.data
        dean = form.dean.data

        confirmed_at = datetime.utcnow()

        user = User(first_name=first_name,
                    last_name=last_name,
                    email=email,
                    password=password,
                    student=student,
                    parent=parent,
                    dean=dean,
                    confirmed_at=confirmed_at)
        db.session.add(user)
        db.session.commit()

        user_datastore = SQLAlchemyUserDatastore(db, User, Role)
        if user.student == True:
            user_datastore.add_role_to_user(user.email, 'student')
        elif user.parent == True:
            user_datastore.add_role_to_user(user.email, 'parent')
        elif user.dean == True:
            user_datastore.add_role_to_user(user.email, 'dean')
        else:
            flash("You must select a role", 'success')
            return redirect(url_for('main.dean_panel'))

        db.session.commit()

        relationship = ResidentOf()
        relationship.user_id = user.id
        if form.room_id.data != "Room":
            relationship.room_id = form.room_id.data
        else:
            relationship.room_id = None

        db.session.add(relationship)
        db.session.commit()

        flash("Added " + form.first_name.data + " " + form.last_name.data,
              'success')
        return redirect(url_for('main.dean_panel'))

    return render_template('stem/add_student.html',
                           form=form,
                           colleges=colleges,
                           buildings=buildings,
                           name=name,
                           action="new")
Example #19
0
# set up the database model if not already set up
from app import models
db.create_all()
db.session.commit()

# setup the User/Role tables with flask-security, create base users/groups if neccessary
userstore = SQLAlchemyUserDatastore(db, models.User, models.Role)
sec = Security(app, userstore)
try:
    with app.app_context():
        userstore.find_or_create_role(name='admin', description='Administrator')
        userstore.find_or_create_role(name='user', description='General user')
        userstore.create_user(email=FIRST_USER_NAME,
                            password=utils.encrypt_password(FIRST_USER_PASS))
        userstore.add_role_to_user('admin', 'admin')
        db.session.commit()
except: db.session.rollback()

# get the view controllers for the app
from app.views import main, admin, common

# set up main as a blueprint, add as many blueprints as necessary
app.register_blueprint(main.main)

# configure the admin interface, populate it with pages and links
app_admin = Admin(app, 'Flask Skeleton Admin', template_mode='bootstrap3', index_view=admin.AdminIndexView())
app_admin.add_view(admin.UserModelView(models.User, db.session))
app_admin.add_view(admin.LinkModelView(models.Link, db.session))
app_admin.add_link(MenuLink(name='Back to Site', url='/'))
def create_app():
    myapp = Flask(__name__)
    myapp.config['DEBUG'] = True
    myapp.config['SECRET_KEY'] = 'super-secret'
    myapp.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
    # As of Flask-SQLAlchemy 2.4.0 it is easy to pass in options directly to the
    # underlying engine. This option makes sure that DB connections from the
    # pool are still valid. Important for entire application since
    # many DBaaS options automatically close idle connections.
    myapp.config["SQLALCHEMY_ENGINE_OPTIONS"] = {
        "pool_pre_ping": True,
    }
    myapp.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    myapp.config['SECURITY_PASSWORD_SALT'] = 'onetwothreefourfive'

    myapp.config['SECURITY_REGISTERABLE'] = True
    myapp.config['SECURITY_CONFIRMABLE'] = False
    myapp.config['SECURITY_RECOVERABLE'] = True
    myapp.config['SECURITY_TRACKABLE'] = True
    myapp.config['SECURITY_CHANGEABLE'] = True

    myapp.config['MAIL_SERVER']='localhost'
    myapp.config['MAIL_PORT']=8025

    db.init_app(myapp)
    mail.init_app(myapp)
    db_admin.init_app(myapp)

    from app.models import User, Role
    from app.forms import ExtendedRegisterForm
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    security.init_app(myapp, datastore=user_datastore,
         register_form=ExtendedRegisterForm, confirm_register_form=ExtendedRegisterForm)

    from app.main import bp as main_bp
    myapp.register_blueprint(main_bp)

    from app.db_admin import bp as db_admin_bp
    myapp.register_blueprint(db_admin_bp)

# This is junk. This should be in the security blueprint, but the "myapp" variable is not
#   available there, so I had to register it here.
# I thought I could put connect_via(bp), but that didn't work
# Here are some hints for fixing this
# https://stackoverflow.com/questions/16163139/catch-signals-in-flask-blueprint
# https://stackoverflow.com/questions/57866541/how-to-get-user-registered-signal-in-flask-user
# https://stackoverflow.com/questions/17146724/setting-a-default-role-in-flask-security?rq=1

    @user_registered.connect_via(myapp)
    def user_registered_sighandler(app, user, confirm_token):
        default_role = user_datastore.find_role("user")
        user_datastore.add_role_to_user(user, default_role)
        db.session.commit()

    # debug only for testing.
    app_context = myapp.app_context()
    app_context.push()
    db.create_all()
        # Create the Roles "admin" and "end-user" -- unless they already exist
    user_datastore.find_or_create_role(name='admin', description='Administrator')
    user_datastore.find_or_create_role(name='user', description='End user')
    
    user_datastore.create_user(email='*****@*****.**', password='******')
    user_datastore.create_user(email='*****@*****.**', password='******')
    
    db.session.commit()

    # Give one User has the "end-user" role, while the other has the "admin" role. (This will have no effect if the
    # Users already have these Roles.) Again, commit any database changes.
    user_datastore.add_role_to_user('*****@*****.**', 'user')
    user_datastore.add_role_to_user('*****@*****.**', 'admin')
    db.session.commit()

    return myapp
Example #21
0
app.app_context().push()

db.create_all()

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

# admin user
user_datastore.create_user(email='*****@*****.**', password='******')
user = User.query.first()

user_datastore.create_role(name='admin', description='administrator')

role = Role.query.first()
user_datastore.add_role_to_user(user, role)

# ADMIN


class AdminView(ModelView):
    def is_accessible(self):
        return current_user.has_role('admin')

    def inaccessible_callback(self, name, **kwargs):
        return redirect(url_for('security.login', next=request.url))


class HomeAdminView(AdminIndexView):
    def is_accessible(self):
        return current_user.has_role('admin')
Example #22
0
from app import models

db.create_all()
db.session.commit()

# setup the User/Role tables with flask-security, create base users/groups if neccessary
userstore = SQLAlchemyUserDatastore(db, models.User, models.Role)
sec = Security(app, userstore)
try:
    with app.app_context():
        userstore.find_or_create_role(name='admin',
                                      description='Administrator')
        userstore.find_or_create_role(name='user', description='General user')
        userstore.create_user(email=FIRST_USER_NAME,
                              password=utils.encrypt_password(FIRST_USER_PASS))
        userstore.add_role_to_user(FIRST_USER_NAME, 'admin')
        db.session.commit()
except:
    db.session.rollback()

# get the view controllers for the app
from app.views import main, admin, common

# set up main as a blueprint, add as many blueprints as necessary
app.register_blueprint(main.main)

# configure the admin interface, populate it with pages and links
app_admin = Admin(app,
                  'Flask Skeleton Admin',
                  template_mode='bootstrap3',
                  index_view=admin.AdminIndexView())
Example #23
0
def do_setup(app):
    """Create a new settings database from scratch"""

    if config.SERVER_MODE is False:
        print(u"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(u"NOTE: Configuring authentication for SERVER mode.\n")

        if all(value in os.environ
               for value in ['PGADMIN_SETUP_EMAIL', 'PGADMIN_SETUP_PASSWORD']):
            email = ''
            p1 = ''
            if os.environ['PGADMIN_SETUP_EMAIL'] and os.environ[
                    'PGADMIN_SETUP_PASSWORD']:
                email = os.environ['PGADMIN_SETUP_EMAIL']
                p1 = os.environ['PGADMIN_SETUP_PASSWORD']
        else:
            # Prompt the user for their default username and password.
            print(
                u"Enter the email address and password to use for the initial "
                u"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(u'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.')
                else:
                    print(
                        u'Password must be at least 6 characters. 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()

        # Create the keys
        key = Keys(name='CSRF_SESSION_KEY', value=config.CSRF_SESSION_KEY)
        db.session.merge(key)

        key = Keys(name='SECRET_KEY', value=config.SECRET_KEY)
        db.session.merge(key)

        key = Keys(name='SECURITY_PASSWORD_SALT',
                   value=config.SECURITY_PASSWORD_SALT)
        db.session.merge(key)

        db.session.commit()

    # Done!
    print(u"")
    print(u"The configuration database has been created at {0}".format(
        config.SQLITE_PATH))