1# Copyright 2015 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5"""Provides an endpoint for handling storing and retrieving page states.""" 6 7import hashlib 8import json 9 10from google.appengine.ext import ndb 11 12from dashboard import request_handler 13from dashboard.models import page_state 14 15 16class ShortUriHandler(request_handler.RequestHandler): 17 """Handles short URI.""" 18 19 def get(self): 20 """Handles getting page states.""" 21 state_id = self.request.get('sid') 22 23 if not state_id: 24 self.ReportError('Missing required parameters.', status=400) 25 return 26 27 state = ndb.Key(page_state.PageState, state_id).get() 28 29 if not state: 30 self.ReportError('Invalid sid.', status=400) 31 return 32 33 self.response.out.write(state.value) 34 35 def post(self): 36 """Handles saving page states and getting state id.""" 37 38 state = self.request.get('page_state') 39 40 if not state: 41 self.ReportError('Missing required parameters.', status=400) 42 return 43 44 state = state.encode('utf-8') 45 46 state_id = GenerateHash(state) 47 48 if not ndb.Key(page_state.PageState, state_id).get(): 49 page_state.PageState(id=state_id, value=state).put() 50 51 self.response.out.write(json.dumps({'sid': state_id})) 52 53 54def GenerateHash(state_string): 55 """Generates a hash for a state string.""" 56 return hashlib.sha256(state_string).hexdigest() 57