def format_output_url(cls, url, **kw): """ Helper method used during redirect to ensure that the redirect url (assisted by frame busting code or javasctipt) will point to the correct domain and not have any extra dangling get parameters. The extensions are also made to match and the resulting url is utf8 encoded. Node: for development purposes, also checks that the port matches the request port """ preserve_extension = kw.pop("preserve_extension", True) u = UrlParser(url) if u.is_reddit_url(): # make sure to pass the port along if not 80 if not kw.has_key('port'): kw['port'] = request.port # disentangle the cname (for urls that would have # cnameframe=1 in them) u.mk_cname(**kw) # make sure the extensions agree with the current page if preserve_extension and c.extension: u.set_extension(c.extension) # unparse and encode it un utf8 rv = _force_unicode(u.unparse()).encode('utf8') if "\n" in rv or "\r" in rv: abort(400) return rv
def GET_framebuster(self, what = None, blah = None): """ renders the contents of the iframe which, on a cname, checks if the user is currently logged into reddit. if this page is hit from the primary domain, redirects to the cnamed domain version of the site. If the user is logged in, this cnamed version will drop a boolean session cookie on that domain so that subsequent page reloads will be caught in middleware and a frame will be inserted around the content. If the user is not logged in, previous session cookies will be emptied so that subsequent refreshes will not be rendered in that pesky frame. """ if not c.site.domain: return "" elif c.cname: return FrameBuster(login = (what == "login")).render() else: path = "/framebuster/" if c.user_is_loggedin: path += "login/" u = UrlParser(path + str(random.random())) u.mk_cname(require_frame = False, subreddit = c.site, port = request.port) return self.redirect(u.unparse()) # the user is not logged in or there is no cname. return FrameBuster(login = False).render()
def format_output_url(cls, url, **kw): """ Helper method used during redirect to ensure that the redirect url (assisted by frame busting code or javasctipt) will point to the correct domain and not have any extra dangling get parameters. The extensions are also made to match and the resulting url is utf8 encoded. Node: for development purposes, also checks that the port matches the request port """ u = UrlParser(url) if u.is_reddit_url(): # make sure to pass the port along if not 80 if not kw.has_key('port'): kw['port'] = request.port # disentagle the cname (for urls that would have # cnameframe=1 in them) u.mk_cname(**kw) # make sure the extensions agree with the current page if c.extension: u.set_extension(c.extension) # unparse and encode it un utf8 rv = _force_unicode(u.unparse()).encode('utf8') if "\n" in rv or "\r" in rv: abort(400) return rv
def format_output_url(cls, url, **kw): """ Helper method used during redirect to ensure that the redirect url (assisted by frame busting code or javasctipt) will point to the correct domain and not have any extra dangling get parameters. The extensions are also made to match and the resulting url is utf8 encoded. Node: for development purposes, also checks that the port matches the request port """ u = UrlParser(url) if u.is_reddit_url(): # make sure to pass the port along if not 80 if not kw.has_key("port"): kw["port"] = request.port # disentagle the cname (for urls that would have # cnameframe=1 in them) u.mk_cname(**kw) # make sure the extensions agree with the current page if c.extension: u.set_extension(c.extension) # unparse and encode it un utf8 rv = _force_unicode(u.unparse()).encode("utf8") if any(ch.isspace() for ch in rv): raise ValueError("Space characters in redirect URL: [%r]" % rv) return rv