blob: 192e8ad8356d27903b92474edb96320db6b46df9 [file] [log] [blame]
# Copyright 2015 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.
"""Provides an endpoint for handling storing and retrieving page states."""
import hashlib
import json
from google.appengine.ext import ndb
from dashboard import request_handler
from dashboard.models import page_state
class ShortUriHandler(request_handler.RequestHandler):
"""Handles short URI."""
def get(self):
"""Handles getting page states."""
state_id = self.request.get('sid')
if not state_id:
self.ReportError('Missing required parameters.', status=400)
return
state = ndb.Key(page_state.PageState, state_id).get()
if not state:
self.ReportError('Invalid sid.', status=400)
return
self.response.out.write(state.value)
def post(self):
"""Handles saving page states and getting state id."""
state = self.request.get('page_state')
if not state:
self.ReportError('Missing required parameters.', status=400)
return
state = state.encode('utf-8')
state_id = GenerateHash(state)
if not ndb.Key(page_state.PageState, state_id).get():
page_state.PageState(id=state_id, value=state).put()
self.response.out.write(json.dumps({'sid': state_id}))
def GenerateHash(state_string):
"""Generates a hash for a state string."""
return hashlib.sha256(state_string).hexdigest()