diff --git a/plugin/source/dynamix.unraid.net/etc/rc.d/rc.flash_backup b/plugin/source/dynamix.unraid.net/etc/rc.d/rc.flash_backup index 33ee3e4fc9..6f1b854ff4 100755 --- a/plugin/source/dynamix.unraid.net/etc/rc.d/rc.flash_backup +++ b/plugin/source/dynamix.unraid.net/etc/rc.d/rc.flash_backup @@ -1,6 +1,7 @@ #!/bin/bash # This file is /etc/rc.d/rc.flash_backup # use at queue "f" for flash backup +scripts_dir="/usr/local/share/dynamix.unraid.net/scripts" QUEUE=" -q f " TASKNAME="/etc/rc.d/rc.flash_backup watch" TASKACTION="/usr/local/emhttp/plugins/dynamix.my.servers/scripts/UpdateFlashBackup update" @@ -153,7 +154,10 @@ _enabled() { local output output=$(git -C /boot config --get remote.origin.url 2>&1) if [[ "${output}" == *"backup.unraid.net"* ]]; then - return 0 + # Also check if the connect API plugin is enabled + if "$scripts_dir/api_utils.sh" is_api_plugin_enabled unraid-api-plugin-connect; then + return 0 + fi fi return 1 } diff --git a/plugin/source/dynamix.unraid.net/etc/rc.d/rc.unraid-api b/plugin/source/dynamix.unraid.net/etc/rc.d/rc.unraid-api index 52027c530b..885d5dcbc8 100755 --- a/plugin/source/dynamix.unraid.net/etc/rc.d/rc.unraid-api +++ b/plugin/source/dynamix.unraid.net/etc/rc.d/rc.unraid-api @@ -28,7 +28,7 @@ uninstall() { # Service control functions start() { echo "Starting Unraid API service..." - + # Restore vendored API plugins if they were installed if [ -x "$scripts_dir/dependencies.sh" ]; then "$scripts_dir/dependencies.sh" restore || { @@ -37,21 +37,24 @@ start() { else echo "Warning: dependencies.sh script not found or not executable" fi - + # Create log directory if it doesn't exist mkdir -p /var/log/unraid-api - + # Copy env file if needed if [ -f "${api_base_dir}/.env.production" ] && [ ! -f "${api_base_dir}/.env" ]; then cp "${api_base_dir}/.env.production" "${api_base_dir}/.env" fi - - # Start the flash backup service if available + + # Start the flash backup service if available and connect plugin is enabled if [ -x "/etc/rc.d/rc.flash_backup" ]; then - echo "Starting flash backup service..." - /etc/rc.d/rc.flash_backup start + # Check if connect plugin is enabled before starting flash backup + if [ -x "$scripts_dir/api_utils.sh" ] && "$scripts_dir/api_utils.sh" is_api_plugin_enabled "unraid-api-plugin-connect"; then + echo "Starting flash backup service..." + /etc/rc.d/rc.flash_backup start + fi fi - + # Start the API service if [ -x "${unraid_binary_path}" ]; then "${unraid_binary_path}" start @@ -96,7 +99,7 @@ case "$1" in 'stop') stop ;; -'restart'|'reload') +'restart' | 'reload') restart ;; 'status') diff --git a/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/Connect.page b/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/Connect.page index 802ea0fa80..a6656514fd 100644 --- a/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/Connect.page +++ b/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/Connect.page @@ -14,6 +14,7 @@ Tag="globe" * all copies or substantial portions of the Software. */ require_once "$docroot/plugins/dynamix.my.servers/include/state.php"; +require_once "$docroot/plugins/dynamix.my.servers/include/api-config.php"; require_once "$docroot/webGui/include/Wrappers.php"; $serverState = new ServerState(); @@ -28,6 +29,8 @@ $hasMyUnraidNetCert = preg_match('/.*\.myunraid\.net$/', $serverState->nginxCfg[ $isRegistered = $serverState->registered; $isMiniGraphConnected = $serverState->myServersMiniGraphConnected; +$isConnectPluginInstalled = ApiConfig::isConnectPluginEnabled(); + $flashbackup_status = $serverState->flashbackupStatus; $passwd_result = exec('/usr/bin/passwd --status root'); @@ -486,6 +489,7 @@ $('body').on('click', '.js-setCurrentHostExtraOrigins', function(e) { }); +
_(Flash backup)_: @@ -563,6 +567,7 @@ $(function() {
+
diff --git a/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/include/api-config.php b/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/include/api-config.php new file mode 100644 index 0000000000..b090d41aa5 --- /dev/null +++ b/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/include/api-config.php @@ -0,0 +1,97 @@ +/dev/null"; + + $exitCode = 0; + self::executeCommand($command, $exitCode); + + return $exitCode === 0; + } + + /** + * Check if the unraid-api-plugin-connect is enabled + * @return bool True if connect plugin is enabled, false otherwise + */ + public static function isConnectPluginEnabled() + { + return self::isApiPluginEnabled('unraid-api-plugin-connect'); + } + + /** + * Get API version from api_utils.sh + * @return string The API version or 'unknown' if not found + */ + public static function getApiVersion() + { + $apiUtilsScript = self::getApiUtilsScript(); + + if (!is_executable($apiUtilsScript)) { + return 'unknown'; + } + + $escapedScript = escapeshellarg($apiUtilsScript); + $command = "$escapedScript get_api_version 2>/dev/null"; + + $exitCode = 0; + $output = self::executeCommand($command, $exitCode); + + if ($exitCode !== 0) { + return 'unknown'; + } + + $version = trim($output); + return !empty($version) ? $version : 'unknown'; + } +} diff --git a/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/include/state.php b/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/include/state.php index 5182e912df..530240328c 100644 --- a/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/include/state.php +++ b/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/include/state.php @@ -17,6 +17,7 @@ require_once "$docroot/plugins/dynamix.my.servers/include/reboot-details.php"; require_once "$docroot/plugins/dynamix.plugin.manager/include/UnraidCheck.php"; +require_once "$docroot/plugins/dynamix.my.servers/include/api-config.php"; /** * ServerState class encapsulates server-related information and settings. * @@ -146,31 +147,12 @@ public function getWebguiGlobal(string $key, ?string $subkey = null) private function setConnectValues() { - $apiConfigPath = '/boot/config/plugins/dynamix.my.servers/configs/api.json'; - if (!file_exists($apiConfigPath)) { + if (!ApiConfig::isConnectPluginEnabled()) { return; // plugin is not installed; exit early } - - $apiConfig = @json_decode(file_get_contents($apiConfigPath), true); - $pluginName = 'unraid-api-plugin-connect'; // name of connect plugin's npm package - if ($apiConfig && is_array($apiConfig['plugins'])) { - foreach ($apiConfig['plugins'] as $plugin) { - // recognize npm version identifiers inside $apiConfig['plugins'] - if ($plugin === $pluginName || strpos($plugin, $pluginName . '@') === 0) { - $this->connectPluginInstalled = 'dynamix.unraid.net.plg'; - break; - } - } - } - - // exit early if the plugin is not installed - if (!$this->connectPluginInstalled) { - return; - } - - // Get version directly using api_utils.sh get_api_version function - $this->connectPluginVersion = trim(@exec('/usr/local/share/dynamix.unraid.net/scripts/api_utils.sh get_api_version 2>/dev/null')) ?: 'unknown'; - + + $this->connectPluginInstalled = 'dynamix.unraid.net.plg'; + $this->connectPluginVersion = ApiConfig::getApiVersion(); $this->getMyServersCfgValues(); $this->getConnectKnownOrigins(); $this->getFlashBackupStatus(); diff --git a/plugin/source/dynamix.unraid.net/usr/local/share/dynamix.unraid.net/scripts/api_utils.sh b/plugin/source/dynamix.unraid.net/usr/local/share/dynamix.unraid.net/scripts/api_utils.sh index ae7a6a0802..b4168542bd 100755 --- a/plugin/source/dynamix.unraid.net/usr/local/share/dynamix.unraid.net/scripts/api_utils.sh +++ b/plugin/source/dynamix.unraid.net/usr/local/share/dynamix.unraid.net/scripts/api_utils.sh @@ -9,7 +9,7 @@ CONFIG_FILE="/usr/local/share/dynamix.unraid.net/config/vendor_archive.json" # Returns the API version string or empty if not found get_api_version() { local api_version="" - + # Get version from config file if [ -f "$CONFIG_FILE" ] && command -v jq >/dev/null 2>&1; then api_version=$(jq -r '.api_version' "$CONFIG_FILE") @@ -18,23 +18,23 @@ get_api_version() { return 0 fi fi - + # No version found return 1 } -# Get vendor archive configuration information +# Get vendor archive configuration information # Returns an array of values: api_version, vendor_store_url, vendor_store_path get_archive_information() { # Define all local variables at the top local api_version="" local vendor_store_path="" - + if [ ! -f "$CONFIG_FILE" ]; then echo "Vendor archive config file not found at $CONFIG_FILE" >&2 return 1 fi - + # Read values from JSON config using jq if command -v jq >/dev/null 2>&1; then api_version=$(jq -r '.api_version' "$CONFIG_FILE") @@ -43,20 +43,83 @@ get_archive_information() { echo "jq not found, can't parse config file" >&2 return 1 fi - + # Validate that all required values exist and are not null if [ -z "$api_version" ] || [ "$api_version" = "null" ]; then echo "Invalid or missing api_version in config file" >&2 return 1 fi - + if [ -z "$vendor_store_path" ] || [ "$vendor_store_path" = "null" ]; then echo "Invalid or missing vendor_store_path in config file" >&2 return 1 fi - + # Return the values echo "$api_version" echo "$vendor_store_path" return 0 -} \ No newline at end of file +} + +# Check if an API plugin is enabled +# Usage: is_api_plugin_enabled +# Returns 0 if enabled, 1 if not enabled or error +is_api_plugin_enabled() { + local plugin_name="$1" + local api_config_path="/boot/config/plugins/dynamix.my.servers/configs/api.json" + + # Check if plugin name is provided + if [ -z "$plugin_name" ]; then + return 1 + fi + + # Check if API config file exists + if [ ! -f "$api_config_path" ]; then + return 1 + fi + + # Check if jq is available + if ! command -v jq >/dev/null 2>&1; then + return 1 + fi + + # Parse JSON and check for plugin + local plugins + plugins=$(jq -r '.plugins[]?' "$api_config_path" 2>/dev/null) + if [ $? -ne 0 ]; then + return 1 + fi + + # Check each plugin entry + while IFS= read -r plugin; do + if [ "$plugin" = "$plugin_name" ] || [[ "$plugin" == "$plugin_name@"* ]]; then + return 0 + fi + done <<<"$plugins" + + return 1 +} + +# Main execution when script is called directly +# Handle command line arguments +if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then + case "$1" in + "get_api_version") + get_api_version + ;; + "get_archive_information") + get_archive_information + ;; + "is_api_plugin_enabled") + if [ -z "$2" ]; then + echo "Error: Plugin name required" >&2 + exit 1 + fi + is_api_plugin_enabled "$2" + ;; + *) + echo "Usage: $0 {get_api_version|get_archive_information|is_api_plugin_enabled }" >&2 + exit 1 + ;; + esac +fi