import requests import base64 from Crypto.Cipher import AES from Crypto.Util.Padding import unpad, pad from datetime import datetime, timedelta import json from ..utils import dev_url JWT_SECRET_KEY = "super-secret-key" def encrypt(raw): try: raw = str(raw) raw = pad(raw.encode(), 32) cipher = AES.new(JWT_SECRET_KEY.encode("utf-8"), AES.MODE_ECB) return base64.b64encode(cipher.encrypt(raw)) except Exception as e: print(e) return None def get_date_range(period): today = datetime.now() if period == "week": start_date = today - timedelta(days=7) elif period == "month": start_date = today - timedelta(days=30) elif period == "six months": start_date = today - timedelta(days=180) elif period == "whole": start_date = datetime(1970, 1, 1) elif period == "yesterday": start_date = today - timedelta(days=1) end_date = start_date elif period == "today": start_date = today end_date = start_date else: raise ValueError("Invalid period type. Choose from 'week', 'month', 'six months', 'whole', 'yesterday', or 'today'.") end_date = today if period not in ["yesterday", "today"] else end_date return start_date, end_date def fetch_response(store_id, brand_id, period=None, start_date=None, end_date=None, hours=None, minutes=None, seconds=None): if period: start_date, end_date = get_date_range(period) elif not start_date or not end_date: raise ValueError("Start date and end date must be provided if period is not specified.") if start_date == end_date: if hours is not None and minutes is not None and seconds is not None: start_date = start_date.replace(hour=hours, minute=minutes, second=seconds) end_date = end_date.replace(hour=hours, minute=minutes, second=seconds) else: start_date = start_date.replace(hour=0, minute=0, second=0) end_date = end_date.replace(hour=23, minute=59, second=59) start_date_str = start_date.strftime("%Y-%m-%d %H:%M:%S") end_date_str = end_date.strftime("%Y-%m-%d %H:%M:%S") encrypted = encrypt(brand_id) if encrypted is None: print("Error in encryption") return url = f"https://dev.sahlhub.com/api/v1/order/archiveOrder?storeId={store_id}&startDate={start_date_str}&enddate={end_date_str}" auth_token = "SAHL_COOKIE_KEY" headers = { "Content-Type": "application/json", "userToken": auth_token, "brandid": encrypted.decode("utf-8", "ignore"), "origin": "https://pos-dev.sahlhub.com", } response = requests.request("GET", url, headers=headers) if response.status_code == 200: data = response.json() return data else: print(f"Failed to fetch data. Status code: {response.status_code}") print(response.text) return None