ubnt-manager: add ubnt-manager
authorNick Hainke <vincent@systemli.org>
Sun, 3 Apr 2022 10:03:52 +0000 (12:03 +0200)
committerEtienne Champetier <champetier.etienne@gmail.com>
Sat, 16 Apr 2022 21:31:42 +0000 (17:31 -0400)
This app makes it easier to work with AirOS devices. So far, only monitoring is implemented.

Signed-off-by: Nick Hainke <vincent@systemli.org>
(cherry picked from commit e4a8d3fc29d8f7f00089b14564d5248694e12638)

utils/ubnt-manager/Makefile [new file with mode: 0644]
utils/ubnt-manager/files/ubnt-manager.config [new file with mode: 0644]
utils/ubnt-manager/files/ubnt-manager.sh [new file with mode: 0755]

diff --git a/utils/ubnt-manager/Makefile b/utils/ubnt-manager/Makefile
new file mode 100644 (file)
index 0000000..8416eff
--- /dev/null
@@ -0,0 +1,40 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=ubnt-manager
+PKG_VERSION:=1
+PKG_RELEASE:=$(AUTORELEASE)
+
+PKG_MAINTAINER:=Nick Hainke <vincent@systemli.org>
+PKG_LICENSE:=GPL-2.0-only
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/ubnt-manager
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE:=Managment app for Ubiquiti devices
+  PKGARCH:=all
+  EXTRA_DEPENDS:=dropbear
+endef
+
+define Package/ubnt-manager/description
+Managment app for Ubiquiti devices.
+endef
+
+define Package/ubnt-manager/conffiles
+/etc/config/ubnt-manager
+endef
+
+define Build/Compile
+endef
+
+define Package/ubnt-manager/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) ./files/ubnt-manager.sh $(1)/usr/bin/ubnt-manager
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_DATA) ./files/ubnt-manager.config $(1)/etc/config/ubnt-manager
+endef
+
+$(eval $(call BuildPackage,ubnt-manager))
diff --git a/utils/ubnt-manager/files/ubnt-manager.config b/utils/ubnt-manager/files/ubnt-manager.config
new file mode 100644 (file)
index 0000000..bc29cdf
--- /dev/null
@@ -0,0 +1,9 @@
+config device 'sample_ap' # make sure to not use dashes in name
+       option target           '192.168.1.20'
+       option username         'ubnt'
+       option password         'ubnt'
+
+#config device 'sample_ap1'
+#      option target           '10.31.81.21'
+#      option username         'ubnt'
+#      option password         '...'
diff --git a/utils/ubnt-manager/files/ubnt-manager.sh b/utils/ubnt-manager/files/ubnt-manager.sh
new file mode 100755 (executable)
index 0000000..c65eb23
--- /dev/null
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+. /usr/share/libubox/jshn.sh
+. /lib/functions.sh
+
+log() {
+    local msg="$1"
+    logger -t ubnt-manager -s "$msg"
+}
+
+rexec() {
+    local target="$1"
+    local username="$2"
+    local password="$3"
+    local cmd="$4"
+    raw=$(DROPBEAR_PASSWORD="$password" ssh -y $username@$target "$cmd" 2>/dev/null)
+    ssh_result=$?
+}
+
+get_json_dump() {
+    local cmd="/usr/www/status.cgi"
+    rexec $* "$cmd"
+    echo $raw
+}
+
+handle_device() {
+    local device="${1//-/_}" # replace "-" with "_"
+    config_load ubnt-manager
+    config_get target "$device" target
+    config_get username "$device" username
+    config_get password "$device" password
+    ssh_result=0
+}
+
+add_device_to_list() {
+    local device="$1"
+    device_list="$device_list $device"
+}
+
+list_devices() {
+    device_list=""
+    config_load ubnt-manager
+    config_foreach add_device_to_list device device_list
+    echo $device_list
+}
+
+usage() {
+    cat <<EOF
+usage: ubnt-manager [command]
+-j    | --json          Dump json info
+-t    | --target        Target device
+-l    | --list-devices  List all devices
+-h    | --help          Brings up this menu
+EOF
+}
+
+while [ "$1" != "" ]; do
+    case $1 in
+    -t | --target)
+        shift
+        target=$1
+        handle_device $target
+        ;;
+    -j | --json)
+        json=1
+        ;;
+    -l | --list-devices)
+        list_devices
+        ;;
+    -h | --help)
+        usage
+        ;;
+    esac
+    shift
+done
+
+if [ ! -z $json ]; then
+    get_json_dump $target $username $password | sed 's/Content-Type:\ application\/json//'
+fi