#!/system/bin/sh # Driver Manager v2 - WebUI API Handler # Processes commands from KernelSU WebUI via ksu.exec() MODDIR=${MODDIR:-/data/adb/modules/driver-manager} . "$MODDIR/scripts/core.sh" CONFIGDIR="$MODDIR/config" # Route: system api_system() { case "$1" in info) local device=$(cat "$CONFIGDIR/device.json" 2>/dev/null || echo '{}') local kernel=$(uname -r 2>/dev/null) local uptime=$(cat /proc/uptime 2>/dev/null | awk '{print $1}') echo "{\"device\": $device, \"kernel\": \"$kernel\", \"uptime\": \"$uptime\"}" ;; logs) local logfile="${2:-service}" local lines="${3:-100}" local f="$LOGDIR/${logfile}.log" if [ -f "$f" ]; then local content=$(tail -n "$lines" "$f" | sed 's/"/\\"/g' | tr '\n' '|') echo "{\"log\": \"$content\", \"file\": \"$logfile\"}" else echo '{"log": "", "file": "'"$logfile"'"}' fi ;; *) echo '{"error": "Unknown system command"}' ;; esac } # Route: drivers api_drivers() { case "$1" in list) sh "$MODDIR/scripts/driver_registry.sh" list ;; scan) sh "$MODDIR/scripts/driver_registry.sh" scan ;; get) sh "$MODDIR/scripts/driver_registry.sh" get "$2" ;; count) echo "{\"count\": $(sh "$MODDIR/scripts/driver_registry.sh" count)}" ;; verify) sh "$MODDIR/scripts/driver_registry.sh" verify "$2" ;; add_variant) sh "$MODDIR/scripts/driver_registry.sh" add_variant "$2" "$3" "$4" ;; *) echo '{"error": "Unknown drivers command"}' ;; esac } # Route: scope api_scope() { case "$1" in list) sh "$MODDIR/scripts/scope_manager.sh" list ;; set) sh "$MODDIR/scripts/scope_manager.sh" set "$2" "$3" "$4" "$5" "$6" ;; remove) sh "$MODDIR/scripts/scope_manager.sh" remove "$2" ;; apply) sh "$MODDIR/scripts/scope_manager.sh" apply ;; unmount) sh "$MODDIR/scripts/scope_manager.sh" unmount_all ;; *) echo '{"error": "Unknown scope command"}' ;; esac } # Route: ko (kernel modules) api_ko() { case "$1" in list) sh "$MODDIR/scripts/ko_manager.sh" list ;; load) sh "$MODDIR/scripts/ko_manager.sh" load "$2" "$3" ;; unload) sh "$MODDIR/scripts/ko_manager.sh" unload "$2" ;; unload_all) sh "$MODDIR/scripts/ko_manager.sh" unload_all ;; info) sh "$MODDIR/scripts/ko_manager.sh" info "$2" ;; autoload) sh "$MODDIR/scripts/ko_manager.sh" set_autoload "$2" "$3" ;; *) echo '{"error": "Unknown ko command"}' ;; esac } # Route: protect api_protect() { case "$1" in status) sh "$MODDIR/scripts/protect.sh" status ;; check) sh "$MODDIR/scripts/protect.sh" check ;; baseline) sh "$MODDIR/scripts/protect.sh" baseline ;; mode) sh "$MODDIR/scripts/protect.sh" mode "$2" ;; driver) sh "$MODDIR/scripts/protect.sh" protect "$2" "$3" ;; changelog) sh "$MODDIR/scripts/protect.sh" changelog "$2" ;; *) echo '{"error": "Unknown protect command"}' ;; esac } # Route: apps api_apps() { case "$1" in list) echo '{"apps":[' local first=true # List installed packages with labels pm list packages -f 2>/dev/null | while IFS= read -r line; do local apk=$(echo "$line" | sed 's/package:\(.*\)=\(.*\)/\1/') local pkg=$(echo "$line" | sed 's/package:\(.*\)=\(.*\)/\2/') [ -z "$pkg" ] && continue # Get app label via dumpsys (fast path) local label=$(dumpsys package "$pkg" 2>/dev/null | grep -m1 'applicationInfo' -A5 | grep -o 'label=[^ ]*' | cut -d= -f2) [ -z "$label" ] && label="$pkg" # Check if system app local system="false" echo "$apk" | grep -q '/system/' && system="true" [ "$first" = true ] && first=false || echo "," echo " {\"package\": \"$pkg\", \"label\": \"$label\", \"system\": $system}" done echo ']}' ;; *) echo '{"error": "Unknown apps command"}' ;; esac } # Route: settings api_settings() { case "$1" in get) cat "$CONFIGDIR/settings.json" 2>/dev/null || echo '{}' ;; set) local key="$2" value="$3" json_set "$CONFIGDIR/settings.json" "$key" "$value" echo "{\"status\": \"ok\", \"$key\": \"$value\"}" ;; *) echo '{"error": "Unknown settings command"}' ;; esac } # --- Main router --- ROUTE="$1" shift case "$ROUTE" in system) api_system "$@" ;; drivers) api_drivers "$@" ;; scope) api_scope "$@" ;; ko) api_ko "$@" ;; protect) api_protect "$@" ;; apps) api_apps "$@" ;; settings) api_settings "$@" ;; *) echo '{"error": "Unknown route. Routes: system, drivers, scope, ko, protect, apps, settings"}' ;; esac