import flask from nyaa.views import ( # isort:skip account, admin, main, site, torrents, users, ) def _maintenance_mode_hook(): ''' Blocks POSTs, unless MAINTENANCE_MODE_LOGINS is True and the POST is for a login. ''' if flask.request.method == 'POST': allow_logins = flask.current_app.config['MAINTENANCE_MODE_LOGINS'] endpoint = flask.request.endpoint if not (allow_logins and endpoint == 'account.login'): message = 'Site is currently in maintenance mode.' # In case of an API request, return a plaintext error message if endpoint.startswith('api.'): resp = flask.make_response(message, 405) resp.headers['Content-Type'] = 'text/plain' return resp else: # Otherwise redirect to the target page and flash a message flask.flash(flask.Markup(message), 'danger') try: target_url = flask.url_for(endpoint) except Exception: # Non-GET-able endpoint, try referrer or default to home page target_url = flask.request.referrer or flask.url_for('main.home') return flask.redirect(target_url) def register_views(flask_app): """ Register the blueprints using the flask_app object """ # Add our POST blocker first if flask_app.config['MAINTENANCE_MODE']: flask_app.before_request(_maintenance_mode_hook) flask_app.register_blueprint(account.bp) flask_app.register_blueprint(admin.bp) flask_app.register_blueprint(main.bp) flask_app.register_blueprint(site.bp) flask_app.register_blueprint(torrents.bp) flask_app.register_blueprint(users.bp)