Files
driver-manager/scripts/api.sh

149 lines
5.1 KiB
Bash
Raw Normal View History

#!/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