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