Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion rest_api/sawtooth_rest_api/route_handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ async def list_state(self, request):
paging: Paging info and nav, like total resources and a next link
"""
paging_controls = self._get_paging_controls(request)

head_id=self._state_head_id(request)
head, root = await self._head_to_root(request.url.query.get(
'head', None))
validator_query = client_state_pb2.ClientStateListRequest(
Expand Down Expand Up @@ -1007,6 +1007,17 @@ def _get_head_id(cls, request):

return head_id

@classmethod
def _state_head_id(cls, request):
"""Fetches the request's head query, and validates if present.
"""
head_id = request.url.query.get('head', None)

if head_id is not None:
cls._validate_state_id(head_id)

return head_id

@classmethod
def _get_filter_ids(cls, request):
"""Parses the `id` filter paramter from the url query.
Expand All @@ -1022,6 +1033,14 @@ def _get_filter_ids(cls, request):

return filter_ids

@staticmethod
def _validate_state_id(resource_id):
"""Confirms a header_signature is 70 hex characters, raising an
ApiError if not.
"""
if not re.fullmatch('[0-9a-f]{70}', resource_id):
raise errors.InvalidStateAddress(resource_id)

@staticmethod
def _validate_id(resource_id):
"""Confirms a header_signature is 128 hex characters, raising an
Expand Down