36 lines
1006 B
Python
36 lines
1006 B
Python
|
|
from fido2.utils import websafe_encode, websafe_decode
|
||
|
|
|
||
|
|
def convert_bytes_to_base64(obj):
|
||
|
|
"""
|
||
|
|
递归将 dict/list 中的 bytes 转为 base64url
|
||
|
|
"""
|
||
|
|
if isinstance(obj, dict):
|
||
|
|
return {
|
||
|
|
k: convert_bytes_to_base64(v)
|
||
|
|
for k, v in obj.items()
|
||
|
|
}
|
||
|
|
elif isinstance(obj, list):
|
||
|
|
return [convert_bytes_to_base64(i) for i in obj]
|
||
|
|
elif isinstance(obj, bytes):
|
||
|
|
return websafe_encode(obj).decode("ascii")
|
||
|
|
else:
|
||
|
|
return obj
|
||
|
|
|
||
|
|
def convert_base64_to_bytes(obj):
|
||
|
|
"""
|
||
|
|
递归将 dict/list 中的 base64url 转回 bytes
|
||
|
|
"""
|
||
|
|
if isinstance(obj, dict):
|
||
|
|
return {
|
||
|
|
k: convert_base64_to_bytes(v)
|
||
|
|
for k, v in obj.items()
|
||
|
|
}
|
||
|
|
elif isinstance(obj, list):
|
||
|
|
return [convert_base64_to_bytes(i) for i in obj]
|
||
|
|
elif isinstance(obj, str):
|
||
|
|
try:
|
||
|
|
return websafe_decode(obj.encode("ascii"))
|
||
|
|
except Exception:
|
||
|
|
return obj
|
||
|
|
else:
|
||
|
|
return obj
|