def create_app(load_admin=True): from redash import extensions, handlers from redash.handlers.webpack import configure_webpack from redash.handlers import chrome_logger from redash.admin import init_admin from redash.models import db from redash.authentication import setup_authentication from redash.metrics.request import provision_app app = Flask(__name__, template_folder=settings.STATIC_ASSETS_PATH, static_folder=settings.STATIC_ASSETS_PATH, static_path='/static') # Make sure we get the right referral address even behind proxies like nginx. app.wsgi_app = ProxyFix(app.wsgi_app, settings.PROXIES_COUNT) #app.wsgi_app = ReverseProxied(app.wsgi_app) app.url_map.converters['org_slug'] = SlugConverter if settings.ENFORCE_HTTPS: SSLify(app, skips=['ping']) if settings.SENTRY_DSN: from raven import Client from raven.contrib.flask import Sentry from raven.handlers.logging import SentryHandler client = Client(settings.SENTRY_DSN, release=__version__, install_logging_hook=False) sentry = Sentry(app, client=client) sentry.client.release = __version__ sentry_handler = SentryHandler(client=client) sentry_handler.setLevel(logging.ERROR) logging.getLogger().addHandler(sentry_handler) # configure our database app.config['SQLALCHEMY_DATABASE_URI'] = settings.SQLALCHEMY_DATABASE_URI app.config.update(settings.all_settings()) provision_app(app) db.init_app(app) migrate.init_app(app, db) if load_admin: init_admin(app) mail.init_app(app) setup_authentication(app) limiter.init_app(app) handlers.init_app(app) configure_webpack(app) extensions.init_extensions(app) chrome_logger.init_app(app) return app
def create_app(): from redash import handlers from redash.admin import init_admin from redash.models import db from redash.authentication import setup_authentication from redash.metrics.request import provision_app app = Flask( __name__, template_folder=settings.STATIC_ASSETS_PATHS[-1], static_folder=settings.STATIC_ASSETS_PATHS[-1], static_path="/static", ) # Make sure we get the right referral address even behind proxies like nginx. app.wsgi_app = ProxyFix(app.wsgi_app, settings.PROXIES_COUNT) app.url_map.converters["org_slug"] = SlugConverter if settings.ENFORCE_HTTPS: SSLify(app, skips=["ping"]) if settings.SENTRY_DSN: from raven.contrib.flask import Sentry from raven.handlers.logging import SentryHandler sentry = Sentry(app, dsn=settings.SENTRY_DSN) sentry.client.release = __version__ sentry_handler = SentryHandler(settings.SENTRY_DSN) sentry_handler.setLevel(logging.ERROR) logging.getLogger().addHandler(sentry_handler) # configure our database settings.DATABASE_CONFIG.update({"threadlocals": True}) app.config["DATABASE"] = settings.DATABASE_CONFIG app.config.update(settings.all_settings()) provision_app(app) init_admin(app) db.init_app(app) mail.init_app(app) setup_authentication(app) handlers.init_app(app) return app
setup_logging() app = Flask(__name__, template_folder=settings.STATIC_ASSETS_PATH, static_folder=settings.STATIC_ASSETS_PATH, static_path='/static') api = Api(app) # configure our database settings.DATABASE_CONFIG.update({'threadlocals': True}) app.config['DATABASE'] = settings.DATABASE_CONFIG db = Database(app) from redash.authentication import setup_authentication auth = setup_authentication(app) @api.representation('application/json') def json_representation(data, code, headers=None): resp = make_response(json.dumps(data, cls=utils.JSONEncoder), code) resp.headers.extend(headers or {}) return resp redis_url = urlparse.urlparse(settings.REDIS_URL) if redis_url.path: redis_db = redis_url.path[1] else: redis_db = 0 redis_connection = redis.StrictRedis(host=redis_url.hostname, port=redis_url.port, db=redis_db, password=redis_url.password)
app = Flask(__name__, template_folder=settings.STATIC_ASSETS_PATH, static_folder=settings.STATIC_ASSETS_PATH, static_path='/static') api = Api(app) init_admin(app) # configure our database settings.DATABASE_CONFIG.update({'threadlocals': True}) app.config['DATABASE'] = settings.DATABASE_CONFIG app.config.update(settings.all_settings()) db.init_app(app) mail.init_app(app) from redash.authentication import setup_authentication setup_authentication(app) @api.representation('application/json') def json_representation(data, code, headers=None): # Flask-Restful checks only for flask.Response but flask-login uses werkzeug.wrappers.Response if isinstance(data, Response): return data resp = make_response(json.dumps(data, cls=utils.JSONEncoder), code) resp.headers.extend(headers or {}) return resp from redash import controllers
def create_app(load_admin=True): from jose import jwt from redash import extensions, handlers from redash.handlers.webpack import configure_webpack from redash.admin import init_admin from redash.models import db from redash.authentication import setup_authentication, get_jwt_public_key from redash.metrics.request import provision_app from jose import jwt os.environ['SCRIPT_NAME'] = settings.ROOT_UI_URL if settings.REMOTE_JWT_LOGIN_ENABLED: class JwtFlask(Flask): def process_response(self, response, *args, **kwargs): jwttoken = request.cookies.get('jwt', None) if jwttoken is not None: try: public_key = get_jwt_public_key() jwt_decoded = jwt.get_unverified_claims( jwttoken) if public_key is '' else jwt.decode( jwttoken, public_key) iat = jwt_decoded['iat'] exp = jwt_decoded['exp'] now = time.time() if iat + 1200 < now <= exp: email = jwt_decoded.get('email', None) resp = requests.post( settings.REMOTE_JWT_REFRESH_PROVIDER, headers={ 'Authorization': 'Bearer ' + jwttoken }, data={'email': email}) if resp.status_code < 300 and resp.data.get( 'jwt', None) is not None: response.set_cookie('jwt', resp.data['jwt'], secure=True, httponly=True) elif resp.status_code == 401: raise jwt.JWTError( 'The authentication refresh service has denied a refresh, a login is likely in order.' ) elif now > exp: raise jwt.JWTClaimsError( 'The asserted expiration claim has passed.') except (jwt.ExpiredSignatureError, jwt.JWTClaimsError, jwt.JWTError) as e: return redirect( settings.REMOTE_JWT_EXPIRED_ENDPOINT + urllib.quote_plus(request.referrer or settings.ROOT_UI_URL)) return super(JwtFlask, self).process_response(response, *args, **kwargs) app = JwtFlask(__name__, template_folder=settings.STATIC_ASSETS_PATH, static_folder=settings.STATIC_ASSETS_PATH, static_url_path=settings.ROOT_UI_URL + '/static') else: app = Flask(__name__, template_folder=settings.STATIC_ASSETS_PATH, static_folder=settings.STATIC_ASSETS_PATH, static_url_path=settings.ROOT_UI_URL + '/static') # Make sure we get the right referral address even behind proxies like nginx. app.wsgi_app = ProxyFix(app.wsgi_app, settings.PROXIES_COUNT) app.url_map.converters['org_slug'] = SlugConverter app.config["APPLICATION_ROOT"] = settings.ROOT_UI_URL app.config['TEMPLATES_AUTO_RELOAD'] = True if settings.ENFORCE_HTTPS: SSLify(app, skips=['ping']) if settings.SENTRY_DSN: from raven import Client from raven.contrib.flask import Sentry from raven.handlers.logging import SentryHandler client = Client(settings.SENTRY_DSN, release=__version__, install_logging_hook=False) sentry = Sentry(app, client=client) sentry.client.release = __version__ sentry_handler = SentryHandler(client=client) sentry_handler.setLevel(logging.ERROR) logging.getLogger().addHandler(sentry_handler) # configure our database app.config['SQLALCHEMY_DATABASE_URI'] = settings.SQLALCHEMY_DATABASE_URI app.config.update(settings.all_settings()) provision_app(app) db.init_app(app) migrate.init_app(app, db) if load_admin: init_admin(app) mail.init_app(app) setup_authentication(app) limiter.init_app(app) handlers.init_app(app) configure_webpack(app) extensions.init_extensions(app) return app