Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

animeking1987

Members
  • Joined

  • Last visited

  1. Just tested both URLs: ✔ Local GUI: https://192-168-1-75...myunraid.net/Settings/Automover Automover works perfectly — CSRF token is present and requests succeed. ❌ Unraid Connect remote UI: https://connect.myunraid.net/server/iframe/... Automover fails with: Code schedule_create.php returned an empty response wrong csrf_token This happens because Unraid Connect loads plugin pages inside a sandboxed iframe. Inside this iframe: window.csrf_token is not exposed cookies are not shared session data is not shared iframe cannot access parent tokens So the plugin cannot obtain a valid CSRF token, and all POST requests fail. This appears to be a limitation of Unraid Connect, not Automover.
  2. Here is the patch that fixes the CSRF issue in Automover on Unraid 6.12+. The current CSRF logic in Automover.page tries multiple fallback methods: parent.csrf_token window.csrf_token cookies meta tags PHP session / GET / cookie None of these work in Unraid 6.12+, so csrf is always empty. As a result, both save_settings.php and schedule_create.php return: Code wrong csrf_token The correct method is simply: js let csrf = (typeof csrf_token !== 'undefined') ? csrf_token : ''; Unraid injects csrf_token globally into every page. Here is the exact patch: Code --- a/Automover.page +++ b/Automover.page @@ -1,20 +1,7 @@ <script> 'use strict'; const A_H='/plugins/automover/helpers',A_F=1000,A_S=1000; -let csrf = ''; -try { - if (typeof parent !== 'undefined' && parent.csrf_token) { - csrf = parent.csrf_token; - } - if (!csrf && typeof csrf_token !== 'undefined' && csrf_token) { - csrf = csrf_token; - } - if (!csrf && document.cookie) { - const m = document.cookie.match(/(?:^|;\s*)csrf_token=([^;]+)/); - if (m && m[1]) csrf = decodeURIComponent(m[1]); - } - if (!csrf) { - const meta = document.querySelector("meta[name='csrf_token']"); - if (meta) csrf = meta.getAttribute('content') || ''; - } -} catch(e) {} -if (!csrf) { - csrf = "<?= htmlspecialchars($_SESSION['csrf_token'] ?? $_GET['csrf_token'] ?? $_COOKIE['csrf_token'] ?? '', ENT_QUOTES) ?>"; -} +// Correct Unraid 6.12+ CSRF handling +// Unraid injects csrf_token globally into every page +let csrf = (typeof csrf_token !== 'undefined') ? csrf_token : ''; const WH_SAVED={DISCORD:"<?=htmlspecialchars($settings['WEBHOOK_DISCORD']??'')?>",GOTIFY:"<?=htmlspecialchars($settings['WEBHOOK_GOTIFY']??'')?>",NTFY:"<?=htmlspecialchars($settings['WEBHOOK_NTFY']??'')?>",PUSHOVER:"<?=htmlspecialchars($settings['WEBHOOK_PUSHOVER']??'')?>",SLACK:"<?=htmlspecialchars($settings['WEBHOOK_SLACK']??'')?>"}; const PO_SAVED="<?=htmlspecialchars($settings['PUSHOVER_USER_KEY']??'')?>"; </script> Once this is applied, the frontend sends a valid token and both helper scripts work normally. Happy to test the next build. "Copilot helped me"
  3. The update didn’t fix the CSRF issue. I checked the updated Automover.page, and the CSRF block is still using multiple fallback methods: parent.csrf_token window.csrf_token cookies meta tags PHP session / GET / cookie None of these work in Unraid 6.12+, so csrf is always empty. This means the frontend still sends no CSRF token, and both: Code save_settings.php schedule_create.php continue to fail with: Code wrong csrf_token The correct Unraid 6.12+ method is simply: js let csrf = (typeof csrf_token !== 'undefined') ? csrf_token : ''; Once this is used, the helper scripts accept the token and the plugin works normally. Happy to test another build.
  4. Hey, thanks for pushing the update. I tested the new version, but the issue is still happening. After updating, both helper scripts still fail with: Code schedule_create.php returned an empty response And the syslog still shows: Code webGUI: error: /plugins/automover/helpers/schedule_create.php?csrf_token= - wrong csrf_token I checked the updated files, and the problem is still in Automover.page. The CSRF token detection block is unchanged: js let csrf = "<?= $_SESSION['csrf_token'] ?? $_GET['csrf_token'] ?? $_COOKIE['csrf_token'] ?? '' ?>"; Unraid 6.12+ no longer exposes CSRF tokens through session, GET, or cookies, so this always evaluates to an empty string. That means the frontend sends no CSRF token, and both helper scripts reject the request. The correct way to get the token in Unraid 6.12+ is: js let csrf = (typeof csrf_token !== 'undefined') ? csrf_token : ''; Once this is updated in Automover.page, both save_settings.php and schedule_create.php work normally again. Happy to test another build if needed.
  5. @jcofer555 I asked copilot to help me look into the issue and it says it found the reason for the error im seeing: Subject: Automover CSRF Token Bug in Unraid 6.12+ (save_settings.php returns empty response) Hi, I’ve identified a CSRF‑related issue in Automover on Unraid 6.12+ that causes both: Code /plugins/automover/helpers/save_settings.php /plugins/automover/helpers/schedule_create.php to fail with: Code webGUI: error: wrong csrf_token This results in the UI returning an empty response when saving settings. Root CauseThe CSRF token detection in Automover.page uses: js let csrf = "<?= $_SESSION['csrf_token'] ?? $_GET['csrf_token'] ?? $_COOKIE['csrf_token'] ?? '' ?>"; Unraid 6.12+ no longer exposes CSRF tokens through session, GET, or cookies. As a result, the frontend sends no CSRF token, and the backend rejects every request. Correct FixUnraid now exposes the token globally as: js csrf_token So the CSRF block in Automover.page should be replaced with: js let csrf = (typeof csrf_token !== 'undefined') ? csrf_token : ''; After applying this change, both helper scripts accept the token correctly and settings save normally. If you need the full file or want me to test a patched build, I’m happy to help. Thanks for maintaining this plugin — it’s incredibly useful.
  6. I updated the plugin. tried to schedule it, pressed schedule and same error: schedule_create.php returned an empty response — check the PHP file for errors Downloading plugin plugin: installing: automover.plg Executing hook script: CA_preHook Clearing Community Applications plugin cache Executing hook script: pre_plugin_checks plugin: downloading: jdupes-1.30.0-x86_64-2_slackdce.txz ... plugin: downloading: jdupes-1.30.0-x86_64-2_slackdce.txz ... 89% plugin: downloading: jdupes-1.30.0-x86_64-2_slackdce.txz ... 100% plugin: downloading: jdupes-1.30.0-x86_64-2_slackdce.txz ... done plugin: downloading: libjodycode-4.0.1-x86_64-2_slackdce.txz ... plugin: downloading: libjodycode-4.0.1-x86_64-2_slackdce.txz ... 100% plugin: downloading: libjodycode-4.0.1-x86_64-2_slackdce.txz ... done plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 5% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 11% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 17% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 23% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 29% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 35% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 41% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 47% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 53% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 59% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 65% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 71% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 77% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 83% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 89% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 95% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... 100% plugin: downloading: unraid-automover-2026.03.19.01-noarch-1.txz ... done +===================================================================================================+ | Installing new package /boot/config/plugins/automover/unraid-automover-2026.03.19.01-noarch-1.txz | +===================================================================================================+ Verifying package unraid-automover-2026.03.19.01-noarch-1.txz. Installing package unraid-automover-2026.03.19.01-noarch-1.txz: PACKAGE DESCRIPTION: Package unraid-automover-2026.03.19.01-noarch-1.txz installed. +===========================================================================================+ | Installing new package /boot/config/plugins/automover/jdupes-1.30.0-x86_64-2_slackdce.txz | +===========================================================================================+ Verifying package jdupes-1.30.0-x86_64-2_slackdce.txz. Installing package jdupes-1.30.0-x86_64-2_slackdce.txz: PACKAGE DESCRIPTION: # jdupes (identifying and taking action upon duplicate files) # # jdupes is a program for identifying and taking actions upon duplicate # files. # # This fork of fdupes known as 'jdupes' is heavily modified from and # improved over the original. # # https://github.com/jbruchon/jdupes # Package jdupes-1.30.0-x86_64-2_slackdce.txz installed. +===============================================================================================+ | Installing new package /boot/config/plugins/automover/libjodycode-4.0.1-x86_64-2_slackdce.txz | +===============================================================================================+ Verifying package libjodycode-4.0.1-x86_64-2_slackdce.txz. Installing package libjodycode-4.0.1-x86_64-2_slackdce.txz: PACKAGE DESCRIPTION: # libjodycode (library for tools like jdupes) # # libjodycode is a software code library containing code shared among # several of the programs written by Jody Bruchon such as imagepile, # jdupes, winregfs, and zeromerge. # # https://github.com/jbruchon/libjodycode # Executing install script for libjodycode-4.0.1-x86_64-2_slackdce.txz. Package libjodycode-4.0.1-x86_64-2_slackdce.txz installed. ---------------------------------------------------- automover has been installed. Version: 2026.03.19.01 ---------------------------------------------------- ⚠️ If you were on version 2025.12.15.04 or earlier, reconfigure your schedule in Settings → Automover ⚠️ It's suggested to disable unraids built in mover schedule at settings > scheduler this requires unraid 7.2.1+ plugin: automover.plg installed Executing hook script: CA_postHook Clearing Community Applications plugin cache Executing hook script: post_plugin_checks Plugin installed
  7. is there an update on the "save_settings.php returned an empty response — check the PHP file for errors"
  8. Im on version 2026.03.16.03 and my settings im trying to save:
  9. @jcofer555 I keep getting this error when i try to save: save_settings.php returned an empty response — check the PHP file for errors
  10. question i have my downloads and media on a ssd downloads pool. can automover move my files from that ssd to the array? Session finished - 2026-03-10 04:04:44 Duration: 2m 0s Post-move script completed successfully All containers processed. radarr4k Starting container: radarr4k Container Prunerr is already running speedarr Starting container: speedarr bookshelf Starting container: bookshelf qbittorrent Starting container: qbittorrent deemix Starting container: deemix sabnzbd Starting container: sabnzbd flaresolverr Starting container: flaresolverr Seerr Starting container: Seerr lidarr Starting container: lidarr Pulsarr Starting container: Pulsarr trailarr Starting container: trailarr Taggarr Starting container: Taggarr unpackerr Starting container: unpackerr Profilarr Starting container: Profilarr sonarr Starting container: sonarr FMD2-wine Starting container: FMD2-wine Framerr Starting container: Framerr Prunerr Starting container: Prunerr aurral Starting container: aurral autopulse Starting container: autopulse Cleanuparr Starting container: Cleanuparr prowlarr Starting container: prowlarr Starting containers after mover... Running post-move script: /mnt/user/scripts/post_move.sh Finished move process No in-use files detected during move No shares had files to move Pre-move script completed successfully All containers processed. radarr4k Stopping container: radarr4k Container Prunerr is already stopped or not running speedarr Stopping container: speedarr bookshelf Stopping container: bookshelf qbittorrent Stopping container: qbittorrent deemix Stopping container: deemix sabnzbd Stopping container: sabnzbd flaresolverr Stopping container: flaresolverr Seerr Stopping container: Seerr lidarr Stopping container: lidarr Pulsarr Stopping container: Pulsarr trailarr Stopping container: trailarr Taggarr Stopping container: Taggarr unpackerr Stopping container: unpackerr Profilarr Stopping container: Profilarr sonarr Stopping container: sonarr FMD2-wine Stopping container: FMD2-wine Container Framerr is already stopped or not running Prunerr Stopping container: Prunerr aurral Stopping container: aurral autopulse
  11. when i enable pre/post script and save. it does not save, when i reload its empty. it will not save my pre/post scripts?
  12. That worked. when will the latest release be back to normal lol
  13. anyone using unraid as i just installed it and it only allowing me to login. I cant even setup anything? Any idea?Any idea?
  14. Can you paste which tag you used because none are working for me as i cant save anything @Kilrah
  15. im getting this error on my console when i try to save any settings i change VM97:1154 Uncaught TypeError: Cannot read properties of null (reading 'checked') at Object.applyPreferences (<anonymous>:1154:60) at HTMLInputElement.onclick ((index):1:25) applyPreferences @ VM97:1154 onclick @ (index):1

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.