Skip to content

Instantly share code, notes, and snippets.

@egorsmkv
Created July 30, 2018 17:59
Show Gist options
  • Save egorsmkv/c20fab5cbd04c40d640ae492ff2cef01 to your computer and use it in GitHub Desktop.
Save egorsmkv/c20fab5cbd04c40d640ae492ff2cef01 to your computer and use it in GitHub Desktop.

Revisions

  1. egorsmkv revised this gist Jul 30, 2018. No changes.
  2. egorsmkv created this gist Jul 30, 2018.
    44 changes: 44 additions & 0 deletions imgproxy.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,44 @@
    import hmac
    import hashlib
    import base64


    class ImgProxy:
    """
    The class generates a signature for the imgproxy (https://github.com/DarthSim/imgproxy).
    Author: Yehor Smoliakov (https://github.com/egorsmkv)
    """

    def __init__(self, key, salt):
    self._key = bytes.fromhex(key)
    self._salt = bytes.fromhex(salt)

    def generate(self, url, resize, width, height, gravity, enlarge, extension):
    b64_url = base64.urlsafe_b64encode(str.encode(url)).rstrip(b'=').decode()

    path = f'/{resize}/{width}/{height}/{gravity}/{enlarge}/{b64_url}.{extension}'

    sha256_hmac = hmac.new(self._key, self._salt + str.encode(path), digestmod=hashlib.sha256)

    protection = base64.urlsafe_b64encode(sha256_hmac.digest()).rstrip(b'=').decode()

    return f'/{protection}{path}'


    if __name__ == '__main__':
    test_key = 'ed7688b54dfaefecddcad524334cdf429983a11c728016f8032bb6ae033c790de5b547f819e23a2abd37fb3971e4c1323855503545a0e6b783db820c2ac18826'
    test_salt = '5217a47ea8ad2b2e74695e8e4b344514d631e6882575f376ee59393dbd31757fe41adb2919a1e4fffd3fec9d410d34ccada8df6ac3e3d4e6b07bf73f2f2a0cad'

    test_url = 'https://avatars3.githubusercontent.com/u/41049275?s=460&v=4'
    test_resize = 'fill'
    test_width = 10
    test_height = 10
    test_gravity = 'no'
    test_enlarge = 1
    test_extension = 'png'

    imp = ImgProxy(test_key, test_salt)

    img_path = imp.generate(test_url, test_resize, test_width, test_height, test_gravity, test_enlarge, test_extension)
    print(img_path)