mirror of
https://github.com/d3vyce/fastapi-toolsets.git
synced 2026-04-15 22:26:25 +02:00
fix: use URL-safe base64 encoding for cursor tokens (#160)
This commit is contained in:
@@ -58,15 +58,20 @@ class _CursorDirection(str, Enum):
|
||||
def _encode_cursor(
|
||||
value: Any, *, direction: _CursorDirection = _CursorDirection.NEXT
|
||||
) -> str:
|
||||
"""Encode a cursor column value and navigation direction as a base64 string."""
|
||||
return base64.b64encode(
|
||||
json.dumps({"val": str(value), "dir": direction}).encode()
|
||||
).decode()
|
||||
"""Encode a cursor column value and navigation direction as a URL-safe base64 string."""
|
||||
return (
|
||||
base64.urlsafe_b64encode(
|
||||
json.dumps({"val": str(value), "dir": direction}).encode()
|
||||
)
|
||||
.decode()
|
||||
.rstrip("=")
|
||||
)
|
||||
|
||||
|
||||
def _decode_cursor(cursor: str) -> tuple[str, _CursorDirection]:
|
||||
"""Decode a cursor base64 string into ``(raw_value, direction)``."""
|
||||
payload = json.loads(base64.b64decode(cursor.encode()).decode())
|
||||
"""Decode a URL-safe base64 cursor string into ``(raw_value, direction)``."""
|
||||
padded = cursor + "=" * (-len(cursor) % 4)
|
||||
payload = json.loads(base64.urlsafe_b64decode(padded).decode())
|
||||
return payload["val"], _CursorDirection(payload["dir"])
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user