import redis import json import os import uuid r = redis.Redis( host="185.14.92.202", port=12003, decode_responses=True, username="default", password=os.getenv("REDID"), db=5, ) def main(args): route = args.get("route", "default") body = args.get("body", {}) try: body = json.loads(body) if isinstance(body, str) else body except: body = {} queries = args.get("queries", {}) # Serve HTML for default route if route == "default": try: with open("/app/index.html", "r", encoding="utf-8") as f: html = f.read() return { "_shsf": "v2", "_code": 200, "_headers": {"Content-Type": "text/html"}, "_res": html } except Exception as e: return {"_shsf": "v2", "_code": 500, "_res": {"error": str(e)}} # Login endpoint elif route == "login": username = body.get("username", "").strip() password = body.get("password", "").strip() if not username or not password: return {"_shsf": "v2", "_code": 400, "_res": {"error": "Username and password required"}} # Get stored user user_key = f"storage1:user:{username}" stored_pass = r.get(user_key) if stored_pass == password: return {"_shsf": "v2", "_code": 200, "_res": {"success": True, "username": username}} else: return {"_shsf": "v2", "_code": 401, "_res": {"error": "Invalid credentials"}} # Register endpoint elif route == "register": username = body.get("username", "").strip() password = body.get("password", "").strip() if not username or not password: return {"_shsf": "v2", "_code": 400, "_res": {"error": "Username and password required"}} user_key = f"storage1:user:{username}" if r.exists(user_key): return {"_shsf": "v2", "_code": 409, "_res": {"error": "Username already exists"}} r.set(user_key, password) return {"_shsf": "v2", "_code": 200, "_res": {"success": True, "username": username}} # Get wishlist items elif route == "items": username = queries.get("username", "") if not username: return {"_shsf": "v2", "_code": 400, "_res": {"error": "Username required"}} items_key = f"storage1:items:{username}" items_json = r.get(items_key) if items_json: items = json.loads(items_json) else: items = [] return {"_shsf": "v2", "_code": 200, "_res": {"items": items}} # Add wishlist item elif route == "add": username = body.get("username", "") name = body.get("name", "").strip() link = body.get("link", "").strip() price = body.get("price", "") image = body.get("image", "").strip() if not username or not name: return {"_shsf": "v2", "_code": 400, "_res": {"error": "Username and name required"}} items_key = f"storage1:items:{username}" items_json = r.get(items_key) if items_json: items = json.loads(items_json) else: items = [] # Generate ID item_id = str(len(items) + 1) new_item = { "id": item_id, "name": name, "link": link, "price": price, "image": image } items.append(new_item) r.set(items_key, json.dumps(items)) return {"_shsf": "v2", "_code": 200, "_res": {"success": True, "item": new_item}} # Update wishlist item elif route == "update": username = body.get("username", "") item_id = body.get("id", "") name = body.get("name", "").strip() link = body.get("link", "").strip() price = body.get("price", "") image = body.get("image", "").strip() if not username or not item_id: return {"_shsf": "v2", "_code": 400, "_res": {"error": "Username and item ID required"}} items_key = f"storage1:items:{username}" items_json = r.get(items_key) if not items_json: return {"_shsf": "v2", "_code": 404, "_res": {"error": "No items found"}} items = json.loads(items_json) found = False for item in items: if item["id"] == item_id: item["name"] = name item["link"] = link item["price"] = price item["image"] = image found = True break if not found: return {"_shsf": "v2", "_code": 404, "_res": {"error": "Item not found"}} r.set(items_key, json.dumps(items)) return {"_shsf": "v2", "_code": 200, "_res": {"success": True}} # Delete wishlist item elif route == "delete": username = body.get("username", "") item_id = body.get("id", "") if not username or not item_id: return {"_shsf": "v2", "_code": 400, "_res": {"error": "Username and item ID required"}} items_key = f"storage1:items:{username}" items_json = r.get(items_key) if not items_json: return {"_shsf": "v2", "_code": 404, "_res": {"error": "No items found"}} items = json.loads(items_json) items = [item for item in items if item["id"] != item_id] r.set(items_key, json.dumps(items)) return {"_shsf": "v2", "_code": 200, "_res": {"success": True}} # Share wishlist (create public copy and return link) elif route == "share": username = body.get("username", "") if not username: return {"_shsf": "v2", "_code": 400, "_res": {"error": "Username required"}} items_key = f"storage1:items:{username}" items_json = r.get(items_key) if not items_json: return {"_shsf": "v2", "_code": 404, "_res": {"error": "No items found"}} # Generate unique share ID share_id = str(uuid.uuid4()) public_key = f"storage1:public:{share_id}" r.set(public_key, items_json) share_url = f"https://shsf-api.reversed.dev/api/exec/4/57aca15b-665e-4015-b7e3-526a87b39b33/public?share_id={share_id}" return {"_shsf": "v2", "_code": 200, "_res": {"share_id": share_id, "share_url": share_url}} # Get public wishlist by share_id elif route == "public": share_id = queries.get("share_id", "") if not share_id: return {"_shsf": "v2", "_code": 400, "_res": {"error": "Share ID required"}} public_key = f"storage1:public:{share_id}" items_json = r.get(public_key) if not items_json: return {"_shsf": "v2", "_code": 404, "_res": {"error": "Shared wishlist not found"}} items = json.loads(items_json) return {"_shsf": "v2", "_code": 200, "_res": {"items": items}} # Redirect to UI with share_id for public viewing elif route == "redirect_share": share_id = queries.get("share_id", "") if not share_id: return {"_shsf": "v2", "_code": 400, "_res": {"error": "Share ID required"}} # Change this URL if your UI is hosted elsewhere ui_url = f"https://shsf-api.reversed.dev/api/exec/4/57aca15b-665e-4015-b7e3-526a87b39b33/?share_id={share_id}" return { "_shsf": "v2", "_code": 302, "_location": ui_url } else: return {"_shsf": "v2", "_code": 404, "_res": {"error": "Route not found"}}