def __init__(self, *args, **kwargs): jinja_env = JinjaEnv(globals={'static_path': 'static'}, extensions=['jinja2.ext.i18n', 'jinja2.ext.with_']) kwargs['jinja_env'] = jinja_env super(UKWARewriter, self).__init__(*args, **kwargs) self.init_loc(jinja_env)
def __init__(self, framed_replay=False, jinja_env=None, config=None, paths=None): self.loader = ArcWarcRecordLoader() self.config = config or {} self.paths = paths or {} self.framed_replay = framed_replay if framed_replay: self.frame_mod = '' self.replay_mod = 'mp_' else: self.frame_mod = None self.replay_mod = '' self.default_rw = DefaultRewriter(replay_mod=self.replay_mod, config=config) self.js_proxy_rw = RewriterWithJSProxy(replay_mod=self.replay_mod) if not jinja_env: jinja_env = JinjaEnv(globals={'static_path': 'static'}) self.jinja_env = jinja_env self.redirect_to_exact = config.get('redirect_to_exact') self.banner_view = BaseInsertView(self.jinja_env, self._html_templ('banner_html')) self.head_insert_view = HeadInsertView(self.jinja_env, self._html_templ('head_insert_html'), self.banner_view) self.frame_insert_view = TopFrameView(self.jinja_env, self._html_templ('frame_insert_html'), self.banner_view) self.error_view = BaseInsertView(self.jinja_env, self._html_templ('error_html')) self.not_found_view = BaseInsertView(self.jinja_env, self._html_templ('not_found_html')) self.query_view = BaseInsertView(self.jinja_env, self._html_templ('query_html')) self.use_js_obj_proxy = config.get('use_js_obj_proxy', True) self.cookie_tracker = None self.enable_memento = self.config.get('enable_memento') csp_header = self.config.get('csp-header', self.DEFAULT_CSP) if csp_header: self.csp_header = ('Content-Security-Policy', csp_header) else: self.csp_header = None # deprecated: Use X-Forwarded-Proto header instead! self.force_scheme = config.get('force_scheme')
def __init__(self, framed_replay=False, jinja_env=None, config=None, paths=None): """Initialize a new instance of RewriterApp :param bool framed_replay: Is rewriting happening in framed replay mode :param JinjaEnv|None jinja_env: Optional JinjaEnv instance to be used for rendering static files :param dict|None config: Optional config dictionary :param dict|None paths: Optional dictionary containing a mapping of path names to URLs """ self.loader = ArcWarcRecordLoader() self.config = config or {} self.paths = paths or {} self.framed_replay = framed_replay if framed_replay: self.frame_mod = '' self.replay_mod = 'mp_' else: self.frame_mod = None self.replay_mod = '' self.enable_prefer = self.config.get('enable_prefer', False) self.default_rw = DefaultRewriter(replay_mod=self.replay_mod, config=config) self.js_proxy_rw = RewriterWithJSProxy(replay_mod=self.replay_mod) if not jinja_env: jinja_env = JinjaEnv( globals={'static_path': 'static'}, extensions=['jinja2.ext.i18n', 'jinja2.ext.with_']) jinja_env.jinja_env.install_null_translations() self.jinja_env = jinja_env self.loc_map = {} self.jinja_env.init_loc(self.config.get('locales_root_dir'), self.config.get('locales'), self.loc_map, self.config.get('default_locale')) self.redirect_to_exact = config.get('redirect_to_exact') self.banner_view = BaseInsertView(self.jinja_env, self._html_templ('banner_html')) self.head_insert_view = HeadInsertView( self.jinja_env, self._html_templ('head_insert_html'), self.banner_view) self.frame_insert_view = TopFrameView( self.jinja_env, self._html_templ('frame_insert_html'), self.banner_view) self.error_view = BaseInsertView(self.jinja_env, self._html_templ('error_html')) self.not_found_view = BaseInsertView( self.jinja_env, self._html_templ('not_found_html')) self.query_view = BaseInsertView(self.jinja_env, self._html_templ('query_html')) self.use_js_obj_proxy = config.get('use_js_obj_proxy', True) self.cookie_tracker = self._init_cookie_tracker() self.enable_memento = self.config.get('enable_memento') self.static_prefix = self.config.get('static_prefix', 'static') csp_header = self.config.get('csp-header', self.DEFAULT_CSP) if csp_header: self.csp_header = ('Content-Security-Policy', csp_header) else: self.csp_header = None # deprecated: Use X-Forwarded-Proto header instead! self.force_scheme = config.get('force_scheme')
def init_jinja_env(self, config): assets_path = os.path.expandvars(config['assets_path']) packages = [os.environ.get('WR_TEMPLATE_PKG', 'webrecorder'), 'pywb'] jinja_env_wrapper = JinjaEnv(assets_path=assets_path, packages=packages, env_template_params_key='webrec.template_params') jinja_env = jinja_env_wrapper.jinja_env jinja_env.globals['metadata'] = config.get('metadata', {}) jinja_env.globals['static_path'] = 'static' def get_coll(context): return context.get('coll', '') def get_collection(context): coll = context.get('coll', '') coll_name = context.get('coll_name', '') user = get_user(context) return get_user(context).get_collection_by_id(coll, coll_name) def get_user(context): u = context.get('user', '') if not u: u = context.get('curr_user', '') return self.user_manager.all_users.make_user(u) def get_browsers(): return self.browser_mgr.get_browsers() def get_app_host(): return self.app_host or 'http://localhost:8089' def get_content_host(): return self.content_host or 'http://localhost:8092' def get_num_collections(): count = self.access.session_user.num_total_collections() return count def get_archives(): return self.content_app.client_archives @contextfunction def is_public(context): return get_collection(context).is_public() @contextfunction def can_admin(context): return self.access.can_admin_coll(get_collection(context)) @contextfunction def is_owner(context): res = self.access.is_curr_user(get_user(context)) return res @contextfunction def can_write(context): res = self.access.can_write_coll(get_collection(context)) return res @contextfunction def can_read(context): res = self.access.can_read_coll(get_collection(context)) @contextfunction def is_anon(context): return self.access.session_user.is_anon() def get_announce_list(): announce_list = os.environ.get('ANNOUNCE_MAILING_LIST', False) if announce_list: return announce_list return False @contextfunction def get_path(context, user, coll=None, rec=None): return self.get_path(user, coll, rec) @contextfunction def get_body_class(context, action): return self.get_body_class(context, action) @contextfunction def get_share_url(context): url = context.get('url') br = context.get('browser', '') user = context.get('user') coll = context.get('coll') host = self.app_host + ('' if self.app_host.endswith('/') else '/') ts = context.get('timestamp', '') if br != '': br = '$br:'+br return 'https://{host}{user}/{coll}/{ts}{browser}/{url}'.format( host=host, user=user, coll=coll, ts=ts, browser=br, url=url ) @contextfunction def get_embed_url(context): host = self.app_host + ('' if self.app_host.endswith('/') else '/') url = context.get('url') br = context.get('browser', '') user = context.get('user') coll = context.get('coll') ts = context.get('timestamp', '') if br != '': br = '$br:'+br return 'https://{host}_embed/{user}/{coll}/{ts}{browser}/{url}'.format( host=host, user=user, coll=coll, ts=ts, browser=br, url=url ) @contextfunction def get_recs_for_coll(context): collection = get_collection(context) return [{'ts': r['timestamp'], 'url': r['url'], 'br': r.get('browser', '')} for r in collection.list_pages()] @contextfunction def is_out_of_space(context): return self.access.session_user.is_out_of_space() def trunc_url_expand(value): """ Truncate querystrings, appending an ellipses, expand on click """ trunc_value = '?<span class="truncate-expand" aria-role="button" title="Click to expand" onclick="this.innerHTML=\''+value.split('?')[-1]+'\'; this.classList.add(\'open\');">...</span>' return re.sub(r'(\?.*)', trunc_value, value) def trunc_url(value): """ Truncate querystrings, appending an ellipses """ return re.sub(r'(\?.*)', '?...', value) def urldecode(value): """ Decode url-encoded value """ return unquote(value) jinja_env.globals['can_admin'] = can_admin jinja_env.globals['can_write'] = can_write jinja_env.globals['can_read'] = can_read #jinja_env.globals['can_tag'] = can_tag jinja_env.globals['is_owner'] = is_owner jinja_env.globals['is_anon'] = is_anon #jinja_env.globals['is_beta'] = is_beta jinja_env.globals['is_public'] = is_public jinja_env.globals['get_announce_list'] = get_announce_list jinja_env.globals['get_path'] = get_path jinja_env.globals['get_body_class'] = get_body_class jinja_env.globals['get_share_url'] = get_share_url jinja_env.globals['get_embed_url'] = get_embed_url jinja_env.globals['get_recs_for_coll'] = get_recs_for_coll jinja_env.globals['get_app_host'] = get_app_host jinja_env.globals['get_content_host'] = get_content_host jinja_env.globals['get_num_collections'] = get_num_collections jinja_env.globals['get_archives'] = get_archives jinja_env.globals['is_out_of_space'] = is_out_of_space jinja_env.globals['get_browsers'] = get_browsers #jinja_env.globals['is_extractable'] = is_extractable #jinja_env.globals['get_tags'] = get_tags #jinja_env.globals['is_tagged'] = is_tagged #jinja_env.globals['get_tags_in_collection'] = get_tags_in_collection jinja_env.filters['trunc_url'] = trunc_url jinja_env.filters['trunc_url_expand'] = trunc_url_expand jinja_env.filters['urldecode'] = urldecode return jinja_env_wrapper
def init_jinja_env(self, config): assets_path = os.path.expandvars(config['assets_path']) packages = [os.environ.get('WR_TEMPLATE_PKG', 'webrecorder'), 'pywb'] jinja_env_wrapper = JinjaEnv( assets_path=assets_path, packages=packages, env_template_params_key='webrec.template_params') jinja_env = jinja_env_wrapper.jinja_env jinja_env.globals['metadata'] = config.get('metadata', {}) def get_coll(context): coll = context.get('coll_orig', '') if not coll: coll = context.get('coll', '') return coll def get_user(context): u = context.get('user', '') if not u: u = context.get('curr_user', '') return u def get_browsers(): return self.browser_mgr.get_browsers() def get_tags(): return self.manager.get_available_tags() def get_tags_in_collection(user, coll): return self.manager.get_tags_in_collection(user, coll) def get_app_host(): return self.app_host def get_content_host(): return self.content_host def get_num_collections(): curr_user = self.manager.get_curr_user() count = self.manager.num_collections(curr_user) if curr_user else 0 return count def get_archives(): return self.content_app.client_archives def is_beta(): return self.manager.is_beta() def can_tag(): return self.manager.can_tag() def is_public(user, coll): return self.manager.is_public(user, coll) @contextfunction def can_admin(context): return self.manager.can_admin_coll(get_user(context), get_coll(context)) @contextfunction def is_owner(context): return self.manager.is_owner(get_user(context)) @contextfunction def can_write(context): res = self.manager.can_write_coll(get_user(context), get_coll(context)) return res @contextfunction def can_read(context): return self.manager.can_read_coll(get_user(context), get_coll(context)) @contextfunction def is_extractable(context): return self.manager.is_extractable(get_user(context), get_coll(context)) @contextfunction def is_anon(context): return self.manager.is_anon(get_user(context)) def get_announce_list(): announce_list = os.environ.get('ANNOUNCE_MAILING_LIST', False) if announce_list: return announce_list return False @contextfunction def get_path(context, user, coll=None, rec=None): return self.get_path(user, coll, rec) @contextfunction def get_body_class(context, action): return self.get_body_class(context, action) @contextfunction def get_share_url(context): url = context.get('url') br = context.get('browser', '') user = context.get('user') coll = context.get('coll') host = self.app_host + ('' if self.app_host.endswith('/') else '/') ts = '' if br != '': br = '$br:' + br if context.get('curr_mode', '') in ('record'): ts = context.get('timestamp', '') else: ts = context.get('ts', '') return 'https://{host}{user}/{coll}/{ts}{browser}/{url}'.format( host=host, user=user, coll=coll, ts=ts, browser=br, url=url) @contextfunction def get_embed_url(context): host = self.app_host + ('' if self.app_host.endswith('/') else '/') url = context.get('url') br = context.get('browser', '') user = context.get('user') coll = context.get('coll') ts = '' if br != '': br = '$br:' + br if context.get('curr_mode', '') in ('record'): ts = context.get('timestamp', '') else: ts = context.get('ts', '') return 'https://{host}_embed/{user}/{coll}/{ts}{browser}/{url}'.format( host=host, user=user, coll=coll, ts=ts, browser=br, url=url) @contextfunction def get_recs_for_coll(context): user = context.get('user') coll = get_coll(context) return [{ 'ts': r['timestamp'], 'url': r['url'], 'br': r.get('browser', '') } for r in self.manager.list_coll_pages(user, coll)] @contextfunction def is_out_of_space(context): return self.manager.is_out_of_space(context.get('curr_user', '')) @contextfunction def is_tagged(context, bookmark_id): available = context.get('available_tags', []) tags = context.get('tags', []) for tag in available: if tag in tags and bookmark_id in tags[tag]: return True return False def trunc_url(value): """ Truncate querystrings, appending an ellipses """ return re.sub(r'(\?.*)', '?...', value) def urldecode(value): """ Decode url-encoded value """ return unquote(value) jinja_env.globals['can_admin'] = can_admin jinja_env.globals['can_write'] = can_write jinja_env.globals['can_read'] = can_read jinja_env.globals['can_tag'] = can_tag jinja_env.globals['is_owner'] = is_owner jinja_env.globals['is_anon'] = is_anon jinja_env.globals['is_beta'] = is_beta jinja_env.globals['is_public'] = is_public jinja_env.globals['get_announce_list'] = get_announce_list jinja_env.globals['get_path'] = get_path jinja_env.globals['get_body_class'] = get_body_class jinja_env.globals['get_share_url'] = get_share_url jinja_env.globals['get_embed_url'] = get_embed_url jinja_env.globals['get_recs_for_coll'] = get_recs_for_coll jinja_env.globals['get_app_host'] = get_app_host jinja_env.globals['get_content_host'] = get_content_host jinja_env.globals['get_num_collections'] = get_num_collections jinja_env.globals['get_archives'] = get_archives jinja_env.globals['is_out_of_space'] = is_out_of_space jinja_env.globals['get_browsers'] = get_browsers jinja_env.globals['is_extractable'] = is_extractable jinja_env.globals['get_tags'] = get_tags jinja_env.globals['is_tagged'] = is_tagged jinja_env.globals['get_tags_in_collection'] = get_tags_in_collection jinja_env.filters['trunc_url'] = trunc_url jinja_env.filters['urldecode'] = urldecode return jinja_env_wrapper