1#!/usr/bin/env python 2# 3# Copyright 2014 The Chromium Authors. All rights reserved. 4# Use of this source code is governed by a BSD-style license that can be 5# found in the LICENSE file. 6from google.appengine.api import memcache 7from google.appengine.api import urlfetch 8import webapp2 9 10import base64 11 12"""A simple appengine app that hosts .html files in src/styleguide/c++ from 13chromium's git repo.""" 14 15 16class MainHandler(webapp2.RequestHandler): 17 def get(self): 18 handler = GitilesMirrorHandler() 19 handler.initialize(self.request, self.response) 20 return handler.get("c++11.html") 21 22 23BASE = 'https://chromium.googlesource.com/chromium/src.git/' \ 24 '+/master/styleguide/c++/%s?format=TEXT' 25class GitilesMirrorHandler(webapp2.RequestHandler): 26 def get(self, resource): 27 if '..' in resource: # No path traversal. 28 self.response.write(':-(') 29 return 30 31 url = BASE % resource 32 contents = memcache.get(url) 33 if not contents or self.request.get('bust'): 34 result = urlfetch.fetch(url) 35 if result.status_code != 200: 36 self.response.set_status(result.status_code) 37 self.response.write('http error %d' % result.status_code) 38 return 39 contents = base64.b64decode(result.content) 40 memcache.set(url, contents, time=5*60) # seconds 41 42 if resource.endswith('.css'): 43 self.response.headers['Content-Type'] = 'text/css' 44 self.response.write(contents) 45 46 47app = webapp2.WSGIApplication([ 48 ('/', MainHandler), 49 ('/(\S+\.(?:css|html))', GitilesMirrorHandler), 50], debug=True) 51