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
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