Exemplo n.º 1
0
 def get(self):
   url=self.request.get('url',"")
   if url:
       if "://" not in url:
           url = "http://"+url
   filename = urlparse.urlsplit(url).path.split('/')[-1]
   bits= filename.split('.')
   key = bits[0]
   resource = newbase60.sxgtonum(urllib.unquote(key))
   logging.info("UrlToHashHandler url: '%s', file: '%s' key:'%s' resource:'%s'" %(url,filename,key,resource))
   
   try: 
       qry = SvgPage.query(SvgPage.svgid == resource)
       pages = qry.fetch(1)
   except:
       pages=None
   if pages:
       output = [{'url':pages[0].getLink('direct'),'hash':pages[0].getHash(), 'date':pages[0].published.isoformat()}]
       self.response.headers['Content-Type'] = 'application/json'
       self.response.write(json.dumps(output))
   else:
       template = JINJA_ENVIRONMENT.get_template('errorpage.html')
       svgVals = { 'error':"No url here like '%s'" % url }
       self.response.set_status(404)
       self.response.write(template.render(svgVals))
Exemplo n.º 2
0
 def post(self, filename):
   status="pending"
   bits= filename.split('.')
   key = bits[0]
   resource = int(newbase60.sxgtonum(urllib.unquote(key)))
   qry = SvgPage.query(SvgPage.svgid == resource)
   pages = qry.fetch(1)
   page=None
   if len(pages)>0:
       page = pages[0]
   if not page:
       status="no such svg"
   else:
       urlbits= list(urlparse.urlsplit(self.request.uri))
       urlbits[2] = '/s/'+key
       urlbits[3] = ''
       svgurl= urlparse.urlunsplit(urlbits)
       url = "https://web.archive.org/save/" + svgurl
       logging.info("ArchiveHandler save url is '%s' " % url)
       urlfetch.set_default_fetch_deadline(180)
       result = urlfetch.fetch(url)
       if result.status_code == 200:
         status="saved to archive.org"
       else:
           status="error from service: %s" %(result.status_code)
   logging.info("ArchiveHandler "+ key +" status: " + status)
   self.response.write("ArchiveHandler "+ key +" status: " + status) 
Exemplo n.º 3
0
 def post(self, filename):
   status="pending"
   bits= filename.split('.')
   key = bits[0]
   resource = int(newbase60.sxgtonum(urllib.unquote(key)))
   qry = SvgPage.query(SvgPage.svgid == resource)
   pages = qry.fetch(1)
   page=None
   if len(pages)>0:
       page = pages[0]
   if not page:
       status="no such svg"
   else:
       hash =page.getHash('both')
       hash256 = binascii.hexlify(base64.b64decode(hash.split('sha256-')[-1]))
       json_data = '{"hash":"%s"}' % (hash256)
       headers = {'Content-Type': 'application/json'}
       result = urlfetch.fetch(
           url = 'http://34.253.191.188/api/v1/stamp',
           payload=json_data,
           method=urlfetch.POST,
           headers=headers)
       if result.status_code == 200:
           status="stamped by seed media %s returned %s" % (json_data,result.content)
       else:
           status="error from service: %s" %(result.status_code)
   logging.info("SeedStampHandler "+ key +" status: " + status)
   self.response.write("SeedStampHandler "+ key +" status: " + status) 
Exemplo n.º 4
0
 def get(self):
   url=self.request.get('url',"")
   if url:
       if "://" not in url:
           url = "http://"+url
   filename = urlparse.urlsplit(url).path.split('/')[-1]
   bits= filename.split('.')
   key = bits[0]
   resource = int(newbase60.sxgtonum(urllib.unquote(key)))
   logging.info("ArchiveUrlToHashHandler url: '%s' " %(url))
   uthparams = openanything.fetch('http://web.archive.org/cdx/search/cdx?url=%s' %(urllib.quote(url)))
   logging.info("ArchiveUrlToHashHandler urltohash: '%s' status: '%s' " %(uthparams.get('data','uh oh'),uthparams.get('status','?')))
   #format is com,svgur)/i/au.svg 20160829212327 http://svgur.com/i/AU.svg image/svg+xml 200 LY7RXMB7SLQLKEB63LGFNYY7F3SYRCNQ 3079
   output=[]
   for line in uthparams.get('data','').splitlines():
       qpath,fetchdate,foundurl,mimetype,result,base32hash,length = line.split(' ')
       if result == '200':
           output.append({'url':foundurl,'hash':'sha1-%s' % (Base32toBase64(base32hash)), 'date':datetime.datetime.strptime(fetchdate,'%Y%m%d%H%M%S').isoformat()})
   if output:
       self.response.headers['Content-Type'] = 'application/json'
       self.response.write(json.dumps(output))
   else:
       template = JINJA_ENVIRONMENT.get_template('errorpage.html')
       svgVals = { 'error':"No url here like '%s'" % url }
       self.response.set_status(404)
       self.response.write(template.render(svgVals))
Exemplo n.º 5
0
 def get(self, filename):
   pages= []
   if filename:
       bits= filename.split('.')
       key = bits[0]
       resource = int(newbase60.sxgtonum(urllib.unquote(key)))
       qry = SvgPage.query(SvgPage.svgid == resource)
       pages = qry.fetch(1)
       svgStr = newbase60.numtosxg(resource)
   if pages:
       etag = pages[0].getHash('both').encode('utf8')
       self.response.headers["Etag"] = '%s' % etag
       template = JINJA_ENVIRONMENT.get_template('svgpage.html')
       svgVals = { 'name':pages[0].name,
                   'summary':pages[0].summary,
                   'published':pages[0].published,
                   'url':'/i/'+ svgStr+'.svg',
                   'rawurl':'/raw/'+ str(pages[0].svgBlob),
                   }
       for kind in ('image','iframe','direct','png','hash'):
           svgVals[kind+"_link"] = pages[0].getLink(kind)
           svgVals["old_link"] = pages[0].getLink('image',site=oldSiteName)
       self.response.headers["Link"] = '<https://webmention.herokuapp.com/api/webmention>; rel="webmention"'
   else:
       template = JINJA_ENVIRONMENT.get_template('errorpage.html')
       svgVals = { 'error':"No such image as %s" % filename }
       self.response.set_status(404)
   self.response.write(template.render(svgVals))
Exemplo n.º 6
0
 def get(self, filename):
   bits= filename.split('.')
   key = bits[0]
   resource = int(newbase60.sxgtonum(urllib.unquote(key)))
   logging.info("UrlToHashHandler file: '%s' key:'%s' resource:'%s'" %(filename,key,resource))
   qry = SvgPage.query(SvgPage.svgid == resource)
   pages = qry.fetch(1)
   if pages:
       output = [{'url':pages[0].getLink('direct'),'hash':pages[0].getHash(), 'date':pages[0].published.isoformat()}]
       self.response.headers['Content-Type'] = 'application/json'
       self.response.write(json.dumps(output))
   else:
       template = JINJA_ENVIRONMENT.get_template('errorpage.html')
       svgVals = { 'error':"No such image as %s" % filename }
       self.response.set_status(404)
       self.response.write(template.render(svgVals))
Exemplo n.º 7
0
 def post(self, filename):
   status="pending"
   bits= filename.split('.')
   key = bits[0]
   extension = '.png'
   if len(bits)>1:
       extension = bits[1] #awaiting conditional code for png/jpg
   resource = int(newbase60.sxgtonum(urllib.unquote(key)))
   qry = SvgPage.query(SvgPage.svgid == resource)
   width = str(self.request.get('width', "0"))
   force = self.request.get('force')
   pages = qry.fetch(1)
   page=None
   if len(pages)>0:
       page = pages[0]
   if not page:
       status="no such svg"
   elif not force and page.pngFile:
       status="file exists"
   else:
       urlbits= list(urlparse.urlsplit(self.request.uri))
       urlbits[2] = '/f/'+key
       urlbits[3] = ''
       svgurl= urlparse.urlunsplit(urlbits)
       url = "https://savageping.herokuapp.com/u?" + urllib.urlencode({"url":svgurl,"width":1024})
       urlfetch.set_default_fetch_deadline(180)
       result = urlfetch.fetch(url)
       rawpng=None
       if result.status_code == 200:
         rawpng= result.content
       else:
           status="error from service: %s" %(result.status_code)
       if (rawpng):
           logging.info(" png %s" % rawpng[0:256])
           bucket_name = os.environ.get('BUCKET_NAME',
                                        app_identity.get_default_gcs_bucket_name())
           filename = '/' + bucket_name + '/p/%s.png' % newbase60.numtosxg(page.svgid)
           gcs_file = gcs.open(filename, 'w', content_type='image/png')
           gcs_file.write(rawpng)
           gcs_file.close()
           # Get the file's blob key
           #page.pngBlob = blobstore.create_gs_key("/gs"+ filename)
           page.pngFile =  blobstore.create_gs_key("/gs"+ filename)
           status="file created"
           page.put()
   logging.info("PngFromSvgHandler "+ key +" status: " + status)
   self.response.write("svg to png "+ key +" status: " + status) 
Exemplo n.º 8
0
 def post(self, filename, ):
   bits= filename.split('.')
   key = bits[0]
   extension = '.svg'
   if len(bits)>1:
       extension = bits[1] #awaiting conditional code for png/jpg
   resource = newbase60.sxgtonum(urllib.unquote(key))
   try: 
       qry = SvgPage.query(SvgPage.svgid == resource)
       pages = qry.fetch(1)
   except:
       pages=None
   if pages:
       pages[0].nipsa = True
       pages[0].put()
       logging.info("nipsa'd by hand: '%s' " %(filename))
       self.redirect('/')
Exemplo n.º 9
0
 def get(self, filename):
   bits= filename.split('.')
   key = bits[0]
   extension = '.svg'
   if len(bits)>1:
       extension = bits[1] #awaiting conditional code for png/jpg
   resource = int(newbase60.sxgtonum(urllib.unquote(key)))
   qry = SvgPage.query(SvgPage.svgid == resource)
   pages = qry.fetch(1)
   svgStr = newbase60.numtosxg(resource)
   blob_info = blobstore.BlobInfo.get(pages[0].svgBlob)
   template = JINJA_ENVIRONMENT.get_template('iframe.html')
   reader = blobstore.BlobReader(blob_info)
   rawsvg = reader.read().decode('utf-8')
   svgVals = { 'name':pages[0].name,
               'svg': rawsvg,
               'image_link':siteName+'/s/'+svgStr,
               'url':'/i/'+ svgStr+'.svg',
               }
   self.response.write(template.render(svgVals))    
Exemplo n.º 10
0
 def get(self, filename):
   bits= filename.split('.')
   key = bits[0]
   extension = '.png'
   if len(bits)>1:
       extension = bits[1] #awaiting conditional code for png/jpg
   self.response.headers["Link"] = '<https://webmention.herokuapp.com/api/webmention>; rel="webmention"' 
   resource = int(newbase60.sxgtonum(urllib.unquote(key)))
   qry = SvgPage.query(SvgPage.svgid == resource)
   width = str(self.request.get('width', "0"))
   pages = qry.fetch(1)
   if pages[0].pngBlob:
       self.redirect(images.get_serving_url(pages[0].pngBlob)+"=s"+width)
   elif pages[0].pngFile:
       try:
           self.redirect(images.get_serving_url(pages[0].pngFile)+"=s"+width)
       except:
           pages[0].pngFile = None
           pages[0].put()
           taskqueue.add(url='/makepingfromsvg/%s' % key)
           self.redirect('/s/'+filename)
   else:
       taskqueue.add(url='/makepingfromsvg/%s' % key)
       self.redirect('/s/'+filename)
Exemplo n.º 11
0
 def test_roundtrip(self):
     '''sxgtonum(numtosxg(n))==n for all n'''
     for integer in range(0, 6000):
         sxg = newbase60.numtosxg(integer)
         result = newbase60.sxgtonum(sxg)
         self.assertEqual(integer, result)
Exemplo n.º 12
0
 def test_checkcomma(self):
     self.assertEqual(newbase60.sxgtonum(','), 0)
Exemplo n.º 13
0
 def test_checkpipe(self):
     self.assertEqual(newbase60.sxgtonum('|'), 0)
Exemplo n.º 14
0
 def test_checkO(self):
     self.assertEqual(newbase60.sxgtonum('O'), 0)
Exemplo n.º 15
0
 def test_checkI(self):
     self.assertEqual(newbase60.sxgtonum('I'), 1)
Exemplo n.º 16
0
 def test_check1337(self):
     self.assertEqual(newbase60.sxgtonum('NH'), 1337)
Exemplo n.º 17
0
 def test_check60(self):
     self.assertEqual(newbase60.sxgtonum('10'), 60)
Exemplo n.º 18
0
 def get(self, filename, isHead=False):
   starttime = time.time()
   bits= filename.split('.')
   key = urllib.unquote(bits[0])
   extension = '.svg'
   if len(bits)>1:
       extension = bits[1] #awaiting conditional code for png/jpg
   self.response.headers["Link"] = '<https://webmention.herokuapp.com/api/webmention>; rel="webmention"' 
   resource = newbase60.sxgtonum(key)
   try: 
       qry = SvgPage.query(SvgPage.svgid == resource)
       pages = qry.fetch(1)
   except:
       pages=None
   if pages:
       page = pages[0]
       etag = page.getHash('both').encode('utf8')
       if page.nipsa:
           etag = etag +" nope"
       self.response.headers["Etag"] = '%s' % etag
       logging.info("ServeHandler file: '%s' ETag '%s'" %(filename, self.response.headers["Etag"]))
       self.response.headers["Cache-Control"]="public, max-age=315360000"
       self.response.headers["Content-Type"]= 'image/svg+xml'
       if self.request.headers.get('If-None-Match','') == etag:
           self.response.status_int = 304
           self.response.status_message = "Not Modified"
           self.response.status = "304 Not Modified"
           self.response.out.write('')
       elif not isHead:
           if page.badfile:
               self.response.out.write(badSVG)
               return
           blob_info = blobstore.BlobInfo.get(page.svgBlob)
           #self.send_blob(blob_info)
           try:
               reader = blobstore.BlobReader(blob_info)
               rawsvg = reader.read().decode('utf-8')
               if not page.scriptchecked:
                   fixedsvg,hadScript = svgfix.svgfix(rawsvg)
                   postparse = time.time()
                   logging.info("postparse time: '%s' " %(postparse-starttime))
                   if (hadScript):
                       page.nipsa = True
                       bucket_name = os.environ.get('BUCKET_NAME',
                                                    app_identity.get_default_gcs_bucket_name())
                       filename = '/' + bucket_name + '/s/%sfix.svg' % key
                       gcs_file = gcs.open(filename, 'w', content_type='image/svg+xml')
                       gcs_file.write(fixedsvg.encode('utf-8'))
                       gcs_file.close()
                       # Get the file's blob key
                       #page.pngBlob = blobstore.create_gs_key("/gs"+ filename)
                       page.svgFile =  blobstore.create_gs_key("/gs"+ filename)
                       page.put()
                       page.scriptchecked = True
                       postnipsa = time.time()
                       logging.info("script nipsa'd time: '%s' " %(postnipsa-starttime))
                       logging.info("nipsa'd for script: '%s' " %(filename))
                       self.response.out.write(fixedsvg)
                   else:
                       page.scriptchecked = True
                       page.put()
               if page.svgFile:
                   self.redirect(images.get_serving_url(page.svgFile))
               else:
                   self.send_blob(blob_info)
           except:
               page.nipsa = True
               page.scriptchecked = True
               page.badfile = True
               page.put()
               postnipsa = time.time()
               logging.info("bad nipsa'd time: '%s' " %(postnipsa-starttime))
               logging.info("nipsa'd for bad file: '%s' " %(filename))
               logging.info("bad file: '%s' " %(filename))
               self.response.out.write(badSVG)
       else:
           logging.info("head?: '%s' " %(filename))
           self.response.out.write('')
   else:
       template = JINJA_ENVIRONMENT.get_template('errorpage.svg')
       svgVals = { 'error':"No such image as %s" % filename }
       self.response.set_status(404)
       self.response.write(template.render(svgVals))