#!/bin/sh # Master-Link API - Serve SecuBox IPK (pre-built or generated on-the-fly) # GET /api/master-link/ipk?token=TOKEN — direct download / opkg install # POST /api/master-link/ipk — download with token in JSON body # Auth: Token-validated # Handle CORS preflight if [ "$REQUEST_METHOD" = "OPTIONS" ]; then echo "Content-Type: text/plain" echo "Access-Control-Allow-Origin: *" echo "Access-Control-Allow-Methods: GET, POST, OPTIONS" echo "Access-Control-Allow-Headers: Content-Type" echo "" exit 0 fi if [ "$REQUEST_METHOD" = "GET" ]; then # Load library . /usr/lib/secubox/master-link.sh >/dev/null 2>&1 # Parse token from query string token="" if [ -n "$QUERY_STRING" ]; then token=$(echo "$QUERY_STRING" | sed -n 's/.*token=\([^&]*\).*/\1/p') fi if [ -z "$token" ]; then echo "Content-Type: application/json" echo "Access-Control-Allow-Origin: *" echo "" echo '{"error":"missing_token","hint":"GET with ?token=TOKEN"}' exit 0 fi # ml_ipk_serve handles all headers (Content-Type, Content-Length, etc.) ml_ipk_serve "$token" exit 0 fi if [ "$REQUEST_METHOD" != "POST" ]; then echo "Content-Type: application/json" echo "Access-Control-Allow-Origin: *" echo "" echo '{"error":"method_not_allowed"}' exit 0 fi # POST: token in JSON body . /usr/lib/secubox/master-link.sh >/dev/null 2>&1 read -r input token=$(echo "$input" | jsonfilter -e '@.token' 2>/dev/null) if [ -z "$token" ]; then echo "Content-Type: application/json" echo "Access-Control-Allow-Origin: *" echo "" echo '{"error":"missing_token"}' exit 0 fi ml_ipk_serve "$token"