#!/usr/bin/env python # # Copyright 2014 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. from google.appengine.api import memcache from google.appengine.api import urlfetch import webapp2 import base64 """A simple appengine app that hosts .html files in src/styleguide/c++ from chromium's git repo.""" class MainHandler(webapp2.RequestHandler): def get(self): handler = GitilesMirrorHandler() handler.initialize(self.request, self.response) return handler.get("c++11.html") BASE = 'https://chromium.googlesource.com/chromium/src.git/' \ '+/master/styleguide/c++/%s?format=TEXT' class GitilesMirrorHandler(webapp2.RequestHandler): def get(self, resource): if '..' in resource: # No path traversal. self.response.write(':-(') return url = BASE % resource contents = memcache.get(url) if not contents or self.request.get('bust'): result = urlfetch.fetch(url) if result.status_code != 200: self.response.set_status(result.status_code) self.response.write('http error %d' % result.status_code) return contents = base64.b64decode(result.content) memcache.set(url, contents, time=5*60) # seconds if resource.endswith('.css'): self.response.headers['Content-Type'] = 'text/css' self.response.write(contents) app = webapp2.WSGIApplication([ ('/', MainHandler), ('/(\S+\.(?:css|html))', GitilesMirrorHandler), ], debug=True)