This repository has been archived on 2020-03-24. You can view files and clone it, but cannot push or open issues or pull requests.
quay/util/security/token.py
2019-11-12 11:09:47 -05:00

32 lines
960 B
Python

from collections import namedtuple
import base64
DELIMITER = ':'
DecodedToken = namedtuple('DecodedToken', ['public_code', 'private_token'])
def encode_public_private_token(public_code, private_token, allow_public_only=False):
# NOTE: This is for legacy tokens where the private token part is None. We should remove this
# once older installations have been fully converted over (if at all possible).
if private_token is None:
assert allow_public_only
return public_code
assert isinstance(private_token, basestring)
return base64.b64encode('%s%s%s' % (public_code, DELIMITER, private_token))
def decode_public_private_token(encoded, allow_public_only=False):
try:
decoded = base64.b64decode(encoded)
except (ValueError, TypeError):
if not allow_public_only:
return None
return DecodedToken(encoded, None)
parts = decoded.split(DELIMITER, 2)
if len(parts) != 2:
return None
return DecodedToken(*parts)