Пример #1
0
    def __init__(self, request, *args, **kwargs):
        self.longurl = ""
        self.longurl_is_preencoded = False
        self.normalized_longurl = ""
        self.normalized_longurl_scheme = ""
        self.id = 0
        self.vanity_path = ''
        self._event = loggr.SnakrEventLogger()

        lurl = ""

        lurl = Utils.get_json(request, 'u')
        if not lurl:
            raise self._event.log(messagekey='LONG_URL_MISSING', status_code=400)

        if not Utils.is_url_valid(lurl):
            raise self._event.log(messagekey='LONG_URL_INVALID', value=lurl, status_code=400)
        #if not Utils.url_exists(lurl):
        #    raise self._event.log(messagekey='LONG_URL_DOESNTEXIST', value=lurl, status_code=400)

        self.vanity_path = Utils.get_json(request, 'vp')

        image_url = Utils.get_json(request, 'img')
        if Utils.is_image(image_url):
            self.linked_image = image_url
        else:
            self.linked_image = None

        if lurl == Utils.get_decodedurl(lurl):
            preencoded = False
            self.normalized_longurl = Utils.get_encodedurl(lurl)
        else:
            preencoded = True
            self.normalized_longurl = lurl

        self.normalized_longurl_scheme = urlparse(lurl).scheme.lower()
        self.longurl_is_preencoded = preencoded
        self.longurl = lurl
        self.id = Utils.get_longurlhash(self.normalized_longurl)

        return
Пример #2
0
    def getlongurl(self, request):
        self.shorturl = ''
        self.shorturl_is_preencoded = False
        self.normalized_shorturl = ''
        self.normalized_shorturl_scheme = ''
        self.id = -1
        #
        # cleanse the passed short url
        #
        surl = request.build_absolute_uri()
        dsurl = Utils.get_decodedurl(surl)
        sparts = urlparse(dsurl)
        if surl == dsurl:
            preencoded = False
        else:
            preencoded = True
            l = dsurl
        self.normalized_shorturl_scheme = sparts.scheme.lower()
        self.shorturl_is_preencoded = preencoded
        self.normalized_shorturl = urlunparse(sparts)
        if self.normalized_shorturl.endswith("/"):
            self.normalized_shorturl = self.normalized_shorturl[:-1]
        self.shorturl = surl
        if self.shorturl.endswith("/"):
            self.shorturl = self.shorturl[:-1]
        #
        # If no path provided, redirect to the defined index.html
        #
        if sparts.path == '/':
            return settings.INDEX_HTML
        #
        # Was the shorturl encoded or malcoded? If so, don't trust it.
        #
        if self.shorturl != self.normalized_shorturl:
            raise self._event.log(request=request, messagekey='SHORT_URL_ENCODING_MISMATCH', status_code=400)
        #
        # Lookup the short url
        #
        self.id = Utils.get_shorturlhash(self.normalized_shorturl)
        try:
            s = ShortURLs.objects.get(id = self.id)
            if not s:
                raise self._event.log(request=request, messagekey='SHORT_URL_NOT_FOUND', value=self.shorturl, status_code=400)
        except:
            raise self._event.log(request=request, messagekey='SHORT_URL_NOT_FOUND', value=self.shorturl, status_code=400)

        if s.shorturl != self.shorturl:
            raise self._event.log(request=request, messagekey='SHORT_URL_MISMATCH', status_code=400)
        #
        # If the short URL is not active, 404
        #
        if s.is_active != 'Y':
            raise self._event.log(request=request, messagekey='HTTP_404', value=self.shorturl, status_code=404)
        #
        # Lookup the matching long url by the short url's id.
        # If it doesn't exist, 404.
        # If it does, decode it.
        #
        l = LongURLs.objects.get(id = s.longurl_id)
        if not l:
            raise self._event.log(request=request, messagekey='HTTP_404', value='ERROR, HTTP 404 longurl not found', longurl_id=s.longurl_id, shorturl_id=self.id, shorturl=self.shorturl, status_code=422)
        longurl = Utils.get_decodedurl(l.longurl)
        #
        # Log that a 302 request to the matching long url is about to occur
        #
        self._event.log(request=request, event_type='S', messagekey='HTTP_302', value=longurl, longurl_id=s.longurl_id, longurl=longurl, shorturl_id=self.id, shorturl=self.shorturl, status_code=302)
        #
        # Return the longurl
        #
        return longurl