Files
oneshotclaude-christmas-whi…/main.py
Space-Banane d7712ea17d first commit
2026-01-16 22:30:37 +01:00

223 lines
7.7 KiB
Python

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"}}