Exemple #1
0
def create_admin_views():
    global views_already_created
    if views_already_created is False:
        admin.add_link(
            MenuLink(name='Public Website', category='', url=url_for('index')))
        admin.add_views(adminView(Post, db.session))
        admin.add_views(adminView(Messages, db.session))
        admin.add_views(adminView(User, db.session))
        views_already_created = True
Exemple #2
0
from flask import render_template, flash, redirect, session, url_for, request, \
                  g, Markup, jsonify, json
from flask_login import login_user, logout_user, current_user, login_required
from flask_admin.base import MenuLink
from datetime import datetime
from dateutil.parser import parse
from app import app, db, lm, admin  #, hashids
from .models import *
from .forms import *
from .admin import AdminModelView

admin.add_link(MenuLink(name='Back to Visitor Health Log', url='/'))
admin.add_view(AdminModelView(User, db.session))
admin.add_view(AdminModelView(Visitor, db.session))


def redirect_dest(fallback):
    return request.args.get('next') or fallback


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


@app.before_request
def before_request():
    g.user = current_user
    if g.user.is_authenticated:
        g.user.last_seen = datetime.now()
        db.session.add(g.user)
Exemple #3
0
    def is_accessible(self):
        return current_user.is_authenticated

    def inaccessible_callback(self, name, **kwargs):
        return redirect(url_for('main.index'))


class MyAdminView(ModelView):
    def is_accessible(self):
        return current_user.is_authenticated

    def inaccessible_callback(self, name, **kwargs):
        return redirect(url_for('main.index'))


class LogoutMenuLink(MenuLink):
    def is_accessible(self):
        return current_user.is_authenticated


class AppMenuLink(MenuLink):
    def is_accessible(self):
        return current_user.is_authenticated


admin.add_view(MyUserView(User, db.session))
admin.add_view(MyAdminView(Note, db.session))
admin.add_view(MyAdminView(Todo, db.session))
admin.add_link(LogoutMenuLink(name='App', category='', url="/"))
admin.add_link(LogoutMenuLink(name='Logout', category='', url="/logout"))
Exemple #4
0
        return redirect(url_for('main.index'))

    can_export = True
    export_types = ['csv']
    static_folder = 'static'


class UserAdmin(AdminModelView):
    column_list = ['username', 'email', 'role']
    form_columns = ['username', 'email', 'role']
    column_editable_list = [
        'email',
        'role',
    ]
    column_searchable_list = [
        'username',
        'email',
        'role.name',
    ]


admin.add_view(UserAdmin(User, db.session))
admin.add_view(AdminModelView(Book, db.session, category='Books'))
admin.add_view(AdminModelView(Author, db.session, category='Books'))
admin.add_view(AdminModelView(Category, db.session, category='Books'))
admin.add_view(AdminModelView(Identifier, db.session, category='Books'))
admin.add_view(AdminModelView(Link, db.session, category='Books'))
admin.add_view(AdminModelView(Item, db.session, category='BookItems'))
admin.add_view(AdminModelView(History, db.session, category='BookItems'))
admin.add_link(MenuLink(name='Exit Admin', url='/'))
Exemple #5
0
from app import db, admin
from app.user.roles import admin_permission
from app.models import User, Project, MonitoringStation, EquipmentType, Equipment, ClusterGroup, LabelType, Label, Language, CommonName, ProjectLabel, MLModel, ModelIteration, ModelLabel 


# Customized model view class
class MyModelView(ModelView):
    def is_accessible(self):
        return admin_permission.can()


class ClusterGroupView(MyModelView):
    form_excluded_columns = ('clusters')


admin.add_link(MenuLink(name='Main Site', category='', url='/'))

admin.add_view(MyModelView(User, db.session))
admin.add_view(MyModelView(Project, db.session))
admin.add_view(MyModelView(MonitoringStation, db.session))
admin.add_view(MyModelView(EquipmentType, db.session))
admin.add_view(MyModelView(Equipment, db.session))
admin.add_view(ClusterGroupView(ClusterGroup, db.session))
admin.add_view(MyModelView(LabelType, db.session))
admin.add_view(MyModelView(Label, db.session))
admin.add_view(MyModelView(Language, db.session))
admin.add_view(MyModelView(CommonName, db.session))
admin.add_view(MyModelView(ProjectLabel, db.session))
admin.add_view(MyModelView(MLModel, db.session))
admin.add_view(MyModelView(ModelIteration, db.session))
admin.add_view(MyModelView(ModelLabel, db.session))
Exemple #6
0
def init_extensions(app):
    # Start Flask-SQLAlchemy
    db.init_app(app)

    # Start Flask-Login
    login_manager.login_view = 'auth.login'
    login_manager.init_app(app)

    from app.models import User
    from app import admin

    # Start Flask-Admin
    admin.init_app(app)
    admin.add_view(AdminModelView(User, db.session))
    admin.add_link(MainIndexLink(name='WizeTher Dashboard'))

    try:
        with app.app_context():
            # Create database models
            db.create_all()

            # Create admin user on startup
            admin_email = app.config['ADMIN_EMAIL']
            admin_name = app.config['ADMIN_NAME']
            admin_pass = app.config['ADMIN_PASSWORD']

            app.logger.info('Admin account: {} <----> {}'.format(
                admin_email, admin_pass))

            admin = User.query.filter_by(email=admin_email).first()
            if admin is None:
                passw = generate_password_hash(admin_pass, method='sha256')
                new_user = User(
                    email=admin_email,
                    name=admin_name,
                    #password=admin_pass,
                    role='admin')
                new_user.set_password(admin_pass)

                db.session.add(new_user)
                db.session.commit()
                app.logger.info('Added admin user to dabatase')
            else:
                # Checking if password has been changed
                admin_hash = generate_password_hash(admin_pass,
                                                    method='sha256')

                if not check_password_hash(admin_hash, admin.password):
                    # Updating password on database
                    admin.password = admin_hash

                    db.session.add(admin)
                    db.session.commit()
                    #app.logger.info('Updated admin password')

            app.logger.info('Database working')

    except Exception as e:
        app.logger.error('Exception Found: ' + str(e))
        app.logger.error(
            'Database not found. Please read README.md to create the db.')

    app.logger.info('Done. Flask extensions started.')
Exemple #7
0
#!/home/yayo/virtual_enviroment/bin/python
import os
from app import create_app, db, admin, models
from app.models import User, Role
from flask.ext.script import Manager, Shell
from flask.ext.admin.menu import MenuLink

app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)

admin.add_view(models.UserView(models.User, db.session))
admin.add_link(MenuLink(name='Back', category='', url="/home"))


def make_shell_context():
    return dict(app=app, db=db, User=User, Role=Role)


manager.add_command("shell", Shell(make_context=make_shell_context))

if __name__ == '__main__':
    manager.run()
Exemple #8
0
#!/home/yayo/virtual_enviroment/bin/python
import os
from app import create_app, db, admin, models
from app.models import User, Role
from flask.ext.script import Manager, Shell
from flask.ext.admin.menu import MenuLink


app = create_app(os.getenv("FLASK_CONFIG") or "default")
manager = Manager(app)

admin.add_view(models.UserView(models.User, db.session))
admin.add_link(MenuLink(name="Back", category="", url="/home"))


def make_shell_context():
    return dict(app=app, db=db, User=User, Role=Role)


manager.add_command("shell", Shell(make_context=make_shell_context))

if __name__ == "__main__":
    manager.run()
Exemple #9
0
    def __init__(self, session, **kwargs):
        # You can pass name and other parameters if you want to
        super(SettingsView, self).__init__(Settings, session, **kwargs)

    def is_accessible(self):
        if g.user.is_authenticated():
            return g.user.role #ROLE_ADMIN == 1, user = 0
        else:  #anonymous user
            return 0

class EmailView(ModelView):

    def __init__(self, session, **kwargs):
        # You can pass name and other parameters if you want to
        super(EmailView, self).__init__(Email, session, **kwargs)

    def is_accessible(self):
        if g.user.is_authenticated():
            return g.user.role #ROLE_ADMIN == 1, user = 0
        else:  #anonymous user
            return 0

#add flask admin views
admin.add_view(UserView(db.session))
admin.add_view(ZoneView(db.session))
admin.add_view(ValidUsersView(db.session))
admin.add_view(SettingsView(db.session))
admin.add_view(EmailView(db.session))
admin.add_link(MenuLink(name='Clear History', url='/clearhistory'))
admin.add_link(MenuLink(name='Exit Admin', url='/'))
def create_app():
    app = Flask(__name__)

    # Load app config
    if app.config['ENV'] == 'production':
        # Create logger
        logger = logging.getLogger('flask.errors')
        logger.setLevel(logging.DEBUG)

        # Create console handler and configure it
        consoleHandler = logging.StreamHandler()
        consoleHandler.setLevel(logging.DEBUG)

        logFormat = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
        consoleHandler.setFormatter(logging.Formatter(logFormat))

        # Add our custom handler to the logger
        logger.addHandler(consoleHandler)

        # Tell the app to use logger
        app.logger.handlers = logger.handlers
        app.logger.setLevel(logger.level)

        # Server side minification
        app.logger.info('Minifying')
        minify(app=app, html=True, js=False, cssless=True)

        app.logger.info('Starting with ProductionConfig')
        app.config.from_object(ProductionConfig)
    elif app.config['ENV'] == 'testing':
        app.logger.info("Starting with TestingConfig")
        app.config.from_object(TestingConfig)
    else:
        app.logger.info('Starting with DevelopmentConfig')
        app.config.from_object(DevelopmentConfig)

    # Connect to database
    app.logger.info('Using database connection:' +
                    app.config['SQLALCHEMY_DATABASE_URI'])
    app.logger.info('Using redis connection:' + app.config['RQ_REDIS_URL'])
    app.url_map.strict_slashes = True

    # Gotify push notifications
    if app.config['GOTIFY_URL'] is not None:
        app.logger.info('Using Gotify url: {}'.format(
            app.config['GOTIFY_URL']))

    #
    # Custom flask cli commands
    #
    app.cli.add_command(run_worker)
    app.cli.add_command(run_scheduler)

    #
    # Set up Flask extensions
    #

    # Init Flask-DebugToolbar
    toolbar.init_app(app)

    # Init Flask-RQ2
    rq.init_app(app)

    # Init Flask-SQLAlchemy
    db.init_app(app)

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

    # Init Flask-Login
    login_manager.login_view = 'auth.login'
    login_manager.init_app(app)
    login_manager.refresh_view = 'auth.login'
    login_manager.needs_refresh_message = (
        u"Session timedout, please re-login")
    login_manager.needs_refresh_message_category = "info"

    from app.models import User
    from app import admin

    admin.init_app(app)
    admin.add_view(AdminModelView(User, db.session))
    #admin.add_view(FileAdmin('./path/', '/files/', name="File browser"))
    admin.add_link(MainIndexLink(name='Flask Dashboard'))

    try:
        with app.app_context():
            # Create database models
            #db.create_all()

            # Create admin user on startup
            admin_email = app.config['ADMIN_EMAIL']
            admin_name = app.config['ADMIN_NAME']
            admin_pass = app.config['ADMIN_PASSWORD']

            admin = User.query.filter_by(email=admin_email).first()
            if admin.name is None:
                passw = generate_password_hash(admin_pass, method='sha256')
                new_user = User(
                    email=admin_email,
                    name=admin_name,
                    #password=admin_pass,
                    role='admin')
                new_user.set_password(admin_pass)

                db.session.add(new_user)
                db.session.commit()
                app.logger.info('Added admin user to dabatase')
            else:
                # Checking if password has been changed
                admin_hash = generate_password_hash(admin_pass,
                                                    method='sha256')

                if not check_password_hash(admin_hash, admin.password):
                    # Updating password on database
                    admin.password = admin_hash

                    db.session.add(admin)
                    db.session.commit()
                    #app.logger.info('Updated admin password')

            app.logger.info('Database working')

    except Exception as e:
        app.logger.error('Exception Found' + str(e))
        app.logger.error(
            'Database not found. Please read README.md to create the db.')

    app.logger.info('Done. Flask extensions started.')

    # Adding the views app
    from app.views.home import dashboard_bp
    from app.views.auth import auth_bp
    from app.views.api import api_bp

    app.register_blueprint(dashboard_bp)
    app.register_blueprint(auth_bp)
    app.register_blueprint(api_bp)

    # Inject global variables to all templates
    @app.context_processor
    def injectVariables():
        return dict(user=current_user)

    # Set up global HTML handlers
    @app.errorhandler(500)
    def internal_server_error(error):
        return render_template('500.html'), 500

    @app.errorhandler(404)
    def page_not_found(error):
        return render_template('404.html'), 404

    # Auto logout session. Modify time in minutes
    @app.before_request
    def before_request():
        session.permanent = True
        app.permanent_session_lifetime = timedelta(minutes=1440)

    return app
Exemple #11
0
from bokeh.application.handlers import FunctionHandler
from app import app, db, loginmanager, admin
from bokeh.embed import autoload_server, server_document
from bokeh.server.server import Server

from .models import User, Diamond
from .forms import LoginForm, AddRowForm, EditDiamondForm
from .datawarehouse import connect_db, query_to_dict
from .admin import AdminModelView
from .pdlgd import modify_doc

# add a view to manage users; can be accessed at /admin/user
admin.add_view(AdminModelView(User, db.session))
# add a view to manage Redhshift table; can be accessed at /admin/diamond
admin.add_view(AdminModelView(Diamond, db.session))
admin.add_link(MenuLink(name='Back To App', url='/pdlgd'))
bkapp = Application(FunctionHandler(modify_doc))

@app.before_request
def before_request():
    """ Set global user to current user and opens a new database connection if
        there is none yet for the current application context.
    """
    g.user = current_user
    if not hasattr(g, 'db'):
        g.db = connect_db()
    if g.user.is_authenticated:
        g.user.last_seen = datetime.now()


@app.teardown_request
Exemple #12
0
            jobs.notification.send_mail.delay(
                [user.account.email],
                gettext('reset your password in ') + 'Maybe', html)
            return render_template('admin/user/reset_password.html', form=form)
        else:
            flash(gettext('sorry, no user found for that email address'),
                  'error')

    return render_template('admin/user/reset_password.html', form=form)


@frontend.route('/admin/secret')
@fresh_login_required
def secret():
    """
    保密
    :return:
    """
    if current_user.is_authenticated:
        print(current_user)
    return jsonify(success='OK')


admin.add_link(MenuLink(name='Home', url='/admin'))
admin.add_link(
    NotAuthenticatedMenuLink(name='Login', endpoint='frontend.login'))
admin.add_link(AuthenticatedMenuLink(name='Logout',
                                     endpoint='frontend.logout'))
admin.add_link(
    AuthenticatedMenuLink(name='Change Password',
                          endpoint='frontend.change_password'))