Add 2 day TTL to page tokens
This commit is contained in:
parent
b4bddacedb
commit
335c8eb3a9
3 changed files with 9 additions and 6 deletions
|
@ -24,6 +24,8 @@ from endpoints.decorators import check_anon_protection
|
||||||
from util.saas.metricqueue import time_decorator
|
from util.saas.metricqueue import time_decorator
|
||||||
from util.security.crypto import encrypt_string, decrypt_string
|
from util.security.crypto import encrypt_string, decrypt_string
|
||||||
|
|
||||||
|
# TTL (in seconds) for page tokens.
|
||||||
|
_PAGE_TOKEN_TTL = datetime.timedelta(days=2).total_seconds()
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
api_bp = Blueprint('api', __name__)
|
api_bp = Blueprint('api', __name__)
|
||||||
|
@ -223,7 +225,8 @@ def page_support(func):
|
||||||
|
|
||||||
if query_args['next_page']:
|
if query_args['next_page']:
|
||||||
# Decrypt the page token.
|
# Decrypt the page token.
|
||||||
unencrypted = decrypt_string(query_args['next_page'], app.config['PAGE_TOKEN_KEY'])
|
unencrypted = decrypt_string(query_args['next_page'], app.config['PAGE_TOKEN_KEY'],
|
||||||
|
ttl=_PAGE_TOKEN_TTL)
|
||||||
if unencrypted is not None:
|
if unencrypted is not None:
|
||||||
try:
|
try:
|
||||||
page_token = json.loads(unencrypted)
|
page_token = json.loads(unencrypted)
|
||||||
|
@ -231,7 +234,7 @@ def page_support(func):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Note: if page_token is None, we'll receive the first page of results back.
|
# Note: if page_token is None, we'll receive the first page of results back.
|
||||||
(result, next_page_token) = func(self, query_args, page_token, *args, **kwargs)
|
(result, next_page_token) = func(self, query_args, page_token=page_token, *args, **kwargs)
|
||||||
if next_page_token is not None:
|
if next_page_token is not None:
|
||||||
result['next_page'] = encrypt_string(json.dumps(next_page_token),
|
result['next_page'] = encrypt_string(json.dumps(next_page_token),
|
||||||
app.config['PAGE_TOKEN_KEY'])
|
app.config['PAGE_TOKEN_KEY'])
|
||||||
|
|
|
@ -118,7 +118,7 @@ class RepositoryLogs(RepositoryParamResource):
|
||||||
@query_param('endtime', 'Latest time to which to get logs (%m/%d/%Y %Z)', type=str)
|
@query_param('endtime', 'Latest time to which to get logs (%m/%d/%Y %Z)', type=str)
|
||||||
@query_param('page', 'The page number for the logs', type=int, default=1)
|
@query_param('page', 'The page number for the logs', type=int, default=1)
|
||||||
@page_support
|
@page_support
|
||||||
def get(self, args, page_token, namespace, repository):
|
def get(self, args, namespace, repository, page_token):
|
||||||
""" List the logs for the specified repository. """
|
""" List the logs for the specified repository. """
|
||||||
repo = model.repository.get_repository(namespace, repository)
|
repo = model.repository.get_repository(namespace, repository)
|
||||||
if not repo:
|
if not repo:
|
||||||
|
@ -164,7 +164,7 @@ class OrgLogs(ApiResource):
|
||||||
@query_param('page', 'The page number for the logs', type=int, default=1)
|
@query_param('page', 'The page number for the logs', type=int, default=1)
|
||||||
@page_support
|
@page_support
|
||||||
@require_scope(scopes.ORG_ADMIN)
|
@require_scope(scopes.ORG_ADMIN)
|
||||||
def get(self, args, page_token, orgname):
|
def get(self, args, orgname, page_token):
|
||||||
""" List the logs for the specified organization. """
|
""" List the logs for the specified organization. """
|
||||||
permission = AdministerOrganizationPermission(orgname)
|
permission = AdministerOrganizationPermission(orgname)
|
||||||
if permission.can():
|
if permission.can():
|
||||||
|
|
|
@ -7,11 +7,11 @@ def encrypt_string(string, key):
|
||||||
f = Fernet(base64.urlsafe_b64encode(key))
|
f = Fernet(base64.urlsafe_b64encode(key))
|
||||||
return f.encrypt(string)
|
return f.encrypt(string)
|
||||||
|
|
||||||
def decrypt_string(string, key):
|
def decrypt_string(string, key, ttl=None):
|
||||||
""" Decrypts an encrypted string with the specified key. The key must be 32 raw bytes. """
|
""" Decrypts an encrypted string with the specified key. The key must be 32 raw bytes. """
|
||||||
f = Fernet(base64.urlsafe_b64encode(key))
|
f = Fernet(base64.urlsafe_b64encode(key))
|
||||||
try:
|
try:
|
||||||
return f.decrypt(string)
|
return f.decrypt(string, ttl=ttl)
|
||||||
except InvalidToken:
|
except InvalidToken:
|
||||||
return None
|
return None
|
||||||
except TypeError:
|
except TypeError:
|
||||||
|
|
Reference in a new issue