def use(self, **kwargs): from pylons.i18n import get_lang from v1.lib.template_helpers import static from v1.lib.filters import SC_OFF, SC_ON if g.uncompressedJS: if c.lang == "en" or c.lang not in g.all_languages: # in this case, the msgids *are* the translated strings and we # can save ourselves the pricey step of lexing the js source return Module.use(self, **kwargs) msgids = extract_javascript_msgids(Module.get_source(self)) localized_appendices = self.localized_appendices + [ StringsSource(msgids) ] lines = [Module.use(self, **kwargs)] for appendix in localized_appendices: line = SC_OFF + inline_script_tag.format( content=appendix.get_localized_source(c.lang)) + SC_ON lines.append(line) return "\n".join(lines) else: langs = get_lang() or [g.lang] url = LocalizedModule.languagize_path(self.name, langs[0]) return script_tag.format(src=static(url), **kwargs)
def url(self, absolute=False, mangle_name=False): from v1.lib.template_helpers import static path = [g.static_path, self.name] if g.uncompressedJS: path.insert(1, "js") return static(os.path.join(*path), absolute, mangle_name)
def header_url(url, absolute=False): if url == g.default_header_url: return static(url, absolute=absolute) elif absolute: return make_url_https(url) else: return make_url_protocol_relative(url)
def url(self, absolute=False, mangle_name=True): from v1.lib.template_helpers import static if g.uncompressedJS: return [ source.url(absolute=absolute, mangle_name=mangle_name) for source in self.sources ] else: return static(self.name, absolute=absolute, mangle_name=mangle_name)
def send429(self): retry_after = request.environ.get("retry_after") if retry_after: response.headers["Retry-After"] = str(retry_after) template_name = '/ratelimit_toofast.html' else: template_name = '/ratelimit_throttled.html' template = g.mako_lookup.get_template(template_name) return template.render( logo_url=static(g.default_header_url), retry_after=retry_after, )
def make_failien_url(): failien_number = random.randint(1, FAILIEN_COUNT) failien_name = "youbrokeit%d.png" % failien_number return static(failien_name)
def js_config(extra_config=None): logged = c.user_is_loggedin and c.user.name user_id = c.user_is_loggedin and c.user._id user_in_timeout = c.user_is_loggedin and c.user.in_timeout sodium = bool(logged and c.user.sodium) controller_name = request.environ['pylons.routes_dict']['controller'] action_name = request.environ['pylons.routes_dict']['action'] route_name = controller_name + '.' + action_name cache_policy = "loggedout_www" if c.user_is_loggedin: cache_policy = "loggedin_www_new" # Canary for detecting cache poisoning poisoning_canary = None poisoning_report_mac = None if logged: if "pc" in c.cookies and len(c.cookies["pc"].value) == 2: poisoning_canary = c.cookies["pc"].value poisoning_report_mac = make_poisoning_report_mac( poisoner_canary=poisoning_canary, poisoner_name=logged, poisoner_id=user_id, cache_policy=cache_policy, source="web", route_name=route_name, ) mac = hmac.new(g.secrets["action_name"], route_name, hashlib.sha1) verification = mac.hexdigest() cur_subverbify = "" cur_sr_fullname = "" cur_listing = "" listing_over_18 = False pref_no_profanity = not logged or c.user.pref_no_profanity pref_media_preview = c.user.pref_media_preview if not feature.is_enabled("autoexpand_media_previews"): expando_preference = None elif pref_media_preview == "subverbify": expando_preference = "subverbify_default" elif pref_media_preview == "on": expando_preference = "auto_expand" else: expando_preference = "do_not_expand" pref_beta = c.user.pref_beta nsfw_media_acknowledged = logged and c.user.nsfw_media_acknowledged if isinstance(c.site, Subverbify) and not c.default_sr: cur_subverbify = c.site.name cur_sr_fullname = c.site._fullname cur_listing = cur_subverbify listing_over_18 = c.site.over_18 elif isinstance(c.site, DefaultSR): cur_listing = "frontpage" elif isinstance(c.site, FakeSubverbify): cur_listing = c.site.name if g.debug: events_collector_url = g.events_collector_test_url events_collector_key = g.secrets['events_collector_test_js_key'] events_collector_secret = g.secrets['events_collector_test_js_secret'] else: events_collector_url = g.events_collector_url events_collector_key = g.secrets['events_collector_js_key'] events_collector_secret = g.secrets['events_collector_js_secret'] config = { # is the user logged in? "logged": logged, # logged in user's id "user_id": user_id, # is user in timeout? "user_in_timeout": user_in_timeout, # the subverbify's name (for posts) "post_site": cur_subverbify, "cur_site": cur_sr_fullname, "cur_listing": cur_listing, # the user's voting hash "modhash": c.modhash or False, # the current rendering style "renderstyle": c.render_style, # they're welcome to try to override this in the DOM because we just # disable the features server-side if applicable 'store_visits': sodium and c.user.pref_store_visits, # current domain "cur_domain": get_domain(subverbify=False, no_www=True), # where do ajax requests go? "ajax_domain": get_domain(subverbify=False), "stats_domain": g.stats_domain or '', "stats_sample_rate": g.stats_sample_rate or 0, "extension": c.extension, "https_endpoint": is_subdomain(request.host, g.domain) and g.https_endpoint, "media_domain": g.media_domain, # does the client only want to communicate over HTTPS? "https_forced": feature.is_enabled("force_https"), # debugging? "debug": g.debug, "poisoning_canary": poisoning_canary, "poisoning_report_mac": poisoning_report_mac, "cache_policy": cache_policy, "send_logs": g.live_config["frontend_logging"], "server_time": math.floor(time.time()), "status_msg": { "fetching": _("fetching title..."), "submitting": _("submitting..."), "loading": _("loading...") }, "is_fake": isinstance(c.site, FakeSubverbify), "tracker_url": "", # overridden below if configured "adtracker_url": g.adtracker_url, "clicktracker_url": g.clicktracker_url, "uitracker_url": g.uitracker_url, "eventtracker_url": g.eventtracker_url, "anon_eventtracker_url": g.anon_eventtracker_url, "events_collector_url": events_collector_url, "events_collector_key": events_collector_key, "events_collector_secret": events_collector_secret, "feature_screenview_events": feature.is_enabled('screenview_events'), "static_root": static(''), "over_18": bool(c.over18), "listing_over_18": listing_over_18, "expando_preference": expando_preference, "pref_no_profanity": pref_no_profanity, "pref_beta": pref_beta, "nsfw_media_acknowledged": nsfw_media_acknowledged, "new_window": logged and bool(c.user.pref_newwindow), "mweb_blacklist_expressions": g.live_config['mweb_blacklist_expressions'], "sodium": sodium, "has_subscribed": logged and c.user.has_subscribed, "is_sponsor": logged and c.user_is_sponsor, "pageInfo": { "verification": verification, "actionName": route_name, }, "facebook_app_id": g.live_config["facebook_app_id"], "feature_new_report_dialog": feature.is_enabled('new_report_dialog'), "email_verified": logged and c.user.email and c.user.email_verified, } if g.tracker_url: config["tracker_url"] = tracking.get_pageview_pixel_url() if g.uncompressedJS: config["uncompressedJS"] = True if extra_config: config.update(extra_config) hooks.get_hook("js_config").call(config=config) return config