diff --git a/examples/signature.py b/examples/signature.py new file mode 100644 index 00000000..64b0c6ec --- /dev/null +++ b/examples/signature.py @@ -0,0 +1,41 @@ +import base64 +import hashlib +import hmac +import textwrap + + +key = bytes.fromhex("943b421c9eb07c830af81030552c86009268de4e532ba2ee2eab8247c6da0881") +salt = bytes.fromhex("520f986b998545b4785e0defbc4f3c1203f22de2374a3d53cb7a7fe9fea309c5") + + +url = b"http://img.example.com/pretty/image.jpg" + +encoded_url = base64.urlsafe_b64encode(url).rstrip(b"=").decode() +# You can trim padding spaces to get good-looking url +encoded_url = '/'.join(textwrap.wrap(encoded_url, 16)) + +path = "/{resize}/{width}/{height}/{gravity}/{enlarge}/{encoded_url}.{extension}".format( + encoded_url=encoded_url, + resize="fill", + width=300, + height=300, + gravity="no", + enlarge=1, + extension="png", +).encode() +digest = hmac.new(key, msg=salt+path, digestmod=hashlib.sha256).digest() + +protection = base64.urlsafe_b64encode(digest).rstrip(b"=") + +url = b'/%s%s' % ( + protection, + path, +) + +print(url.decode()) + +# without / in url +# /_PQ4ytCQMMp-1w1m_vP6g8Qb-Q7yF9mwghf6PddqxLw/fill/300/300/no/1/aHR0cDovL2ltZy5leGFtcGxlLmNvbS9wcmV0dHkvaW1hZ2UuanBn.png + +# with / in url +# /MlF9VpgaHqcmVK3FyT9CTJhfm0rfY6JKnAtxoiAX9t0/fill/300/300/no/1/aHR0cDovL2ltZy5l/eGFtcGxlLmNvbS9w/cmV0dHkvaW1hZ2Uu/anBn.png