瀏覽代碼

Python example

oldcai 7 年之前
父節點
當前提交
de21b937db
共有 1 個文件被更改,包括 41 次插入0 次删除
  1. 41 0
      examples/signature.py

+ 41 - 0
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