Files
pillar/pillar/api/utils/cdn.py

43 lines
1.4 KiB
Python

import datetime
from hashlib import md5
import base64
from flask import current_app
def hash_file_path(file_path, expiry_timestamp=None):
if not file_path.startswith('/'):
file_path = '/' + file_path
service_domain = current_app.config['CDN_SERVICE_DOMAIN']
domain_subfolder = current_app.config['CDN_CONTENT_SUBFOLDER']
asset_url = current_app.config['CDN_SERVICE_DOMAIN_PROTOCOL'] + \
'://' + \
service_domain + \
domain_subfolder + \
file_path
if current_app.config['CDN_USE_URL_SIGNING']:
url_signing_key = current_app.config['CDN_URL_SIGNING_KEY']
to_hash = domain_subfolder + file_path + url_signing_key
if not expiry_timestamp:
expiry_timestamp = datetime.datetime.now() + datetime.timedelta(hours=24)
expiry_timestamp = expiry_timestamp.strftime('%s')
to_hash = expiry_timestamp + to_hash
if isinstance(to_hash, str):
to_hash = to_hash.encode()
expiry_timestamp = "," + str(expiry_timestamp)
hashed_file_path = base64.b64encode(md5(to_hash).digest())[:-1].decode()
hashed_file_path = hashed_file_path.replace('+', '-').replace('/', '_')
asset_url = asset_url + \
'?secure=' + \
hashed_file_path + \
expiry_timestamp
return asset_url