| Index: appengine/monorail/framework/tokenrefresh.py
|
| diff --git a/appengine/monorail/framework/tokenrefresh.py b/appengine/monorail/framework/tokenrefresh.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7793e70be0ef39347e440d693030ebfae5c0fe20
|
| --- /dev/null
|
| +++ b/appengine/monorail/framework/tokenrefresh.py
|
| @@ -0,0 +1,58 @@
|
| +# Copyright 2016 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is govered by a BSD-style
|
| +# license that can be found in the LICENSE file or at
|
| +# https://developers.google.com/open-source/licenses/bsd
|
| +
|
| +"""Servlet for XSRF token refresh.
|
| +
|
| +Our XSRF tokens expire in 2 hours (as defined in xsrf.py), which would
|
| +mean that users who open an issue page and take a long lunch would see
|
| +an error if they try to submit a comment when they get back.
|
| +"""
|
| +
|
| +import logging
|
| +
|
| +from framework import framework_constants
|
| +from framework import jsonfeed
|
| +from framework import xsrf
|
| +
|
| +
|
| +# TODO(jrobbins): Make this also work with xhr tokens by checking expiration
|
| +# time in CS_doPost().
|
| +
|
| +
|
| +class TokenRefresh(jsonfeed.JsonFeed):
|
| + """JSON feed to give the user a new XSRF token."""
|
| +
|
| + # Setting this class variable tells servlet.py to not check the XHR
|
| + # token for the token refresh request itself. It will always be
|
| + # expired, otherwise we would not need a new one. Instead, we check
|
| + # the form_token with a longer expiration.
|
| + CHECK_SECURITY_TOKEN = False
|
| +
|
| + def HandleRequest(self, mr):
|
| + """Build up a dictionary of data values to use when rendering the page.
|
| +
|
| + Args:
|
| + mr: commonly used info parsed from the request.
|
| +
|
| + Returns:
|
| + Dict of values used by EZT for rendering the page.
|
| + """
|
| + if not mr.auth.user_id:
|
| + return {}
|
| +
|
| + post_data = mr.request.POST
|
| + form_token_path = post_data.get('form_token_path')
|
| + xsrf.ValidateToken(
|
| + post_data.get('form_token'),
|
| + mr.auth.user_id,
|
| + form_token_path,
|
| + timeout=xsrf.REFRESH_TOKEN_TIMEOUT_SEC)
|
| +
|
| + return {
|
| + 'form_token': xsrf.GenerateToken(mr.auth.user_id, form_token_path),
|
| + 'token_expires_sec': xsrf.TokenExpiresSec(),
|
| + }
|
| +
|
| +
|
|
|