Ejemplo n.º 1
0
    def get(self):

        counter.ChangeCount("favIconsServed", 1)

        # Get page path
        self.targetPath = self.urldecode(self.request.path.lstrip("/"))

        inf("getFavicon for %s" % (self.targetPath))

        # Split path to get domain
        self.targetURL = urlparse(self.targetPath)
        if len(self.targetURL[0]) == 0:
            self.targetPath = "http://" + self.targetPath
            self.targetURL = urlparse(self.targetPath)
        self.targetDomain = "http://" + self.targetURL[1]

        inf("URL is %s" % (self.targetDomain))

        # Do we have an override?
        if not self.iconOverridden():

            # In MC?
            if not self.iconInMC():

                # In DS?
                if not self.iconInDS():

                    counter.ChangeCount("cacheNone", 1)

                    # icon in m. page
                    m_url = self.targetURL[1]
                    if m_url.startswith("www") or len(m_url.split('.')) == 2:
                        if m_url.startswith("www"):
                            m_url = m_url[4:]
                        m_url = "http://m." + m_url
                        if self.iconInPage(True, m_url):
                            return

                    # Icon specified in page?
                    if not self.iconInPage():

                        # Icon specified in desktop page?
                        if not self.iconInDesktopPage():

                            # Icon at [domain]/favicon.ico?
                            if not self.iconAtRoot():

                                self.error()
Ejemplo n.º 2
0
    def iconInDS(self):

        iconCacheQuery = favIcon.gql("where domain = :1", self.targetDomain)
        iconCache = iconCacheQuery.fetch(1)

        if len(iconCache) > 0:

            inf("Found icon DS cache")

            counter.ChangeCount("cacheDS", 1)
            self.response.headers['X-Cache'] = "Hit from DS"

            if iconCache[0].useDefault:

                self.writeDefault(True)
                return True

            else:

                self.icon = iconCache[0].icon

                self.cacheIcon(["MC"])
                self.writeIcon()

                return True

        return False
Ejemplo n.º 3
0
    def iconInMC(self):

        mcIcon = memcache.get("icon-" + self.targetDomain)

        if mcIcon:

            inf("Found icon MC cache")

            counter.ChangeCount("cacheMC", 1)
            self.response.headers['X-Cache'] = "Hit from MC"

            if mcIcon == "ERROR":
                self.error(True)

                return True

            elif mcIcon == "DEFAULT":

                self.writeDefault(True)

                return True

            else:

                self.icon = mcIcon
                self.writeIcon()

                return True

        return False
Ejemplo n.º 4
0
    def writeDefault(self, fromCache=False):

        inf("Writing default")

        self.abort(404)

        self.writeHeaders()

        if not fromCache:

            newFavicon = favIcon(domain=self.targetDomain,
                                 icon=None,
                                 useDefault=True,
                                 referrer=self.request.headers.get("Referer"))
            newFavicon.put()

            memcache.add("icon-" + self.targetDomain, "DEFAULT", MC_CACHE_TIME)

        counter.ChangeCount("favIconsServedDefault", 1)

        if self.request.get("defaulticon"):

            if self.request.get("defaulticon") == "none":

                self.response.set_status(204)

            elif self.request.get("defaulticon") == "1pxgif":

                self.response.out.write(open("1px.gif").read())

            elif self.request.get("defaulticon") == "lightpng":

                self.response.out.write(open("default2.png").read())

            elif self.request.get("defaulticon") == "bluepng":

                self.response.out.write(open("default3.png").read())

            else:

                self.redirect(self.request.get("defaulticon"))

        else:

            self.response.out.write(open("default.gif").read())