1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch# Copyright 2013 The Chromium Authors. All rights reserved. 2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch# Use of this source code is governed by a BSD-style license that can be 3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch# found in the LICENSE file. 4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch"""Request handler to display an image from Google Cloud Storage.""" 6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport json 8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport os 9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport sys 10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport webapp2 11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochfrom common import cloud_bucket 13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochfrom common import constants 14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport gs_bucket 16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass ImageHandler(webapp2.RequestHandler): 19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch """A request handler to avoid the Same-Origin problem in the debug view.""" 20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch def get(self): 22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch """Handles get requests to the ImageHandler. 23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GET Parameters: 25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch file_path: A path to an image resource in Google Cloud Storage. 26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch """ 27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch file_path = self.request.get('file_path') 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if not file_path: 29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch self.error(404) 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bucket = gs_bucket.GoogleCloudStorageBucket(constants.BUCKET) 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch try: 33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch image = bucket.DownloadFile(file_path) 34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch except cloud_bucket.FileNotFoundError: 35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch self.error(404) 36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch else: 37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch self.response.headers['Content-Type'] = 'image/png' 38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch self.response.out.write(image) 39