Compare commits

...

1823 Commits

Author SHA1 Message Date
Tom Mortensen
95c6913c62 small chang in how rc.cgroup2unaid is invoked 2024-10-11 02:24:43 -07:00
Tom Mortensen
b783d4b207 more killall and pgrep updates. 2024-10-11 02:24:43 -07:00
Tom Mortensen
a866de833a Revert "stop ntpd from complaining about multiple IP addresses" 2024-10-11 02:24:43 -07:00
tom mortensen
ee31e35849 Merge pull request #1882 from desertwitch/fix-rsyslogd
(bugfix) /etc/rc.d/rc.rsyslogd: OS-native PID for decisions
2024-10-10 17:13:35 -07:00
tom mortensen
50e7389c8a Merge pull request #1889 from SimonFair/ntp-fix
killall and pgrep updates.
2024-10-10 17:02:59 -07:00
tom mortensen
d536ef285b Merge pull request #1890 from dlandon/delete_DS_Store_files_when_deleting_user_share
Delete all '*.DS_Store' files when deleting share.
2024-10-10 16:57:08 -07:00
dlandon
2dc82b61de Delete all '*.DS_Store' files when deleting share. 2024-10-10 16:16:09 -05:00
SimonFair
57ec7909e5 Update rc.sshd 2024-10-10 21:54:16 +01:00
SimonFair
01c6f64b52 Revert sshd loops. 2024-10-10 21:03:02 +01:00
SimonFair
80d567dfde killall and pgrep updates.
Set --ns $$ on commands.
2024-10-10 19:18:54 +01:00
tom mortensen
99d60fa08a Merge pull request #1888 from SimonFair/ntp-fix
Samba update and to use smbcontrol for reload
2024-10-10 10:37:49 -07:00
tom mortensen
8bbf176b8b Merge pull request #1887 from unraid/fix-device-list
Fix PHP error in device_list
2024-10-10 10:36:50 -07:00
tom mortensen
ca51a3799b Merge pull request #1885 from dlandon/remove_ps.txt_file_from_diagnostics
Remove ps.txt from diagnostics.
2024-10-10 10:36:28 -07:00
tom mortensen
e4bb758b05 Merge pull request #1884 from dlandon/show_delete_on_shares_settings_page_at_all_times
Delete share is always visible.
2024-10-10 10:35:59 -07:00
SimonFair
3c007fa1d0 Samba update and to use smbcontrol for reload 2024-10-10 17:17:17 +01:00
ljm42
c062e4dd9c Fix PHP error in device_list
Was preventing the main page from populating with data in some cases
2024-10-10 09:09:39 -07:00
desertwitch
06b1c9a20f /etc/rc.d/rc.rsyslogd: check status before reload 2024-10-10 07:03:48 +02:00
desertwitch
bf6d5982be /etc/rc.d/rc.rsyslogd: use pgrep, killall with PID namespace 2024-10-10 06:51:05 +02:00
dlandon
d9bd5b56c8 Remove ps.txt from diagnostics. 2024-10-09 13:08:55 -05:00
dlandon
bc7c66fec9 Delete share is always visible and enabled only when it is safe to delete the share. 2024-10-09 12:06:48 -05:00
tom mortensen
dc50e7d2c2 Merge pull request #1881 from SimonFair/ntp-fix
Set NTP to use interfaces.
2024-10-09 08:56:07 -07:00
desertwitch
0061c66dfe /etc/rc.d/rc.rsyslogd: OS-native PID for decisions
bugfix: multiple running rsyslogd processes (e.g. spawned by Docker containers) caused the rc.d script to think that the OS-native process was already running, resulting in startup failure of the OSes daemon.
2024-10-09 14:52:44 +02:00
SimonFair
91caf869f5 Set NTP to use inferfaces. 2024-10-08 21:57:48 +01:00
tom mortensen
97c3a4621b Merge pull request #1877 from dlandon/cannot_change_share_settings_if_pools_missing
Fix a situation where the secondary pool device is missing.
2024-10-08 12:18:48 -07:00
tom mortensen
1ffb22bddf Merge pull request #1880 from ich777/ich777-docker-directory-fix
Fix for docker directory
2024-10-08 12:16:44 -07:00
tom mortensen
1d9e14f07c Merge pull request #1878 from SimonFair/VM-ZFS-Fixes
Fix virtiofsd pre processor + add virtiogpu option to gui.
2024-10-08 12:14:26 -07:00
6f7b97e37a Fix for docker directory
- store path outside from function to not shorten path if users switches multiple times between `image` and `folder`
- make sure overlay2 is selected by default
2024-10-07 14:54:08 +02:00
SimonFair
ed7219d9c7 Add virtio gpu option. 2024-10-06 11:29:57 +01:00
SimonFair
082d7d842b Revert "Add virtio gu(2d) as an option of template."
This reverts commit 9a502776a1.
2024-10-06 11:26:34 +01:00
SimonFair
9a502776a1 Add virtio gu(2d) as an option of template. 2024-10-06 11:17:19 +01:00
SimonFair
03346f4709 Update virtiofsd.php 2024-10-05 07:57:19 +01:00
dlandon
1cc84832ee Fix a situation where secondary pool device is missing and the Array is chosen for the primary device.. 2024-10-03 13:57:21 -05:00
Tom Mortensen
959df7e46c fx: Agent notifications don't work if there's a problem with email notifications 2024-10-02 09:55:44 -07:00
Tom Mortensen
3fb6c2147b Small change of var name CUSTOMFA to NGINX_CUSTOMFA. 2024-10-02 09:55:44 -07:00
Tom Mortensen
3db6fa9a1d update rc.bind (but not used) 2024-10-02 09:55:44 -07:00
tom mortensen
0c5987fab0 Merge pull request #1811 from unraid/kill-samba
Forcibly kill samba if needed
2024-10-02 09:52:46 -07:00
tom mortensen
fcbc8f700e Merge pull request #1876 from dkaser/check-container-networks
fix: prevent deleting containers that are assigned as a network
2024-10-01 14:00:08 -07:00
Derek Kaser
6fd88575b2 fix: prevent deleting containers that are assigned as a network 2024-10-01 04:21:51 +00:00
tom mortensen
bff0238f88 Merge pull request #1875 from dkaser/sanitize-tsnet
feat: sanitize ts.net domain names from nginx config
2024-09-30 15:45:50 -07:00
Derek Kaser
ee7f1f4a5b feat: sanitize ts.net domain names from nginx config 2024-09-30 02:29:37 +00:00
tom mortensen
c3dd62f1d5 Merge pull request #1874 from dlandon/container_device_not_showing
Container device not showing in Dockerman.
2024-09-27 09:19:24 -07:00
tom mortensen
7c0fb18e3c Merge pull request #1873 from unraid/add-csp-frame-ancestors
Improved "Content-Security-Policy frame-ancestors" support
2024-09-27 09:15:29 -07:00
ljm42
fe2e2ff897 define CUSTOMFA in /etc/defaults/nginx 2024-09-26 16:03:36 -07:00
ljm42
74530129ae Merge branch 'master' into add-csp-frame-ancestors 2024-09-26 15:52:44 -07:00
tom mortensen
968e3b1d72 Merge pull request #1870 from dkaser/tailscale-routes
feat: show routes from all routing tables, not just default
2024-09-26 12:25:30 -07:00
tom mortensen
6bdcb38c47 Merge pull request #1869 from ich777/ich777-rc.sshd-fix
Fix for rc.sshd
2024-09-26 12:25:09 -07:00
tom mortensen
8c7cdca4aa Merge pull request #1868 from unraid/ts-redirect
redirect http TS url to https TS url
2024-09-26 12:24:42 -07:00
tom mortensen
08024a0464 Merge pull request #1867 from ich777/ich777-docker-fix
Fix for 3rd party containers "not available" colour
2024-09-26 12:24:05 -07:00
dlandon
828cd7b747 Container device not showing in Dockerman. 2024-09-26 09:13:42 -05:00
ljm42
0ce3960de6 Improved "Content-Security-Policy frame-ancestors" support 2024-09-25 23:16:52 -07:00
tom mortensen
8b91d22796 Merge pull request #1872 from ich777/ich777-rc.docker-patch
Update rc.docker
2024-09-25 10:36:52 -07:00
b716920800 Update rc.docker
- Remove ID since not necessary
2024-09-24 16:55:21 +02:00
6d749a8b1a Update rc.docker
- Further improvement to stop containers only managed by Unraid or the Compose plugin
- Small fix for the notification
2024-09-24 16:46:02 +02:00
69b95ae27d Update rc.docker
- Only stop Unraid managed containers
- Don't kill containers since Docker will kill them if they won't stop after the set timeout when the daemon is stopping
- Increase timeout for daemon to die to 30 seconds (seems a bit short if 3rd party containers are installed)
- Rephrase message for daemon to die and display it only once
2024-09-24 15:51:46 +02:00
Derek Kaser
20e29ab5af feat: show routes from all routing tables, not just default 2024-09-23 21:32:13 +00:00
a75bc3d4d7 Fix for rc.sshd
- Remove trailing slash to be sure to grab the correct PIDs
2024-09-23 22:16:02 +02:00
ljm42
e8e5ccdf18 redirect http TS url to https TS url 2024-09-23 12:59:05 -07:00
020ed9a07f Small fix for 3rd party containers
- Fix orange text "not available" to use the default text colour.
2024-09-23 21:19:04 +02:00
Tom Mortensen
8f656e87b1 establish sensible zfs pool defaults 2024-09-23 10:57:13 -07:00
Tom Mortensen
54b1e81b38 unconditinally set directories to mode 0777 2024-09-23 10:54:57 -07:00
Tom Mortensen
4c6be23467 Clean up empty cgroups 2024-09-20 09:20:44 -07:00
Tom Mortensen
4a4983f7c5 rc.S: reboot should not invoke shutdown 2024-09-20 09:20:44 -07:00
tom mortensen
dcfaa1afa0 Merge pull request #1866 from SimonFair/VM-ZFS-Fixes
Fix VM usage stats value if timer > 1 sec.
2024-09-20 09:19:46 -07:00
SimonFair
e52813b626 Divide net and disk values by timer 2024-09-19 22:16:00 +01:00
tom mortensen
760aac71df Merge pull request #1863 from dlandon/default_array_file_system_message
Change default file system text.
2024-09-16 14:58:28 -07:00
tom mortensen
20ef176665 Merge pull request #1862 from ich777/patch-4
Fix for rc.docker for interfaces with higher index than 0
2024-09-16 14:57:48 -07:00
tom mortensen
66d7193dab Merge pull request #1858 from ich777/rc.sshd_fix
Only kill sshd from host
2024-09-16 14:56:54 -07:00
tom mortensen
9c9c79b1b3 Merge pull request #1857 from ich777/ich777-docker-container-network
Allow users to select Container networks in the WebUI
2024-09-16 14:55:54 -07:00
tom mortensen
8aac4ee119 Merge pull request #1856 from desertwitch/patch-1
en_US/helptext.txt: Fix broken link in GUI
2024-09-16 14:55:00 -07:00
tom mortensen
8120959c2f Merge pull request #1854 from desertwitch/fix-php-warning
dynamix/include/SysDevs.php: fix PHP warnings
2024-09-16 14:54:20 -07:00
tom mortensen
72abe50721 Merge pull request #1853 from Commifreak/libvirt-log-timeout-info
Add a log line noting how long we wait currently for a VM action.
2024-09-16 14:52:55 -07:00
tom mortensen
18e37ed045 Merge pull request #1852 from dkaser/tailscale-nginx
Add fastcgi_path_info to default nginx configuration
2024-09-16 14:51:36 -07:00
tom mortensen
6845c007a7 Merge pull request #1851 from ich777/page-builder-fix
Fix issue with plugin icons
2024-09-16 14:50:50 -07:00
tom mortensen
b844f941d0 Merge pull request #1850 from unraid/add-ts-certs
Add support for Tailscale certs in the webgui
2024-09-16 14:49:59 -07:00
tom mortensen
5883e767aa Merge pull request #1849 from dlandon/parity-check-shows-incorrect-results
Parity check wrong again.
2024-09-16 14:46:15 -07:00
tom mortensen
efc4fa2673 Merge pull request #1848 from ich777/ich777-not-dockerman-managed
Correctly identify/show non dockerman Managed containers
2024-09-16 14:45:11 -07:00
tom mortensen
0810fc5bd8 Merge pull request #1847 from SimonFair/VM-ZFS-Fixes
VM ZFS  dataset removal processing additional fixes
2024-09-16 14:44:14 -07:00
tom mortensen
897365a5de Merge pull request #1845 from Squidly271/patch-42
Adjust URL for CA installation
2024-09-16 14:42:52 -07:00
dlandon
8d628aad4f Change default file system text. 2024-09-13 11:47:57 -05:00
e3c4ff280d Small fix 2024-09-12 23:33:27 +02:00
19de7c1979 Fix for rc.docker for interfaces with higher index than 0
- Fix error in first if condition which always returned `false`
- Change name from variables so that it a bit easier to read
- Make sure that custom interfaces with a higher index then 0 are properly rebuilt
2024-09-12 23:12:03 +02:00
5ec695921a Fix sshd_update logic 2024-09-11 07:39:34 +02:00
171a77feec Change function
- return `1` if daemon is running and return `0` if it is not running
2024-09-11 07:38:15 +02:00
3e29f0b8b8 Only kill sshd from host 2024-09-10 22:32:07 +02:00
b62c8f5a12 Update Helpers.php 2024-09-09 17:09:15 +02:00
e9faee0d27 Update CreateDocker.php 2024-09-09 17:07:43 +02:00
Rysz
16823d07b1 en_US/helptext.txt: Fix broken link 2024-09-09 06:56:35 +02:00
desertwitch
73705b71fa dynamix/include/SysDevs.php: fix PHP warnings
test for exec-returned variable existence before usage
2024-09-08 20:21:18 +02:00
Robin Kluth
6b31532688 Add a log line noting how long we wait currently for a VM action. 2024-09-06 15:46:06 +02:00
Derek Kaser
039c798b43 Add fastcgi_path_info to default nginx configuration 2024-09-05 22:00:20 +00:00
1e43abc785 Fix issue with plugin icons
- make sure the maximum icon size for a plugin is 18x18px
2024-09-05 10:16:51 +02:00
ljm42
9b1081d2e1 Add support for Tailscale certs in the webgui 2024-09-04 21:37:08 -07:00
SimonFair
c27e018fdb Reduce Multifunction starting bus. 2024-09-04 21:11:44 +01:00
dlandon
ef5067584b Change file_put_contents_atomic() back to file_put_contents() since it is liable to change. 2024-09-04 12:34:23 -05:00
SimonFair
4ea425411a Add disable rename if snapshots found. 2024-09-03 21:45:50 +01:00
dlandon
24bdc5169d Parity check wrong again. 2024-09-03 15:36:12 -05:00
SimonFair
753d87c690 Additional VM ZFS delete fixes 2024-09-02 18:03:10 +01:00
07d02f579f Add files via upload 2024-09-02 17:48:25 +02:00
SimonFair
ceb97ab392 Disable dataset processing. 2024-09-01 21:17:05 +01:00
Squidly271
6a15afa2a8 Update Apps.page 2024-09-01 15:57:02 -04:00
tom mortensen
175d24afd2 Merge pull request #1842 from dlandon/rework-share-list
Fix condition where useCache is 'no' when there is no array.
2024-08-30 13:00:58 -07:00
Tom Mortensen
12828eec63 stop ntpd from complaining about multiple IP addresses 2024-08-30 09:04:48 -07:00
dlandon
156599031a Fix condition where useCache is 'no' when there is no array. 2024-08-30 07:25:33 -05:00
tom mortensen
15f4138c87 Merge pull request #1839 from SimonFair/VM-ZFS-Fixes
ZFS fixes
2024-08-29 11:58:12 -07:00
tom mortensen
fd6e4f1ba1 Merge pull request #1840 from dlandon/rework-share-list
Fix share list.
2024-08-29 11:57:17 -07:00
tom mortensen
72a47035ef Merge pull request #1841 from dlandon/rename-pool-message
Add warning message to rename pool dialog.
2024-08-29 11:55:57 -07:00
dlandon
d57bf205fa Add warning message to rename pool dialog. 2024-08-29 13:23:38 -05:00
dlandon
16a8e7092d Fix share list not showing invalid storage configurations and some code cleanup. 2024-08-29 13:00:06 -05:00
SimonFair
00b1f77742 ZFS fixes 2024-08-29 17:45:00 +01:00
Tom Mortensen
506270e413 Fixes zfs subpool creation issue.
Fixes DeviceInfo not populating for array devices when Started.
2024-08-29 02:04:38 -07:00
Tom Mortensen
303c76d7da rc.nfsd: the 'update' method only causes re-read of /etc/exports 2024-08-29 02:03:51 -07:00
Tom Mortensen
73ea1bb7b3 remove deprecated check 2024-08-29 02:02:55 -07:00
tom mortensen
9d4ca6a2c9 Merge pull request #1837 from ich777/docker_fix
Make sure to not show internal IP from stopped containers
2024-08-29 01:25:29 -07:00
49b82d0eb8 Make sure to not show internal IP from stopped containers 2024-08-28 20:33:25 +02:00
tom mortensen
106f155ecc Merge pull request #1835 from donbuehl/feature/1832
Feature Request: Use user's actual shell in OpenTerminal.php #1832
2024-08-27 21:14:52 -07:00
donbuehl
53704b58aa Final minimal viable solution 2024-08-27 21:43:46 +02:00
tom mortensen
da9add3637 Merge pull request #1836 from desertwitch/feature-default-file
update.php: add two optional methods to define defaults
2024-08-27 12:18:16 -07:00
donbuehl
db77c13552 MVP solution for zsh plugin
Implemented a minimal viable solution for the zsh plugin:
- Checks if the shell is /bin/zsh
- Falls back to bash if not

This approach prioritizes simplicity and reliability over a more general solution to avoid potential errors.
2024-08-26 14:29:24 +02:00
donbuehl
be22c0e1f8 Simplify shell detection for openterminal 2024-08-25 15:44:28 +02:00
donbuehl
cd9d20eaf3 Simplify shell detection for openterminal 2024-08-25 15:19:53 +02:00
Rysz
c4afbba9bc update.php: do not silence parse errors 2024-08-25 13:16:36 +02:00
Rysz
16089cd927 update.php: shorten var name and improve documentation 2024-08-25 13:13:26 +02:00
Rysz
1ede8e621b update.php: remove unneeded spaces 2024-08-25 08:43:54 +02:00
Rysz
64ead9a127 update.php: additional safeguards 2024-08-25 08:28:40 +02:00
Rysz
ff80906d11 update.php: add #defaultvalues parameter 2024-08-25 07:36:23 +02:00
tom mortensen
8981e8bb15 Merge pull request #1834 from ich777/grub_cpuisolation_fix
GRUB compatibility changes
2024-08-24 09:18:04 -07:00
tom mortensen
83675005d2 Merge pull request #1833 from SimonFair/VM-Unmap-support
Fix vmusage stopping/Unmap Defaults and Fix Multifunction.
2024-08-24 09:17:10 -07:00
SimonFair
4b7f2bfcee Default new disk to unmap. 2024-08-23 07:30:11 +01:00
SimonFair
72ff3c52c0 Unmap Default and Multifuncton
Set default for new VMs to discard="unmap"
Fix BSOD for VMs and Multifunction.
2024-08-22 23:24:18 +01:00
Tom Mortensen
69e11713e5 Dashboard: Soften messages during parity sync/check 2024-08-21 23:28:44 -07:00
desertwitch
67cf2db493 update.php: clarify paths in documentation 2024-08-21 12:38:40 +02:00
desertwitch
631479d27d update.php: follow #file behavior for more versatility 2024-08-21 12:36:56 +02:00
desertwitch
28b3d2ae71 update.php: clarify documentation comment 2024-08-21 12:02:09 +02:00
desertwitch
ec1689dc68 update.php: null coalescing to elvis operator 2024-08-21 11:11:47 +02:00
desertwitch
3615992dc4 update.php: add #defaultfile parameter 2024-08-21 10:51:37 +02:00
d9f83cc76b Fix diagnostics to support GRUB 2024-08-21 07:54:31 +02:00
donbuehl
7e6ad9512d Wrap getUserShell() call with escapeshellarg() for additional security 2024-08-20 09:08:31 +02:00
donbuehl
d7b4dfd44b Fixed missing $ in variable 2024-08-19 22:14:46 +02:00
donbuehl
c62ef28fc3 Refactor getUserShell() for improved clarity and maintainability
- Introduce  variable for better code readability
- Simplify return logic using the default shell variable
- Maintain comprehensive error handling with Throwable
2024-08-19 22:06:41 +02:00
donbuehl
07fa790411 Improve getUserShell() function for accuracy and consistency
- Refine username matching to prevent partial matches
- Use English for syslog error message
2024-08-19 21:49:31 +02:00
donbuehl
fb19a99ad4 Added function getUserShell() to OpenTerminal.php and use it for the execution 2024-08-19 18:16:38 +02:00
d0dcf6c314 Fix for GRUB bootloader 2024-08-19 16:58:31 +02:00
0d925a2471 Fix for GRUB bootloader 2024-08-19 16:54:19 +02:00
SimonFair
2b4eb1abad Fix vmusage stopping when you on a new page on a tab. 2024-08-19 13:16:50 +01:00
tom mortensen
251881d850 Merge pull request #1831 from SimonFair/VM-Unmap-support
Add Unmap Support
2024-08-18 10:34:35 -07:00
tom mortensen
24fce7582c Merge pull request #1828 from mtongnz/network-display-improvements
Network info display improvements (part 2)
2024-08-17 08:28:45 -07:00
SimonFair
b56f3e529c Add Discard option. 2024-08-17 00:34:52 +01:00
tom mortensen
130e3fcd44 Merge pull request #1829 from desertwitch/fix-php-settings
fix inconsistent PHP error reporting defaults (PHPSettings.page)
2024-08-16 09:15:35 -07:00
mtongnz
c1b2bb7435 fix: better display of container LAN IP for ipvlan & macvlan 2024-08-16 18:20:10 +12:00
mtongnz
840e19d322 fix: some networks not showing 2024-08-16 17:35:22 +12:00
SimonFair
2ae85fdd31 Add unmap on VM change. 2024-08-15 22:36:15 +01:00
SimonFair
0db0032648 Add Unmap Support 2024-08-15 19:29:20 +01:00
desertwitch
8d9e2a04c0 PHP constants for better read-/maintainability 2024-08-15 16:49:32 +02:00
desertwitch
31f81349a8 sanitize PHP setting constants for update.php
update.php encapsulates the PHP constants used by the OS default PHP error reporting level with double quotes, which breaks functionality as they are then treated as text. by turning the PHP constants into strings first this problem is avoided.
2024-08-15 16:29:45 +02:00
desertwitch
3de8e05432 fix inconsistent PHP error reporting defaults 2024-08-15 14:08:58 +02:00
Matt
1c019c8f08 fix: display LAN:IP for multiple external networks 2024-08-15 18:50:44 +12:00
Matt
8d76d6f1cc fix: display multiple networks for all types
This commit ensures containers with multiple networks are always displayed.
Previously, networks connected to containers (docker network connect...) don't show
2024-08-15 15:55:01 +12:00
tom mortensen
3e17f35e19 Merge pull request #1826 from zackspear/refactor/registration-page-transfer-ineligible-copy
refactor: registration transfer check ineligible copy
2024-08-14 11:15:46 -07:00
Zack Spear
6f51589547 refactor: registration page transfer check ineligible copy 2024-08-13 17:28:29 -07:00
Zack Spear
b18e734381 chore: update .gitignore for prettier usage 2024-08-13 17:27:26 -07:00
tom mortensen
b5a8223ffe Merge pull request #1820 from Garbee/ssh-key-regex
feat(user-edit): update allowed ssh key encryptions
2024-08-13 12:46:39 -07:00
tom mortensen
936adea879 Merge pull request #1824 from unraid/fix-typo
Fix typo in help text
2024-08-13 12:44:31 -07:00
tom mortensen
1572378824 Merge pull request #1822 from SimonFair/VM-Manager-PHP-Fixes
Add ZFS Checking
2024-08-13 12:39:12 -07:00
Tom Mortensen
0cf3585a0d update error messsage 2024-08-13 12:37:57 -07:00
Tom Mortensen
3f103f2089 DeviceInfo page improvements:
* Present confirmation dialog for Delete Pool operation
* Fix expansion of single device pool to multi-device zfs mirror or btrfs raid-1
2024-08-13 12:28:28 -07:00
Tom Mortensen
ed308c3a69 Display warning along side replacement and expansion devivces on Main if they will be initialized 2024-08-13 12:28:28 -07:00
Tom Mortensen
985d077af5 Samba smb.conf: set "nmbd bind explicit broadcast = no" if NetBIOS enabled 2024-08-13 12:28:28 -07:00
Tom Mortensen
86b8b170d1 Startup improvements in rc.S script:
* Automatically repair boot sector backup
* Detect bad root value in syslinux.cfg
* Explicitly unmount all file systems if cannot continue boot
2024-08-13 12:28:28 -07:00
Tom Mortensen
d351e51f58 remove wol source 2024-08-13 12:28:28 -07:00
tom mortensen
53c1788580 Merge pull request #1821 from Garbee/remove-document-write
fix: replace document write usages
2024-08-13 12:27:42 -07:00
tom mortensen
0870461731 Merge pull request #1818 from ich777/grub_vm_settings_fix
Grub VM settings fix
2024-08-13 10:27:49 -07:00
ljm42
043d2baaf7 Fix typo in help text 2024-08-12 12:21:57 -07:00
SimonFair
32bb9bb6d9 Add ZFS Checking
This will check VM name does not include characters that are not valid for ZFS.
Existing VMs are not modified but will throw error and disable update if invalid characters are found.
2024-08-12 17:18:28 +01:00
Jonathan Garbee
2ff8b77c9d fix: replace document write usages 2024-08-10 15:35:49 +00:00
Jonathan Garbee
654db74167 feat(user-edit): update allowed ssh key encryptions 2024-08-10 14:51:06 +00:00
fb2b66b5b0 Make VM Settings work with grub 2024-08-09 12:38:18 +02:00
663665a61b Make VM Settings work when using GRUB 2024-08-09 12:37:00 +02:00
tom mortensen
c9333ea955 Merge pull request #1616 from mtongnz/network-display-improvements
Network info display improvements
2024-08-08 23:16:15 -07:00
tom mortensen
bad23e7647 Merge pull request #1817 from dlandon/master
Sort users in natural order on shares page.
2024-08-08 09:48:11 -07:00
17909f889e Fix PHP Warning (#3)
- Fix PHP Warnings on Add Container page
2024-08-08 20:32:38 +12:00
8cabad6f0d Changes (#2)
* Changes

- Revert commit #ed5fe721d9cdfeb65148a5f12eebdf35729e1dfb
- Fix php errors

* Update DockerContainers.page

- Change `External IP:Port` to `LAN IP:Port`
2024-08-08 16:58:58 +12:00
dlandon
566113f86c Sort users in natural order. 2024-08-07 16:56:09 -05:00
tom mortensen
21e640184e Merge pull request #1814 from suzukua/master
Fixed an issue where routes could not be saved in languages ​​other t…
2024-08-07 10:07:55 -07:00
suzuki
202196f7d3 Fixed an issue where routes could not be saved in languages ​​other than English
fix  https://forums.unraid.net/bug-reports/stable-releases/%E3%80%9061211%E3%80%91%E3%80%90bug%E3%80%91cannot-save-static-route-r3156/
2024-08-03 22:17:51 +08:00
9c2aa45751 Minor improvements (#1)
* few changes, please test

* Change weird formatting

* Another formatting change

* Fix for `container:` networks

* Hide IPs/Ports when container is not running

* WebUI fix

- generate WebUI links correctly
- don't show WebUI from containers which use a `container:` network
2024-08-03 17:39:00 +12:00
ljm42
33a73b2fb5 Forcibly kill samba if needed 2024-08-02 10:33:34 -07:00
tom mortensen
06735f7a3e Merge pull request #1805 from SimonFair/VM-Manager-PHP-Fixes
Fix delete VM if in a dataset.
2024-08-01 14:18:51 -07:00
tom mortensen
e7f7ef43c0 Merge pull request #1809 from desertwitch/patch-1
update.php: release file pointer after usage
2024-08-01 14:13:53 -07:00
tom mortensen
c5b692e805 Merge pull request #1808 from ich777/overlay2-gui-support
Overlay2 GUI support
2024-08-01 12:30:57 -07:00
SimonFair
6a91f270e3 Fix Audio and PCI for Mutlifunction. 2024-08-01 19:13:14 +01:00
Rysz
6d3a7a3298 release file pointer after usage 2024-08-01 10:53:47 +02:00
f81118ffe3 Remove unnecessary comment 2024-07-31 21:33:50 +02:00
f9107ebe11 Always display storage driver when Docker is active 2024-07-31 12:02:05 +02:00
76f58d2995 overlay2 default 2024-07-31 11:05:54 +02:00
b4722f57aa Set default backingfs type to native for existing installations 2024-07-31 10:59:38 +02:00
3314860d31 Change the default to overlay2 2024-07-31 10:56:03 +02:00
9a6b62ae98 Bugfix for new installations 2024-07-31 10:55:30 +02:00
e0b1612633 Add helptext for docker storage driver when active 2024-07-30 21:26:54 +02:00
1e41ac637d Bugfix for helptexts 2024-07-30 21:26:10 +02:00
858a3aa999 Display storage driver with started array 2024-07-30 21:19:57 +02:00
79c484e2e5 Add helptext for Docker storage driver 2024-07-30 19:22:40 +02:00
49793ff602 Add DOCKER_BACKINGFS with native option 2024-07-30 19:07:49 +02:00
342619a567 Add WebUI option for overlay2
- switch between native and overlay2 storage drivers
2024-07-30 19:05:39 +02:00
mtongnz
27047c8832 fix: improve IP & port display further as per suggestions 2024-07-28 11:18:31 +12:00
tom mortensen
b850940f19 Merge pull request #1793 from jbtwo/fix-ups-settings-page
Fix UPS settings page when config contains empty values
2024-07-27 01:11:47 -07:00
tom mortensen
de3334b0d2 Merge pull request #1803 from bergware/master
Fix broken "show_interfaces" script (take 2)
2024-07-27 01:11:10 -07:00
tom mortensen
373bb9f2ee Merge pull request #1804 from unraid/detect-bad-root-in-syslinux
Detect bad root value in syslinux.cfg
2024-07-27 01:10:26 -07:00
bergware
833194705c Merge remote-tracking branch 'upstream/master' 2024-07-25 18:39:11 +02:00
Justin Brown
392cc77a20 switch to _var function for setting batteryLevel & batteryRuntime 2024-07-24 16:57:35 -04:00
SimonFair
d272bf78ac Fix delete VM if in a dataset. 2024-07-24 21:20:06 +01:00
ljm42
9430366eaf Detect bad root value in syslinux.cfg 2024-07-24 10:58:15 -07:00
bergware
71dc414592 Fix broken "show_interfaces" script (take 2) 2024-07-24 13:57:00 +02:00
Tom Mortensen
2b41f9a8d2 Device Info page:
* Prevent reducing pool slot count unless pool state is NEW_ARRAY
* Permit changing pool file system type only when Stopped
* Add "Delete Pool" button which unassigns all devices of a pool and then removes the pool
* Change button label "Erase" to "Erase Pool"
2024-07-24 02:13:22 -07:00
Tom Mortensen
70c01ec454 Include subpool devices in list of devices to be formatted when appropriate 2024-07-24 02:12:58 -07:00
Tom Mortensen
7840ae6d3c new handling of 'ntp.conf' and 'ntp.conf-' (similar to exports) 2024-07-24 00:41:27 -07:00
Tom Mortensen
5b009dfb39 remove unnecessary symlinks 2024-07-24 00:41:27 -07:00
tom mortensen
5565c02f74 Merge pull request #1796 from desertwitch/desertwitch-patch-1
fix table order breaking when cookie is left malformed
2024-07-24 00:37:19 -07:00
tom mortensen
793289bc7f Merge pull request #1792 from dlandon/master
Fix overlapping text on VPN Manager page; php warning; allow UD disks to show in file picker.
2024-07-24 00:31:21 -07:00
tom mortensen
7d92761860 Merge pull request #1797 from SimonFair/VM-Manager-PHP-Fixes
Fix memory Stats in VM Usage.
2024-07-24 00:29:01 -07:00
tom mortensen
1021adc33b Merge pull request #1799 from dlandon/diagnostocs-ipv6-fix
Diagnostics ipv6 fix
2024-07-24 00:28:11 -07:00
tom mortensen
c9374f7911 Merge pull request #1800 from unraid/use-docs-go-links
Use "go links" when linking to Docs
2024-07-24 00:27:20 -07:00
tom mortensen
73a17a0306 Merge pull request #1802 from bergware/master
Fix broken "show_interface" script
2024-07-24 00:26:44 -07:00
bergware
0729386af9 Fix broken "show_interface" script 2024-07-23 19:41:02 +02:00
bergware
4b8ec6e5a3 Fix broken "show_interface" script 2024-07-23 19:34:40 +02:00
dlandon
ea2fa8a8db Chmod on non-existent file causing php warning. 2024-07-22 09:58:06 -05:00
dlandon
d7e474257c Allow UD disks to be listed in file picker. 2024-07-21 04:55:49 -05:00
mtongnz
4b3e8f2d46 fix: handle webUI link generation correctly 2024-07-20 13:23:56 +12:00
mtongnz
54a6e3dd13 fix: better display of ip & ports to avoid beginner confusion - from suggestions by @ich777 2024-07-20 12:04:30 +12:00
SimonFair
e20f37d936 Update emhttp/plugins/dynamix/nchan/vm_dashusage
Co-authored-by: Shay Levy <levyshay1@gmail.com>
2024-07-19 21:04:17 +01:00
ljm42
4c1c566e78 Add trailing slash to go links
Eliminates an unnecessary redirect
2024-07-19 12:02:00 -07:00
ljm42
a6c50b208a Add trailing slash to go links
Eliminates an unnecessary redirect
2024-07-19 12:00:36 -07:00
SimonFair
9a23761dc8 Update vm_dashusage 2024-07-19 19:44:59 +01:00
dlandon
359334b85a Fix another php error. 2024-07-19 12:55:45 -05:00
SimonFair
f5ed6964dd Update vm_usage 2024-07-19 18:55:03 +01:00
SimonFair
882ee7f911 Hide Max if Current and Max are equal 2024-07-19 18:30:45 +01:00
ljm42
234a749b7f Use "go links" when linking to Docs 2024-07-19 10:01:50 -07:00
dlandon
a9891f557e Merge branch 'unraid:master' into master 2024-07-19 10:33:48 -05:00
dlandon
04640a5708 Anonimize IPv6 addresses with square braces. 2024-07-19 10:31:06 -05:00
SimonFair
fac92be4d4 Fix memory Stats in VM Usage.
Three columns inuse/Current/Maximum
2024-07-19 14:21:09 +01:00
Rysz
817ed5c1c1 fix table order breaking when cookie is left malformed 2024-07-18 22:13:13 +02:00
Tom Mortensen
a4abe0fa55 update firefox symlink 2024-07-18 12:14:35 -07:00
dlandon
6920542d6c Merge branch 'unraid:master' into master 2024-07-18 06:14:40 -05:00
Justin Brown
36f9e7402c fix UPS settings page when config contains empty values 2024-07-16 19:32:30 -04:00
dlandon
cfa547972e Fix overlapping text on VPN Manager page. 2024-07-16 13:24:15 -05:00
tom mortensen
84b5baf402 Merge pull request #1791 from ich777/docker-dashboard-patch
Show Docker RAM usage on Dashboard & minor changes
2024-07-16 10:01:16 -07:00
tom mortensen
1b162e2c21 Merge pull request #1790 from dlandon/master
Fix php warning in device_list; VPN Manager not showing tunnel status.
2024-07-16 10:00:44 -07:00
tom mortensen
75f0c2e4f6 Merge pull request #1788 from ich777/initial-overlay2-support
Initial Docker overlay2 support
2024-07-16 09:59:39 -07:00
tom mortensen
67369622fa Merge pull request #1787 from ich777/ipv6-forward
Add IPv6 forward rule
2024-07-16 09:58:49 -07:00
tom mortensen
17fdfb6f50 Merge pull request #1786 from ich777/proxy-fix
fix path
2024-07-16 09:58:10 -07:00
tom mortensen
9e80fb13c7 Merge pull request #1783 from SimonFair/VM-Manager-PHP-Fixes
Move restore favorites after plugin installs + VM Template formatting for PCI others
2024-07-16 09:57:34 -07:00
tom mortensen
1d6c3f4375 Merge pull request #1782 from zackspear/fix/vm-icon-edit
fix: AddVM & UpdateVM icon selection styles
2024-07-16 09:57:10 -07:00
58c31f4ef6 Show Docker RAM usage on Dashboard
- Add Docker RAM usage to Dashbaord page
- Rename 'Services' to 'System'
- Remove 'usage' suffix from Services naming scheme
2024-07-16 13:57:21 +02:00
dlandon
84b767ddcd Fix php[ warning. 2024-07-15 17:32:11 -05:00
dlandon
32d3f88b44 VPN Manager not showing tunnel status. 2024-07-15 17:28:20 -05:00
Zack Spear
6156a2582f fix: UpdateVM.css temlpate img chooser 2024-07-15 13:43:22 -07:00
SimonFair
8a55228b8e Update VMedit.php 2024-07-15 18:59:56 +01:00
SimonFair
fe7ab1fc43 FIX Issue with VM Template formatting for other PCI 2024-07-15 18:41:29 +01:00
30492ed2f2 Initial Docker overlay2 support
- override filesystem type to overlay2 if `DOCKER_BACKINGFS` in docker.cfg is set to `overlay2`
2024-07-15 17:40:10 +02:00
da1ef5c0e0 IPv6 forward
- Add `IPV6_FORWARD` to rc.docker and set it to `ACCEPT` instead of `DROP`
2024-07-15 17:22:48 +02:00
93054c2091 fix path
- fix path for generated proxy file
2024-07-15 15:47:50 +02:00
SimonFair
f2abfaf292 Move restore favorites after plugin installs 2024-07-13 15:33:37 +01:00
Zack Spear
5a42314c60 fix: AddVM & UpdateVM icon selection styles 2024-07-12 14:55:00 -07:00
Tom Mortensen
bbed6047e3 Introduce 'Allocation profile' config setting for specifying pool/subpool data layout
Fix: spindown delay setting missing for parity devices
2024-07-12 11:53:32 -07:00
Tom Mortensen
a7f6ac7389 maybe needed in future 2024-07-10 23:01:09 -07:00
Tom Mortensen
f7748f7619 make executable 2024-07-10 23:00:20 -07:00
Tom Mortensen
d4968e1b19 simplify display of file system type on Main 2024-07-10 22:59:53 -07:00
Tom Mortensen
fb680469ac fix git glitch which resulted in file not updated 2024-07-10 22:58:42 -07:00
tom mortensen
eaabbec7e0 Merge pull request #1780 from unraid/fix-trim
Make trim consistent between "trim now" and cron job
2024-07-10 21:41:39 -07:00
ljm42
693a0260af Make trim consistent between "Run now" and cron job 2024-07-10 17:59:15 -07:00
tom mortensen
130c9c6373 Merge pull request #1779 from ich777/ich777-agents-fix
Fix for notification agents
2024-07-10 14:22:17 -07:00
73c264e9fe Fix
- Fix PushBits and Pushbullet not showing up
2024-07-10 14:47:06 +02:00
667741129a Fix
- Fix PushBits and Pushbullet not showing up
2024-07-10 14:45:49 +02:00
tom mortensen
42fe45595f Merge pull request #1778 from dlandon/master
Parity check does not show completed on array operations page.
2024-07-09 13:44:58 -07:00
dlandon
ed9b8322d4 Fix clobbering CAs $cfg variable. 2024-07-09 14:57:58 -05:00
dlandon
cfb2daa531 Update help text for PID Limit. 2024-07-09 06:37:58 -05:00
dlandon
694d35b412 Parity check does not show completed on array operations page. 2024-07-09 06:21:29 -05:00
tom mortensen
4011d942ce Merge pull request #1775 from dlandon/master
Mover status button on 'Array Operation' page; Docker PID Limit setting.
2024-07-08 09:27:58 -07:00
tom mortensen
5b95526e84 Merge pull request #1774 from SimonFair/VM-Manager-PHP-Fixes
Updates to rc.apcupsd and VM updates
2024-07-08 09:26:28 -07:00
SimonFair
667418e656 Fix for multiple nics when bridge mode changes. 2024-07-07 15:39:31 +01:00
SimonFair
c0d4e1de1b Support Blockpull and Blockcommit for stopped VMs. 2024-07-07 14:57:04 +01:00
SimonFair
ec7ec769f4 Fix for guest not init display. 2024-07-07 14:27:59 +01:00
dlandon
1524f2d69a Add "Docker PID Limit" to limit docker container PIDs. 2024-07-05 03:47:51 -05:00
dlandon
c9109d61bf Set default value for DOCKER_PID_LIMIT. 2024-07-05 03:47:09 -05:00
dlandon
a9a2b73849 Add help text for PID limit. 2024-07-05 03:46:29 -05:00
Tom Mortensen
b1b76d8ffa set_proxy script moved 2024-07-04 09:31:58 -07:00
SimonFair
891ee6beff Update rc.apcupsd 2024-07-03 22:40:50 +01:00
SimonFair
bd4eb4189b remove config check 2024-07-03 22:39:40 +01:00
dlandon
24fd56fff3 Monitor the var 'shareMoverActive' instead of the mover.pid file. 2024-07-03 16:12:03 -05:00
SimonFair
45d71932a1 Updates to rc.apcupsd 2024-07-03 21:39:51 +01:00
tom mortensen
f8ad3105c7 Merge pull request #1773 from dlandon/master
Parity display on dashboard.
2024-07-03 11:06:19 -07:00
dlandon
a8adba6728 Dashboard doesn't show all of parity status. 2024-07-03 12:19:38 -05:00
tom mortensen
6ab9f0a017 Merge pull request #1772 from dlandon/master
Move set_proxy script; dashboard not showing correct parity info.
2024-07-03 05:50:46 -07:00
dlandon
4904a5021c Dashboard not showing correct parity info. 2024-07-03 05:51:05 -05:00
dlandon
859e697413 Make script executable 2024-07-02 15:49:16 -05:00
dlandon
c60cbb5c6e Move set_proxy script. 2024-07-02 15:37:50 -05:00
tom mortensen
4a3a1f526d Merge pull request #1770 from dlandon/master
Fix tile management showing a blank dialog.
2024-07-02 08:49:23 -07:00
tom mortensen
38758462f7 Merge pull request #1769 from SimonFair/VM-Manager-PHP-Fixes
Fix broken helptext
2024-07-02 08:48:07 -07:00
dlandon
7e8b8e0a0a Fix tile management showing a blank dialog. 2024-07-01 14:33:12 -05:00
Tom Mortensen
2f2f50d178 Imp: Speed things up: use AVAHI reload instead of restart
Reduce size of samba secrets.tdb file when saving to flash.
2024-07-01 12:32:41 -07:00
Tom Mortensen
69d2996c31 Fix: ZFS striped pool shows as raidz, but it's still a stripe 2024-07-01 12:31:38 -07:00
SimonFair
f4a8bf0d81 Fix broken helptext 2024-07-01 20:16:25 +01:00
tom mortensen
9d63b5ecf8 Merge pull request #1768 from dlandon/master
Fix share edit updates failing with languages other that English.
2024-07-01 10:48:04 -07:00
dlandon
95353c143a Fix translation of 'Apply' when performing 'POST' that blocks updating; some code cleanup to combine messages and variable scope. 2024-07-01 12:12:09 -05:00
tom mortensen
925fff60a9 Merge pull request #1767 from SimonFair/VM-Manager-PHP-Fixes
Change to be enabled rather than disabled.
2024-06-30 17:12:48 -07:00
SimonFair
8965860224 Change to be enabled rather than disabled. 2024-06-30 21:03:03 +01:00
tom mortensen
9d15302bf0 Merge pull request #1766 from dlandon/master
Remove debug from share edit used for subpools removed from primary and secondary drop downs; fix incorrect commit.
2024-06-30 10:35:47 -07:00
dlandon
6bb27eec3a Fix incorrect commit to fix exit status not returned. 2024-06-30 12:27:43 -05:00
dlandon
84ad25fe18 Remove debug. 2024-06-30 11:40:59 -05:00
tom mortensen
9f9429424f Merge pull request #1763 from SimonFair/VM-Manager-PHP-Fixes
VM Remove subpools, Disable Favorites.
2024-06-30 08:53:17 -07:00
tom mortensen
04e0fac01c Merge pull request #1765 from dlandon/master
Xfs check not detecting file issues; remove subpools from share edit.
2024-06-30 08:53:01 -07:00
dlandon
27973b8e34 Remove sub pools from available pools in primary and secondary storage. 2024-06-30 09:34:46 -05:00
dlandon
d6f8206275 Merge branch 'master' of https://github.com/dlandon/webgui 2024-06-30 09:26:59 -05:00
dlandon
cd1b4031df Xfs not properly showing issues from exit code. 2024-06-30 09:26:26 -05:00
dlandon
44dfe5a7b1 Revert "Properly show when parity operation is complete."
This reverts commit 1ae58dc360.
2024-06-30 08:34:56 -05:00
dlandon
1ae58dc360 Properly show when parity operation is complete. 2024-06-30 07:49:04 -05:00
dlandon
e0c0440d69 Fix exit status failing that results in xfs issues not being detected. 2024-06-30 07:43:56 -05:00
SimonFair
282cfc41ca VM Remove subpools, Disable Favorites. 2024-06-29 19:29:20 +01:00
dlandon
26f261e93b Merge remote-tracking branch 'upstream/master' 2024-06-29 08:13:47 -05:00
tom mortensen
65e67856bb Merge pull request #1762 from SimonFair/VM-Manager-PHP-Fixes
PHP Fixes and opentab for VM URL
2024-06-28 18:06:49 -07:00
tom mortensen
b73327d4b7 Merge pull request #1761 from dlandon/master
Parity check not showing correct results.
2024-06-28 18:06:09 -07:00
SimonFair
3fdcbf125d PHP Fixes and opentab for VM URL 2024-06-27 20:17:05 +01:00
dlandon
941778d288 Parity check sometimes shows last historical check and not the current parity check just completed. 2024-06-26 16:11:36 -05:00
Tom Mortensen
90cbff0058 Docker and libvirt disabled by default.
Permit removing unRAID array if no devices assigned.
2024-06-24 23:28:52 -07:00
tom mortensen
30b76de196 Merge pull request #1760 from dlandon/master
Fix Syslog memory error on large log files and php warning.
2024-06-24 11:05:59 -07:00
dlandon
7f681fe2fa Fix php warning about undefined variable. 2024-06-23 06:39:36 -05:00
dlandon
72651576f4 Increase memory limit to handle large log files. 2024-06-23 06:39:01 -05:00
dlandon
2ea62cca3d Merge remote-tracking branch 'upstream/master' 2024-06-19 07:57:52 -05:00
Tom Mortensen
20f34bc0b9 mover: bettern handling cases of primary/secondary configured but not present 2024-06-18 11:15:40 -07:00
tom mortensen
c2a4e68196 Merge pull request #1758 from dlandon/master
Minor Device Info page fixes.
2024-06-17 11:17:54 -07:00
tom mortensen
b75c420ce0 Merge pull request #1759 from othyn/master
Behaviour fix for #1743 : "Add in the ability to set a manual UPS capacity override in `dynamix.apcupsd`"
2024-06-17 11:17:21 -07:00
Ben
da18a7e213 Re-implementation of #1743 based on the received feedback. This implementation is far more robust, as it injects the NOMPOWER value into the existing code, allowing the existing Unraid GUI code to interpret and display the values in the same manner 2024-06-15 11:17:48 +01:00
dlandon
f6ae173275 xfs_repair not running in the background. 2024-06-13 07:12:53 -05:00
dlandon
dd9474ef55 Can only show zfs pool information when disk is mounted. 2024-06-13 06:42:48 -05:00
tom mortensen
7512161e1a Merge pull request #1757 from dlandon/master
Zfs pool information and fix btrfs stats and usage displays and CPU pinning post too many variables php error.
2024-06-11 09:33:54 -07:00
tom mortensen
68fe9a9399 Merge pull request #1756 from SimonFair/VM-GUI-XML-inline-edit
Fix typo in helptext.
2024-06-11 09:33:31 -07:00
tom mortensen
78826be39d Merge pull request #1755 from Squidly271/patch-41
Update Lincstation icon + add Laptop
2024-06-11 09:33:15 -07:00
dlandon
c4eff321f2 Use atomic file write. 2024-06-10 13:21:00 -05:00
dlandon
6d2de179a0 Update DeviceInfo.page 2024-06-10 12:59:57 -05:00
dlandon
1da8308b81 Revert "Update DeviceInfo.page"
This reverts commit 243b838d80.
2024-06-10 12:47:32 -05:00
dlandon
243b838d80 Update DeviceInfo.page 2024-06-10 12:39:30 -05:00
dlandon
f93095d552 Update UpdateTwo.php 2024-06-10 12:36:14 -05:00
dlandon
eed5a94d03 Fix php error of too many variables in post. 2024-06-10 09:50:09 -05:00
dlandon
5c33796801 Merge remote-tracking branch 'upstream/master' 2024-06-10 03:50:40 -05:00
dlandon
3e1e33094c Add zfs pool information and deal with html special characters. 2024-06-10 03:48:28 -05:00
Squidly271
63d4bab0d1 Update default-cases.css 2024-06-08 08:08:36 -04:00
Squidly271
dbd1c9f7b1 Add laptop to font 2024-06-08 08:07:10 -04:00
SimonFair
446111b0b1 Fix typo in helptext. 2024-06-08 07:25:22 +01:00
Squidly271
be0dcff031 Update cases 2024-06-07 19:11:06 -04:00
Squidly271
cdce8e048a Update default-cases.css 2024-06-07 19:08:27 -04:00
Tom Mortensen
2494d1735e set reasonable defaults for zfs/btrfs fs profiles 2024-06-07 12:33:01 -07:00
Tom Mortensen
8328461cf5 Instead of fs used/free display 'device is part of pool' for zfs subpool devices 2024-06-07 12:32:08 -07:00
dlandon
1cb3134217 Merge remote-tracking branch 'upstream/master' 2024-06-06 16:07:12 -05:00
tom mortensen
18872afdd0 Merge pull request #1754 from dlandon/master
Add more info to btrfs pools and more user friendly xfs repairs.
2024-06-06 10:42:13 -07:00
dlandon
fa5b932c13 Add more info to btrfs pools and more user friendly xfs repairs. 2024-06-05 15:15:37 -05:00
tom mortensen
aa489bb92d Merge pull request #1753 from SimonFair/WebUI
Fix disk device name as string.
2024-06-05 11:42:48 -07:00
SimonFair
22124123a9 Return dev name as string. 2024-06-05 17:17:48 +01:00
tom mortensen
419b9a77e6 Merge pull request #1752 from SimonFair/WebUI
Add nogpu option.
2024-06-04 14:18:35 -07:00
tom mortensen
191f68642c Merge pull request #1743 from othyn/master
Add in the ability to set a manual UPS capacity override in `dynamix.apcupsd`
2024-06-04 14:14:37 -07:00
SimonFair
cfa1ec4860 Add nogpu 2024-06-04 17:39:15 +01:00
tom mortensen
955ba7f0a6 Merge pull request #1750 from SimonFair/WebUI
Create WebUI option in VM Template.
2024-06-03 13:13:34 -07:00
SimonFair
8354a5c6ac Code tidy 2024-06-02 16:14:18 +01:00
SimonFair
392811005c Update text. 2024-06-02 16:02:45 +01:00
SimonFair
b2916424be Add rdp menu option. 2024-06-02 15:06:58 +01:00
SimonFair
b35ce11344 Change get VM IP to a function. 2024-06-02 15:06:11 +01:00
SimonFair
91bc84a97a Replace spaces in VM names 2024-06-01 15:41:23 +01:00
SimonFair
e61132fe69 Create WebUI option for VMs 2024-06-01 15:25:30 +01:00
SimonFair
15af3fb6eb Fix zfs dir create if parent is a dir rather than dataset. 2024-05-31 15:10:24 +01:00
Tom Mortensen
c1493a61d7 fix messaging on Main when array Stopped 2024-05-30 14:39:02 -07:00
tom mortensen
a823ecf79c Merge pull request #1706 from SimonFair/New-VM-interface
New vm interface template with inline xml view
2024-05-30 12:50:12 -07:00
tom mortensen
50a27242ab Merge pull request #1742 from dlandon/master
Fix detection of no mountable devices and detection of an empty share.
2024-05-30 12:49:25 -07:00
tom mortensen
7656c9a55c Merge pull request #1744 from SimonFair/Enable-subvol-or-dataset-for-VMs
Create error message for ZFS with no memory dump.
2024-05-30 12:48:15 -07:00
tom mortensen
15913a6c64 Merge pull request #1745 from unraid/fix-dashboard-buttons
Dashboard: Fix Array Start/Stop buttons
2024-05-30 12:47:29 -07:00
tom mortensen
f8ce0a6e80 Merge pull request #1746 from zackspear/feat/downgrade-os-next-to-stable
feat: downgrade os next to stable
2024-05-30 12:45:02 -07:00
tom mortensen
470e02ed55 Merge pull request #1747 from Squidly271/patch-40
Update file_put_contents_atomic
2024-05-30 12:43:16 -07:00
SimonFair
40ac4fe6fe Disable xmlother 2024-05-30 13:03:14 +01:00
dlandon
ef795438cc Merge remote-tracking branch 'upstream/master' 2024-05-29 06:27:03 -05:00
Squidly271
7a968eac84 Update file_put_contents_atomic 2024-05-28 20:15:20 -04:00
Zack Spear
3ce94f664b feat: downgrade os next to stable 2024-05-28 13:06:05 -07:00
ljm42
5daacf1e97 Dashboard: Fix Array Start/Stop buttons 2024-05-28 12:19:43 -07:00
dlandon
e621ccebb1 Primary only pool needs to use the primary device full size for floor calculations. 2024-05-27 13:38:54 -05:00
Ben
e28d4a32fb Add in the ability to set a manual UPS capacity override in dynamix.apcupsd, so that Nominal Power can still be estimated based on the load percentage for UPS's that don't report their NOMPOWER 2024-05-27 19:19:04 +01:00
dlandon
f6427a3361 Fix logic to determine a share is empty and when no mountable devices found. 2024-05-27 06:51:41 -05:00
dlandon
91e14b22db Fix detection of no mountable devices. 2024-05-27 06:49:52 -05:00
dlandon
095b931dad Code cleanuo. 2024-05-27 06:49:05 -05:00
SimonFair
5303b18462 Update VMedit.php 2024-05-27 11:00:39 +01:00
SimonFair
7bdb5eeb03 Update Custom.form.php 2024-05-27 10:49:32 +01:00
SimonFair
e6ff7a5d7f Updates 2024-05-27 10:43:27 +01:00
SimonFair
4fcf899c5a Merge remote-tracking branch 'upstream/master' into New-VM-interface 2024-05-27 09:12:12 +01:00
SimonFair
d9325649bb Create error message for ZFS with no memory dunp. 2024-05-27 08:59:40 +01:00
Tom Mortensen
0f22fe77e6 support array status ERROR:NO_DEVICES 2024-05-26 12:16:42 -07:00
Tom Mortensen
45c1cab4b5 add mover function to move the shares off a selected array disk onto other array disks 2024-05-26 12:15:49 -07:00
tom mortensen
e29de3c3e5 Merge pull request #1740 from SimonFair/Enable-subvol-or-dataset-for-VMs
VM Bug fixes.
2024-05-26 11:55:32 -07:00
tom mortensen
a757fe0fe6 Merge pull request #1741 from dlandon/master
Fixes from extensive testing.
2024-05-26 10:37:21 -07:00
dlandon
55c79439f3 Add language translation to missing pool messages; correct backwards prefer mover message. 2024-05-26 11:40:46 -05:00
dlandon
32c769e6bd Fixes from extensive testing. 2024-05-26 08:39:31 -05:00
SimonFair
a6c0369444 Fix overwrite of xml if user template name is not changed. 2024-05-26 14:32:35 +01:00
SimonFair
74ee77521e Fix to use template machine type rather than default to windows default i440 2024-05-26 09:21:20 +01:00
SimonFair
290d4da90a Updates to my_mkdir. 2024-05-25 20:24:20 +01:00
SimonFair
efd598c8f8 Fix templates broken by evdevs. 2024-05-25 19:56:43 +01:00
tom mortensen
19be69461e Merge pull request #1739 from unraid/feat-array-optional2
When no array, hide parity check history details
2024-05-24 16:32:51 -07:00
ljm42
cf6f3acb3a When no array, hide parity check history details 2024-05-24 11:34:57 -07:00
tom mortensen
b14922734a Merge pull request #1736 from dlandon/master
Share configuration changes for "array optional" feature and a few bug fixes
2024-05-23 23:12:44 -07:00
tom mortensen
9aa50b1b1d Merge pull request #1737 from SimonFair/Enable-subvol-or-dataset-for-VMs
Update my_mkdir and VMs to use my_mkdir
2024-05-23 23:11:27 -07:00
tom mortensen
24d5ed5f1b Merge pull request #1738 from unraid/fix-notify-subject
Notifications: remove html entities from subject in email/agents
2024-05-23 23:10:56 -07:00
dlandon
a2d35294d3 Floor calculation needs to be based on secondary pool, not primary pool. 2024-05-23 18:49:42 -05:00
ljm42
73b3829d61 Notifications: remove html entities from subject used by email and agents 2024-05-23 16:17:00 -07:00
dlandon
7b568c2aa1 Shares set to 'prefer' when set up in an array will work when no array is configured. 2024-05-23 16:51:01 -05:00
SimonFair
f76337c97f Update VMs to use my_mkdir 2024-05-23 21:43:52 +01:00
dlandon
44e74e15d3 Show all array shares when in poolsOnly mode so user can see the shares that need fixing. 2024-05-23 13:59:11 -05:00
SimonFair
3ec2a92b41 Update my_mkdir 2024-05-23 19:22:29 +01:00
dlandon
e256fa8313 Fixes for dealing with share predefined for array use that are dealt with differently when there are array disks. 2024-05-23 10:57:07 -05:00
dlandon
ad2e98ea46 Handle the case when switching to no array, and an array 'prefer' move setting is set. 2024-05-23 09:32:58 -05:00
dlandon
ed1ee47ce4 Changes to support array optional feature. 2024-05-23 08:44:10 -05:00
dlandon
cce6b7ea92 Change no array detection. 2024-05-23 08:43:31 -05:00
dlandon
1d5ff688ba Change no array detection. 2024-05-23 06:55:13 -05:00
Tom Mortensen
81e48a2291 small array slots dropdown correction 2024-05-22 21:42:06 -07:00
tom mortensen
3deacb643d Merge pull request #1735 from unraid/feat-array-optional
Allow the Array to be optional
2024-05-22 21:04:57 -07:00
ljm42
a4f6b7dcad Allow the Array to be optional 2024-05-22 15:43:58 -07:00
Tom Mortensen
fecd6505af mover: support pool as secondary 2024-05-22 11:00:37 -07:00
SimonFair
6938fbb992 Update libvirt_helpers.php 2024-05-22 17:19:28 +01:00
SimonFair
8d1478a06e Merge remote-tracking branch 'upstream/master' into New-VM-interface 2024-05-22 13:44:15 +01:00
SimonFair
964d083551 Updates 2024-05-22 13:36:35 +01:00
tom mortensen
70a24418b1 Merge pull request #1734 from SimonFair/Snapshot-logging
VM Updates
2024-05-21 09:21:47 -07:00
SimonFair
db094cdf89 Set Virtual GPU default keyboard to no map. 2024-05-20 19:12:11 +01:00
dlandon
05f6afd1a2 Sanitize the model text field. 2024-05-20 11:23:16 -05:00
SimonFair
3e37b4a27d Fix for snapshot removal if active volume and vm has spaces in name. 2024-05-20 17:20:14 +01:00
dlandon
bdc9ef9782 Remove double quote and forward slashes from description. 2024-05-20 08:42:43 -05:00
SimonFair
215d16af41 Set error if trying to clone VM with snaps. 2024-05-19 16:21:36 +01:00
dlandon
dcb1e43d21 Remove test code. 2024-05-19 08:04:13 -05:00
dlandon
a5cab82c29 Fix detection of unmountable disk when checking for no mountable disks . 2024-05-19 07:05:51 -05:00
Tom Mortensen
280e7a52cd Change zfs profile text 'raid0' to 'stripe' 2024-05-18 18:50:55 -07:00
Tom Mortensen
f0d4c00389 Create meaningful zfs subpool descriptions 2024-05-18 18:50:16 -07:00
tom mortensen
3301357979 Merge pull request #1732 from Squidly271/patch-39
Use atomic writes for updates of config files
2024-05-18 10:42:41 -07:00
tom mortensen
7701f10ef4 Merge pull request #1733 from SimonFair/Snapshot-logging
Fixes for exclusive shares for VM Clone.
2024-05-18 10:41:47 -07:00
SimonFair
ab41b013e2 Fixes for exclusive shares for VM Clone. 2024-05-18 16:04:40 +01:00
Squidly271
04ef869aba Refactor 2024-05-18 10:28:43 -04:00
Squidly271
1be0380f36 Update update.php 2024-05-18 09:46:26 -04:00
Squidly271
8d4c007226 Update Wrappers.php 2024-05-18 09:43:28 -04:00
tom mortensen
f5e5ae2d28 Merge pull request #1731 from SimonFair/Snapshot-logging
Add logging for Revert and Snapshot.
2024-05-17 15:22:31 -07:00
tom mortensen
41363509e2 Merge pull request #1730 from zackspear/feat/web-component-enhancements
feat: web component enhancements – downgrades, updates, and registration
2024-05-17 15:21:53 -07:00
tom mortensen
59835e14eb Merge pull request #1729 from dlandon/master
Fix share floor calculation when the share is array only; fix detection of no mountable devices when adding shares
2024-05-17 15:21:37 -07:00
SimonFair
d6eb51f502 Add logging for Revert and Snapshot. 2024-05-17 19:04:46 +01:00
dlandon
cebe945e81 Refactir siome Java Script code for readability. 2024-05-16 14:42:30 -05:00
dlandon
7532448241 Code cleanup and add safeName() to cleanup up share name before applying settings. 2024-05-16 13:36:40 -05:00
dlandon
f184a79e85 Changes to address proper share floor calculations. 2024-05-16 13:31:00 -05:00
Zack Spear
45308bc7cb feat: web component enhancements 2024-05-14 16:16:26 -07:00
dlandon
e988ef55fc Fix share floor calculation for pool disks. 2024-05-14 09:31:55 -05:00
dlandon
4cf3e39add Add validity check to share floor to limit to manual entry to less than max free on smallest disk. 2024-05-14 05:31:17 -05:00
dlandon
d85d68de2e Exclude disks that have no device designation - disks are not assigned yet. 2024-05-13 18:15:57 -05:00
dlandon
6790400629 Fix share floor calculation when the share is array only. 2024-05-13 13:02:27 -05:00
Tom Mortensen
7f77338b3d remove 'x' bit from ./local/etc/rc.dnsmasq 2024-05-13 10:59:38 -07:00
Tom Mortensen
70d3d5a656 fix: Present warning text for pool replacement devices (that they will be overwritten) 2024-05-13 10:59:04 -07:00
tom mortensen
69bd331d2d Merge pull request #1727 from dlandon/master
Fix detection of no mountable disks available.
2024-05-13 10:02:09 -07:00
tom mortensen
c44beb2eb7 Merge pull request #1728 from SimonFair/Fix-VM-disk-error
Update VMUsageStats.page
2024-05-13 10:01:53 -07:00
SimonFair
2d136461fd Update VMUsageStats.page 2024-05-13 17:38:25 +01:00
dlandon
414dddb008 Fix detection of no mountable disks available. 2024-05-12 20:11:31 -05:00
Tom Mortensen
894bc28aaa Present warning text for pool replacement devices (that they will be overwritten) 2024-05-12 09:55:04 -07:00
tom mortensen
8bf3cae742 Merge pull request #1720 from dlandon/master
Disable "Add Share" button when there are no mountable array disks; disable Reiserfs selections; add multi line NFS Rule.
2024-05-11 21:20:56 -07:00
tom mortensen
86a014f82e Merge pull request #1721 from SimonFair/Fix-VM-disk-error
Fix expand evdev options
2024-05-11 21:18:08 -07:00
tom mortensen
91edca4576 Merge pull request #1724 from Squidly271/agents
Move notication agents to individual xml files
2024-05-11 21:17:23 -07:00
tom mortensen
1c4f5983af Merge pull request #1725 from Squidly271/HearNoEvilSeeNoEvilSpeakNoEvil
Add lincstation n1 to to cases
2024-05-11 21:15:42 -07:00
dlandon
f933c288e9 Add placeholder to help user understand rules. 2024-05-11 08:14:56 -05:00
Squidly271
dd0cf7f2fa Remove semicolon before anyone notices 2024-05-11 08:21:27 -04:00
Squidly271
939a30774a Add lincstation n1 to to cases 2024-05-11 08:17:41 -04:00
dlandon
6234c5edc0 Add multi line Rule. 2024-05-11 04:08:27 -05:00
dlandon
b34fe9838a Disable Reiserfs selections in drop down. 2024-05-11 04:03:44 -05:00
dlandon
f65780a67e Can never schedule a correcting parity check. 2024-05-10 18:54:49 -05:00
dlandon
80e5481de9 Revert "Can never schedule a correcting parity check."
This reverts commit 40c25d9d18.
2024-05-10 18:54:24 -05:00
dlandon
40c25d9d18 Can never schedule a correcting parity check. 2024-05-10 18:20:37 -05:00
SimonFair
5542b65e45 Update VMUsageStats.page 2024-05-10 12:18:38 +01:00
SimonFair
70760a302c Update Custom.form.php 2024-05-09 15:56:56 +01:00
Squidly271
0431343070 Delete emhttp/plugins/dynamix/include/NotificationAgents.xml 2024-05-08 21:01:18 -04:00
Squidly271
32f1c8c3ec Update NotificationAgents.page 2024-05-08 20:57:42 -04:00
Squidly271
8f8da76bf3 Add files via upload 2024-05-08 20:56:47 -04:00
SimonFair
58f5fb269b Fix expand evdev options 2024-05-08 21:09:30 +01:00
dlandon
9a76f69f5d Display message and disable add share button if there are no mountable array disks. 2024-05-08 09:59:41 -05:00
dlandon
dac9d237ee Merge remote-tracking branch 'upstream/master' 2024-05-08 09:43:32 -05:00
tom mortensen
f492ee8f7f Merge pull request #1709 from dlandon/master
Exclude certain folders from the dropdown on /mnt/.
2024-05-07 17:02:27 -07:00
tom mortensen
3cc0bf7e90 Merge pull request #1714 from unraid/fix-curl2
in http_get_contents, detect and recover from curl error 23
2024-05-07 17:02:00 -07:00
tom mortensen
bf92bdb1af Merge pull request #1716 from SimonFair/Fix-VM-disk-error
Various VM Manager Fixes
2024-05-07 17:01:25 -07:00
tom mortensen
7fdb5cb5be Merge pull request #1717 from baumerdev/fix_readfile_on_empty_files
Fix Error 500 on login / fix read file on empty files
2024-05-07 16:59:02 -07:00
SimonFair
c45dd68e08 Update VMUsageStats.page 2024-05-07 20:28:27 +01:00
Markus Baumer
8b5eb3f66d Fix read file on empty files 2024-05-07 20:38:43 +02:00
Tom Mortensen
43ae4c785d passwd file handling correction 2024-05-07 07:36:39 -07:00
ljm42
8da53df357 in http_get_contents, include a useragent 2024-05-06 14:06:40 -07:00
SimonFair
b4a3a90a46 Add evdev passthru. 2024-05-06 20:44:44 +01:00
SimonFair
072e3512e0 Various VM Manager Fixes
Fix VM memory size values on VM Usage
Fix issue with auto showing for QCOW2 files not in a VM path, should be manual
2024-05-06 12:45:41 +01:00
ljm42
ae8feb2dbc in http_get_contents, detect and recover from curl error 23
change from null to "deflate"
2024-05-04 15:58:35 -07:00
tom mortensen
f901cc9d4e Merge pull request #1713 from unraid/fix-add-local-to-hosts
hosts file improvements
2024-05-02 17:36:45 -07:00
ljm42
a8f0e3ec19 When avahidaemon running, add name.local to hosts file 2024-05-02 15:19:49 -07:00
ljm42
2db31b2012 Remove keys.lime-technology.com from hosts file 2024-05-02 14:49:31 -07:00
tom mortensen
85d1a2f6f5 Merge pull request #1705 from almightyYantao/patch-1
Add Wxwork Notification Agent
2024-05-02 14:07:41 -07:00
dlandon
9296e6297c Be sure /mnt/user is available before using it as root in file picker. 2024-05-02 08:39:53 -05:00
dlandon
245e6413cb Exclude folders from /mnt/ and .Recycle.Bin from all folders. 2024-05-02 08:07:27 -05:00
dlandon
4f82b16fdd Revert to minimized version. 2024-05-02 08:06:46 -05:00
dlandon
a90d083cb0 Revert excluded folders. 2024-05-02 08:06:20 -05:00
dlandon
efe372d1d9 Change variables back to the original plugin variables. 2024-05-01 04:58:17 -05:00
tom mortensen
995a95f053 Merge pull request #1712 from ich777/ich777-patch-1
Update rc.S
2024-04-30 22:05:13 -07:00
dlandon
0c32fe5d4d Change root folder on isos to /mnt/user. 2024-04-30 06:24:34 -05:00
f8ff2333bb Update rc.S
- remove wsync from XFS mount to prevent WebGUI from freezing during heavy I/O on /boot
2024-04-30 07:55:28 +02:00
dlandon
ba9bef985c Fix misspelled variable. 2024-04-29 17:58:39 -05:00
Tom Mortensen
45cfa13e14 changes to include '/bin' in repo 2024-04-29 12:43:24 -07:00
tom mortensen
424b5cb121 Merge pull request #1711 from unraid/fix-curl
In http_get_contents, detect and recover from curl error 23
2024-04-29 09:14:53 -07:00
ljm42
d1e5f3bb10 rc.local - be consistent with backup extension 2024-04-28 16:37:39 -07:00
ljm42
e6441a8345 in http_get_contents, detect and recover from curl error 23 2024-04-28 16:12:40 -07:00
tom mortensen
43c71ec2da Merge pull request #1710 from SimonFair/XML-Windows-Size
Fix QEMU command line expanding if no data.
2024-04-28 08:33:56 -07:00
dlandon
33b27f0a71 Put list of folders to be excluded in the file picker dropdown in a php variable for greater flexibility to make changes. 2024-04-27 11:13:59 -05:00
dlandon
90eb25f114 Change commenting. 2024-04-27 06:42:29 -05:00
SimonFair
71f99155b8 Merge remote-tracking branch 'upstream/master' into XML-Windows-Size 2024-04-27 10:09:06 +01:00
SimonFair
cb48e16845 Fix QEMU command line expanding if no data.
Rework of XML mobile page size.
2024-04-27 10:04:10 +01:00
dlandon
ff2328ddca Add pickexclude to file tree operations so folders can be excluded to minimize confusion. 2024-04-26 16:44:18 -05:00
SimonFair
b0680ee1e1 Update VMedit.php 2024-04-26 18:36:41 +01:00
tom mortensen
c8b9f1c9cc Merge pull request #1708 from SimonFair/Add-Support-for-QEMU-override-in-xml
Add qemu:override support
2024-04-26 06:38:40 -07:00
SimonFair
863afd348d Format XML for new VM 2024-04-26 10:15:41 +01:00
SimonFair
ae285176a9 Update WIP 2024-04-26 08:35:02 +01:00
SimonFair
d9588b7c83 Add qemu:override support 2024-04-25 18:53:55 +01:00
tom mortensen
f79f907923 Merge pull request #1707 from SimonFair/XML-Windows-Size
Fix mobile devices VM XML View
2024-04-24 07:30:13 -07:00
SimonFair
a5b7247d88 Fix mobile devices 2024-04-22 22:02:33 +01:00
Tom Mortensen
2a6c09f9c9 better handling of marking form fields 'disabled' 2024-04-22 11:51:07 -07:00
tom mortensen
b8400d4395 Merge pull request #1704 from SimonFair/XML-Windows-Size
Fit XML window to page size
2024-04-21 08:34:02 -07:00
SimonFair
191c067465 Update code 2024-04-21 11:34:09 +01:00
Alimighty.Yantao
511a8e47ac Add Wxwork Notification Agent
新增企业微信消息通知,在国内还是这些用的较多。

The new enterprise wechat message notification is still more used in China.
2024-04-20 17:22:12 +08:00
SimonFair
2bec253098 Update Custom.form.php 2024-04-19 15:25:43 +01:00
SimonFair
b21437cf5c Update Custom.formXML.php 2024-04-15 07:01:09 +01:00
SimonFair
da7749725f Merge remote-tracking branch 'upstream/master' into New-VM-interface 2024-04-13 07:58:36 +01:00
tom mortensen
7cce87baa2 Merge pull request #1695 from dlandon/master
Add password encryption and rewrite set_proxy script in php
2024-04-12 14:01:39 -07:00
tom mortensen
c3d232efc0 Merge pull request #1700 from SimonFair/Show-decimal-on-disk-1TB
Show decimals for vdisk > 1TB
2024-04-12 14:01:23 -07:00
tom mortensen
1b35b145f8 Merge pull request #1701 from unraid/clean-go-script
better go script cleanup
2024-04-12 14:00:52 -07:00
ljm42
7e0f91cb53 Merge branch 'clean-go-script' of https://github.com/unraid/webgui into clean-go-script 2024-04-12 13:44:29 -07:00
ljm42
b7f69da252 change backup extension 2024-04-12 13:43:47 -07:00
ljm42
8f99ba2346 backup go script with random extension
Revert "backup go script with random extension"

This reverts commit f3498bd869e998040685399a2cb198e57809653f.

change backup extension
2024-04-12 13:41:35 -07:00
dlandon
e87a15d439 New location of OutgoingProxy.php. 2024-04-12 14:37:10 -05:00
dlandon
1640e6d2a0 Simpler check for null vALUE. 2024-04-12 14:36:44 -05:00
dlandon
a76a68d4e2 Simpler check for null values. 2024-04-12 14:34:41 -05:00
dlandon
f9398d01c6 Move OutgoingProxy.php file to /include/ folder. 2024-04-12 14:16:56 -05:00
dlandon
56990109f5 Merge pull request #1 from unraid/proxy_tweaks
Proxy tweaks
2024-04-12 13:30:15 -05:00
ljm42
d2e20c4d45 Update location of proxy.cfg 2024-04-12 10:05:24 -07:00
ljm42
21dcf49ad1 fix PHP warning 2024-04-12 09:52:13 -07:00
ljm42
e7648ba08c fix merge error 2024-04-12 09:45:57 -07:00
dlandon
fcb58b1908 Merge branch 'master' into master 2024-04-12 08:04:31 -05:00
dlandon
003d4b86a8 Make script executable 2024-04-12 08:03:11 -05:00
dlandon
28e16fc500 Rewrite set_proxy to php. 2024-04-12 08:00:03 -05:00
dlandon
a5be34d6b9 Revert "Make script executable"
This reverts commit 92a9d2e4c3.
2024-04-12 07:58:12 -05:00
dlandon
92a9d2e4c3 Make script executable 2024-04-12 07:53:48 -05:00
dlandon
22c3ac6061 Changes for set_proxy rewrite. 2024-04-12 07:35:26 -05:00
dlandon
562a1ace79 Changes for set_proxy rewrite. 2024-04-12 07:35:08 -05:00
dlandon
cdedaa9476 Code cleanup. 2024-04-12 07:34:13 -05:00
dlandon
1d35b06539 Remove create_proxy; set_proxy replaces the functionality. 2024-04-12 07:33:50 -05:00
ljm42
80b200950f better go script cleanup 2024-04-11 15:28:54 -07:00
SimonFair
62ea5702ce Add support for decimal values 2024-04-10 23:44:22 +01:00
SimonFair
e9c973baad Show decimals for disk > 1TB 2024-04-10 21:27:24 +01:00
Tom Mortensen
7d85097bce fix: Emulated disk is not clickable 2024-04-09 14:36:26 -07:00
Tom Mortensen
37b41950bb fix: ZFS subpools show up and can be selected in the new permissions tool 2024-04-09 14:35:05 -07:00
Tom Mortensen
9d583f63f0 script to invoke virtiofsd with arguments not supported by libvirt
invoked via this symlink:
/usr/libexec/virtiofsd -> /usr/local/sbin/virtiofsd
2024-04-09 14:33:11 -07:00
tom mortensen
a88d5608af Merge pull request #1697 from SimonFair/VM-Metrics
Fix php error due to typo and if libvirt is not started.
2024-04-08 13:14:25 -07:00
dlandon
1a79fb8cd8 Make scripts executable 2024-04-08 08:23:46 -05:00
SimonFair
bc931a5483 Fix typo in rc.docker 2024-04-07 19:42:42 +01:00
dlandon
e6e74004a3 Rename scripts to be more consistent with Unraid standards. 2024-04-06 11:58:10 -05:00
SimonFair
dc3f03b952 Fix error message on own line 2024-04-06 14:53:20 +01:00
dlandon
bf36603023 Rename config file to prevent confusion. 2024-04-06 08:17:10 -05:00
dlandon
c8967594c7 Remove debug log line. 2024-04-06 08:08:39 -05:00
SimonFair
e0ea112af7 Fix php error due to typo and if libvirt is not started. 2024-04-06 11:09:42 +01:00
mtongnz
ffabb996fc fix: external ports not showing for non-bridge networks 2024-04-06 16:38:02 +13:00
Matt
4a4444229e Apply suggestions from code review
Co-authored-by: FunkeCoder23 <12570656+FunkeCoder23@users.noreply.github.com>
2024-04-06 13:04:22 +13:00
dlandon
5867f6719d Don not include user and pass in the /boot/config/proxy.cfg file. Thgey are not needed by set_proxy. 2024-04-05 12:33:38 -05:00
dlandon
cf69edb57d Key generation fails on first run. 2024-04-05 08:16:03 -05:00
dlandon
1d47440008 Code cleanup. 2024-04-05 08:15:28 -05:00
dlandon
890671f106 Fix typo. 2024-04-04 19:15:56 -05:00
dlandon
a1d486f112 Add password encryption and create_proxy.sh script to create the proxy.cfg file needed by set_proxy. 2024-04-04 13:05:36 -05:00
tom mortensen
bce62bb5e9 Merge pull request #1650 from SimonFair/VM-Metrics
Various VM Manager changes
2024-04-03 15:53:54 -07:00
tom mortensen
7c318c11f1 Merge pull request #1667 from jski/master
Add additional USB device passthrough smartmontools options to webgui
2024-04-03 15:52:37 -07:00
tom mortensen
1447bea75b Merge pull request #1684 from SimonFair/VM-Avoid-spinup-of-ISOS-location-volume
Add spin up check to CD info function.
2024-04-03 15:51:58 -07:00
tom mortensen
fd21e9d6f5 Merge pull request #1685 from unraid/auto-upgrade-proxy
auto upgrade proxy
2024-04-03 15:48:51 -07:00
tom mortensen
a2a598d28d Merge pull request #1690 from unraid/proxy-via-localprepend
Proxy via local_prepend.php
2024-04-03 15:43:52 -07:00
tom mortensen
cc2d969181 Merge pull request #1694 from dlandon/master
Add Outgoing Proxy Manager
2024-04-03 15:43:38 -07:00
dlandon
3790217cec Fix php errors. 2024-04-03 12:43:13 -05:00
dlandon
cde1e4582a Fix menuing. 2024-04-03 11:00:48 -05:00
dlandon
689f0bb697 Add Outgoing Proxy Manager. 2024-04-03 10:38:52 -05:00
tom mortensen
845fb47335 Merge pull request #1691 from SimonFair/Sysdevices-Language-Fix
Fix for sysdrivers.
2024-04-02 08:56:23 -07:00
tom mortensen
641226a49f Merge pull request #1692 from zackspear/refactor/6.13-trial-messaging-replace-pro-with-unleashed
[6.13] refactor: web component translations trial messaging
2024-04-02 08:55:48 -07:00
Zack Spear
ba0eabe9bb refactor: web component translations trial messaging 2024-04-02 09:47:24 +09:00
SimonFair
7738c25e7c Fix for sysdrivers. 2024-04-01 20:49:03 +01:00
ljm42
2f279bc56e Proxy via local_prepend.php 2024-04-01 11:32:46 -07:00
tom mortensen
cab7615a3d Merge pull request #1687 from zackspear/refactor/6.13-trial-messaging-replace-pro-with-unleashed
[6.13] refactor(wc): trial messaging replace pro with unleashed
2024-04-01 09:44:10 -07:00
Zack Spear
558640b10a refactor(wc): trial messaging replace pro with unleashed 2024-04-01 21:58:51 +09:00
SimonFair
38a9b575f7 Make script executable 2024-04-01 09:05:43 +01:00
SimonFair
afd2852fc8 Add virtiofsd pre-processor for wrapper 2024-04-01 09:02:45 +01:00
SimonFair
9ca6b38ecb Create test template 2024-03-31 21:32:30 +01:00
SimonFair
79d8150e56 Initialise DISABLE in qemu script 2024-03-30 08:39:45 +00:00
SimonFair
d635653a49 Update qemu 2024-03-29 11:20:19 +00:00
SimonFair
2d78738cef Add check for memory dump 2024-03-29 11:05:52 +00:00
SimonFair
86b0af8b49 Add descriptive error message if start disabled in settings 2024-03-29 10:59:29 +00:00
SimonFair
c0f79e8929 Add tooltip and * if spundown. 2024-03-29 07:48:33 +00:00
ljm42
5989f372ce auto upgrade proxy - backup first 2024-03-28 19:32:12 -07:00
ljm42
08918b8892 auto upgrade proxy 2024-03-28 17:01:34 -07:00
SimonFair
d5ee50c696 Merge remote-tracking branch 'upstream/master' into VM-Avoid-spinup-of-ISOS-location-volume 2024-03-28 20:46:52 +00:00
Tom Mortensen
02de6b43b4 support 'inelgible' configValid state 2024-03-26 18:22:21 -07:00
Tom Mortensen
3b2ed257da permit file system selection with array Started only if fle system type is 'auto' 2024-03-26 18:22:21 -07:00
tom mortensen
d0a37df768 Merge pull request #1683 from zackspear/feat/6.13-config-error-messaging
[6.13] feat(upc): server config enum messaging
2024-03-26 15:15:07 -07:00
Zack Spear
0710deb304 refactor: config error messages 2024-03-27 01:25:03 +09:00
Zack Spear
c383caf3ff feat(upc): server config enum messaging 2024-03-26 19:46:11 +09:00
tom mortensen
0afb8dd7de Merge pull request #1681 from unraid/curl-improvements
Curl improvements
2024-03-25 08:44:44 -07:00
tom mortensen
afc8834610 Merge pull request #1680 from unraid/add-proxy-2
Proxy enhancements
2024-03-25 08:42:51 -07:00
dlandon
3021a72fd7 Merge remote-tracking branch 'upstream/master' 2024-03-24 22:27:35 -05:00
ljm42
537149f206 Use Curl for network connectivity checks 2024-03-24 14:59:03 -07:00
ljm42
0b7f980e97 introduce http_get_contents wrapper for Curl 2024-03-24 14:17:09 -07:00
ljm42
da32a2ab36 Add proxy env vars to Tools -> Vars 2024-03-23 09:55:28 -07:00
ljm42
a34a2d0de9 set_proxy: only restart php-fpm if it is running 2024-03-23 09:53:01 -07:00
tom mortensen
614826552f Merge pull request #1675 from unraid/add-proxy
Add outgoing proxy support
2024-03-23 08:43:55 -07:00
tom mortensen
5be81cfb8f Merge pull request #1677 from zackspear/fix/6-13-regDevs-usage-for-more-flexibility
[6.13] fix: regDevs usage for more flexibility
2024-03-23 00:10:55 -07:00
tom mortensen
30f49bd3d7 Merge pull request #1678 from unraid/fix-mgmtaccess-php-warnings
Fix PHP warnings on Management Access page
2024-03-23 00:09:39 -07:00
ljm42
e696f98467 Fix PHP warnings on Management Access page 2024-03-21 11:22:35 -07:00
Zack Spear
e47b80a501 fix: regDevs usage 2024-03-21 21:07:31 +09:00
ljm42
d68da6a187 remove special handling for wget, use environment variables instead 2024-03-20 15:31:59 -07:00
ljm42
c6e549ac7d Make executable 2024-03-20 13:48:26 -07:00
ljm42
b69564caed tidy 2024-03-19 11:56:13 -07:00
ljm42
cb84d60e00 Remove special handling for file_get_contents(), use libcurl instead 2024-03-19 11:52:59 -07:00
ljm42
78dcc575d6 tidy 2024-03-18 15:12:31 -07:00
ljm42
ffcb5b11a1 Remove special handling for libcurl, use environment variables instead 2024-03-18 14:44:51 -07:00
ljm42
77bd950c6d remove proxy.ini, use environment variables instead 2024-03-18 14:22:57 -07:00
ljm42
6d379a4dd6 Add outgoing proxy support 2024-03-17 20:23:51 -07:00
SimonFair
a101d2c538 Code optimisation for quicker load. 2024-03-17 11:12:40 +00:00
SimonFair
a15501a2b5 Remove tmp debug files. 2024-03-16 21:34:39 +00:00
SimonFair
f8f6633c1b Disable check boxes for removal if ZFS. 2024-03-16 19:48:11 +00:00
jski
10d590fc66 Fixed two typos, thanks @ljm42 2024-03-16 15:28:20 -04:00
SimonFair
1c23a008b9 Add context menu on VM Usage Panel 2024-03-16 13:40:53 +00:00
tom mortensen
a02a4fbd7a Merge pull request #1673 from zackspear/master
[6.13] refactor(upc): add upgrade button for key state
2024-03-15 14:34:17 -07:00
tom mortensen
8d1438635a Merge pull request #1671 from unraid/fix-notifications
Fix Docker notifications
2024-03-15 14:33:36 -07:00
tom mortensen
19c23dc05b Merge pull request #1669 from SimonFair/Sysdevices-Language-Fix
Fix language issue.
2024-03-15 14:31:31 -07:00
tom mortensen
8bde22106f Merge pull request #1665 from unraid/disable-updatedns2
Disable UpdateDNS
2024-03-15 14:15:51 -07:00
Zack Spear
c222fbb306 refactor(upc): add upgrade button for key state 2024-03-15 13:12:14 -07:00
jski
415cb252e7 Missed one section to add the new settings in DeviceInfo.page 2024-03-14 19:21:59 -04:00
ljm42
a7b1a6c12f Fix Docker notifications
and improve consistency in related files
2024-03-14 14:12:30 -07:00
SimonFair
9bdc64635e Fix language issue. 2024-03-14 19:15:21 +00:00
jski
9524159cf2 Added options for USB passthrough devices on DeviceInfo.page, using info from https://www.smartmontools.org/wiki/USB for smartmontools 7.3 2024-03-14 14:42:42 -04:00
jski
512b9036a6 Added options for USB passthrough devices on DiskSettings.page, using info from https://www.smartmontools.org/wiki/USB for smartmontools 7.3 2024-03-14 14:30:24 -04:00
ljm42
fb856215c3 Disable UpdateDNS 2024-03-13 14:00:17 -07:00
tom mortensen
8e77da0222 Merge pull request #1663 from zackspear/master
refactor(upc): remove UpdateDNS requests on key install
2024-03-13 09:44:58 -07:00
tom mortensen
1228a1976a Merge pull request #1660 from unraid/disable-updatedns
Disable UpdateDNS
2024-03-13 09:44:03 -07:00
tom mortensen
d53598a1fe Merge pull request #1654 from Squidly271/patch-28
Fix PHP8 warnings in Notification Archive
2024-03-13 09:41:47 -07:00
Zack Spear
d8d13805df refactor(upc): remove UpdateDNS requests on key install 2024-03-12 15:12:33 -07:00
ljm42
69fe39720c Disable UpdateDNS 2024-03-12 14:17:35 -07:00
Squidly271
58ec85211a Update notify_poller 2024-03-09 12:53:20 -05:00
Squidly271
8a75747fb4 Update NotificationsArchive.php 2024-03-09 11:29:55 -05:00
Tom Mortensen
cc80a2ad85 rc.libvirt: right after loading kvm module, "echo 0 > /sys/module/kvm/parameters/report_ignored_msrs"
We used to apply a kernel patch to change the default from "Yes" to "No" but this accomplishes the
same thing without having to patch the kernel.
2024-03-08 12:00:42 -08:00
Tom Mortensen
74e3390eeb rc.cpufreq: also default to "performance" for amd-pstate-epp. 2024-03-08 11:56:47 -08:00
tom mortensen
8d48faa815 Merge pull request #1651 from unraid/feat-add-phplog-to-diags
Diagnostics: add phplog
2024-03-08 11:49:18 -08:00
tom mortensen
ddc478dafb Merge pull request #1648 from ich777/mgmtaccess_ipv6_fix
Update ManagementAccess.page
2024-03-08 11:48:22 -08:00
SimonFair
816f3561e6 fix filesystem snap desc 2024-03-08 19:10:35 +00:00
ljm42
b67bd8ab30 Diagnostics: add phplog 2024-03-07 12:48:58 -07:00
SimonFair
f34dfbc79b Change default to QEMU snapshots not Filesystem 2024-03-06 19:20:44 +00:00
533a4171bf Update ManagementAccess.page
- changes as discussed with @ljm42
2024-03-06 17:50:03 +01:00
9d84fedb8e Update ManagementAccess.page
- Fix IPv6 not displaying correctly on Management Access page if using default ports
2024-03-06 12:15:37 +01:00
tom mortensen
20d7b702c5 Merge pull request #1645 from Squidly271/patch-25
Fix Docker Update Issues
2024-03-04 15:01:29 -08:00
tom mortensen
ef27b5057d Merge pull request #1644 from SimonFair/Unraid-Wake-on-LAN
Remove WOL for Services
2024-03-04 15:01:06 -08:00
SimonFair
bb7f657b56 Remove WOL for Services 2024-03-04 19:16:51 +00:00
SimonFair
e2c0990d9d additional changes 2024-03-04 17:17:11 +00:00
Squidly271
b7a00ec600 Fix update issues with docker tab 2024-03-03 12:09:51 -05:00
SimonFair
85fdccecd2 Fix for services not running. 2024-03-02 17:14:48 +00:00
SimonFair
727b36a122 Add option for suspend 2024-03-02 15:59:46 +00:00
SimonFair
9e5043eed1 Fix multiple NICs error 2024-03-02 09:13:17 +00:00
SimonFair
382eb005aa Fix docker help 2024-03-02 08:20:58 +00:00
tom mortensen
846143ed73 Merge pull request #1640 from Commifreak/docker_fix_php_errs
Fix `getDockerJSON`
2024-03-01 11:54:44 -08:00
tom mortensen
de0b17afd4 Merge pull request #1642 from zackspear/master
[6.13] fix: state special chars for html attrs & updates button conditionals + date formatting
2024-02-29 16:35:22 -08:00
Zack Spear
20174e9bce fix(wc): special chars & update os check modal button conditionals + date format 2024-02-29 16:14:39 -08:00
Zack Spear
bcae60182f fix: usage state w/ special chars for html attributes 2024-02-29 16:14:19 -08:00
Zack Spear
46b6d769f6 fix: unraidcheck date format 2024-02-29 16:12:09 -08:00
Zack Spear
7cadcbdf71 fix: state php special chars for html attributes 2024-02-29 16:12:00 -08:00
Robin Kluth
a702f65759 Fix getDockerJSON: If docker comms fail, return empty array (as expsected by everyone) instead if null. Fixes foreach() argument must be of type array|object, null given 2024-02-28 06:34:06 +01:00
Tom Mortensen
d036c7a086 Increased /run tmpfs size limit from 32M to 128M 2024-02-26 09:24:11 -08:00
tom mortensen
66cb88ff9f Merge pull request #1637 from zackspear/fix/6-13-description-double-quotes
fix: state php breaking with double quotes in server description [6.13]
2024-02-23 16:04:47 -08:00
tom mortensen
d0afcf16f8 Merge pull request #1639 from SimonFair/Unraid-Wake-on-LAN
Change Titles
2024-02-23 16:04:16 -08:00
SimonFair
123239a2e6 Change Titles 2024-02-23 13:23:26 +00:00
tom mortensen
aad980c1e5 Merge pull request #1635 from bergware/master
Add legacy table styling
2024-02-22 11:56:04 -08:00
bergware
df18d48eb7 Put notifications in front 2024-02-22 16:42:01 +01:00
bergware
fb0a3e9a2e Dashboard: fix hovering over system resources may remove label 2024-02-22 16:37:21 +01:00
bergware
a9a851ffb2 Add legacy table styling 2024-02-22 14:28:49 +01:00
Zack Spear
5d04fc4763 fix: state php breaking with double quotes in server description 2024-02-21 12:34:46 -08:00
tom mortensen
fa1a13250e Merge pull request #1634 from bergware/master
network: fixed bonding with latest kernel modifications
2024-02-21 09:03:30 -08:00
tom mortensen
cfe667bc38 Merge pull request #1633 from Squidly271/patch-23
Docker: Add in AI as a category
2024-02-21 09:01:51 -08:00
tom mortensen
2c0a5b5494 Merge pull request #1631 from SimonFair/VM-Metrics
Dashboard VM metrics
2024-02-21 09:00:48 -08:00
tom mortensen
c6b7fa7abb Merge pull request #1629 from Squidly271/patch-21
Docker ignore empty paths
2024-02-21 08:59:55 -08:00
tom mortensen
4101096ad4 Merge pull request #1628 from zackspear/fix/6-13-state-cfg-usage
fix: state connect values without connect installed [6.13]
2024-02-21 08:58:31 -08:00
bergware
2267e3c37c network: fixed bonding with latest kernel modifications 2024-02-21 11:57:52 +01:00
bergware
097caf4fa5 network: fixed bonding with latest kernel modifications 2024-02-20 20:38:22 +01:00
bergware
5c6513c4e2 network: fixed bonding with latest kernel modifications 2024-02-20 20:37:52 +01:00
bergware
e8d01ff32a network: fixed bonding with latest kernel modifications 2024-02-20 20:29:24 +01:00
Squidly271
b85cd55423 Update CreateDocker.php 2024-02-19 21:00:27 -05:00
SimonFair
27ad1fa476 Update DashboardApps.php 2024-02-19 07:09:24 +00:00
SimonFair
00ce97a9f6 Update DashboardApps.php 2024-02-18 18:39:07 +00:00
SimonFair
f7b08bcab9 Text updates. 2024-02-18 18:24:26 +00:00
SimonFair
298b020b9c Make script executable 2024-02-18 07:21:19 +00:00
SimonFair
c9f20e7934 Initial commit for Dashboard VM Metrics. 2024-02-18 07:15:12 +00:00
Squidly271
e774c8a6a5 Docker ignore empty paths 2024-02-17 07:13:16 -05:00
Zack Spear
4b8f60f3ec fix: state connect values without connect installed 2024-02-16 17:21:08 -08:00
tom mortensen
4ab3760bea Merge pull request #1626 from zackspear/fix/6-13-os-plg-update-rc-stable
fix: os updates rc to stable [6.13]
2024-02-15 17:06:26 -08:00
Zack Spear
c9cbed9fe5 fix: os updates rc to stable 2024-02-15 14:19:29 -08:00
tom mortensen
3210b1bd39 Merge pull request #1563 from Leseratte10/fix-syslog
Add syslog filename support
2024-02-15 09:38:23 -08:00
tom mortensen
3b60e15ef0 Merge pull request #1582 from mtongnz/manager-fixes
Remove update buttons for non-dockerman containers
2024-02-15 09:37:53 -08:00
tom mortensen
3c6180f114 Merge pull request #1617 from dlandon/master
Fix php warning when saving text to a file.
2024-02-15 09:37:10 -08:00
dlandon
fd5d7e122e Change requested by Ronald. 2024-02-14 17:28:29 -06:00
dlandon
ee90e2b997 Add #raw_file so a raw file can be modified and suppress any php warnings:
This is the hidden input value:
<input type="hidden" name="#raw_file" value="true">

The value="true" could be programmatically changed so a file can be parsed or not parsed in the same page code.
2024-02-14 16:15:43 -06:00
SimonFair
27bb4f7799 Update vm_usage 2024-02-14 17:52:47 +00:00
tom mortensen
cc2aa8acc9 Merge pull request #1623 from bergware/master
Management access: fix incorrect ip address display
2024-02-14 08:42:45 -08:00
tom mortensen
d6fa9420f3 Merge pull request #1621 from zackspear/fix/upc-dropdown-reboot-link-text
fix: dropdown reboot link text [6.13]
2024-02-14 08:40:47 -08:00
tom mortensen
249785377f Merge pull request #1613 from SimonFair/VM-Metrics
Add  VM usage data
2024-02-14 08:40:25 -08:00
bergware
21f1ec278e Management access: fix incorrect ip address display 2024-02-14 17:02:43 +01:00
Zack Spear
6db0bba9fa fix: dropdown reboot link text 2024-02-13 17:55:21 -08:00
dlandon
1fbd1b0a98 Update update.php 2024-02-13 11:39:33 -06:00
tom mortensen
2b58784feb Merge pull request #1618 from Squidly271/patch-19
PHP8 Fix
2024-02-13 07:21:12 -08:00
tom mortensen
94aeb612b8 Merge pull request #1620 from bergware/master
File manager: updated file type icons
2024-02-13 07:20:59 -08:00
SimonFair
9f3047d2ff Add options to settings to disable/enable + refresh rate 2024-02-12 22:04:37 +00:00
bergware
c7fcc66ec2 File manager: updated file type icons 2024-02-12 14:45:00 +01:00
bergware
8c3b5a8554 File manager: updated file type icons 2024-02-12 14:41:56 +01:00
bergware
97560c51d4 File manager: updated file type icons 2024-02-12 14:41:10 +01:00
bergware
2ae9728e94 File manager: updated file type icons 2024-02-12 14:39:31 +01:00
bergware
5c91a93a2c File manager: updated file type icons 2024-02-12 14:37:33 +01:00
SimonFair
034b41726e Update vm_usage 2024-02-11 18:42:11 +00:00
SimonFair
eef77dc64d Fix graphs 2024-02-11 18:34:13 +00:00
SimonFair
954969c2e4 Make script executable 2024-02-11 15:25:18 +00:00
SimonFair
71f655cd05 Add Stats page 2024-02-11 15:22:22 +00:00
Squidly271
df4c1d72bd PHP8 Fix 2024-02-10 15:30:41 -05:00
dlandon
39e2381b8f Fix php warning when saving text that contains a reserved php character to a file.
A php warning occurs when a text area is to be saved to a file and it contains a reserved php character.  Update.php tries to parse the file and extract a specific section even if the file is only to be saved.  It is also trying to extract a section when the $section is not defined i.e. $section is set to false.
2024-02-10 07:39:23 -06:00
Tom Mortensen
54763e03a6 let dhcpcd have 45 sec instead of 30 to get an IP address 2024-02-09 12:53:58 -08:00
tom mortensen
69e2e773a7 Merge pull request #1615 from bergware/master
Fix error in helptext
2024-02-09 12:26:50 -08:00
tom mortensen
e24ffa4185 Merge pull request #1614 from SimonFair/User-VM-templates
VM templates Create missing directory.
2024-02-09 12:26:25 -08:00
bergware
a5b41381af Revert "File manager: replace image icons by font-awesome icons"
This reverts commit e6a70d829e.
2024-02-09 17:52:41 +01:00
bergware
e6a70d829e File manager: replace image icons by font-awesome icons 2024-02-09 17:47:09 +01:00
bergware
863a3ee231 File manager: replace image icons by font-awesome icons 2024-02-09 17:44:04 +01:00
bergware
f999e6f692 File manager: replace image icons by font-awesome icons 2024-02-09 13:06:21 +01:00
bergware
1e38871d1f Merge remote-tracking branch 'upstream/master' 2024-02-09 11:17:16 +01:00
SimonFair
7dda0f48d0 Create missing directory. 2024-02-09 08:52:45 +00:00
SimonFair
bb6598d2f9 Add initial functions to collect VM usage data 2024-02-09 07:09:47 +00:00
tom mortensen
9e5666bed3 Merge pull request #1612 from zackspear/fix/6-13-install-key-and-pro-update-os
6.13 – fix: pro key check for update via dropdown & Install Key class self instantiate with GET request
2024-02-08 15:47:29 -08:00
Zack Spear
1655a361eb fix: Install Key class self instantiate with GET request 2024-02-08 13:29:50 -08:00
Zack Spear
9797c34305 fix: pro key check for update via dropdown 2024-02-08 13:28:40 -08:00
bergware
973fc9c508 Merge remote-tracking branch 'upstream/master' 2024-02-08 14:54:21 +01:00
bergware
ba9f1c474f Fix error in helptext 2024-02-08 12:03:25 +01:00
tom mortensen
451075c174 Merge pull request #1610 from ich777/cgroupv2-patch
Update cgroup2 mount
2024-02-07 14:28:32 -08:00
6011658a43 Update cgroup2 mount
- Remove tmpfs for cgroup2 mount
- Change source from `none` to `cgroup2`
- Add mount options nosuid, nodev, noexec, relatime, nsdelegate, memory_recursiveprot for more security
2024-02-07 14:01:35 +01:00
tom mortensen
006c59dbf1 Merge pull request #1608 from zackspear/master
replace key improvements
2024-02-05 14:26:28 -08:00
tom mortensen
db610f0ae5 Merge pull request #1607 from bergware/master
Feedback form: enable/disable SUBMIT button automatically
2024-02-05 14:25:51 -08:00
Zack Spear
3abc6952ce refactor: remove replace_key_job from rc.local 2024-02-05 13:16:45 -08:00
Zack Spear
92555090d9 refactor: state class webgui global fallback 2024-02-05 12:53:38 -08:00
Zack Spear
d81e24e827 refactor: replace_key_job cron to run on a randomized minute value 2024-02-05 11:38:01 -08:00
Zack Spear
0f31f97d88 refactor(wc): replace key checker automatic on registration page 2024-02-05 11:38:01 -08:00
Zack Spear
d27a796160 fix: ReplaceKey to not reference server state and improve timing check 2024-02-05 11:38:01 -08:00
Zack Spear
7ca74f9862 chore: replace_key_job formatting 2024-02-05 11:38:01 -08:00
Zack Spear
61b17ed7df refactor: InstallKey returns 2024-02-05 11:38:01 -08:00
Zack Spear
04eea0961a feat: rc.local repalce_key_job cron-init 2024-02-05 11:38:01 -08:00
Zack Spear
9cf3a59c8a feat: replace_key_job script to create cron & to execute the replace key job 2024-02-05 11:38:01 -08:00
Zack Spear
4622450b45 refactor: replace key don't auto check on class instantiation 2024-02-05 11:38:01 -08:00
Zack Spear
7f92fff58c fix: state php call from cli 2024-02-05 11:38:01 -08:00
Zack Spear
4d54ab8660 chore: formatting ReplaceKey 2024-02-05 11:38:01 -08:00
Zack Spear
a6c9b73e6f chore: ReplaceKey formatting 2024-02-05 11:38:01 -08:00
Zack Spear
682978f730 refactor: ReplaceKey url const 2024-02-05 11:38:01 -08:00
Zack Spear
aac68b1070 fix: self invoking ReplaceKey class 2024-02-05 11:38:01 -08:00
Zack Spear
8133b2acc0 feat: auto replace key when newer is available 2024-02-05 11:38:01 -08:00
Zack Spear
a3137c4086 refactor: unused InstallKey include for extensible usage 2024-02-05 11:38:01 -08:00
Zack Spear
f42cb70e4f fix: State class for usage in other files 2024-02-05 11:38:01 -08:00
bergware
61acffe36a Update feedback 2024-02-05 13:58:19 +01:00
bergware
fe5258d939 Update feedback 2024-02-05 13:47:30 +01:00
bergware
94972a6dc7 Update select_case 2024-02-05 11:18:57 +01:00
bergware
9dc7547a6a Use my_logger 2024-02-05 11:02:28 +01:00
bergware
7833fdefeb Use my_logger 2024-02-05 10:50:30 +01:00
bergware
6428747c77 parity_history: code optimization 2024-02-05 10:30:14 +01:00
bergware
7c033ddc15 parity_history: code optimization 2024-02-05 10:26:37 +01:00
bergware
99291453ae linc_station_n1 images 2024-02-04 19:43:01 +01:00
bergware
36a16931e5 Update copyright year 2024-02-04 16:18:46 +01:00
bergware
a6e139351d Feedback form: html optimization 2024-02-04 13:26:27 +01:00
bergware
bf75867eae Feedback form: updated images 2024-02-04 12:13:11 +01:00
bergware
232f45286f Feedback form: updated images 2024-02-04 12:04:13 +01:00
bergware
202f6fec50 scripts: code simplification 2024-02-04 12:02:02 +01:00
bergware
7772e3db38 Feedback form: code optimization 2024-02-04 10:29:25 +01:00
bergware
cfdfb49fa2 Feedback form: code optimization 2024-02-04 02:59:07 +01:00
bergware
70b0a5c3f3 Feedback form: code optimization 2024-02-04 02:46:50 +01:00
bergware
4aaf3bb109 Feedback form: code optimization 2024-02-04 02:41:23 +01:00
bergware
b833a13485 Feedback form: add ERROR image 2024-02-04 02:26:39 +01:00
bergware
87e07534b1 Feedback form: code optimization 2024-02-04 01:29:58 +01:00
bergware
111deef923 Feedback form: code optimization 2024-02-04 01:27:44 +01:00
bergware
abdf3d7485 Feedback form: code optimization 2024-02-04 01:23:05 +01:00
bergware
f80c212a26 Feedback form: code optimization 2024-02-04 01:16:29 +01:00
bergware
076413fcae Feedback form: code optimization 2024-02-04 01:11:33 +01:00
bergware
a571cbdc20 Feedback form: code optimization 2024-02-04 00:37:39 +01:00
bergware
7fdfc3ebc2 Feedback form: code optimization 2024-02-04 00:31:05 +01:00
bergware
f2c87c4485 Fix notification icon 2024-02-04 00:05:24 +01:00
bergware
080a3e28d3 Feedback form: code optimization 2024-02-03 23:53:10 +01:00
bergware
c72a87723f Fix styling: sweat-alert buttons 2024-02-03 23:52:43 +01:00
bergware
2fe31d63d8 Feedback form: code optimization 2024-02-03 22:38:17 +01:00
bergware
d67ea2e925 Feedback form: code optimization 2024-02-03 22:35:40 +01:00
bergware
c318c949b1 Feedback form: code optimization 2024-02-03 22:33:02 +01:00
bergware
c5abd80e42 Feedback form: enable/disable SUBMIT button automatically 2024-02-03 22:09:31 +01:00
bergware
432c9a43f0 Feedback form: updated images 2024-02-03 21:58:34 +01:00
bergware
df3d1cb5fc Feedback form: enable/disable SUBMIT button automatically 2024-02-03 21:05:23 +01:00
bergware
a992d17c3d Feedback form: enable/disable SUBMIT button automatically 2024-02-03 20:50:30 +01:00
bergware
e6b6af68ed Feedback form: enable/disable SUBMIT button automatically 2024-02-03 20:45:34 +01:00
bergware
cfdeba3f71 Merge remote-tracking branch 'upstream/master' 2024-02-03 19:53:16 +01:00
bergware
4cb1c76c5a Feedback form: enable/disable SUBMIT button automatically 2024-02-03 18:48:36 +01:00
bergware
92f325614c Feedback form: enable/disable SUBMIT button automatically 2024-02-03 18:44:14 +01:00
bergware
1cf264bdd6 Feedback form: enable/disable SUBMIT button automatically 2024-02-03 18:39:38 +01:00
bergware
26ca0f0722 Feedback form: enable/disable SUBMIT button automatically
- User can only submit when valid input is entered
2024-02-03 18:27:08 +01:00
tom mortensen
429ce4b293 Merge pull request #1605 from SimonFair/Unraid-Wake-on-LAN
WOLrun.php make executable
2024-02-03 08:06:23 -08:00
tom mortensen
3bad9a20d8 Merge pull request #1606 from bergware/master
Feedback form: place SUBMIT button next to CANCEL button
2024-02-03 08:05:09 -08:00
bergware
da520c3d50 favorites: skip non-existing entries 2024-02-03 14:56:08 +01:00
bergware
ac469937db Feedback form: place SUBMIT button next to CANCEL button 2024-02-03 14:46:19 +01:00
bergware
d70bc5e9e8 Feedback form: place SUBMIT button next to CANCEL button 2024-02-03 13:10:57 +01:00
bergware
099559e949 netconfig: exit when missing parameters 2024-02-03 12:24:51 +01:00
bergware
a441a00182 Fix my_logger function 2024-02-03 12:01:38 +01:00
bergware
a3659d515a Merge remote-tracking branch 'upstream/master' 2024-02-03 11:53:14 +01:00
bergware
56dc0269b3 Feedback form: place SUBMIT button next to CANCEL button 2024-02-03 11:52:24 +01:00
SimonFair
28d9de878c Make script executable 2024-02-03 00:26:20 +00:00
tom mortensen
9d7df3be66 Merge pull request #1604 from unraid/feat-logger
logger - ensure params are escaped
2024-02-02 12:10:05 -08:00
ljm42
0287d8dfac my_logger: make the tag optional 2024-02-02 13:02:40 -07:00
tom mortensen
900f74f334 Merge pull request #1601 from SimonFair/Unraid-Wake-on-LAN
WOL Use new mac format.
2024-02-02 11:55:37 -08:00
ljm42
551f85ad92 escape more params 2024-02-02 12:51:23 -07:00
ljm42
0d87850efd remove dependency on webgui
the plugin script should be at /usr/local/sbin/plugin, independent of the webgui
2024-02-01 20:31:25 -07:00
Tom Mortensen
74b0b5a71f remove passing unneeded shareFruit setting 2024-02-01 18:47:55 -08:00
ljm42
305e4648aa logger - ensure params are escaped 2024-02-01 15:49:17 -07:00
Tom Mortensen
b8844dcedb If no regkey use 'Tools>Registration' as start page 2024-02-01 14:41:18 -08:00
SimonFair
690b4a264c Update help for WOL page. 2024-02-01 17:20:51 +00:00
tom mortensen
4e71349cf2 Merge pull request #1602 from bergware/master
Feedback form: change DONE button to CANCEL
2024-02-01 09:20:10 -08:00
bergware
24c0dd3015 Feedback form: change DONE button to CANCEL 2024-02-01 12:40:17 +01:00
SimonFair
dec1bf5de6 Use new mac format. 2024-02-01 07:40:25 +00:00
tom mortensen
ccf7ec5db3 Merge pull request #1600 from zackspear/master
update os feedback and refactors
2024-01-31 15:54:58 -08:00
tom mortensen
d2a2462059 Merge pull request #1599 from SimonFair/Unraid-Wake-on-LAN
Add option to shutdown for WOL processing.
2024-01-31 15:54:45 -08:00
Zack Spear
be9a6b85aa Merge branch 'unraid:master' into master 2024-01-31 15:23:53 -08:00
SimonFair
8f78ab4ba0 Add SSD flag for vdisks. 2024-01-31 15:23:00 -08:00
Zack Spear
b7af321692 refactor: update os feedback improvements 2024-01-31 15:21:57 -08:00
Zack Spear
d795f51b4b feat: add updateOsNotificationsEnabled to state php 2024-01-31 15:06:17 -08:00
tom mortensen
0649c310cb Merge pull request #1594 from SimonFair/SSD-Checkbox-and-Customer-CPUs
Add SSD flag for vdisks.
2024-01-31 12:49:29 -08:00
Zack Spear
1e853aba3b feat: make update os w/o leaving webgui possible 2024-01-31 11:23:52 -08:00
Zack Spear
9501c88bf4 refactor: UnraidCheck php 2024-01-31 11:23:52 -08:00
Zack Spear
acd0e764c3 feat: unraidcheck callable from webgui with altUrl & json output 2024-01-31 11:23:52 -08:00
SimonFair
9f01517f21 Merge remote-tracking branch 'upstream/master' into Unraid-Wake-on-LAN 2024-01-30 20:31:26 +00:00
SimonFair
c46fd21747 Update WOLrun.php 2024-01-30 20:29:13 +00:00
SimonFair
89fbe80e9f Add option to shutdown for WOL processing. 2024-01-30 20:23:07 +00:00
tom mortensen
820a79d598 Merge pull request #1596 from Squidly271/patch-17
Fix PHP error when submitting diagnostics via Feedback
2024-01-30 09:21:33 -08:00
Squidly271
550fed51dc Update Feedback.php 2024-01-29 19:16:22 -05:00
tom mortensen
3c42a85613 Merge pull request #1593 from SimonFair/User-VM-templates
User Template Delete Fix.
2024-01-28 08:21:09 -08:00
tom mortensen
73412b7ca8 Merge pull request #1592 from SimonFair/Unraid-Wake-on-LAN
Fix WOL start on boot.
2024-01-28 08:20:45 -08:00
SimonFair
dc7b52e027 Fix or systemdrivers. 2024-01-28 11:28:10 +00:00
SimonFair
5842b5acf9 Add SSD flag for vdisks. 2024-01-27 23:48:15 +00:00
SimonFair
adb3a03b8d User Template Delete Fix. 2024-01-27 19:20:25 +00:00
SimonFair
bea6e282ec Fix WOL start on boot. 2024-01-27 07:29:06 +00:00
tom mortensen
1122262f36 Merge pull request #1591 from Squidly271/patch-16
Allow CA to automatically start containers when doing a multi-install
2024-01-25 17:22:23 -08:00
Squidly271
f57c9b60d5 Update update_container 2024-01-25 19:27:37 -05:00
tom mortensen
1155d09dd1 Merge pull request #1578 from SimonFair/User-VM-templates
User VM templates
2024-01-24 22:04:59 -08:00
Tom Mortensen
ddca644dfe place 'Registration' to right of 'Downgrade OS' in Tools/About section 2024-01-22 09:34:38 -08:00
tom mortensen
3525dd5826 Merge pull request #1583 from Squidly271/patch-9
Fix javascript error in library everytime a key is pressed in webGUI
2024-01-20 13:20:05 -08:00
tom mortensen
0cf829bf9d Merge pull request #1584 from Squidly271/patch-10
Allow CA to override the "DONE" button appearing during multi installs / updates
2024-01-20 13:16:10 -08:00
tom mortensen
e332298dc0 Merge pull request #1586 from Squidly271/patch-12
Don't save state of help button from page to page
2024-01-20 13:15:55 -08:00
tom mortensen
58a7054db5 Merge pull request #1587 from bergware/master
Favorites: use "trash" icon to delete favorite
2024-01-20 13:15:12 -08:00
SimonFair
979dd225f7 add support for XML Custom 2024-01-16 19:41:13 +00:00
SimonFair
8f8d7037ee add support to XML custom 2024-01-16 19:40:48 +00:00
SimonFair
239d6813a1 Fix for multifunction 2024-01-16 17:26:02 +00:00
SimonFair
797e7cddaf Sort icons for templates 2024-01-15 23:38:22 +00:00
SimonFair
b7bdde1f18 fix clock 2024-01-15 23:33:42 +00:00
SimonFair
c7d5e5708e Fix template name on delete. 2024-01-15 21:42:23 +00:00
SimonFair
cc43038692 XML processing 2024-01-15 21:10:56 +00:00
Squidly271
2a7dd96fac Add what was changed to comment 2024-01-14 17:10:44 -05:00
SimonFair
91f27cc70c Add removal confirmation 2024-01-14 18:29:44 +00:00
bergware
b48b30a6a6 Favorites: use "trash" icon to delete favorite 2024-01-14 11:10:38 +01:00
SimonFair
e0b857744f Add Bin 2024-01-14 08:57:06 +00:00
Squidly271
561cfc6c9f Update DefaultPageLayout.php 2024-01-13 19:34:59 -05:00
Squidly271
33a4ad1173 Update HelpButton.page 2024-01-13 19:32:47 -05:00
Squidly271
f7d0cf3ff6 Update DefaultPageLayout.php 2024-01-13 18:59:04 -05:00
SimonFair
a4ab98a078 Merge remote-tracking branch 'upstream/master' into User-VM-templates 2024-01-13 22:49:09 +00:00
SimonFair
70e690defa Updates 2024-01-13 21:52:00 +00:00
Squidly271
4a42a26b59 Update dynamix.js 2024-01-12 19:58:28 -05:00
mtongnz
083cd984ea style: fix bizzare formatting glitches 2024-01-12 16:09:52 +13:00
mtongnz
3dda97319d fix: don't return template for containers not managed by dockerman 2024-01-12 15:51:04 +13:00
mtongnz
064cac1110 fix: suppress error on template fetch 2024-01-12 15:46:43 +13:00
mtongnz
3d1b53d0ea style: line up spacing 2024-01-12 15:45:53 +13:00
mtongnz
61e99a390e fix: docker network info display (non dockerman & multiple networks) 2024-01-12 15:45:04 +13:00
mtongnz
37f1941027 fix: remove update buttons for non-dockerman containers 2024-01-12 15:25:43 +13:00
tom mortensen
a7671fba37 Merge pull request #1581 from zackspear/master
small post key install improvements in new modal
2024-01-10 20:42:37 -08:00
Zack Spear
d866e77710 refactor(wc): update web component js to latest 2024-01-09 17:14:01 -06:00
tom mortensen
aaf31a808b Merge pull request #1574 from bergware/master
Nchan: add timeout to publishers to force update
2024-01-08 14:26:25 -08:00
tom mortensen
b8b8f43387 Merge branch 'master' into master 2024-01-08 14:26:16 -08:00
tom mortensen
7c94cbd169 Merge pull request #1575 from SimonFair/File-System-Snapshots
Fixes for QCOW2 images
2024-01-08 14:24:34 -08:00
tom mortensen
f97e780f0f Merge pull request #1576 from Squidly271/patch-7
PHP8 fix
2024-01-08 14:23:59 -08:00
tom mortensen
879657cc6a Merge pull request #1579 from zackspear/master
fix(wc): key install success handling
2024-01-08 14:22:45 -08:00
Zack Spear
e75c667336 fix(wc): key install success handling 2024-01-08 13:20:31 -06:00
SimonFair
46789b61b8 Initial Straw man concept. 2024-01-07 12:54:07 +00:00
Squidly271
19bebe7ef3 Update post_plugin_checks 2024-01-07 06:51:23 -05:00
Squidly271
68552c0808 Update post_plugin_checks 2024-01-07 06:47:12 -05:00
SimonFair
ff9e390840 QCOW2 Fixes 2024-01-06 12:32:43 +00:00
bergware
0fcc246760 Reduce monitor_nchan messages 2024-01-06 10:47:12 +01:00
SimonFair
7bfffb9fdb Update Custom.form.php 2024-01-06 09:44:51 +00:00
Squidly271
adcb0de17d Update post_plugin_checks 2024-01-05 19:29:25 -05:00
bergware
41539b9fe3 PHP8 fix error 2024-01-05 21:34:35 +01:00
SimonFair
9c60cc9619 QCOW2 Fixes 2024-01-05 19:42:06 +00:00
SimonFair
8c5c881237 Fixes for QCOW2 2024-01-05 19:40:26 +00:00
bergware
26452c82f3 publishers: retry on failure 2024-01-05 20:22:55 +01:00
bergware
86366d4409 publish: add logging of failed curl requests 2024-01-05 20:21:24 +01:00
bergware
71b59cebae Parity check: use json format 2024-01-05 13:05:01 +01:00
bergware
4ca244d444 Merge remote-tracking branch 'upstream/master' 2024-01-05 12:57:01 +01:00
bergware
0ff0ef490e Nchan: add timeout to publishers to force update 2024-01-05 12:56:19 +01:00
Zack Spear
7d9d306ef9 Merge branch 'unraid:master' into master 2024-01-04 10:53:49 -08:00
Zack Spear
01c49623b0 chore: organize web component translations 2024-01-04 12:52:51 -06:00
tom mortensen
5e3301945e Merge pull request #1573 from bergware/master
device_list: add timeout to force update
2024-01-04 09:19:51 -08:00
bergware
0298d1f827 monitor_nchan: add immediate "kill" command option 2024-01-04 13:26:54 +01:00
bergware
40c3bc2779 device_list: add timeout to force update 2024-01-04 11:47:52 +01:00
tom mortensen
5effac6e9e Merge pull request #1572 from zackspear/fix/upc-azure-gray-custom-colors
fix(upc): azure & gray themes custom color settings
2024-01-03 21:37:04 -08:00
tom mortensen
6496bc1fca Merge pull request #1571 from bergware/master
Favorites: fixes and enhancements
2024-01-03 21:36:50 -08:00
tom mortensen
a58c476cc9 Merge pull request #1566 from SimonFair/File-System-Snapshots
Add Support for File system level snapshots for VMs.
2024-01-03 21:36:31 -08:00
tom mortensen
7c62bd4279 Merge pull request #1570 from ich777/unraidwold_bugfix
Small bugfixes for unraidwold
2024-01-03 21:35:36 -08:00
SimonFair
2966da5698 Fix to WOL page for no values. 2024-01-03 23:40:14 +00:00
Zack Spear
1a5a70e899 fix(upc): azure & gray themes custom color settings 2024-01-03 15:53:59 -06:00
bergware
7ccd820373 Favorites: fix not all items could be added to favorites 2024-01-03 20:00:32 +01:00
SimonFair
bfb59dbd35 Update Helpers.php 2024-01-03 17:29:23 +00:00
SimonFair
9188d22e0e Update Helpers.php 2024-01-03 17:26:25 +00:00
SimonFair
6de185b0ac Updates to ZFS Snaps and fix for Libvirt 9.8.0+ issue 2024-01-03 17:21:25 +00:00
bergware
c4b6b0cfab VMs: fix regression error in table height 2024-01-03 13:15:02 +01:00
bergware
2665ddebd2 Dashboard: fix regression error in system headers 2024-01-03 12:59:57 +01:00
bergware
4e568a9b9b Dashboard: fix regression error in system headers 2024-01-03 12:57:01 +01:00
bergware
08ecf1d9d2 Favorites: automatically clean non-existing pages 2024-01-03 12:43:08 +01:00
bergware
25340cc3be Favorites: hide item when no favorites are present 2024-01-03 12:14:21 +01:00
bergware
0d2690abd1 Favorites: change start to heart in header 2024-01-03 12:13:51 +01:00
bergware
b57f3b0538 Favorites: fix not all items could be added to favorites 2024-01-03 12:13:34 +01:00
184961b1d7 Small bugfix
- Convert all MAC to lower
- Fix for syslog messages
2024-01-03 09:33:43 +01:00
Tom Mortensen
b307e6a373 place 'Update OS' and 'Downgrade OS' at beginning of Tools/About section 2024-01-02 19:29:54 -08:00
tom mortensen
69732671d9 Merge pull request #1564 from unraid/refactor/update-os-server-side-usage
refactor: update os component use new server-side check
2024-01-02 18:31:35 -08:00
Zack Spear
5b8beac8dd refactor: unraidcheck script new endpoint & save response for web components 2024-01-02 08:53:55 -06:00
Tom Mortensen
52408b193d small tweaks to unraidwol build script and binary path 2024-01-01 14:18:20 -08:00
Tom Mortensen
e734541dcb update copyright notice in footer 2024-01-01 14:16:37 -08:00
SimonFair
bb4c0402fc Updates to revert 2024-01-01 14:25:40 +00:00
SimonFair
29b4c81b81 Update title text for default snapshot type. 2023-12-31 19:49:25 +00:00
Florian Bach
828d62cd49 Add syslog filename support 2023-12-30 19:56:49 +01:00
SimonFair
3dda1c3fbd Merge remote-tracking branch 'upstream/master' into File-System-Snapshots 2023-12-30 15:55:46 +00:00
SimonFair
66874ef8f2 Add Support for File system level snapshots for VMs. 2023-12-30 15:51:53 +00:00
tom mortensen
5730feb21e Merge pull request #1444 from Squidly271/patch-4
DRAFT Run FCP scan during diagnostics
2023-12-29 11:17:46 -08:00
tom mortensen
12b64b3ff6 Merge pull request #1555 from rdietl/master
Docker: Allow custom registry with a port specification
2023-12-29 11:17:11 -08:00
tom mortensen
0072325a15 Merge pull request #1562 from SimonFair/VM-Updates-and-Fixes
VM Manager updates and fixes
2023-12-29 11:16:07 -08:00
tom mortensen
09b9394df4 Merge pull request #1552 from serisman/feature/ssd_bytes
Display KB/MB/GB/TB written in SMART Attributes for SSDs
2023-12-29 11:15:28 -08:00
tom mortensen
802a9491d0 Merge pull request #1551 from serisman/feature/ssd_endurance
Add 'SSD endurance remaining' SMART Attribute.
2023-12-29 11:14:55 -08:00
tom mortensen
692c6751c6 Merge pull request #1550 from serisman/master
Fix display of 'Accumulated power on time, hours:minutes xxxxx:yy' SMART attribute
2023-12-29 11:14:18 -08:00
tom mortensen
2ec3defc2c Merge pull request #1561 from bergware/master
Miscellaneous updates and fixes
2023-12-29 11:13:44 -08:00
Zack Spear
5f57d6466c refactor: web component state updated 2023-12-29 12:22:11 -05:00
Zack Spear
bcbd9976e2 fix: web component translation 2023-12-29 12:21:52 -05:00
Zack Spear
2fda052611 refactor: update os component use new server-side check 2023-12-29 12:14:54 -05:00
bergware
b7b9d350e1 Docker: fix WG routes added to the correct interface (br0 or eth0 or bon0) 2023-12-29 11:02:30 +01:00
bergware
a0e8bc32ea Update helptext.txt 2023-12-28 20:22:54 +01:00
bergware
efc6d05b3d Favorites: update styling 2023-12-28 12:58:49 +01:00
bergware
b5d39d90c6 Favorites: change icon to "heart" 2023-12-28 12:52:26 +01:00
SimonFair
1fc6b4014b Add my_mkdir function 2023-12-28 11:37:11 +00:00
bergware
56463d5ca2 Remove debug info 2023-12-28 12:18:07 +01:00
bergware
84016c2e7c Docker: fix WG routes added to the correct interface (br0 or eth0) 2023-12-28 11:51:39 +01:00
bergware
4e80ead785 Docker: fix WG routes added to the correct interface (br0 or eth0 or bond0) 2023-12-28 11:45:57 +01:00
bergware
b2e5cdba73 Update helptext.txt 2023-12-28 11:35:42 +01:00
bergware
e5ddca7455 Copy syslog to flash on shutdown 2023-12-28 11:24:37 +01:00
bergware
2b06cc8108 Copy syslog to flash on shutdown 2023-12-28 11:18:52 +01:00
bergware
549cf123f6 Copy syslog to flash on shutdown
This PR supersedes PR1540
2023-12-28 11:10:25 +01:00
bergware
753413a8f2 Power mode: add info when running VM virtualized 2023-12-28 09:40:13 +01:00
bergware
0c81e852f9 Power mode: add info when running VM virtualized 2023-12-27 23:42:26 +01:00
bergware
e1e912586f Docker: fix WG routes added to the correct interface (br0 or eth0) 2023-12-27 22:51:33 +01:00
bergware
d6f7ec37ad add table legacy class for plugin authors 2023-12-27 16:48:38 +01:00
SimonFair
a373e316a3 Fix SCSI controller update
Add Method to snapshots.
2023-12-27 14:05:44 +00:00
bergware
94c6096e46 Update MyFavorites.page 2023-12-27 14:16:44 +01:00
bergware
2c507e32ac Minor styling update 2023-12-27 14:08:10 +01:00
bergware
f245e595ab Dashboard: dedicated parse_cpu 2023-12-27 13:44:06 +01:00
bergware
e892513dce Update PowerMode.page 2023-12-27 12:05:45 +01:00
bergware
e43baeefde Make script executable 2023-12-27 10:10:04 +01:00
bergware
261e680c7d Restore favorites on reboot 2023-12-27 10:09:17 +01:00
bergware
0e20a0a30e New feature: Favorites 2023-12-27 05:41:45 +01:00
bergware
6b7b731d31 New feature: Favorites 2023-12-27 03:47:13 +01:00
bergware
058969c0dc New feature: Favorites 2023-12-27 03:41:48 +01:00
bergware
551fde89d3 Disk settings: fix PHP8 error 2023-12-27 03:37:40 +01:00
bergware
7d720ea2fd New feature: Favorites 2023-12-27 03:37:20 +01:00
bergware
ac137e2b06 New feature: Favorites
User can add sections from Settings and Tools to a new page: Favorites
This allows the user to make a custom list of sections which are preferred
Sections can be removed from Favorites as desired
2023-12-27 03:03:38 +01:00
bergware
30d4c39ea9 Make script executable 2023-12-26 22:13:16 +01:00
bergware
15ea9e1a8f New feature: power mode selection 2023-12-26 22:12:44 +01:00
bergware
5a6ae99206 Update default-gray.css 2023-12-26 14:54:35 +01:00
bergware
3588c49f3c Fix disabled input element styling 2023-12-26 14:50:44 +01:00
bergware
ad8adfac19 Fix disabled input element styling 2023-12-26 14:35:46 +01:00
bergware
49cea2d259 Fix disabled input element styling 2023-12-26 14:28:22 +01:00
bergware
64349438ca Improved hovering logic 2023-12-26 14:04:01 +01:00
bergware
a6c478025c Dashboard UPS: use json fomatting 2023-12-26 11:54:54 +01:00
bergware
a0d3d83ce2 Update DashStats.page 2023-12-26 11:34:10 +01:00
bergware
ed9c1a0c0a Update DashStats.page 2023-12-26 11:32:50 +01:00
bergware
526b1820ff Update DashStats.page 2023-12-26 11:31:26 +01:00
bergware
cbf485cdea Update DashboardApps.php 2023-12-25 12:23:35 +01:00
bergware
ab7d6ed739 Update DashStats.page 2023-12-25 08:52:42 +01:00
bergware
da2c32a269 Update update_2 2023-12-25 08:50:45 +01:00
bergware
803b5d8d92 Update update_2 2023-12-25 08:34:05 +01:00
bergware
1899a62c8c Update update_2 2023-12-25 08:27:09 +01:00
bergware
92f2eb8653 Update update_1 2023-12-25 08:02:03 +01:00
bergware
e9f2386d88 Dashboard: array and pool fixes 2023-12-25 07:49:19 +01:00
bergware
c156cd24c4 Dashboard: fix display error 2023-12-25 06:17:28 +01:00
bergware
489b73d104 Dashboard: fix display error 2023-12-25 06:15:33 +01:00
bergware
bc7bde60c6 Dashboard: layout fix 2023-12-25 05:49:31 +01:00
bergware
6731a79c9c Dashboard: layout fix 2023-12-25 05:23:40 +01:00
bergware
65f445c878 Dashboard: add NTP info to title attribute of current time 2023-12-25 03:20:24 +01:00
bergware
5240492058 Dashboard: improved streams monitoring 2023-12-25 02:04:07 +01:00
bergware
0e16fab256 Update rc.library.source 2023-12-24 22:46:17 +01:00
bergware
6fb6a10dda Update rc.library.source 2023-12-24 22:42:59 +01:00
bergware
37e04bc620 samba: add ipv6 listening address only when netbios is disabled 2023-12-24 22:06:38 +01:00
bergware
25effe198c samba: add ipv6 listening address only when netbios is disabled 2023-12-24 21:36:09 +01:00
bergware
b747d74a87 Make script executable 2023-12-24 20:48:14 +01:00
bergware
1c958ace90 Add event to automatically update services when docker starts 2023-12-24 20:47:55 +01:00
bergware
11a9907d49 Update rc.library.source 2023-12-24 19:50:30 +01:00
bergware
e42e610aba Update rc.library.source 2023-12-24 19:45:58 +01:00
bergware
53bb5d6d92 Update rc.library.source 2023-12-24 19:40:58 +01:00
bergware
1cc9e7feac Revert: Allow vhost interface(s) access to services 2023-12-24 19:33:54 +01:00
bergware
434bb74929 rc.library.source: allow ALL IPv4/IPv6 addresses as listener 2023-12-24 19:26:17 +01:00
bergware
8433609ea5 Allow vhost interface(s) access to services 2023-12-24 18:48:30 +01:00
bergware
428642957c Allow vhost interface(s) access to services 2023-12-24 18:43:29 +01:00
bergware
aad79d5364 Allow vhost interface(s) access to services 2023-12-24 18:37:29 +01:00
bergware
5a4bf637b5 Allow vhost interface(s) access to services 2023-12-24 18:17:54 +01:00
bergware
89a309fb33 rc.library.source: allow ALL IPv4/IPv6 addresses as listener 2023-12-24 16:19:08 +01:00
bergware
ebc827ec9a Merge remote-tracking branch 'upstream/master' 2023-12-24 15:58:27 +01:00
bergware
1832a48f0e rc.library.source: allow ALL IPv4/IPv6 addresses as listener
Allowing ALL addresses solves the issue when IPv4 or IPv6 addresses change dynamically
2023-12-24 15:57:37 +01:00
tom mortensen
1403262cfe Merge pull request #1557 from SimonFair/Downgrade-fix-for-VMs
Fix for Add VM
2023-12-20 11:17:34 -08:00
SimonFair
a722841c1d Update Custom.form.php 2023-12-20 10:46:43 +00:00
tom mortensen
e745c8201a Merge pull request #1549 from SimonFair/Unraid-Wake-on-LAN
Unraid wake on lan
2023-12-19 13:48:51 -08:00
Reinhard Dietl
aec8f47942 Allow Docker image name to contain custom registry with a port specification. 2023-12-19 12:14:09 +01:00
tom mortensen
ba1b8c33f1 Merge pull request #1548 from bergware/master
Enhancements and fixes
2023-12-18 14:41:27 -08:00
tom mortensen
2a5375d15f Merge pull request #1554 from SimonFair/Downgrade-fix-for-VMs
Fix when downgrading for VMs.
2023-12-18 14:38:52 -08:00
SimonFair
5cf762c89d Fix when downgrading for VMs. 2023-12-18 20:14:42 +00:00
bergware
6a3a1b1e9e Dashboard: code fixes 2023-12-18 11:53:17 +01:00
bergware
16bb24a8d9 Dashboard: add color to active streams 2023-12-18 11:42:44 +01:00
bergware
f5f0c31276 Dashboard: fix stream counters 2023-12-18 11:29:44 +01:00
bergware
eb88e9c4f5 Dashboard: fix stream counters 2023-12-18 09:19:43 +01:00
bergware
1a830e56cd Dashboard: fix stream counters 2023-12-18 09:06:31 +01:00
bergware
77d412a246 Dashboard: fix stream counters 2023-12-18 08:47:03 +01:00
bergware
486b4232fe Revert "Dashboard: fix stream counters"
This reverts commit 7b631564db.
2023-12-18 08:26:46 +01:00
bergware
7b631564db Dashboard: fix stream counters 2023-12-18 08:23:51 +01:00
bergware
684caa5ffd Nchan communication: use json format 2023-12-18 07:26:34 +01:00
bergware
f6cc00649c device_list: code optimization 2023-12-17 22:32:51 +01:00
bergware
c07703d13f device_list: code optimization 2023-12-17 22:24:26 +01:00
bergware
7e1f8f1817 Fix typos 2023-12-17 13:00:48 +01:00
bergware
faaec9aa54 Update DashStats.page 2023-12-17 11:31:22 +01:00
bergware
cafc580ed5 Update DashStats.page 2023-12-17 11:13:48 +01:00
bergware
d785036742 Update DashStats.page 2023-12-17 11:12:23 +01:00
bergware
2b2c955143 Update DashStats.page 2023-12-17 11:10:12 +01:00
bergware
e3163fc76d Change bar animate to prototype function 2023-12-17 11:01:16 +01:00
bergware
ccd8cb213e Keep dt column width at 35% 2023-12-17 10:14:23 +01:00
SimonFair
d611e7e45d Update text 2023-12-17 07:53:13 +00:00
SimonFair
ca5a7b8da1 PHP Fix 2023-12-16 21:27:01 +00:00
bergware
cb56b5e5e2 Main page: round average temperature 2023-12-16 20:39:28 +01:00
bergware
c08f724a74 Main page: move power indicator left to temperature 2023-12-16 20:30:55 +01:00
bergware
b423715f47 device_list: code optimization 2023-12-16 19:48:05 +01:00
bergware
40e23532f3 device_list: code optimization 2023-12-16 19:42:28 +01:00
bergware
e97c912fac device_list: code optimization 2023-12-16 19:28:47 +01:00
bergware
3b2840f960 device_list: fix regression error 2023-12-16 18:57:38 +01:00
SimonFair
075a1f03ee fix file path 2023-12-16 11:22:49 +00:00
SimonFair
e73b132674 Add helptext and language updates. 2023-12-16 07:34:58 +00:00
bergware
84ee6a909f device_list: code optimization 2023-12-16 05:11:47 +01:00
bergware
a0172d325c device_list: move encryption indicator to FS column 2023-12-16 01:39:06 +01:00
bergware
734be0ba3c device_list: move encryption indicator to FS column 2023-12-16 01:30:04 +01:00
bergware
33edf59bc7 Main: include FS type for devices part of a pool 2023-12-15 23:40:09 +01:00
S. Erisman
0007e7c984 Better code readability 2023-12-15 15:54:39 -06:00
S. Erisman
e37a6d2c11 Use existing my_scale function instead of custom function 2023-12-15 15:42:47 -06:00
bergware
1393bcdf1e Adjusted scrollbar width/height 2023-12-15 22:13:41 +01:00
SimonFair
7f10aecbb4 Make Scipt executable 2023-12-15 21:10:37 +00:00
SimonFair
d7fe84ddc0 Add events 2023-12-15 21:08:54 +00:00
bergware
a228380812 Black/white themes: adjust scrollbar height 2023-12-15 21:42:42 +01:00
SimonFair
49572e42d2 Make Scipt executable 2023-12-15 20:23:45 +00:00
SimonFair
2fd33102d3 Sample build script 2023-12-15 20:17:52 +00:00
bergware
96c5582f01 Allow commands and arguments with spaces in rc.runlog 2023-12-15 21:10:29 +01:00
bergware
55390d97c7 Allow commands and arguments with spaces in rc.runlog 2023-12-15 20:51:01 +01:00
bergware
b6c30c4c6f Update array_status element 2023-12-15 20:03:18 +01:00
bergware
0d8237679b Main: make TEMP column right aligned 2023-12-15 19:44:15 +01:00
bergware
3ca1f8b18a Use underscores in graph hook script 2023-12-15 19:11:57 +01:00
bergware
7e53df6924 Use underscores in graph hook scripts
Underscores are translated to space for display in the GUI
2023-12-15 19:04:50 +01:00
SimonFair
47b711391a Standardise variable names 2023-12-15 17:13:00 +00:00
bergware
c7f445f167 Main: keep scaling in device descripting automatic 2023-12-15 18:04:01 +01:00
bergware
b7396aee4c Main page: make truncated descriptions fully visible when hovering over them 2023-12-15 15:37:33 +01:00
SimonFair
6b5d452292 Update go.mod 2023-12-15 14:21:56 +00:00
SimonFair
b9462fb62f Update go code 2023-12-15 14:20:18 +00:00
SimonFair
4dbca5afa8 Update WOLrun.php 2023-12-15 14:17:59 +00:00
SimonFair
b30fc8294c add go code 2023-12-15 14:17:11 +00:00
bergware
c95a6b37de Dashboard: protect against rogue graph entries 2023-12-15 10:35:40 +01:00
bergware
6b6dfab52b Dashboard: skip empty entries in graph 2023-12-15 10:28:52 +01:00
bergware
da7fa2b830 Dashboard: skip empty entries in graph 2023-12-15 10:13:44 +01:00
S. Erisman
419bf22958 Display KB/MB/GB/TB written in SMART Attributes for SSDs 2023-12-14 17:33:41 -06:00
S. Erisman
3fccbd7dd9 Add 'SSD endurance remaining' SMART Attribute. 2023-12-14 12:55:48 -06:00
bergware
7dfaf43d7c Update DashStats.page 2023-12-14 18:57:13 +01:00
bergware
7a0df7de23 Dashboard: move all dynamic generated content to "update_1" 2023-12-14 18:48:46 +01:00
S. Erisman
050fe46e9a Fix display of 'Accumulated power on time, hours:minutes xxxxx:yy' SMART attribute 2023-12-14 10:49:24 -06:00
bergware
8005406e87 Move translations to PHP 2023-12-14 15:30:44 +01:00
bergware
0e9d9e2c4f Move translations to PHP 2023-12-14 15:23:28 +01:00
bergware
61a89217a5 Added comments in code 2023-12-14 11:43:20 +01:00
SimonFair
b586df82ef Make script executable 2023-12-14 09:29:25 +00:00
SimonFair
6f7459f96f Update WOL.php 2023-12-14 09:16:54 +00:00
SimonFair
da37e1ab80 Add pages 2023-12-14 08:50:43 +00:00
bergware
75bc6de636 Update DashStats.page 2023-12-14 03:46:23 +01:00
bergware
da487fa545 Update DashStats.page 2023-12-14 03:42:11 +01:00
bergware
2dcaa4fe77 Dashboard: use hooks to create elements 2023-12-14 03:30:44 +01:00
bergware
952f432058 Dashboard: added dynamic element creation in RAM usage graph 2023-12-14 02:21:21 +01:00
bergware
3e427d2802 Main: fix array status display 2023-12-13 23:14:56 +01:00
bergware
eb1d0f1700 Main: fix array status display 2023-12-13 22:50:05 +01:00
tom mortensen
52a0c5387b Merge pull request #1546 from bergware/master
Fixes and enhancements
2023-12-13 09:25:56 -08:00
tom mortensen
c139160a52 Merge pull request #1544 from Squidly271/patch-6
PHP8 Fix
2023-12-13 09:25:05 -08:00
bergware
cbcf0d2473 Dashboard: more dynamic graph color generation (first step only) 2023-12-13 18:16:26 +01:00
bergware
ff1aa17c68 Dashboard: add missing ')' 2023-12-13 17:43:56 +01:00
bergware
89cd76cf37 Update default-fonts.css 2023-12-13 14:39:30 +01:00
bergware
9ade028ef9 Main page: minor width adjustment for buttons placement 2023-12-13 14:15:50 +01:00
bergware
abc8952153 Docker / VM: avoid unnecessary writes to flash device 2023-12-13 13:45:01 +01:00
bergware
935d6a5fdc Docker / VM: avoid unnecessary writes to flash device 2023-12-13 13:08:54 +01:00
bergware
ab8ef76476 VM settings: fix layout when no supported hardware 2023-12-13 13:02:04 +01:00
bergware
a9daf52b33 Docker / VM: avoid unnecessary writes to flash device 2023-12-13 13:01:40 +01:00
Squidly271
c8f18dee44 PHP8 Fix 2023-12-12 18:27:06 -05:00
tom mortensen
9cb59beef6 Merge pull request #1543 from bergware/master
styling enhancements to improve consistency
2023-12-12 10:45:04 -08:00
bergware
8b9f99adbf Display pools in a single table 2023-12-12 16:04:22 +01:00
bergware
8617dc0d92 User Edit: fix styling 2023-12-12 11:05:05 +01:00
bergware
3385e3e2b7 Revert "User Edit: fix styling"
This reverts commit c46655ef9f.
2023-12-12 11:04:28 +01:00
bergware
c46655ef9f User Edit: fix styling 2023-12-12 11:01:36 +01:00
bergware
c1f851a0bd Restore headers in pool devices
- headers are needed for proper formatting
2023-12-12 05:16:31 +01:00
bergware
eb0c24c946 device_list: fix columns 2023-12-12 00:43:25 +01:00
bergware
c1440a2964 Styling enhancements to improve consistency 2023-12-11 22:47:03 +01:00
bergware
47094219b6 Styling enhancements to improve consistency 2023-12-11 22:32:01 +01:00
bergware
8908bb3c37 Styling enhancements to improve consistency 2023-12-11 22:26:49 +01:00
bergware
4d53179ff5 Dashboard: fix docker tooltip 2023-12-11 21:50:37 +01:00
SimonFair
cd28836d26 Initial Commit 2023-12-11 20:50:20 +00:00
bergware
e67214a3a2 Styling enhancements to improve consistency 2023-12-11 20:45:19 +01:00
bergware
d5f5ddcddf Styling enhancements to improve consistency 2023-12-11 20:43:49 +01:00
bergware
bddc9bb40a Styling enhancements to improve consistency 2023-12-11 20:42:28 +01:00
bergware
7531a48c1f Styling enhancements to improve consistency 2023-12-11 20:33:13 +01:00
bergware
ef3ba845ed Styling enhancements to improve consistency 2023-12-11 20:17:19 +01:00
bergware
09e8740c04 Styling enhancements to improve consistency 2023-12-11 20:11:21 +01:00
tom mortensen
8384054396 Merge pull request #1542 from bergware/master
rc.inet1: remove leading zeros in IPv4 and IPv6 addresses
2023-12-11 08:40:08 -08:00
bergware
45fe443294 Disk settings: fix regression error 2023-12-11 14:50:55 +01:00
bergware
643370cfe0 Styling update 2023-12-11 13:29:56 +01:00
bergware
797bf4db7b Styling updates 2023-12-11 13:22:35 +01:00
bergware
ecc6691cc6 Main page: styling adjustments 2023-12-11 12:46:20 +01:00
bergware
96eb993106 Remove deprecated class 2023-12-10 14:42:34 +01:00
bergware
651ace73d1 Dashboard: style update 2023-12-10 14:26:27 +01:00
bergware
1bd727541a Dashboard: style update 2023-12-10 13:58:10 +01:00
bergware
580e9e0bee Dashboard: style update 2023-12-10 13:39:51 +01:00
bergware
9a88400fa5 Fix Language page 2023-12-10 13:25:12 +01:00
bergware
888fd6ab32 Vars: only show defined global variables 2023-12-10 12:41:09 +01:00
bergware
e521f372a5 Vars: only show defined global variables 2023-12-10 12:39:03 +01:00
bergware
cef4396f7f Updated table styling 2023-12-10 11:41:54 +01:00
bergware
edc5b9dd93 Updated table styling 2023-12-10 11:34:07 +01:00
bergware
b00cfdceb4 Main page: fix initial table creation 2023-12-10 10:53:21 +01:00
bergware
06de7da7d8 Main page: fix initial table creation 2023-12-10 09:42:24 +01:00
bergware
513bba78ed Pool devices: use only one header for multiple pools 2023-12-10 08:12:52 +01:00
bergware
f0040a97fc Revert "Pool devices: use only one header for multiple pools"
This reverts commit 66f1508a24.
2023-12-10 07:28:41 +01:00
bergware
5287b81134 Dashboard: add VM usage to graph 2023-12-10 06:40:47 +01:00
bergware
7b828ceba1 rc.inet1: remove leading zeros in IPv4 and IPv6 addresses
This applies to:
1. Interface addresses
2. Gateway addresses
3. DNS servers
2023-12-09 19:47:29 +01:00
bergware
a1705f9823 rc.inet1: remove leading zeros in IPv4 and IPv6 addresses 2023-12-09 19:25:10 +01:00
tom mortensen
651fa7d6d4 Merge pull request #1541 from bergware/master
rc.libvirt: skip non-existing XML files
2023-12-09 10:20:00 -08:00
bergware
e10590bb9c rc.inet1: remove leading zeros in IPv4 and IPv6 addresses 2023-12-09 19:00:10 +01:00
bergware
010eaceba7 rc.inet1: remove leading zeros in IPv4 and IPv6 addresses 2023-12-09 18:48:38 +01:00
bergware
5271163b31 rc.inet1: remove leading zeros in IPv4 address 2023-12-09 17:35:09 +01:00
bergware
921f7a8e08 rc.inet1: remove leading zeros in IPv4 address 2023-12-09 16:57:30 +01:00
bergware
95e8b53cab rc.inet1: remove leading zeros in IPv4 address 2023-12-09 16:45:23 +01:00
bergware
f4ec4db8e5 rc.inet1: remove leading zeros in IPv4 address 2023-12-09 16:37:57 +01:00
bergware
3701a50c5b Revert "remove leading zeros in IPv4 address"
This reverts commit 030f79e69e.
2023-12-09 16:21:22 +01:00
bergware
4a8dafea33 Fix exceed function 2023-12-09 16:01:09 +01:00
bergware
bb29436280 Dashboard: allow negative temps to show 2023-12-09 15:51:32 +01:00
bergware
7638cdac4a Dashboard: fix smart health detection 2023-12-09 15:29:44 +01:00
bergware
46726bfa2e Dashboard: allow negative temps to show 2023-12-09 15:07:01 +01:00
bergware
20db70bc3a Dashboard: allow negative temps to show 2023-12-09 15:04:15 +01:00
bergware
030f79e69e remove leading zeros in IPv4 address 2023-12-09 14:52:36 +01:00
bergware
0f767eb9f7 Merge remote-tracking branch 'upstream/master' 2023-12-09 10:50:37 +01:00
bergware
b7a51773c1 rc.libvirt: skip non-existing XML files 2023-12-09 10:48:08 +01:00
tom mortensen
183e67d0e9 Merge pull request #1539 from bergware/master
Updates
2023-12-08 12:33:27 -08:00
tom mortensen
151fb346ad Merge pull request #1538 from ich777/ich777-regressionfix-rc.S
Fix regression error
2023-12-08 12:32:56 -08:00
bergware
7b7b941c84 css simplification 2023-12-07 20:29:37 +01:00
bergware
c43ddab79d Revert "css simplification"
This reverts commit c414984258.
2023-12-07 20:24:22 +01:00
bergware
c414984258 css simplification 2023-12-07 20:21:49 +01:00
bergware
66f1508a24 Pool devices: use only one header for multiple pools 2023-12-07 19:23:47 +01:00
SimonFair
505205089d Add spin up check to CD info function. 2023-12-07 14:37:00 +00:00
bergware
d35883d2dc Dashboard: show Docker vDisk or Docker Folder 2023-12-07 13:33:41 +01:00
bergware
d965d43b83 Disk settings: new option " Enable NVME power monitoring
OFF by default
2023-12-07 13:33:14 +01:00
5fd1f99430 Fix regression error
- Mistakes where made
- Fix boot for BTRFS and XFS
2023-12-07 08:57:48 +01:00
tom mortensen
a59e63369e Merge pull request #1535 from bergware/master
Dashboard: fix header summary when hide/close tile
2023-12-06 12:35:42 -08:00
bergware
86c9cc7c2c curl_socket: allow GET/POST request 2023-12-06 09:22:51 +01:00
bergware
e65bd73f67 curl_socket: allow GET/POST request 2023-12-06 09:22:07 +01:00
bergware
be877cc6e5 curl_socket: allow GET/POST request 2023-12-06 09:17:23 +01:00
bergware
7096133313 curl_socket: allow GET/POST request 2023-12-06 09:13:21 +01:00
bergware
56427c2894 update1: keep dynamix variables up-to-date 2023-12-06 09:03:49 +01:00
bergware
2a2ef40e08 Dashboard: fix header summary when hide/close tile 2023-12-06 04:36:24 +01:00
bergware
55fbf493dc Dashboard: fix header summary when hide/close tile 2023-12-06 04:23:40 +01:00
bergware
ca6930a109 Dashboard: fix header summary when hide/close tile 2023-12-06 03:10:41 +01:00
bergware
a60b719c4a Dashboard: fix header summary when hide/close tile 2023-12-06 02:55:57 +01:00
tom mortensen
cd151f8717 Merge pull request #1534 from bergware/master
Set temperature thresholds for SSD devices automatically higher
2023-12-05 12:51:52 -08:00
bergware
c7c0e5e4dd Docker: stop nchan when leaving page 2023-12-05 17:39:21 +01:00
bergware
d33f464634 Dashboard: fix word spacing 2023-12-05 13:40:50 +01:00
bergware
497f80e046 Dashboard: add legend 2023-12-05 13:23:58 +01:00
bergware
7868cf61e5 DashStats: make css coding consistent 2023-12-05 12:58:52 +01:00
bergware
a61654241b Update helptext.txt 2023-12-05 12:02:34 +01:00
bergware
8ba7c9387d Update DashStats.page 2023-12-05 11:18:31 +01:00
bergware
900039eba6 Dashboard: make "Power" in header optional 2023-12-04 23:17:50 +01:00
bergware
6a581d3e72 More enhancements
Main: Put "Power" in title only when nvme devices are present
Dashboard: add resource size to tooltip
2023-12-04 22:52:09 +01:00
bergware
8118d0bda6 Update DashStats.page 2023-12-04 20:38:19 +01:00
bergware
8dd6e6dd1b More enhancements and fixes based on feedback
- Disk settings: Separate SSD temperature thresholds
- Dashboard: more descriptive system resources + tooltip
- Wrappers: fix NVME power value retrieval
2023-12-04 20:29:42 +01:00
bergware
8b72f51544 Dashboard: remove junk 2023-12-04 14:16:19 +01:00
bergware
88e022a116 Dashboard: minor code update 2023-12-04 14:13:11 +01:00
bergware
7ecdc0a862 Dashboard: fix alignment 2023-12-04 13:53:06 +01:00
bergware
8bb01bdbe7 Dashboard: fix theme gray color 2023-12-04 13:50:16 +01:00
bergware
daac76acb7 Dashboard: add hover feature to system resources 2023-12-04 13:46:16 +01:00
bergware
303cc050c6 Dashboard: add hover feature to system resources 2023-12-04 13:38:23 +01:00
bergware
7b06f10193 Dashboard: add hover feature to system resources 2023-12-04 13:28:00 +01:00
bergware
1dc3c6e30d Dashboard: new system resources presentation
Fix tile open/close
2023-12-04 08:54:18 +01:00
bergware
0871a7cc5d Dashboard: new system resources presentation
Use circular bar to represent resources
Make ZFS usage part of RAM usage (with different color)
2023-12-04 08:06:20 +01:00
bergware
a4082d0069 Mover Settings: place "Move" button at end 2023-12-03 21:01:12 +01:00
bergware
6ac604a810 Enhanced styling 2023-12-03 20:07:45 +01:00
bergware
98d5f97557 Enhanced styling 2023-12-03 19:07:22 +01:00
bergware
e1c3d13c39 Enhanced styling 2023-12-03 18:41:55 +01:00
bergware
a0aed9059c Update DockerSettings.page 2023-12-03 17:47:38 +01:00
bergware
4e62c81e72 Enhanced styling 2023-12-03 17:02:25 +01:00
bergware
49b43beaac Enhanced styling 2023-12-03 15:59:19 +01:00
bergware
b1f3de12c7 Enhanced styling 2023-12-03 15:43:27 +01:00
bergware
58cdbf842b Enhanced styling 2023-12-03 15:27:17 +01:00
bergware
a588024d93 Enhanced styling 2023-12-03 14:54:04 +01:00
bergware
b16a844639 Enhanced styling 2023-12-03 14:43:39 +01:00
bergware
575160c5e0 Enhanced styling 2023-12-03 14:03:23 +01:00
bergware
9d32afeb30 Enhanced styling
- Remove legacy css
- Improve styling of tables
2023-12-03 13:48:17 +01:00
bergware
02ff3bb45d Fix disk usage monitoring 2023-12-02 21:05:22 +01:00
bergware
ea98f0dc5d Update Wrappers.php 2023-12-02 20:12:40 +01:00
bergware
967bb771c4 get-nvme-info: fix state value 2023-12-02 19:59:32 +01:00
bergware
c6647ff200 Dashboard: remove 'fire' icon 2023-12-02 19:48:12 +01:00
bergware
02dc1d325f Dashboard: remove 'fire' icon 2023-12-02 19:43:43 +01:00
bergware
1f07e7c451 Make 'W' (Watt) translatable 2023-12-02 19:34:39 +01:00
bergware
d1b42cac03 Update Helpers.php 2023-12-02 19:25:03 +01:00
bergware
697b91704a Include degree symbol in temperature unit 2023-12-02 19:21:37 +01:00
bergware
1e82d109c4 DeviceInfo: fix regression error 2023-12-02 19:10:58 +01:00
bergware
90823a41c7 Disk settings: add unit to shutdown time-out setting 2023-12-02 18:55:27 +01:00
bergware
81c82ea88d Disk Setting: use placeholder for default settings 2023-12-02 18:51:36 +01:00
bergware
5d423e0227 Disk Setting: use placeholder for default settings 2023-12-02 18:37:43 +01:00
bergware
e51bd8ae33 Updated: NVME power state / temp threshold 2023-12-02 18:17:20 +01:00
bergware
4e3e0a1278 Styles: add sans-serif font as backup choice 2023-12-02 18:06:37 +01:00
bergware
d26895204e Include degree symbol in temperature unit 2023-12-02 17:57:13 +01:00
bergware
161d5f1481 DeviceInfo: fix device cycling 2023-12-02 17:28:14 +01:00
bergware
50cd2bea80 Update SmartInfo.php 2023-12-02 15:03:58 +01:00
bergware
93e22d1d5d Dashboard: add NVME power indicator 2023-12-02 14:09:06 +01:00
bergware
8d2e93f9e8 Dashboard: add NVME power indicator 2023-12-02 14:01:49 +01:00
bergware
28c58465da Dashboard: add NVME power indicator 2023-12-02 12:56:52 +01:00
bergware
9663867b47 Introduce new disk setting "Default SSD offset temperature"
- add celsius / fahrenheit conversion routines
2023-12-02 11:49:14 +01:00
bergware
49f7afdc55 Remove legacy setting 2023-12-02 10:35:04 +01:00
bergware
6bca833663 Make SSD offset a variable instead of hardcoded
Hidden variable for the moment
2023-12-02 10:13:38 +01:00
bergware
f34542d5d7 Set temperature thresholds for SSD devices automatically higher 2023-12-02 04:24:44 +01:00
bergware
57f36a8893 Disk settings: show default values as placeholder 2023-12-02 02:56:40 +01:00
bergware
2f089068ff Disk settings: show default values as placeholder 2023-12-02 02:41:40 +01:00
bergware
b1f7b37ff0 Set temperature thresholds for SSD devices automatically higher
- Add 15 degrees extra for SSD devices as standard 'hot' and 'max' thresholds
- User can overwrite defaults by setting thresholds for a specific device
2023-12-02 02:08:47 +01:00
tom mortensen
4be462d122 Merge pull request #1533 from ich777/ich777-patch-2
Fix for btrfs and xfs boot
2023-12-01 14:18:40 -08:00
tom mortensen
ef6f8de3ce Merge pull request #1532 from ich777/patch-1
Update keymaps
2023-12-01 14:15:52 -08:00
tom mortensen
7fca1d5d3c Merge pull request #1529 from bergware/master
Main page: NMVE status updates
2023-12-01 14:15:12 -08:00
bergware
9cb1db2e25 Boot page: add host name in title 2023-12-01 17:44:20 +01:00
05592627f8 Fix for btrfs and xfs boot
- Use first partition for btrfs and xfs boot, this allows a btrfs mirror to boot
2023-12-01 16:24:44 +01:00
eb5dbf0a6c Update keymaps
- Added missing keymaps
- Corrected a few keymaps
2023-12-01 14:04:33 +01:00
bergware
98b5fca350 Updated: NVME power state / temp threshold 2023-12-01 13:06:18 +01:00
bergware
a8fbdfec74 Updated: NVME power state / temp threshold 2023-12-01 12:45:40 +01:00
bergware
6203bfbc82 Updated: NVME power state / temp threshold 2023-12-01 12:23:30 +01:00
bergware
b17b82ff20 Updated: NVME power state / temp threshold 2023-12-01 12:01:20 +01:00
bergware
5e6432203d Update Wrappers.php 2023-12-01 03:33:28 +01:00
bergware
a9bff683f3 Update Wrappers.php 2023-12-01 03:30:24 +01:00
bergware
b4be186dda Network address fixes 2023-12-01 02:38:36 +01:00
bergware
0434cf2700 Fix IPv6 static address assignment 2023-11-30 23:59:36 +01:00
bergware
8aa102b595 Updated: NVME power state / temp threshold 2023-11-30 23:42:25 +01:00
bergware
20a4d46013 Updated: NVME power state / temp threshold 2023-11-30 23:34:30 +01:00
bergware
bd4751d068 Updated: NVME power state / temp threshold 2023-11-30 23:32:04 +01:00
bergware
f45fd2e456 Updated: NVME power state / temp threshold 2023-11-30 23:05:17 +01:00
bergware
f6f0458dbb pdated: NVME power state / temp threshold 2023-11-30 22:37:40 +01:00
bergware
55094ebdc3 Updated: NVME power state / temp threshold 2023-11-30 21:37:57 +01:00
bergware
04cc604bd5 Updated: NVME power state / temp threshold 2023-11-30 21:29:45 +01:00
bergware
cf580c9522 Styling: change indentation based on screen width 2023-11-30 18:38:30 +01:00
bergware
74a92996e4 Add automatics NVME temperature thresholds 2023-11-30 17:44:02 +01:00
bergware
e0eae08fa1 Fix IPv6 static address assignment 2023-11-30 16:58:27 +01:00
bergware
a8067e9333 Fix IPv6 static address assignment 2023-11-30 16:56:12 +01:00
bergware
48f38cf561 Fix IPv6 static address assignment 2023-11-30 16:16:54 +01:00
bergware
b2a26954fd Add automatics NVME temperature thresholds 2023-11-30 16:16:21 +01:00
bergware
52e7e7c710 Enhanced boot page 2023-11-30 14:23:43 +01:00
bergware
69f15066bb Enhanced boot page 2023-11-30 14:20:03 +01:00
bergware
583b0fa1c9 Main page: NMVE status updates 2023-11-30 13:29:36 +01:00
bergware
07ca2676aa Main page: NMVE status updates 2023-11-30 13:25:16 +01:00
bergware
e138db25e5 Main page: NMVE status updates 2023-11-30 13:17:30 +01:00
bergware
67c72954db Main page: NMVE status updates 2023-11-30 13:16:01 +01:00
bergware
0f7a225106 Main page: NMVE status updates 2023-11-30 12:57:05 +01:00
tom mortensen
988e005d4c Merge pull request #1528 from bergware/master
Nchan processes: only publish on changes
2023-11-29 09:01:52 -08:00
bergware
6919d12ed5 Enhanced boot page 2023-11-28 21:51:10 +01:00
bergware
5268c28fb5 Enhanced boot page 2023-11-28 21:31:48 +01:00
bergware
d43163e574 Main: undo styling update 2023-11-28 19:33:05 +01:00
bergware
1a362eb432 Remove legacy setting: "Show Dashboard apps"
Dashboard has individual tile settings to show or hide content
2023-11-28 18:53:57 +01:00
bergware
b59198473b Stop nchan subscriber when leaving page 2023-11-28 16:52:15 +01:00
bergware
a2389ce519 Stop nchan subscriber when leaving page 2023-11-28 16:50:56 +01:00
bergware
f5f255ea86 Stop nchan subscriber when leaving page 2023-11-28 16:33:45 +01:00
bergware
de459576de Nchan processes: only publish on changes 2023-11-28 16:00:22 +01:00
bergware
612ae0e652 Move "PS" info to device info 2023-11-28 15:45:22 +01:00
bergware
8d3790df88 Nchan processes: only publish on changes 2023-11-28 15:44:50 +01:00
bergware
5072989303 Update publish.php
Remove subscriber check from publish()
Create "standard" curl_socket()
2023-11-28 15:44:22 +01:00
bergware
b31beca2ec Update Helpers.php 2023-11-28 14:31:54 +01:00
bergware
02fe880652 Fix PHP8 errors 2023-11-28 14:30:44 +01:00
bergware
9a8fe9d80b Fix regression error in publish.php
- We still need the function "curl_socket"
2023-11-28 13:51:46 +01:00
bergware
4d4a52fc5e Update DashStats.page 2023-11-28 12:48:23 +01:00
bergware
8fde2e5c3a Nchan processes: only publish on changes 2023-11-28 12:19:09 +01:00
tom mortensen
8ef461432f Merge pull request #1527 from zackspear/fix/vue-components-azure-gray-theme-handling
fix(vue): azure & gray theme handling
2023-11-27 23:46:59 -08:00
tom mortensen
fff9c55a98 Merge pull request #1524 from SimonFair/NVME-PowerState
NVME power state
2023-11-27 23:45:59 -08:00
tom mortensen
b9bc7a6c43 Merge pull request #1523 from bergware/master
Styling enhancements
2023-11-27 23:45:28 -08:00
tom mortensen
d9e4aaa664 Merge pull request #1522 from ich777/master
Update rc.S & Add GRUB config to WebGUI
2023-11-27 23:44:56 -08:00
tom mortensen
9e01fd7c40 Merge pull request #1521 from SimonFair/Multi-disk-locations
Add storage override option
2023-11-27 23:44:21 -08:00
bergware
bd0c5c4e09 Publish messages only when active subscribers are present 2023-11-28 04:15:50 +01:00
bergware
989bef6130 Fix PHP8 errors 2023-11-28 01:19:02 +01:00
bergware
7bc581e77a Publish messages only when active subscribers are present 2023-11-28 00:56:57 +01:00
Zack Spear
da09581f92 fix(vue): azure & gray theme handling 2023-11-27 17:51:21 -05:00
f3522e7b5e - Add GRUB configuration to WebGUI
- Show only GRUB or SYSLINUX config in WebGUI
2023-11-27 21:14:49 +01:00
SimonFair
89d14027f0 Update Helpers.php 2023-11-26 19:34:19 +00:00
bergware
469244dacf Minor style format update 2023-11-26 12:06:33 +01:00
bergware
d2531eeb81 Minor azure/gray update 2023-11-26 11:44:34 +01:00
bergware
24359052f4 Minor azure/gray update 2023-11-26 11:42:34 +01:00
bergware
ffe3988a46 Minor style format update 2023-11-26 11:38:57 +01:00
bergware
b3aa15e8e6 Update DefaultPageLayout.php 2023-11-26 11:25:03 +01:00
bergware
e74d29f742 Enhanced boot page 2023-11-26 11:15:44 +01:00
bergware
ce87e71c48 Revert "Enhanced boot page"
This reverts commit 884887fe3c.
2023-11-26 11:05:21 +01:00
bergware
884887fe3c Enhanced boot page 2023-11-26 10:58:24 +01:00
bergware
73b35183aa Enhanced boot page 2023-11-26 10:34:52 +01:00
bergware
13c9915305 Enhanced boot page 2023-11-26 10:19:10 +01:00
bergware
138d356476 Enhanced boot page 2023-11-26 10:16:54 +01:00
bergware
f6ea92b523 Enhanced boot page 2023-11-26 10:00:25 +01:00
SimonFair
08e9ec6a2f Update Helpers.php 2023-11-25 17:22:10 +00:00
SimonFair
b07dfc9386 Update device_list 2023-11-25 17:16:27 +00:00
SimonFair
63762bfcd9 Initial commit. 2023-11-25 17:11:38 +00:00
bergware
755c541c29 Enhanced boot page 2023-11-25 15:28:10 +01:00
bergware
15509d0cff Update notice styling 2023-11-25 14:08:25 +01:00
bergware
025cc272c5 Update notice.png 2023-11-25 13:58:56 +01:00
bergware
fff29f3b53 Update notice styling 2023-11-25 13:49:33 +01:00
SimonFair
c636ab6029 Self test fix for NVMEs 2023-11-25 12:27:37 +00:00
bergware
e7406a997b Enhanced boot page
- Follow theme colors
- Include array messages
2023-11-25 12:10:27 +01:00
bergware
13db045dd2 Update notice styling 2023-11-25 09:26:17 +01:00
bergware
b437701540 Make _var() more universal 2023-11-24 22:42:43 +01:00
SimonFair
5f06519bdc Update helptext and codetidy. 2023-11-24 20:54:35 +00:00
bergware
4f36bb74ae Dashboard / Main page: adjust switch button location 2023-11-24 16:19:52 +01:00
SimonFair
9c85e6132f Fix UUID change in xml view 2023-11-24 14:23:18 +00:00
bergware
d132224b31 Merge remote-tracking branch 'upstream/master' 2023-11-24 15:14:50 +01:00
bergware
d0019abfc6 Show settings right aligned 2023-11-24 15:11:46 +01:00
bergware
00fa203f48 Show settings right aligned 2023-11-24 15:09:40 +01:00
bergware
44e49146de Show settings right aligned 2023-11-24 14:54:29 +01:00
bergware
b09e015234 Docker: improved configuration styling
- added icon to variable type
2023-11-24 14:53:53 +01:00
bergware
73bef37e54 Update Console.page 2023-11-24 12:21:41 +01:00
SimonFair
ec3b1e1f2b Update VMMachines.php 2023-11-23 19:44:33 +00:00
SimonFair
97496beeb7 Add override path support
Bug fix metadata on revert
2023-11-23 19:41:02 +00:00
SimonFair
4f88a29c8f Add override path support
bug fix for metadata on revert.
2023-11-23 19:39:49 +00:00
SimonFair
3d75dbc7d5 Remove nodatacow 2023-11-22 23:41:23 +00:00
c602a641ae Update rc.S
- Support for XFS boot
2023-11-22 22:39:03 +01:00
SimonFair
2987d3f4f8 Add storage override option
Add storage override to specify where images are created at add VM.
2023-11-21 21:43:07 +00:00
tom mortensen
b9be5cc943 Merge pull request #1518 from zackspear/refactor/6-13-feedback
refactor(vue): update feedback & improvements
2023-11-21 10:53:35 -08:00
tom mortensen
8db7dd714d Merge pull request #1520 from SimonFair/Multi-disk-locations
Add SR-IOV support for Intel iGPU.
2023-11-21 10:52:55 -08:00
tom mortensen
60066950e7 Merge pull request #1519 from SimonFair/Fix-prefix-in-diags
Remove prefix().
2023-11-21 10:51:12 -08:00
Zack Spear
373762c912 refactor(vue): state.php read case model from flash 2023-11-21 10:43:22 -08:00
Zack Spear
172a263856 revert: SelectCase cookie setter 2023-11-21 10:43:04 -08:00
SimonFair
eb5eb804f1 fix code 2023-11-21 18:34:13 +00:00
SimonFair
a2f4a82f57 fix code 2023-11-21 18:31:32 +00:00
SimonFair
2fa3e5090f fix code 2023-11-21 18:30:51 +00:00
SimonFair
e045a9e047 Add SR-IOV support for Intel iGPU. 2023-11-21 18:26:29 +00:00
SimonFair
f1d7a42658 Remove prefix. 2023-11-21 08:05:38 +00:00
Zack Spear
6318f12de2 fix: caseModel getting error 2023-11-20 19:28:07 -08:00
Zack Spear
46ce506107 refactor: SelectCase caseModel cookie setting 2023-11-20 18:34:50 -08:00
Zack Spear
95796946d9 refactor(vue): updateOs type fix 2023-11-20 18:26:49 -08:00
Zack Spear
0fb71bc3b6 fix(plg): third party reboot detection 2023-11-20 18:04:05 -08:00
Zack Spear
aaff2825d2 refactor(vue): support caseModel in callback inits 2023-11-20 18:00:12 -08:00
Zack Spear
44191cc68a feat: caseModel passed to web components 2023-11-20 18:00:12 -08:00
Zack Spear
8fbd03739d refactor(upc): dateFormat usage, thirdPartyDrivers message for updates 2023-11-20 18:00:11 -08:00
Zack Spear
02671a38d6 refactor(plg): include Translations wrapper in translation class 2023-11-20 18:00:11 -08:00
Zack Spear
44e7d811aa refactor: reboot details var name spelling 2023-11-20 18:00:11 -08:00
Zack Spear
6e8036f619 refactor: flash_backup _var usage Wrappers include 2023-11-20 18:00:11 -08:00
tom mortensen
7e785b9e1d Merge pull request #1516 from bergware/master
UPS: fix PHP8 error
2023-11-20 12:40:06 -08:00
bergware
582743f079 Simplify notifications
- Make View, History and Acknowledge the main actions
- Remove submenus
2023-11-18 20:47:44 +01:00
bergware
8adacee0a0 VM; change circle-o to dot-circle-o 2023-11-18 17:28:53 +01:00
bergware
222e3a68ee VM machines: insert space between text and icon 2023-11-18 17:24:37 +01:00
bergware
23236a9b08 UPS: fix PHP8 error 2023-11-16 22:35:53 +01:00
tom mortensen
eec6ce53f5 Merge pull request #1515 from bergware/master
GUI enhancements
2023-11-16 09:33:53 -08:00
bergware
6bb9c351a5 GUI search: update styling for black/white themes 2023-11-16 17:50:01 +01:00
bergware
66a642f918 VM machines: insert space between text and icon
Fix English phrase
2023-11-16 17:36:09 +01:00
bergware
c500553d8b My servers: fixed invalid translation 2023-11-16 12:27:25 +01:00
bergware
deb591208f GUI search: update styling for black/white themes 2023-11-16 11:30:56 +01:00
bergware
d38f83c3c2 Console settings: move help text from inline to helptext file 2023-11-16 11:30:27 +01:00
Tom Mortensen
3e74f3ecb4 slight change in where 'safe mode' is checked in installing 3rd party drivers 2023-11-15 15:46:05 -08:00
Tom Mortensen
e908db97f8 enclose arguemnt to emcmd() with single-quotes 2023-11-15 15:45:08 -08:00
tom mortensen
4979e4049b Merge pull request #1508 from SimonFair/Add-none-option-for-keymap-for-virtual-gpu
Add option for no keymap.
2023-11-14 09:18:56 -08:00
tom mortensen
07a24e3d5e Merge pull request #1507 from bergware/master
New device spin up/down logic
2023-11-14 09:18:13 -08:00
tom mortensen
f4c0f754bc Merge pull request #1506 from ich777/patch-3
Update diagnostics
2023-11-14 09:17:12 -08:00
tom mortensen
d10703369f Merge pull request #1504 from zackspear/refactor/update-os-demo-feedback
refactor: update os feedback
2023-11-14 09:16:30 -08:00
tom mortensen
1996730456 Merge pull request #1503 from ich777/local_console
Local Console settings
2023-11-14 09:15:53 -08:00
tom mortensen
63ba0d0895 Merge pull request #1501 from ich777/patch-2
Initial btrfs boot device support
2023-11-14 09:15:07 -08:00
tom mortensen
02b50c8721 Merge pull request #1498 from ich777/master
Update rc.S.cont
2023-11-14 09:14:40 -08:00
SimonFair
ed98550088 Add option for no keymap. 2023-11-14 16:09:40 +00:00
bergware
82da91c96c New device spin up/down logic
Based on implementation for beta 23
2023-11-14 13:40:11 +01:00
6dc260a173 Update Console.page
- Implemented changes suggested by @bergware
2023-11-14 12:10:21 +01:00
0eb913bba5 Update diagnostics
- add gpujson from gpu_statistics to diagnostics
2023-11-14 07:55:32 +01:00
2af0c3b088 Update Console.page
- Change drop down text for persistent bash history from No/Yes to Disabled/Enabled
2023-11-14 06:19:18 +01:00
Zack Spear
3f1b95dc49 refactor: flash_backup _var usage Wrappers include 2023-11-13 17:17:30 -08:00
Zack Spear
9dabbcdb9c refactor: re-add js functions with notes for future removal 2023-11-13 16:54:31 -08:00
Zack Spear
ead1adfc46 refactor: flash_backup _var usage 2023-11-13 16:50:10 -08:00
Zack Spear
9b2c5ad257 fix: creation of /var/tmp/unRAIDServer.txt for change log viewer 2023-11-13 16:37:36 -08:00
Zack Spear
d68205c1d5 refactor: spinner remove bg color from overlay to prevent wide animation out 2023-11-13 15:02:35 -08:00
Zack Spear
fac9142b62 chore: copyright comments 2023-11-13 14:59:09 -08:00
cabbdac3f5 Update rc.S.cont
- make sure to run rc.modules.local when unraidsafemode is enabled
2023-11-13 22:46:08 +01:00
Zack Spear
ba3bdf5f38 refactor: add loader to release note viewer on open 2023-11-13 13:40:02 -08:00
Zack Spear
f0f73fd24c refactor: spinner overlay cover entire page 2023-11-13 13:34:35 -08:00
tom mortensen
a1b2c69441 Merge pull request #1497 from zackspear/refactor/web-component-updates
Refactor/web component updates
2023-11-13 12:23:56 -08:00
tom mortensen
781fc20d16 Merge pull request #1502 from bergware/master
Several styling enhancements
2023-11-13 10:51:45 -08:00
2cb6e86f93 - Create page for Local Console
- Create console script
- Create rc.keymap and modify default ot be compatible with local console settings
- Change rc.setterm to be compatible with local console settings
- Change rc.local to be compatible with persistent bash history
2023-11-13 19:42:44 +01:00
bergware
6cd3c0b47a GUI search: fix javascript errors 2023-11-13 13:25:24 +01:00
bergware
ff6c60b156 GUI search: minor code refactoring 2023-11-13 13:18:01 +01:00
bergware
cdc7e59e38 GUI search: fix javascript errors 2023-11-13 13:02:12 +01:00
bergware
8b248a75ff GUI search: fix javascript errors 2023-11-13 12:50:17 +01:00
bergware
5cd3309251 GUI search: fix javascript errors 2023-11-13 12:47:18 +01:00
8a24f617ec Update rc.S
- change discard from the default async to sync since usually not much writes happening on the boot device and performance hit should be negligible
2023-11-13 12:10:33 +01:00
bergware
e11d514c7f GUI search: minor code refactoring 2023-11-13 11:27:42 +01:00
bergware
677c2c716f GUI search: minor code refactoring 2023-11-13 11:23:12 +01:00
bergware
2ad6b49479 GUI search: minor code refactoring 2023-11-13 04:45:55 +01:00
bergware
e5f6d798b6 GUI search: themes black/white updates 2023-11-13 04:39:13 +01:00
bergware
86803f893b GUI search: theme azure/gray updates 2023-11-13 04:37:00 +01:00
bergware
16e0206063 GUI search: minor code refactoring 2023-11-13 02:29:44 +01:00
bergware
14cc2f88e1 GUI search: themes azure/gray control fix 2023-11-13 02:06:43 +01:00
bergware
a86651fafb GUI search: themes azure/gray style fix 2023-11-13 01:12:41 +01:00
bergware
4187e0bf14 GUI search: themes azure/gray style fix 2023-11-13 01:11:05 +01:00
bergware
33ff5ff1af GUI search: minor code refactoring 2023-11-13 00:48:07 +01:00
bergware
941c4f4dc2 GUI search: themes azure/gray style fix 2023-11-13 00:47:32 +01:00
bergware
23e6b585cc GUI search: rename folder part to dynamix family 2023-11-13 00:15:11 +01:00
bergware
56c5a6c367 GUI search: theme black/white css fix 2023-11-12 23:29:21 +01:00
bergware
6274c6d3f9 GUI search: place jquery script in file 2023-11-12 23:04:42 +01:00
bergware
2c2bcbffc6 GUI search: minor code refactoring 2023-11-12 22:33:20 +01:00
bergware
eee838ee2c GUI search: themes black/white: place search icon inside input field 2023-11-12 22:16:00 +01:00
bergware
a9d91c8158 Themes gray/azure: fix font size 2023-11-12 21:39:53 +01:00
bergware
3d210bcf28 GUI search: fix themes black/white 2023-11-12 21:24:47 +01:00
bergware
919e941aa1 GUI search: fix themes azure/gray 2023-11-12 21:13:03 +01:00
bergware
7307da74d0 GUI search: make search results relative to input box position 2023-11-12 20:08:35 +01:00
bergware
d23eb14f0a GUI search: azure/gray styling update 2023-11-12 19:46:02 +01:00
bergware
4915a5c24f GUI search: use leading tabs 2023-11-12 18:39:03 +01:00
bergware
e8a47c3404 Revert "Update gui_search.page"
This reverts commit 31855f912e.
2023-11-12 18:37:07 +01:00
bergware
efba7faf92 Revert "GUI search: use leading tabs"
This reverts commit 916bc643ec.
2023-11-12 18:36:05 +01:00
bergware
916bc643ec GUI search: use leading tabs 2023-11-12 18:35:17 +01:00
bergware
31855f912e Update gui_search.page 2023-11-12 18:29:47 +01:00
bergware
3b3854e6f3 GUI search: use dynamix folder organization 2023-11-12 18:10:34 +01:00
bergware
ea95b2468e GUI search: remove unused hook file 2023-11-12 18:06:35 +01:00
bergware
81cc75d320 GUI search: move css styling to separate files 2023-11-12 18:02:49 +01:00
bergware
ba32b37941 GUI search: enhanced styling of search box
Azure/Gray themes: show search box along with menu item
2023-11-12 17:32:39 +01:00
bergware
d5936462a8 Language: improved button control 2023-11-12 15:16:51 +01:00
cec8287c3f Initial btrfs boot device support
- detect if boot device is btrfs or fall back to vfat
- set discard=async for btrfs
- correct permissions for NONVFAT boot after bzfirmware is mounted
2023-11-12 11:43:57 +01:00
tom mortensen
49b7df2d2d Merge pull request #1499 from SimonFair/Fix-spice-web-connect-
Fix spice autoconnect
2023-11-11 09:24:57 -08:00
SimonFair
d9b9fac0a1 Update Custom.form.php 2023-11-11 12:04:14 +00:00
SimonFair
e70d1fe12b Fix additional title text 2023-11-11 11:43:23 +00:00
SimonFair
72dfdd7172 Fix spice autoconenct
Update text from VNC to VM Console for titles and placeholders
2023-11-11 11:30:22 +00:00
Zack Spear
af2ff4002c refactor: web component translations class usage 2023-11-09 16:50:08 -08:00
Zack Spear
f90f091cba chore: myservers2 formatting 2023-11-09 16:40:50 -08:00
Zack Spear
35354c6117 refactor: web component server state to class 2023-11-09 16:40:31 -08:00
Zack Spear
419af0403d refactor: latest web component build 2023-11-09 16:38:36 -08:00
Zack Spear
6e9ee59ac7 refactor: Downgrade class usage and clean up 2023-11-09 16:38:09 -08:00
Zack Spear
caf7a0a558 chore: Update page formatting 2023-11-09 16:37:42 -08:00
348ebc3bc2 Update rc.S.cont
only execute rc.modules if unraidsafemode is not set
2023-11-09 11:06:05 +01:00
ljm42
79e4bb27c0 remove update banner from header
is now handled by web component
2023-11-08 08:57:59 -07:00
ljm42
02a446d8b9 allow showchanges to access /boot/previous/changes.txt 2023-11-08 08:55:38 -07:00
Zack Spear
6d64b53ac7 refactor: downgrade & update os web components 2023-11-07 16:46:40 -08:00
Zack Spear
ff3db071b9 Merge branch 'master' into refactor/web-component-updates 2023-11-07 16:18:42 -08:00
tom mortensen
dfa2199332 Merge pull request #1494 from SimonFair/QEMU-Cmdline-and-Clocks
Add offset and timer support
2023-11-07 09:04:19 -08:00
SimonFair
07176e8ff0 Update helptext for timers 2023-11-07 07:44:46 +00:00
SimonFair
baa1fa5327 Fix table spacing 2023-11-06 21:49:24 +00:00
tom mortensen
704cc582f1 Merge pull request #1495 from Squidly271/patch-5
Unlimited Width Plugin Obsolete
2023-11-06 08:50:46 -08:00
tom mortensen
605f228937 Merge pull request #1493 from bergware/master
Display settings: new setting "width"
2023-11-06 08:48:45 -08:00
bergware
dbb42cdd1b css update for themes gray / azure 2023-11-06 12:52:05 +01:00
bergware
10e3f0b8f7 Revert "Dashboard: css update for themes gray / azure"
This reverts commit 05a98e4aef.
2023-11-06 12:47:53 +01:00
bergware
05a98e4aef Dashboard: css update for themes gray / azure
Make 2 columns display fit on mobile devices
2023-11-06 12:22:39 +01:00
bergware
4d673a650b set-password: update mobile view 2023-11-06 12:17:58 +01:00
bergware
67a998c8b2 VMs: change icon to open circle 2023-11-06 09:33:07 +01:00
bergware
52b0358e09 Dashboard: set 3s lock when hovering over system resources 2023-11-06 09:23:50 +01:00
SimonFair
78c0aab5a5 Update Libre and OpenELEC Templates. 2023-11-05 23:51:49 +00:00
bergware
6c5f1f7438 Dashboard: set 5s lock when hovering over system resources
This prevents extensive cpu load when hovering over the bars
2023-11-05 21:14:27 +01:00
SimonFair
339f414515 remove testing code. 2023-11-05 16:58:55 +00:00
SimonFair
7308a5b1fa Remove duplicate startnow checkbox 2023-11-05 16:31:43 +00:00
SimonFair
108c27c8ad Code clean up and second set of buttons after advanced options 2023-11-05 16:29:00 +00:00
SimonFair
8f1fa9de6d Change timer defaults for new VM if hyperv changes 2023-11-05 15:45:33 +00:00
Squidly271
9c4517df58 Unlimitied Width Plugin Obsolete
Rendered obsolete by https://github.com/unraid/webgui/pull/1493

Finally :)
2023-11-05 09:25:36 -05:00
SimonFair
ea6500ae35 Add timer support 2023-11-05 14:02:38 +00:00
bergware
247786bc5c Display settings: new setting "width" 2023-11-05 12:51:47 +01:00
bergware
c10f57d7d5 Display settings: new setting "width" 2023-11-05 12:49:46 +01:00
bergware
e848e346d1 Display settings: new setting "width" 2023-11-05 12:47:23 +01:00
bergware
bafcba3269 Display settings: new setting "width" 2023-11-05 12:33:51 +01:00
bergware
0669cacb6a Display settings: new setting "width" 2023-11-05 12:32:49 +01:00
bergware
b01c0b9aff Display settings: new setting "width" 2023-11-05 11:44:47 +01:00
bergware
c7a1caba8a Display settings: new setting "width" 2023-11-05 11:38:19 +01:00
bergware
c10c255f2d Display settings: new setting "width" 2023-11-05 11:24:04 +01:00
bergware
d903a1da07 Update helptext.txt 2023-11-05 11:08:18 +01:00
bergware
78c704beba Display settings: new setting "width"
width = boxed (default, content width is constrained)
width = unlimited (content width is unlimited for higher resolutions)

This should stop the complaints about dashboard not displaying three columns on wide screens.
2023-11-05 11:02:32 +01:00
tom mortensen
abc4ef1c80 Merge pull request #1492 from SimonFair/QEMU-Cmdline-and-Clocks
QEMU cmdline
2023-11-04 18:15:05 -07:00
tom mortensen
35d863fa4a Merge pull request #1491 from bergware/master
Code alignment
2023-11-04 18:14:22 -07:00
SimonFair
a18a6032fd Update get Clock function 2023-11-04 20:23:03 +00:00
SimonFair
21c8d79c71 Fix QEMU args value 2023-11-04 11:45:39 +00:00
SimonFair
f725ea1acd Update libvirt_helpers.php 2023-11-04 11:38:07 +00:00
SimonFair
b6ff572965 Merge remote-tracking branch 'upstream/master' into QEMU-Cmdline-and-Clocks 2023-11-04 11:35:38 +00:00
SimonFair
e0a55a18be Add QEMU args Support 2023-11-04 11:32:15 +00:00
SimonFair
9f39b162d0 Add QEMU arg Support 2023-11-04 11:31:46 +00:00
bergware
3a073ed4bd Code alignment 2023-11-04 10:05:51 +01:00
Tom Mortensen
879a350963 Merge branch 'master' of github.com:unraid/webgui 2023-11-03 11:06:46 -07:00
tom mortensen
53a683fe07 Merge pull request #1490 from bergware/master
Fixes for ZFS subpools
2023-11-03 11:03:51 -07:00
bergware
8706f118eb File Manager: fix incorrect references 2023-11-03 18:06:40 +01:00
bergware
f340ab8635 Updated copyright year to 2023 2023-11-03 12:49:46 +01:00
bergware
6f8c5ec69e Updated copyright year to 2023 2023-11-03 12:45:07 +01:00
bergware
dbde622c27 Update Acknowledge.php 2023-11-03 12:40:31 +01:00
bergware
c9eb2593cf Updated copyright year to 2023 2023-11-03 12:36:03 +01:00
bergware
e60f112959 Docker settings: always show custom network type
network type is forced to macvlan when no bridging is enabled
2023-11-03 11:29:25 +01:00
tom mortensen
3ed29c1f37 Merge pull request #1486 from ich777/patch-1
Custom rsyslog config files
2023-11-02 09:34:17 -07:00
bergware
58ad4a8c87 Fixes for ZFS subpools 2023-11-02 13:51:41 +01:00
bergware
76757b5cf0 Fixes for ZFS subpools 2023-11-02 13:07:48 +01:00
bergware
ec125653d6 Fixes for ZFS subpools 2023-11-02 12:10:58 +01:00
bergware
1132e39eeb Fixes for ZFS subpools 2023-11-02 11:47:55 +01:00
bergware
8d43f62910 Update device_list 2023-11-02 11:28:45 +01:00
bergware
44e2a8ca6e Fixes for ZFS subpools 2023-11-02 05:04:55 +01:00
bergware
0e8bb053f9 Update ToggleState.php 2023-11-02 04:56:13 +01:00
bergware
46ad2a266d Fixes for ZFS subpools 2023-11-02 04:55:10 +01:00
bergware
af3a468654 Fixes for ZFS subpools 2023-11-02 04:31:07 +01:00
bergware
6bea55b8d2 Update DeviceInfo.page 2023-11-02 03:13:47 +01:00
bergware
e6c594e4dd Update CacheDevices.page 2023-11-02 03:13:35 +01:00
bergware
76660f6ca7 Update ArrayDevices.page 2023-11-02 03:07:36 +01:00
bergware
b037b2f1d7 Update DeviceInfo.page 2023-11-02 03:04:41 +01:00
bergware
8a94509dc6 Update CacheDevices.page 2023-11-02 03:00:03 +01:00
bergware
193a0b2270 Update device_list 2023-11-02 02:55:27 +01:00
bergware
5206813efe Update DeviceInfo.page 2023-11-02 02:55:22 +01:00
bergware
582bdb1507 Update device_list 2023-11-02 02:27:37 +01:00
bergware
ad456ee5a9 Update device_list 2023-11-02 02:18:53 +01:00
bergware
7154cc48fe Fixes for ZFS subpools 2023-11-02 01:56:26 +01:00
bergware
d09c9142e8 Remove Erase button from ZFS subpools 2023-11-02 01:56:06 +01:00
bergware
c709c45413 Fix timing issue when changing slots 2023-11-02 01:55:09 +01:00
bergware
bbf495a8ce Device_list fixes
- Allow changing slots when pool is erased
- Fix changing slots sometimes not updating the GUI
2023-11-02 01:54:26 +01:00
bergware
5686a8b5ae Device_list: add warning to disabled disk 2023-11-01 21:46:13 +01:00
bergware
2d39033930 Device_list: add warning to disabled disk 2023-11-01 21:43:57 +01:00
bergware
01fea8a0f0 Device_list: update help text for pools 2023-11-01 21:22:01 +01:00
bergware
54eae13ef4 Fixes for ZFS subpools 2023-11-01 20:33:36 +01:00
bergware
0be84e8fa0 Fixes for ZFS subpools 2023-11-01 20:01:27 +01:00
bergware
b7b7d2b01c Fixes for ZFS subpools 2023-11-01 19:57:18 +01:00
bergware
eef112fbd2 Fixes for ZFS subpools 2023-11-01 19:51:40 +01:00
bergware
304be089ee Fixes for ZFS subpools 2023-11-01 19:02:29 +01:00
bergware
839745a48f Update device_list 2023-11-01 18:50:07 +01:00
bergware
491bc80181 Update device_list 2023-11-01 18:39:24 +01:00
bergware
f03d8a0090 Fixes for ZFS subpools
ZFS subpools have a tilde in their name, which is an illegal character in PHP keys and HTML ids. A tilde is automatically replaced to avoid conflicts.

The MAIN page shows the total of a ZFS pool at end, also when subpools are part of it.
2023-11-01 18:18:22 +01:00
87e4de6084 Custom rsyslog config files
This allows to create custom config files for rsyslog in `/boot/config/rsyslog.d/` and link them on boot in the directory `/etc/rsyslog.d/`
2023-10-31 10:36:45 +01:00
Tom Mortensen
35da27cbab Merge branch 'master' of github.com:unraid/webgui 2023-10-30 09:47:34 -07:00
tom mortensen
019a3028d6 Merge pull request #1483 from SimonFair/VM-template-enhancements-for-Windows-VMs
Additional multifunction changes
2023-10-30 09:47:00 -07:00
SimonFair
b10bceac79 Additional multifunction changes
Slot has to be > 1 for pc and 0 for q35
2023-10-29 17:29:32 +00:00
tom mortensen
00a0087d2b Merge pull request #1482 from SimonFair/VM-template-enhancements-for-Windows-VMs
Fix to multifunction which fails with non zero slot on beta21
2023-10-28 14:03:06 -07:00
SimonFair
ce53616c6b Fix to multifunction which fails with non zero slot on beta21 2023-10-28 21:42:25 +01:00
Tom Mortensen
98fe14560b remove pool name suffix from subpool names displayed on Main 2023-10-28 09:18:18 -07:00
tom mortensen
23cf5da832 Merge pull request #1480 from bergware/master
Make $subpools a global variable (single occurence)
2023-10-28 09:16:05 -07:00
tom mortensen
66b458e53a Merge pull request #1474 from SimonFair/VM-template-enhancements-for-Windows-VMs
VM  template enhancements for windows vms
2023-10-28 09:15:17 -07:00
SimonFair
7663e0ca68 Fix errors in VS 2023-10-28 13:39:52 +01:00
bergware
030127933e DefaultPageLayout: move styling from inline to file 2023-10-28 11:02:49 +02:00
bergware
d4b1366dae Update DateTime.page 2023-10-28 10:13:39 +02:00
bergware
e7b31f410c Update DateTime.page 2023-10-28 09:46:41 +02:00
bergware
424ece83d0 Update update_3 2023-10-27 23:28:31 +02:00
bergware
7042fbc3ce Revert "Update Wrappers.php"
This reverts commit 0b70d9800d.
2023-10-27 23:06:08 +02:00
bergware
49ae347b1a Revert "Update update_3"
This reverts commit 889a002884.
2023-10-27 23:06:01 +02:00
bergware
889a002884 Update update_3 2023-10-27 23:01:18 +02:00
bergware
0b70d9800d Update Wrappers.php 2023-10-27 22:56:17 +02:00
bergware
41d5c0d536 Update Wrappers.php 2023-10-27 22:36:44 +02:00
bergware
e9af9d2dba Update Wrappers.php 2023-10-27 22:34:44 +02:00
bergware
16b1608856 Update update_3 2023-10-27 22:16:55 +02:00
bergware
f6ae39c70b Update update_3 2023-10-27 22:00:06 +02:00
bergware
9feff82fac Update update_3 2023-10-27 21:55:10 +02:00
bergware
323376b8e0 Date-Time: disable buttons asap 2023-10-27 21:33:45 +02:00
bergware
13316fc3c2 Move date & time settings from "Display Settings" to "Date & Time Settings" 2023-10-27 20:53:58 +02:00
bergware
88e4d42c55 Dashboard: display date and time in user selected formats 2023-10-27 20:32:11 +02:00
bergware
fcb72a9b5c Move date & time settings from "Display Settings" to "Date & Time Settings" 2023-10-27 19:48:16 +02:00
bergware
16803cc7f1 Move date & time settings from "Display Settings" to "Date & Time Settings" 2023-10-27 19:32:27 +02:00
bergware
0607942243 Update Dispatcher.php 2023-10-27 19:11:16 +02:00
bergware
b06fa2b659 Move date & time settings from "Display Settings" to "Date & Time Settings" 2023-10-27 18:53:30 +02:00
bergware
eb0efc0d5c Update SysDriversHelpers.php 2023-10-27 15:13:38 +02:00
bergware
adef4eb786 SysDevs: fix regression error 2023-10-27 15:09:15 +02:00
bergware
e6518f69e9 SysDrivers: improved styling 2023-10-27 14:46:22 +02:00
bergware
ecdce37046 SysDrivers: improved styling 2023-10-27 14:17:10 +02:00
bergware
25033cfacc SysDrivers: improved styling 2023-10-27 14:14:49 +02:00
bergware
03132c0dd5 SysDrivers: improved styling 2023-10-27 14:11:54 +02:00
bergware
a29d3220f0 SysDrivers: improved styling 2023-10-27 14:09:02 +02:00
bergware
28567ed365 SysDrivers: improved styling 2023-10-27 13:54:29 +02:00
bergware
5c627a44cd SysDrivers: improved styling 2023-10-27 13:51:15 +02:00
bergware
4bbccde8f7 SysDrivers: improved styling 2023-10-27 13:49:16 +02:00
bergware
b04c2e38a3 SysDrivers: improved styling 2023-10-27 13:28:43 +02:00
bergware
38f52e637f SysDrivers: improved styling 2023-10-27 13:25:18 +02:00
bergware
7a2f8edc5f Dashboard: display date and time in user selected formats 2023-10-27 12:59:21 +02:00
bergware
a0cc91b24c Dashboard: display date and time in user selected formats 2023-10-27 12:56:14 +02:00
bergware
afa05760f1 Dashboard: display date and time in user selected formats 2023-10-27 12:42:36 +02:00
bergware
410ea26b0e Dashboard: display date and time in user selected formats 2023-10-27 12:40:38 +02:00
bergware
41e661505b Dashboard: show timezone as UTC offset with DST indicator 2023-10-27 11:52:07 +02:00
bergware
58575efa9d Dashboard: show timezone as UTC offset 2023-10-27 11:00:17 +02:00
bergware
2910c2e921 Dashboard: show timezone as UTC offset 2023-10-27 10:57:42 +02:00
bergware
99d7c3a5b5 Dashboard: show timezone as GMT offset 2023-10-27 10:55:39 +02:00
bergware
094ffccbdc SysDrivers: improved styling 2023-10-27 10:31:35 +02:00
bergware
d006f3da4d SysDrivers: improved styling 2023-10-27 10:29:28 +02:00
bergware
49c8980bb1 Make $subpools a global variable (single occurence) 2023-10-26 23:33:41 +02:00
bergware
b072f98787 Make $subpools a global variable (single occurence) 2023-10-26 23:28:30 +02:00
Tom Mortensen
3b2540a2fc corrections displaying zfs profiles 2023-10-26 14:09:36 -07:00
Tom Mortensen
944fcc6095 add missing rc.mysqld - not used but added for completeness 2023-10-26 14:01:44 -07:00
tom mortensen
b4e29e7c3b Merge pull request #1478 from unraid/remove-legacy-migration
remove legacy unraid.net settings migration
2023-10-26 12:41:17 -07:00
tom mortensen
5df3dbf911 Merge pull request #1477 from unraid/remove-legacy-certs
remove support for legacy unraid.net certs
2023-10-26 12:41:02 -07:00
tom mortensen
800614ea0d Merge pull request #1479 from bergware/master
Miscellaneous updates and fixes
2023-10-26 12:39:51 -07:00
bergware
dc760f17c7 Update SysDrivers.css 2023-10-26 21:34:09 +02:00
bergware
7805f1fbe6 Update SysDrivers.css 2023-10-26 21:32:03 +02:00
bergware
0cac30a0e1 Update SysDrivers.css 2023-10-26 21:31:26 +02:00
bergware
b5e8481848 SysDrivers: adjusted column widths 2023-10-26 21:27:45 +02:00
bergware
43402f3eba SysDrivers: place edit icon at bottom 2023-10-26 21:23:21 +02:00
bergware
52a42ce3dc SysDrivers: place edit icon at bottom 2023-10-26 21:17:24 +02:00
bergware
f92ec16f8e SysDrivers: fix regression errors 2023-10-26 20:08:55 +02:00
bergware
42a24c4136 Use "null coalescing assignment" operator for $docroot 2023-10-26 18:22:27 +02:00
bergware
d4e8617eef Use "null coalescing assignment" operator for $docroot 2023-10-26 18:17:44 +02:00
bergware
33a64665ea Use "null coalescing assignment" operator for $docroot 2023-10-26 18:10:11 +02:00
bergware
af3eee47ae Dashboard: update time when timezone is changed 2023-10-26 17:32:25 +02:00
bergware
72683fdab0 Copyright update 2023-10-26 17:18:00 +02:00
bergware
c9b86b8853 Copyright update 2023-10-26 17:14:53 +02:00
bergware
dc700749a2 Copyright update 2023-10-26 17:11:36 +02:00
bergware
9cc9b70c54 Copyright update 2023-10-26 17:08:38 +02:00
bergware
de4aa58e2a Copyright update 2023-10-26 17:04:48 +02:00
bergware
ceeb125ba9 Use "null coalescing assignment" operator for $docroot 2023-10-26 14:00:15 +02:00
bergware
a671e237a0 VM machines: add translation 2023-10-26 02:52:44 +02:00
bergware
d1d0880ceb SysDrivers: fix PHP8 errors 2023-10-26 02:43:31 +02:00
bergware
2235eefe09 Cache devices: add translation 2023-10-26 02:28:37 +02:00
bergware
c60156f6e6 Cache devices: add translation 2023-10-26 02:26:56 +02:00
bergware
c3826a5416 Dashboard: update time when timezone is changed 2023-10-26 02:06:06 +02:00
bergware
92b2179abf Vars: suppress $webComponentTranslations content 2023-10-26 01:13:36 +02:00
bergware
e2bfc62c02 Fix subpool errors 2023-10-26 01:00:18 +02:00
bergware
dd1fc4a04e Fix subpool errors 2023-10-26 00:48:49 +02:00
bergware
65b73b3c40 Fix PHP8 errors 2023-10-26 00:46:12 +02:00
bergware
5df25dd3e2 Fix subpool errors 2023-10-26 00:45:39 +02:00
bergware
de4e0f1e14 VM manager: display and dialog fixes 2023-10-25 22:57:19 +02:00
bergware
39faad3430 VM manager: display and dialog fixes 2023-10-25 22:53:00 +02:00
bergware
9bd92dca96 VM manager: display and dialog fixes 2023-10-25 22:50:25 +02:00
bergware
6734542fac VM manager: display and dialog fixes 2023-10-25 22:48:39 +02:00
bergware
2adac042ae SysDrivers: fix PHP8 errors 2023-10-25 21:07:03 +02:00
bergware
e3addef78d ups_status: fix PHP8 error 2023-10-25 21:01:23 +02:00
bergware
0b5a3990ad SysDrivers: fix PHP8 errors 2023-10-25 21:01:02 +02:00
bergware
9e61816983 Cached devices: fix templates 2023-10-25 21:00:43 +02:00
bergware
698071fa00 Revert "Cache devices: fix GUI when initially no pools are defined"
This reverts commit 341df0375f.
2023-10-25 19:32:09 +02:00
bergware
cb27feffd6 VM machines: fix ISOs dialog 2023-10-25 19:23:01 +02:00
bergware
341df0375f Cache devices: fix GUI when initially no pools are defined 2023-10-25 19:19:10 +02:00
bergware
de504d626f Make dialog window appearance more consistent 2023-10-25 18:54:41 +02:00
bergware
6d20bdc430 Make dialog window appearance more consistent 2023-10-25 18:50:51 +02:00
bergware
8d43fc8aa5 Cache Devices: make style consistent 2023-10-25 09:24:16 +02:00
ljm42
6ca0a39686 remove legacy unraid.net settings migration 2023-10-24 17:56:01 -07:00
ljm42
4f5b94f83b remove support for legacy unraid.net certs 2023-10-24 17:24:53 -07:00
ljm42
42e2ee6e39 remove support for legacy unraid.net certs 2023-10-24 17:17:10 -07:00
Tom Mortensen
25ccb39fa0 Fix comment in rc.nginx:
php-fpm socket name is php-fpm, not php5-fpm
Removed a couple files no longer needed:
  wrap_get.php
  wrap_post.php
2023-10-24 11:08:20 -07:00
tom mortensen
a1172a1695 Merge pull request #1476 from ich777/master
System Drivers: Just for the looks
2023-10-24 11:01:18 -07:00
tom mortensen
64d13509bf Merge pull request #1475 from unraid/fix-nginx
nginx: use the new http2 directive
2023-10-24 11:00:52 -07:00
d008f5a5f0 Just for the looks
- only add space if version number from module is found
2023-10-24 11:54:52 +02:00
ljm42
594ff1d642 nginx: use the new http2 directive 2023-10-23 16:42:06 -07:00
tom mortensen
bcedb464b0 Merge pull request #1473 from SimonFair/VM-Manager-GPU-display
Additional VM Manager Changes
2023-10-22 08:04:34 -07:00
tom mortensen
b5053fabe2 Merge pull request #1472 from desertwitch/fix-cookies
Fix browsers leaving dashboard visibility cookies in malformed state
2023-10-22 08:03:54 -07:00
SimonFair
c9b8d13261 Update libvirt.php 2023-10-21 15:58:09 +01:00
SimonFair
1ba8f32464 Add hypeclock for windows machines 2023-10-21 14:58:40 +01:00
SimonFair
f86df19b7d Add migratable help text. 2023-10-21 11:55:58 +01:00
SimonFair
b04b5d3519 Add option to set cpu migration
Support is only on host passthrough not custom.
2023-10-21 10:54:15 +01:00
SimonFair
7b181bd71a Add cpumigrate field 2023-10-20 18:31:07 +01:00
SimonFair
daf3393398 Additional VM Manager Changes 2023-10-19 21:00:34 +01:00
tom mortensen
0d19b89e78 Merge pull request #1471 from SimonFair/VM-Manager-GPU-display
Show all graphics cards
2023-10-19 10:36:59 -07:00
desertwitch
da23a245a2 clean up visibility cookies left in malformed state 2023-10-19 16:49:43 +02:00
SimonFair
2d21f674ff Show all graphics cards
Add IP addresses to title on name.
2023-10-18 23:02:50 +01:00
tom mortensen
cc6c997e58 Merge pull request #1469 from ich777/master
Add ntfy.sh to notification agents
2023-10-17 10:16:37 -07:00
tom mortensen
4362ce7028 Merge pull request #1468 from bergware/master
Miscellaneous fixes and updates
2023-10-17 10:16:11 -07:00
tom mortensen
8228f2dc13 Merge pull request #1466 from unraid/intelephense
Add libvirt-php to intelephense.stubs
2023-10-17 10:15:12 -07:00
tom mortensen
2f8b0f4ce3 Merge pull request #1464 from SimonFair/Vm-Multifunction-support
VM multifunction support
2023-10-17 10:14:00 -07:00
SimonFair
e33ec1466e SystemDrivers add version
Add version to module

Module (Version)
2023-10-17 17:16:20 +01:00
bergware
a30cac6822 Display: reset dashboard tiles when switching language 2023-10-17 15:09:18 +02:00
bergware
b2afe183fe Display: reset dashboard tiles when switching language 2023-10-17 15:03:50 +02:00
bergware
75c1c8a7a0 Display: reset dashboard tiles when switching language 2023-10-17 14:55:03 +02:00
bergware
9a97d3087d Merge remote-tracking branch 'upstream/master' 2023-10-17 12:05:14 +02:00
bergware
688927fd53 Dashboard: add timezone indicator 2023-10-17 12:05:04 +02:00
de9bf3d308 Add ntfy.sh icon 2023-10-17 11:24:19 +02:00
72f977f19b Add ntfy.sh to notification agents 2023-10-17 11:23:28 +02:00
bergware
ca7e1efdfe Dashboard: add hyperlink to clock 2023-10-17 09:52:08 +02:00
bergware
a6278fb671 device_list: fix missing parameter 2023-10-17 09:51:47 +02:00
bergware
cd190843ab container_size: rename $unit to $units 2023-10-17 09:51:28 +02:00
ljm42
b2db430510 Add libvirt-php to intelephense.stubs
... in the VS Code workspace settings file. Prevents Intelephense from complaining about libvirt functions
2023-10-16 15:22:45 -07:00
SimonFair
8fc34e3f4a Add PCI Other multifunction support. 2023-10-16 20:42:36 +01:00
tom mortensen
b7f2928d4a Merge pull request #1465 from bergware/master
rc.scripts: prevent service binding on '0' addresses
2023-10-16 12:23:29 -07:00
bergware
5adacfba98 white theme: minor style fix 2023-10-16 19:11:13 +02:00
bergware
ddf80158a9 VMsettings: fix typo 2023-10-16 18:27:54 +02:00
bergware
b3cd2b53dc DockerContainers: remove redundant brackets 2023-10-16 18:18:35 +02:00
bergware
0f455a69a5 DockerClient: remove unnecessary assignment 2023-10-16 18:14:34 +02:00
bergware
1d031aa262 wireguard update: add explanation about parsing 2023-10-16 17:53:51 +02:00
SimonFair
bde58c0298 Revise processing 2023-10-16 13:24:54 +01:00
bergware
4581506883 wireguard update: add explanation about parsing 2023-10-16 12:30:24 +02:00
bergware
dab8b99c9c minor syntax update 2023-10-16 12:18:57 +02:00
bergware
855da15b23 Fix typos 2023-10-16 12:15:16 +02:00
bergware
9f65dedda9 rc.scripts: prevent service binding on '0' addresses 2023-10-16 11:04:30 +02:00
tom mortensen
e7abf704c5 Merge pull request #1462 from bergware/master
Miscellaneous updates and fixes
2023-10-15 14:24:33 -07:00
tom mortensen
d8d054f8fa Merge pull request #1463 from SimonFair/PHP-VM-Manager-Fixes
PHP and Code tidy fixes
2023-10-15 14:21:06 -07:00
bergware
646314051b Minor code cleanup 2023-10-15 16:34:35 +02:00
bergware
9d788f010f VM snapshot: updated remove dialog 2023-10-15 16:29:07 +02:00
bergware
903a630fd0 VM snapshot: updated remove dialog 2023-10-15 16:27:55 +02:00
bergware
5d6cbbd3a6 Dialog window: adjust height 2023-10-15 16:22:30 +02:00
bergware
b2fcdf1d32 VM menu: add space in text 2023-10-15 16:05:57 +02:00
bergware
ef26fb3f57 Revert "VM manager: minor icon update"
This reverts commit ab661ccc06.
2023-10-15 15:50:53 +02:00
bergware
ab661ccc06 VM manager: minor icon update 2023-10-15 15:47:08 +02:00
bergware
a47cea481f SysDrivers: icon update 2023-10-15 15:37:50 +02:00
bergware
5a5b7f127b Docker: minor style update 2023-10-15 15:24:12 +02:00
bergware
3e1801faa0 Docker: minor style update 2023-10-15 15:18:09 +02:00
bergware
fec05e98bf Dashboard: minor icon update 2023-10-15 14:52:56 +02:00
bergware
536d990ee1 Dashboard: show time in header of collapsed tile 2023-10-15 12:18:16 +02:00
SimonFair
43465bfd35 Disable input if Virtual.
Add Support for OtherPCI Devices
2023-10-15 11:16:20 +01:00
bergware
7cd7c4b897 Dashboard: show time in header of collapsed tile 2023-10-15 12:11:24 +02:00
bergware
069f527445 Wireguard: fix LAN access when vhost interface is used 2023-10-15 10:33:34 +02:00
bergware
801c33a832 Wireguard: fix LAN access when vhost interface is used 2023-10-15 10:17:39 +02:00
SimonFair
b4bd84cd03 Update libvirt.php 2023-10-14 23:48:43 +01:00
SimonFair
83d02ea7ff Initial commit of multifunction support
Need to remove option for virtual gpus.
2023-10-14 23:46:31 +01:00
bergware
ed015569a7 Merge remote-tracking branch 'upstream/master' 2023-10-15 00:06:45 +02:00
bergware
416f8c4ceb Fix PHP8 errors 2023-10-14 23:37:53 +02:00
bergware
58a4fb601a rc.S: use absolute path 2023-10-14 22:46:39 +02:00
bergware
7715e09bef styling min width 2023-10-14 20:42:15 +02:00
bergware
65c8f4790e default-azure.css: remove unused entry 2023-10-14 20:32:32 +02:00
bergware
46148e7fb6 default-black.css: fix typo 2023-10-14 20:16:30 +02:00
bergware
ecde592124 snaphots: several updates for Dashboard and VMs page 2023-10-14 20:09:04 +02:00
bergware
202cb8c222 Move inline styling in page files to dedicated css files
Instead of styling defined inside a page file, these settings are now kept in a dedicated css file. This has several advantages:

- It comes much easier to maintain styling, all css files are easy to find and update
- Browser can cache css files, which may improve page loading time
- Separate theme css files exist, no more need to make selection by coding

- This PR is a 1-to-1 move of existing inline styling to css files
- In future more optimization can be made by consolidating css files
2023-10-14 19:02:35 +02:00
bergware
287468005a Prepare for automatic style sheet loading per page 2023-10-14 15:49:06 +02:00
bergware
b8d932d050 Prepare for automatic style sheet loading per page 2023-10-14 15:46:38 +02:00
bergware
4e4d5426e0 rc.libvirt: fix snapshot folder and link creation 2023-10-14 15:15:24 +02:00
bergware
2f82d097b6 Make dialog boxes consistent 2023-10-14 14:41:17 +02:00
bergware
a2818218c6 Make dialog boxes consistent 2023-10-14 14:21:18 +02:00
bergware
378eb9916c Make dialog boxes consistent 2023-10-14 14:18:56 +02:00
bergware
aef7b4c012 VMs: add missing space in text 2023-10-14 14:02:22 +02:00
bergware
f9167b929f snaphots: several updates for Dashboard and VMs page 2023-10-14 13:54:13 +02:00
SimonFair
e3cbf2309d PHP and Code tidy fixes 2023-10-14 11:31:12 +01:00
bergware
5ac608b43f rc scripts: insert short delay before checking running status 2023-10-14 10:14:25 +02:00
bergware
90ad79e846 Browse: remove legacy check 2023-10-14 01:59:13 +02:00
bergware
21189acdb0 Prepare for automatic style sheet loading per page 2023-10-14 01:42:46 +02:00
bergware
68a367bea7 libvirt_helpers: fix PHP8 error 2023-10-14 01:39:26 +02:00
bergware
0716ed2fe4 Revert "Dashboard: show time in header when collapsed"
This reverts commit c7216f18b2.
2023-10-13 19:29:40 +02:00
bergware
c7216f18b2 Dashboard: show time in header when collapsed 2023-10-13 19:26:13 +02:00
tom mortensen
5a69f4b8e3 Merge pull request #1460 from bergware/master
Miscellaneous fixes and updates
2023-10-13 10:11:20 -07:00
bergware
d06d2cb476 Dashboard: Remove leading zero in time display 2023-10-13 18:51:22 +02:00
bergware
a162a40a46 rc.S.cont: fix regression error in timezone setting 2023-10-13 18:47:02 +02:00
bergware
523cad12bc Merge remote-tracking branch 'upstream/master' 2023-10-13 18:10:43 +02:00
bergware
2ddceae4a3 Prepare for automatic style sheet loading per page 2023-10-13 18:08:58 +02:00
tom mortensen
25a8c10165 Merge pull request #1459 from bergware/master
Dashboard: fix font-size in processor and system bars
2023-10-13 09:05:49 -07:00
bergware
48e8c5bb73 Prepare for automatic style sheet loading per page 2023-10-13 17:59:06 +02:00
bergware
5bd4280e83 Prepare for automatic style sheet loading per page
This feature will be used in future development of the GUI
It allows pages to have their own style sheet settings stored in a related .css file
2023-10-13 17:49:13 +02:00
bergware
a6d66e0a65 Dashboard: more enhancements 2023-10-13 16:15:07 +02:00
bergware
64d161d09d Dashboard: more enhancements 2023-10-13 15:33:22 +02:00
bergware
e0ec6c1164 Dashboard: add current time display 2023-10-13 15:26:50 +02:00
bergware
debcacc1ba Dashboard: more enhancements 2023-10-13 12:33:33 +02:00
bergware
946a32fd96 Dashboard: more enhancements 2023-10-13 12:24:00 +02:00
bergware
540215bc5d Dashboard: more enhancements 2023-10-13 12:13:17 +02:00
bergware
7ee1d71d13 Dashboard: more enhancements 2023-10-13 12:06:02 +02:00
bergware
5362627433 Dashboard: reintroduce borders around tiles 2023-10-13 11:26:27 +02:00
bergware
83cb642448 Dashboard: more enhancements 2023-10-13 10:52:02 +02:00
bergware
84b265cbe4 Dashboard: more enhancements 2023-10-13 10:43:35 +02:00
bergware
5e2dc9da2f Dashboard: more enhancements 2023-10-13 10:39:34 +02:00
bergware
93b1f0d915 Dashboard: fix font-size in processor and system bars 2023-10-13 10:07:20 +02:00
tom mortensen
1149e0e1bd Merge pull request #1458 from bergware/master
Improve Dashboard tiles when hidden
2023-10-12 16:30:29 -07:00
bergware
3463bf8521 Improve Dashboard tiles when hidden 90a2ced9 2023-10-13 00:07:52 +02:00
bergware
9b0fbf1256 Improve Dashboard tiles when hidden 2023-10-12 23:42:43 +02:00
bergware
90a2ced901 Improve Dashboard tiles when hidden 2023-10-12 23:20:06 +02:00
tom mortensen
8d550ccf7e Merge pull request #1457 from SimonFair/Disable-VM-Manager-Autostart
Create VM autostart disable option
2023-10-12 12:51:13 -07:00
tom mortensen
dd305fa8a8 Merge pull request #1456 from bergware/master
rc.inet1: add "status" command
2023-10-12 12:50:35 -07:00
SimonFair
093d754b74 Create VM autostart disable option 2023-10-12 20:27:37 +01:00
bergware
4068b85470 dashboard: display separate tiles without borders 2023-10-12 18:12:10 +02:00
bergware
454d819634 dashboard: display separate tiles without borders 2023-10-12 17:42:29 +02:00
bergware
ab914472f0 rc.inet1: minor code update 2023-10-12 10:55:11 +02:00
bergware
5543f8c2e9 rc.inet1: minor code update 2023-10-12 10:40:49 +02:00
bergware
20e29bcf75 rc.inet1: add "status" command 2023-10-12 10:32:27 +02:00
bergware
a948173f15 rc.inet1: add "status" command 2023-10-12 10:28:54 +02:00
Zack Spear
5dd8186103 fix(upc): account callback url 2023-10-11 21:27:30 -05:00
Zack Spear
4294aa0d6b refactor(upc): state.php use apikey $registered 2023-10-11 21:23:24 -05:00
Zack Spear
7ba5e7bd99 Merge branch 'unraid:master' into master 2023-10-11 20:12:49 -05:00
Zack Spear
ba943c61c9 fix(upc): small ui bug with update os 2023-10-11 20:04:37 -05:00
Zack Spear
c2eab08582 feat: web-components update os + registration + header version 2023-10-11 19:44:20 -05:00
Zack Spear
cbd2475cf9 refactor: add osVersionBranch to state.php 2023-10-11 18:24:31 -05:00
Zack Spear
1698a7a644 refactor: add lifetime to install key page conditional display 2023-10-11 18:24:00 -05:00
tom mortensen
b54c4ec103 Merge pull request #1454 from bergware/master
scripts dutchification - batch 2
2023-10-11 14:04:00 -07:00
bergware
6902238f1a Disk Settings: add possibility to change encryption phrase/keyfile 2023-10-11 21:48:54 +02:00
bergware
79476b0a84 Disk Settings: add possibility to change encryption phrase/keyfile 2023-10-11 21:41:39 +02:00
bergware
e8cef12319 Disk Settings: add possibility to change encryption phrase/keyfile 2023-10-11 21:37:34 +02:00
bergware
6b9bc3c00f Revert "rc.mcelog: don't start when unsupported cpu"
This reverts commit 1dd3c10103.
2023-10-11 21:19:45 +02:00
bergware
1dd3c10103 rc.mcelog: don't start when unsupported cpu 2023-10-11 21:11:22 +02:00
bergware
77de3cb541 rc.mcelog: don't start when unsupported cpu 2023-10-11 21:07:08 +02:00
tom mortensen
2ad95e3d5a Merge pull request #1453 from SimonFair/Add-PCI-Override-and-include-CoralTPU-as-default
Add Override File support and default support for Coral TPu
2023-10-11 12:02:14 -07:00
bergware
ef63045632 scripts dutchification - batch 2 2023-10-11 20:44:38 +02:00
SimonFair
357171fec5 Add Override File support and default support for Coral TPu 2023-10-11 19:16:01 +01:00
tom mortensen
fee32792f9 Merge pull request #1449 from unraid/mirrored-syslog
Improved handling of USB-mirrored syslogs
2023-10-11 08:48:32 -07:00
tom mortensen
3b54299f9a Merge pull request #1451 from bergware/master
Miscellaneous updates and fixes
2023-10-11 08:47:38 -07:00
bergware
aeebf3bb61 scripts dutchification - batch 1 2023-10-11 16:42:11 +02:00
bergware
2692f1fbb5 rc.inet1: fix regression error 2023-10-11 16:30:14 +02:00
bergware
d1bb63ff49 rc.inet1: fix regression error 2023-10-11 16:25:40 +02:00
bergware
73091981a9 rc.inet1: fix regression error 2023-10-11 16:12:29 +02:00
bergware
69ee9387e3 scripts dutchification - batch 1 2023-10-11 14:44:44 +02:00
bergware
cd7ffc9e99 scripts dutchification - batch 1 2023-10-11 14:32:22 +02:00
bergware
d14b39970b scripts dutchification - batch 1 2023-10-11 14:23:32 +02:00
bergware
3b264e5297 scripts dutchification - batch 1 2023-10-11 14:19:17 +02:00
bergware
3159c6bcee scripts dutchification - batch 2 2023-10-11 10:59:10 +02:00
bergware
13df90493c Merge remote-tracking branch 'upstream/master' 2023-10-11 09:47:17 +02:00
bergware
48301a53ac rc.inet2: fix execution of sub scripts 2023-10-11 09:46:31 +02:00
bergware
e2a18275b7 Add "status" command to rc scripts 2023-10-11 09:46:02 +02:00
tom mortensen
6d639b1ad7 Merge pull request #1450 from bergware/master
Miscellaneous fixes and updates
2023-10-10 14:25:07 -07:00
bergware
319f922eb8 Update rc.apcupsd 2023-10-10 18:25:04 +02:00
Zack Spear
7db0650b53 refactor(css): black & white header remove min-width 2023-10-10 10:36:06 -05:00
bergware
34a586d449 Revert "rc.S.cont: fix variable name"
This reverts commit 406040364a.
2023-10-10 15:08:40 +02:00
bergware
c0db3f2ae2 Update monitor_nchan 2023-10-10 15:07:34 +02:00
bergware
406040364a rc.S.cont: fix variable name 2023-10-10 15:07:19 +02:00
ljm42
7593e0460a swap isset() for !empty() 2023-10-09 16:30:18 -07:00
ljm42
7583ca1959 Better handling of USB-mirrored syslogs 2023-10-09 15:57:02 -07:00
Zack Spear
acce31d4c9 fix: update page add flash backup js functions 2023-10-09 14:05:16 -05:00
Zack Spear
9e3a5cc22c refactor: downgrade page js functions 2023-10-09 14:05:01 -05:00
Zack Spear
104a0bee05 refactor: registration page clean up 2023-10-09 14:04:40 -05:00
Squidly271
09294f3111 Allow FCP to broadcast it's status to diagnostics GUI 2023-10-09 10:18:10 -04:00
Squidly271
b1d874ca85 DRAFT Run FCP scan during diagnostics
Pending Larry approval

Runs FCP scan if one hasn't been already run within 24 hours
2023-10-08 14:11:31 -04:00
tom mortensen
33ae31abc8 Merge pull request #1443 from Squidly271/patch-3
Descriptive error messages on install_key
2023-10-08 08:57:18 -07:00
tom mortensen
ba82756c74 Merge pull request #1442 from bergware/master
Miscellaneous updates and fixes
2023-10-08 08:56:33 -07:00
bergware
69b5a886cb rc.S: invoke testing hook for test versions only
- This is a potential security risk, which should not be active in public releases
2023-10-08 12:05:08 +02:00
bergware
b260cc6cca device_list: add translation for button "Add Subpool" 2023-10-08 11:21:50 +02:00
bergware
009132ce78 scripts dutchification - batch 1 2023-10-08 10:07:06 +02:00
bergware
9fcf59d3d9 scripts dutchification - batch 1 2023-10-08 09:41:25 +02:00
bergware
8dde29cc0d scripts dutchification - batch 1 2023-10-08 09:36:11 +02:00
bergware
bb92781cce scripts dutchification - batch 2 2023-10-08 08:48:10 +02:00
bergware
dd0dc1ff12 scripts dutchification - batch 1 2023-10-08 08:48:00 +02:00
Squidly271
4380ca19f0 Add Date & Time message to plugin installs / updates 2023-10-07 21:31:00 -04:00
bergware
c91386cca0 rc.inet1: added interface carrier check for DHCP polling 2023-10-07 19:47:06 +02:00
Squidly271
7926243de5 Descriptive error messages on install_key 2023-10-07 09:43:20 -04:00
bergware
61247972c0 network settings: fix when updating description only 2023-10-07 15:17:41 +02:00
bergware
b630ddf2e8 network settings: fix when updating description only 2023-10-07 14:50:55 +02:00
bergware
3f197fc96b rc.inet1: added interface carrier check for DHCP polling 2023-10-07 10:50:11 +02:00
bergware
7aeb04936d rc.inet1: added interface carrier check for DHCP polling 2023-10-07 10:45:29 +02:00
bergware
15dd359787 rc.inet1: added interface carrier check for DHCP polling 2023-10-07 10:36:36 +02:00
bergware
e19c9e6bc2 scripts dutchification - batch 2 2023-10-07 10:24:56 +02:00
Zack Spear
39209a8b6a feat: downgrade page 2023-10-05 16:34:50 -07:00
Zack Spear
9591198ecb fix(web): state $_SESSION usage 2023-10-04 16:47:50 -07:00
Zack Spear
9208b951f2 feat: add flashbackup functions to Update.page 2023-10-02 15:37:40 -07:00
Zack Spear
2a6cc63d82 feat: add os version to flashbackup zip filename 2023-10-02 13:12:09 -07:00
Zack Spear
214699639c refactor(upc): additional prop data 2023-09-27 19:40:31 -07:00
Zack Spear
d15360fc1c refactor(upc): vars passed to web components 2023-09-26 17:41:02 -07:00
Zack Spear
2dc7f10334 refactor: registration page with web component 2023-09-25 20:25:58 -07:00
Zack Spear
5b1ab2ecb1 refactor: detect reboot prop for user profile component 2023-09-25 15:14:59 -07:00
Zack Spear
eeb8579122 refactor: header os version with web component 2023-09-25 15:14:39 -07:00
Zack Spear
2a992a4582 refactor: Update.page with web component 2023-09-25 15:14:22 -07:00
537 changed files with 19385 additions and 9014 deletions

6
.gitignore vendored
View File

@@ -54,7 +54,6 @@ sftp-config.json
# =========================
# Exclude these dirs commonly found in /usr/local
bin/
games/
info/
lib64/
@@ -69,3 +68,8 @@ emhttp/plugins/dynamix.my.servers/unraid-components/index.html
# development scripts
.dev-scripts/
emhttp/plugins/node_modules/
emhttp/plugins/.prettierignore
emhttp/plugins/.prettierrc
emhttp/plugins/package-lock.json
emhttp/plugins/package.json

77
.vscode/settings.json vendored
View File

@@ -4,5 +4,80 @@
},
"prettier.tabWidth": 4,
"editor.tabSize": 4,
"editor.indentSize": "tabSize"
"editor.indentSize": "tabSize",
"intelephense.stubs": [
"apache",
"bcmath",
"bz2",
"calendar",
"com_dotnet",
"Core",
"ctype",
"curl",
"date",
"dba",
"dom",
"enchant",
"exif",
"FFI",
"fileinfo",
"filter",
"fpm",
"ftp",
"gd",
"gettext",
"gmp",
"hash",
"iconv",
"imap",
"intl",
"json",
"ldap",
"libxml",
"mbstring",
"meta",
"mysqli",
"oci8",
"odbc",
"openssl",
"pcntl",
"pcre",
"PDO",
"pdo_ibm",
"pdo_mysql",
"pdo_pgsql",
"pdo_sqlite",
"pgsql",
"Phar",
"posix",
"pspell",
"random",
"readline",
"Reflection",
"session",
"shmop",
"SimpleXML",
"snmp",
"soap",
"sockets",
"sodium",
"SPL",
"sqlite3",
"standard",
"superglobals",
"sysvmsg",
"sysvsem",
"sysvshm",
"tidy",
"tokenizer",
"xml",
"xmlreader",
"xmlrpc",
"xmlwriter",
"xsl",
"Zend OPcache",
"zip",
"zlib",
"libvirt-php"
]
}

View File

@@ -256,7 +256,7 @@ Unraid OS uses these default options when creating a multiple-device pool:
`-dconvert=raid1 -mconvert=raid1`
For more complete documentation, please refer to the btrfs-balance [Manpage](https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-balance)
For more complete documentation, please refer to the btrfs-balance [Manpage](https://man7.org/linux/man-pages/man8/btrfs-balance.8.html)
*Note: raid5 and raid6 are generally still considered **experimental** by the Linux community*
:end
@@ -664,6 +664,8 @@ will *hide* the share from *browsing* but is still accessible if you know the sh
:smb_time_machine_volume_help:
This limits the reported volume size, preventing Time Machine from using the entire real disk space
for backup. For example, setting this value to "1024" would limit the reported disk space to 1GB.
Note that Ventura 13.6 and later require a value to be present. No entry will prevent Time Machine
from working correctly.
:end
:smb_case_sensitive_names_help:
@@ -941,6 +943,18 @@ A value of zero will disable the warning threshold (including notifications).
A value of zero will disable the critical threshold (including notifications).
:end
:ssd_default_warning_temperature_help:
*Warning SSD temperature* sets the default warning threshold for all SSD devices temperature. Exceeding this threshold will result in a warning notification.
A value of zero will disable the warning threshold (including notifications).
:end
:ssd_default_critical_temperature_help:
*Critical disk temperature* sets the default critical threshold for all SSD devices temperature. Exceeding this threshold will result in an alert notification.
A value of zero will disable the critical threshold (including notifications).
:end
:disk_default_smart_notification_help:
SMART notifications are generated on either an increasing RAW value of the attribute, or a decreasing NORMALIZED value which reaches a predefined threshold set by the manufacturer.
@@ -994,6 +1008,10 @@ Instead of chevrons indicating more data for Port and Volume mapping, all data i
The time in seconds to allow a container to gracefully stop before forcing it to stop
:end
:docker_pid_limit_help:
Set a PID Limit to limit the number of PIDs that a docker can use. The default is 2048. Set to zero for unlimited PIDs (not recommended).
:end
:docker_vdisk_type_help:
Select where to keep the Docker persistent state.
@@ -1020,6 +1038,15 @@ You must specify a folder for Docker. The system will automatically create this
It is recommended to create this folder under a share which resides on the Cache pool (setting: cache=Only). For best performance SSD devices are preferred.
:end
:docker_storage_driver_help:
overlay2 (default): Will use overlay2 as the storage driver for Docker, regardless of the underlying filesystem.
native: The native storage driver for your underlying filesystem will be used (XFS: overlay2 | ZFS: zfs | BTRFS: btrfs).
ATTENTION: Changing the storage type from an existing Docker installation is not possible, you have to delete your Docker directory first, change the storage type and then reinstall your containers.
It is recommended to take a screenshot from your Docker containers before changing the storage type. After deleting and changing the storage type, reinstall the containers by clicking Add Container on the Docker page and select one by one from the drop down to reinstall them with your previous settings).
:end
:docker_appdata_location_help:
You can specify a folder to automatically generate and store subfolders containing configuration files for each Docker app (via the /config mapped volume).
@@ -1101,6 +1128,10 @@ This is the active Docker version.
This is the location of the Docker image.
:end
:docker_storage_driver_active_help:
This is the storage driver for Docker.
:end
:docker_appdata_location_active_help:
This is the storage location for Docker containers.
:end
@@ -1189,7 +1220,7 @@ SSL certificate. Use this URL to access your server:
Note that use of a self-signed SSL certificate will generate a browser
warning.
Select **Strict** to enable *exclusive* use of an Unraid.net SSL
Select **Strict** to enable *exclusive* use of a myunraid.net SSL
certificate for https access (see **Provision** below). Note that a DNS
server must be reachable.
@@ -1252,11 +1283,19 @@ The Local Access URLs shown above are based on your current settings.
To adjust URLs or redirects, see the help text for "Use SSL/TLS".
:end
:mgmt_wg_access_urls_help:
These URLs will only work when connected via the appropriate WireGuard tunnel as configured on ***Settings > VPN Manager***
:end
:mgmt_tailscale_access_urls_help:
These URLs will only work when connected to the appropriate Tailscale Tailnet.
:end
:mgmt_certificate_expiration_help:
**Provision** may be used to install a *free* Unraid.net SSL Certificate from
**Provision** may be used to install a *free* myunraid.net SSL Certificate from
[Let's Encrypt](https://letsencrypt.org/).
The Unraid.net SSL certificate can be used in two ways. First,
The myunraid.net SSL certificate can be used in two ways. First,
having the certificate present enables your server to respond to an
alternate URL of the form:
@@ -1270,24 +1309,20 @@ set to `*.<hash>.myunraid.net` thus validating the https connection.
You may enable this URL exclusively on your LAN by setting **Use
SSL/TLS** to **Strict**.
The second use for an Unraid.net certificate is to enable secure
remote access available through the My Servers plugin feature. Note
The second use for a myunraid.net certificate is to enable secure
remote access available through the Unraid Connect plugin feature. Note
that it is possible to use secure remote access in conjunction with
insecure local access.
After an Unraid.net SSL Certificate has been installed, two
background services are activated while the server is signed in to unraid.net:
- *updatedns* - This starts 30 seconds after server reboot has completed and contacts the Lime Technology
DNS service to register the servers local IP address. Thereafter it wakes up every 10 minutes in case
the local IP address has changed.
After a myunraid.net SSL Certificate has been installed, a
background service is activated:
- *renewcert* - This starts 60 seconds after server reboot has completed and contacts the Lime Technology
certificate renewal service to determine if your Unraid.net SSL certificate needs to be renewed.
certificate renewal service to determine if your myunraid.net SSL certificate needs to be renewed.
Thereafter it wakes up every 24 hours. If within 30 days of expiration, a new certificate is automatically
provisioned and downloaded to your server.
**Delete** may be used to delete the Unraid.net certificate file.
**Delete** may be used to delete the myunraid.net certificate file.
**nginx certificate handling details**
@@ -1295,7 +1330,7 @@ nginx makes use of two certificate files stored on the USB flash boot device:<br
- a self-signed certificate: `config/ssl/certs/<server-name>_unraid_bundle.pem`
- an Unraid.net certificate: `config/ssl/certs/certificate_bundle.pem`
- a myunraid.net certificate: `config/ssl/certs/certificate_bundle.pem`
The self-signed SSL certificate file is automatically created when nginx
starts; and re-created if the server hostname or local TLD is changed.
@@ -1479,7 +1514,7 @@ This will increase write performance but might possibly decrease read performanc
Let the server act as a central syslog server and collect syslog messages from other systems.
The server can listen on UDP, TCP or both with a selectable port number.
Syslog information is stored per IP address. That is every system gets its own syslog file.
Syslog information is stored either per IP address or per hostname. That is every system gets its own syslog file.
:end
:syslog_local_folder_help:
@@ -1487,6 +1522,15 @@ Select the share folder where the syslogs will be stored.
It is recommended that you use a share located on the cache drive to prevent array disk spinups.
:end
:syslog_remote_system_identifier_help:
Select the identifier for the remote system (used in the logfile name).
* "IP Address" uses the IP address (IPv4 or IPv6) of the sending system.
* "Hostname (from syslog message)" uses the hostname included in each syslog message.
* "Hostname (from DNS reverse lookup)" performs a DNS reverse lookup for the sending IP and uses the result.
:end
:syslog_local_rotation_help:
By default LOG rotation is disabled and will create a single LOG file of unlimited size.
@@ -1513,6 +1557,13 @@ Change this setting to YES when troubleshooting is required and it is not possib
A mirror of the syslog file is stored in the **logs** folder of the flash device.
:end
:syslog_shutdown_flash_help:
This setting is YES by default and enables the system to copy the syslog file to the USB device on shutdown or reboot.
After rebooting, the syslog from this run will be visible on Tools > Syslog > syslog-previous;
it will also be included in diagnostics as logs/syslog-previous.txt
:end
:confirm_reboot_help:
Choose if rebooting or powering down the server needs a confirmation checkbox.
:end
@@ -1527,6 +1578,12 @@ The display settings below determine how items are displayed on screen. Use thes
You can experiment with these settings as desired, they only affect visual properties.
:end
:display_width_help:
**Boxed** is the legacy setting which constrains the content width to maximum 1920 pixels
**Unlimited** allows content to use all available width, which maybe useful on wide screens
:end
:display_font_size_help:
Changes the font size in the GUI. This is a per device setting.
:end
@@ -1577,10 +1634,18 @@ Selects the temperature unit for the disk temperature thresholds. Changing the u
Make sure any newly entered values represent the selected temperature unit.
:end
:display_favorites_enabled_help:
Enables favorite support. If set to no, will stop heart icon showing for additions. If existing favorites are saved, favorites tab and pre-saved options will still continue to show and function until all are deleted.
:end
:vms_enable_help:
Stopping the VM Manager will first attempt to shutdown all running VMs. After 60 seconds, any remaining VM instances will be terminated.
:end
:vms_disable_help:
Stop VMs from Autostarting\Starting when VM Manager starts or open is run from the gui to start, error message will be seen.
:end
:vms_libvirt_volume_help:
This is the libvirt volume.
:end
@@ -1644,6 +1709,18 @@ For setting the console options to show on context menus. Web will show only inb
Virtual Manager Remote Viewer will only show the Remote Viewer option. Both will show both Web and Remote Viewer.
:end
:vms_rdpopt_help:
Adds option to menu to start RDP. RDP file is downloaded. You need to set browser to open when ready.
:end
:vms_usage_help:
Show metrics for CPU both guest and host percentage, memory, disk io and network io.
:end
:vms_usage_timer_help:
Setting in seconds for metrics refresh time.
:end
:vms_acs_override_help:
*PCIe ACS override* allows various hardware components to expose themselves as isolated devices.
Typically it is sufficient to isolate *Downstream* ports.
@@ -1910,6 +1987,10 @@ Enter the *device* which corresponds to your situation, only applicable when *UP
+ **modbus** - /dev/tty**
:end
:apc_ups_override_ups_capacity_help:
If your device doesn't natively report Nominal Power (`NOMPOWER`) from `apcupsd`, but does report the Load Percentage (`LOADPCT`), you can manually define the UPS capacity rating in Watts (W) (this is the 'real power' value in Watts (W), not the 'apparent power' in Volt Amps (VA), and should be detailed on your UPS manual or product listing) and the plugin will dynamically calculate a virtual Nominal Power estimate (`≈`) by comparing the Override UPS Capacity (W) and the current Load Percentage. It is only an estimate, as it doesn't factor in things like the UPS' efficiency.
:end
:apc_battery_level_help:
If during a power failure, the remaining battery percentage (as reported by the UPS) is below or equal to *Battery level*, apcupsd will initiate a system shutdown.
:end
@@ -2355,7 +2436,7 @@ Note to Cloudflare users: the Cloudflare proxy is designed for http traffic, it
:wg_local_server_uses_nat_help:
When NAT is enabled, the server uses its own LAN address when forwarding traffic from the tunnel to other devices in the LAN network.
Use this setting when no router modifications are desired, but this approach doesn't work with Docker containers using custom IP addressess.
Use this setting when no router modifications are desired, but this approach doesn't work with Docker containers using custom IP addresses.
When NAT is disabled, the server uses the WireGuard tunnel address when forwarding traffic.
In this case it is required that the default gateway (router) has a static route configured to refer tunnel address back to the server.
@@ -2430,3 +2511,69 @@ Any 3rd party driver installed by a plugin will have a support symbol next to it
Click the edit button to add/modify/delete any modprobe.d config file in the config/modprobe.d directory on the flash drive.
:end
:console_keyboard_help:
Select your default keymap for the local console (not the web Terminal).
:end
:console_screen_help:
**Default:** 'Default' will set the blank timeout to 15 minutes and powersave to 60 minutes.
**Disabled:** 'Disabled' will disable the blank and powersave timeout.
**All other values:** Will set the blank timout to the selected value and disable the powersave timeout.
:end
:console_bash_help:
If set to 'Yes' the bash history will persist reboots, set to 'No' to disable.
**ATTENTION:** The bash history will be written to the USB Boot device so this will introduce higher wear and tear!
**Note:** Disabling and Enabling will remove the entire bash history.
:end
:WOL_intro_help:
This page allows the setup to start/resume and stop VMs, Containters(Docker and LXC) using WOL magic packets
It does not setup wake up of the Unraid server.
The process will look for the defined mac address defined within the service(VM or container) with the exception of dockers. Dockers do not have a mac address until they are running so you will need to define a user mac address to allow you to start them
If the service is paused a WOL Packet will resume.
For each service you can set: enable, disable or enable and shutdown
When the enable and shutdown is set if the service is running when the next WOL packet is recieved a shutdown will be performed.
:end
:WOL_enable_help:
If set to yes Unraidwold daemon is set to run.
:end
:WOL_run_docker_help:
If set to yes when wake on lan packets are received checks are carrried out for dockers otherwise dockers will be ignored.
:end
:WOL_run_VM_help:
If set to yes when wake on lan packets are received checks are carrried out for virtual machines otherwise virtual machines will be ignored.
:end
:WOL_run_LXC_help:
If set to yes when wake on lan packets are received checks are carrried out for LXC otherwise LXC will be ignored. The LXC plugin needs to be installed for LXC to be processed.
:end
:WOL_run_shutdown_help:
If set to yes when wake on lan packets are received checks are carrried out and if enabled for service and that service is running the entity will be shutdown. System has to be set to Enabled and Shutdwon for it to be action.
:end
:WOL_interface_help:
Specify the interface to the daemon to bind to. Some interfaces may not be able to recieve etherframe packets. Recommend to bind to a physical interface.
:end
:WOL_promiscuous_mode_help:
Enable to set the NIC not to filer packets.
:end
:WOL_log_file_help:
Default is to log to syslog but if you want a different log location set the file name.
:end

View File

@@ -1,6 +1,7 @@
<?php
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
require_once "$docroot/webGui/include/Helpers.php";
require_once "$docroot/webGui/include/Wrappers.php";
// add translations
extract(parse_plugin_cfg('dynamix',true));
@@ -27,6 +28,9 @@ if ($_SERVER['REQUEST_URI'] == '/logout') {
$error = _('Successfully logged out');
}
// If issue with license key redirect to Tools/Registration, otherwise go to start page
$start_page = (!empty(_var($var,'regCheck'))) ? 'Tools/Registration' : _var($var,'START_PAGE','Main');
$result = exec( "/usr/bin/passwd --status root");
if (($result === false) || (substr($result, 0, 6) !== "root P"))
include "$docroot/webGui/include/.set-password.php";

View File

@@ -3,8 +3,8 @@ Title="UPS Details"
Tag="battery-3"
---
<?PHP
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
* Copyright 2015, Dan Landon.
*
* This program is free software; you can redistribute it and/or
@@ -14,10 +14,15 @@ Tag="battery-3"
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*/
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
require_once "$docroot/webGui/include/Wrappers.php";
?>
<script>
function getUPSstatus() {
$.post('/plugins/dynamix.apcupsd/include/UPSstatus.php',{level:<?=$cfg['BATTERYLEVEL']?>,runtime:<?=$cfg['MINUTES']?>},function(data) {
var batteryLevel = "<?= _var($cfg,'BATTERYLEVEL',0) ?>";
var batteryRuntime = "<?= _var($cfg,'MINUTES',0) ?>";
$.post('/plugins/dynamix.apcupsd/include/UPSstatus.php',{level:batteryLevel,runtime:batteryRuntime},function(data) {
data = data.split('\n');
$('#ups_summary').html(data[0]);
$('#ups_status').html(data[1]);

View File

@@ -5,8 +5,8 @@ Icon="icon-ups"
Tag="battery-3"
---
<?PHP
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
* Copyright 2015, Dan Landon.
*
* This program is free software; you can redistribute it and/or
@@ -22,13 +22,6 @@ Tag="battery-3"
$sName = "dynamix.apcupsd";
$cfg = parse_plugin_cfg($sName);
?>
<style>
table.ups thead tr th{width:16.6%;padding-left:10px}
table.ups tbody tr td{padding-left:10px;font-weight:bold}
tr.ups{height:3rem;line-height:3rem}
i.ups{margin-right:8px}
</style>
<script>
function toggleCustomCable(form) {
var readonly = form.UPSCABLE.value != 'custom';
@@ -98,6 +91,11 @@ _(Device)_:
:apc_ups_device_help:
_(Override UPS Capacity (Watts))_:
: <input type="number" name="OVERRIDE_UPS_CAPACITY" maxlength="5" class="narrow" value="<?=htmlspecialchars($cfg['OVERRIDE_UPS_CAPACITY']);?>">
:apc_ups_override_ups_capacity_help:
_(Battery level to initiate shutdown)_ (%):
: <input type="text" name="BATTERYLEVEL" class="narrow" maxlength="3" value="<?=htmlspecialchars($cfg['BATTERYLEVEL']);?>">

View File

@@ -3,6 +3,7 @@ UPSCABLE="usb"
CUSTOMUPSCABLE=""
UPSTYPE="usb"
DEVICE=""
OVERRIDE_UPS_CAPACITY=""
BATTERYLEVEL="10"
MINUTES="10"
TIMEOUT="0"

View File

@@ -12,11 +12,16 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
// add translations
$_SERVER['REQUEST_URI'] = 'settings';
require_once "$docroot/webGui/include/Translations.php";
require_once "$docroot/webGui/include/Helpers.php";
$cfg = parse_plugin_cfg('dynamix.apcupsd');
$overrideUpsCapacity = (int) htmlspecialchars($cfg['OVERRIDE_UPS_CAPACITY'] ?: 0);
$state = [
'ONLINE' => _('Online'),
'SLAVE' => '('._('slave').')',
@@ -33,7 +38,8 @@ $state = [
$red = "class='red-text'";
$green = "class='green-text'";
$orange = "class='orange-text'";
$status = array_fill(0,7,"<td>-</td>");
$defaultCell = "<td>-</td>";
$status = array_fill(0,7,$defaultCell);
$result = [];
$level = $_POST['level'] ?: 10;
$runtime = $_POST['runtime'] ?: 5;
@@ -85,9 +91,17 @@ if (file_exists("/var/run/apcupsd.pid")) {
if ($i%2==1) $result[] = "</tr>";
}
if (count($rows)%2==1) $result[] = "<td></td><td></td></tr>";
// If the override is defined, override the power value, using the same implementation as above.
// This is a better implementation, as it allows the existing Unraid code to work with the override.
if ($overrideUpsCapacity > 0) {
$power = $overrideUpsCapacity;
$status[4] = $power>0 ? "<td $green>$power W</td>" : "<td $red>$power W</td>";
}
if ($power && isset($load)) $status[5] = ($load<90 ? "<td $green>" : "<td $red>").round($power*$load/100)." W (".$status[5].")</td>";
elseif (isset($load)) $status[5] = ($load<90 ? "<td $green>" : "<td $red>").$status[5]."</td>";
$status[6] = isset($output) ? ((!$volt || ($minv<$output && $output<$maxv) ? "<td $green>" : "<td $red>").$status[6].($freq ? " ~ $freq Hz" : "")."</td>") : $status[6];
$status[6] = isset($output) ? ((!$volt || ($minv<$output && $output<$maxv) ? "<td $green>" : "<td $red>").$status[6].(isset($freq) ? " ~ $freq Hz" : "")."</td>") : $status[6];
}
if (empty($rows)) $result[] = "<tr><td colspan='4' style='text-align:center'>"._('No information available')."</td></tr>";

View File

@@ -1,6 +1,6 @@
<?PHP
/* Copyright 2005-2018, Lime Technology
* Copyright 2012-2020, Bergware International.
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
* Copyright 2015, Dan Landon.
*
* This program is free software; you can redistribute it and/or

View File

@@ -0,0 +1,4 @@
table.ups thead tr th{width:16.6%;padding-left:10px}
table.ups tbody tr td{padding-left:10px;font-weight:bold}
tr.ups{height:3rem;line-height:3rem}
i.ups{margin-right:8px}

View File

@@ -3,9 +3,9 @@ Cond="(pgrep('dockerd')!==false)"
Markdown="false"
---
<?PHP
/* Copyright 2005-2020, Lime Technology
* Copyright 2014-2020, Guilherme Jardim, Eric Schultz, Jon Panozzo.
* Copyright 2012-2020, Bergware International.
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,

View File

@@ -5,7 +5,8 @@ Lock="true"
Cond="exec(\"grep -o '^DOCKER_ENABLED=.yes' /boot/config/docker.cfg 2>/dev/null\")"
---
<?PHP
/* Copyright 2005-2021, Lime Technology
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or

View File

@@ -7,8 +7,8 @@ Nchan="docker_load:stop"
---
<?PHP
/* Copyright 2005-2023, Lime Technology
* Copyright 2014-2023, Guilherme Jardim, Eric Schultz, Jon Panozzo.
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -29,23 +29,10 @@ $cpus = cpu_list();
<link type="text/css" rel="stylesheet" href="<?autov('/webGui/styles/jquery.ui.css')?>">
<link type="text/css" rel="stylesheet" href="<?autov('/webGui/styles/jquery.switchbutton.css')?>">
<link type="text/css" rel="stylesheet" href="<?autov("/plugins/dynamix.docker.manager/styles/style-$theme.css")?>">
<style>
.basic{display:block}
.advanced{display:none;white-space:nowrap}
.log{cursor:zoom-in}
.exec{cursor:pointer}
table#docker_containers{text-align:left}
th.five{width:5%}
th.nine{width:9%}
th.load{width:140px}
input.wait{width:24px;margin:0 4px;padding:0 5px;border:none;box-shadow:none;background-color:transparent}
table tbody td{line-height:normal}
i.mover{margin-right:8px;display:none}
#resetsort{margin-left:12px;display:inline-block;width:32px}
</style>
<table id="docker_containers" class="tablesorter shift">
<thead><tr><th><a id="resetsort" class="nohand" onclick="resetSorting()" title="_(Reset sorting)_"><i class="fa fa-th-list"></i></a>_(Application)_</th><th>_(Version)_</th><th>_(Network)_</th><th>_(Port Mappings)_ <small>(_(App to Host)_)</small></th><th>_(Volume Mappings)_ <small>(_(App to Host)_)</small></th><th class="load advanced">_(CPU & Memory load)_</th><th class="nine">_(Autostart)_</th><th class="five">_(Uptime)_</th></tr></thead>
<tbody id="docker_list"><tr><td colspan='8'></td></tr></tbody>
<thead><tr><th><a id="resetsort" class="nohand" onclick="resetSorting()" title="_(Reset sorting)_"><i class="fa fa-th-list"></i></a>_(Application)_</th><th>_(Version)_</th><th>_(Network)_</th><th>_(Container IP)_</th><th>_(Container Port)_</th><th>_(LAN IP:Port)_</th><th>_(Volume Mappings)_ <small>(_(App to Host)_)</small></th><th class="load advanced">_(CPU & Memory load)_</th><th class="nine">_(Autostart)_</th><th class="five">_(Uptime)_</th></tr></thead>
<tbody id="docker_list"><tr><td colspan='9'></td></tr></tbody>
</table>
<input type="button" onclick="addContainer()" value="_(Add Container)_" style="display:none">
<input type="button" onclick="startAll()" value="_(Start All)_" style="display:none">
@@ -124,6 +111,7 @@ function LockButton() {
}
function loadlist(init) {
timers.docker = setTimeout(function(){$('div.spinner.fixed').show('slow');},500);
docker = [];
$.get('/plugins/dynamix.docker.manager/include/DockerContainers.php',function(d) {
clearTimeout(timers.docker);
var data = d.split(/\0/);
@@ -190,4 +178,9 @@ $(function() {
loadlist(true);
dockerload.start();
});
window.onunload = function(){
dockerload.stop();
}
</script>

View File

@@ -5,8 +5,8 @@ Tag="icon-docker"
---
<?PHP
/* Copyright 2005-2023, Lime Technology
* Copyright 2014-2023, Guilherme Jardim, Eric Schultz, Jon Panozzo.
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -103,34 +103,12 @@ function base_net($route) {
return substr(explode('/',$route)[0],0,-2);
}
$bgcolor = strstr('white,azure',$display['theme']) ? '#f2f2f2' : '#1c1c1c';
//Check if docker.cfg not exists
$no_dockercfg = !is_file('/boot/config/docker.cfg');
?>
<link type="text/css" rel="stylesheet" href="<?autov('/webGui/styles/jquery.filetree.css')?>">
<link type="text/css" rel="stylesheet" href="<?autov('/webGui/styles/jquery.switchbutton.css')?>">
<style>
.errortext{color:#EF3D47;display:none;margin-left:20px}
.fileTree{background:<?=$bgcolor?>;width:300px;max-height:150px;overflow-y:scroll;overflow-x:hidden;position:absolute;z-index:100;display:none}
.basic{display:inline-block}
.advanced{display:none}
select.mask{min-width:0;margin:0 10px 0 4px}
select.net{min-width:0;margin:0 4px 0 2px}
select option.hide{display:none}
input.ip4{width:100px;margin:0 4px 0 1px}
input.ip6{width:140px;margin:0 4px}
input.gw4{width:100px;margin:0 4px 0 1px}
input.gw6{width:160px;margin:0 4px}
input.pool6{width:40px;margin:0 4px 0 1px}
span.net{margin-left:4px;margin-right:2px}
span.ip4{display:inline-block;width:260px}
span.ip6{display:inline-block;width:310px}
span.gw4{display:inline-block;width:200px}
span.gw6{display:inline-block;width:270px}
span.nonexist{margin-left:20px}
<?if (strstr('white,azure',$display['theme'])):?>
span.disabled{color:#B0B0B0}
<?else:?>
span.disabled{color:#404040}
<?endif;?>
</style>
<span class="status vhshift"><input type="checkbox" class="advancedview"></span>
<form markdown="1" id="settingsForm" name="settingsForm" method="POST" action="/update.php" target="progressFrame" onsubmit="return prepareDocker(this)">
@@ -141,6 +119,7 @@ span.disabled{color:#404040}
<input type="hidden" name="#cleanup" value="true">
<input type="hidden" name="DOCKER_CUSTOM_NETWORKS" value="<?=implode(' ',$unset)?> ">
<input type="hidden" name="DOCKER_IMAGE_FILE" value="<?=_var($dockercfg,'DOCKER_IMAGE_FILE')?>">
_(Enable Docker)_:
: <select id="DOCKER_ENABLED" name="DOCKER_ENABLED">
<?=mk_option(_var($dockercfg,'DOCKER_ENABLED'), 'no', _('No'))?>
@@ -164,11 +143,16 @@ _(Enable container table readmore-js)_:
:docker_readmore_help:
_(Docker Stop Timeout)_:
: <input class='narrow' id="DOCKER_TIMEOUT" type="number" name="DOCKER_TIMEOUT" min='1' value="<?=_var($dockercfg,'DOCKER_TIMEOUT')?>">_(seconds)_
_(Docker Stop Timeout)_ (_(seconds)_):
: <input class='narrow' id="DOCKER_TIMEOUT" type="number" name="DOCKER_TIMEOUT" min='1' value="<?=_var($dockercfg,'DOCKER_TIMEOUT')?>">
:docker_timeout_help:
_(Docker PID Limit)_:
: <input class='narrow' id="DOCKER_PID_LIMIT" type="number" name="DOCKER_PID_LIMIT" min='1' value="<?=_var($dockercfg,'DOCKER_PID_LIMIT')?>" placeholder="2048">
:docker_pid_limit_help:
<?if ($DockerStopped):?>
_(Docker data-root)_:
@@ -207,8 +191,25 @@ _(Docker directory)_:
:docker_vdisk_directory_help:
</div>
<div markdown="1" id="backingfs_type" style="display:none">
_(Docker storage driver)_:
: <select id="DOCKER_BACKINGFS" name="DOCKER_BACKINGFS" onchange="updateBackingFS(this.value)">
<?=mk_option(_var($dockercfg,'DOCKER_BACKINGFS'), 'overlay2', _('overlay2'))?>
<?=mk_option(_var($dockercfg,'DOCKER_BACKINGFS'), 'native', _('native'))?>
</select>
<?if ($var['fsState'] != "Started"):?>
<span id="WARNING_BACKINGFS" style="display:none;"><i class="fa fa-warning icon warning"></i>_(Only modify if this is a new installation since this can lead to unwanted behaviour!)_</span>
<?elseif (is_dir(_var($dockercfg,'DOCKER_IMAGE_FILE'))):?>
<span id="WARNING_BACKINGFS" style="display:none;"><i class="fa fa-warning icon warning"></i>_(Switching the Storage Driver requires to delete and rebuild the Docker directory manually!)_</span>
<?endif;?>
:docker_storage_driver_help:
</div>
_(Default appdata storage location)_:
: <input type="text" id="DOCKER_APP_CONFIG_PATH" name="DOCKER_APP_CONFIG_PATH" autocomplete="off" spellcheck="false" value="<?=_var($dockercfg,'DOCKER_APP_CONFIG_PATH')?>" placeholder="_(e.g.)_ /mnt/user/appdata/" data-pickfilter="HIDE_FILES_FILTER" data-pickroot="<?=is_dir('/mnt/user')?'/mnt/user':'/mnt'?>" data-pickfolders="true" pattern="^[^\\]*/$">
: <input type="text" id="DOCKER_APP_CONFIG_PATH" name="DOCKER_APP_CONFIG_PATH" autocomplete="off" spellcheck="false" value="<?=_var($dockercfg,'DOCKER_APP_CONFIG_PATH')?>" placeholder="_(e.g.)_ /mnt/user/appdata/" data-pickfilter="HIDE_FILES_FILTER" data-pickroot="/mnt" data-pickfolders="true" pattern="^[^\\]*/$">
<?if ($var['fsState'] != "Started"):?>
<span><i class="fa fa-warning icon warning"></i> _(Modify with caution: unable to validate path until Array is Started)_</span>
<?elseif (!is_dir(_var($dockercfg,'DOCKER_APP_CONFIG_PATH'))):?>
@@ -257,16 +258,14 @@ _(Template Authoring Mode)_:
:docker_authoring_mode_help:
<?if ($bridge):?>
_(Docker custom network type)_:
: <select name="DOCKER_NETWORK_TYPE">
<?=mk_option(_var($dockercfg,'DOCKER_NETWORK_TYPE'), '1', _('ipvlan'))?>
<?=mk_option(_var($dockercfg,'DOCKER_NETWORK_TYPE'), '', _('macvlan'))?>
<?=mk_option(_var($dockercfg,'DOCKER_NETWORK_TYPE'), '1', _('ipvlan'), $bridge?'':'disabled')?>
<?=mk_option(_var($dockercfg,'DOCKER_NETWORK_TYPE'), '', _('macvlan'), $bridge?'':'selected')?>
</select>&nbsp;_(Please read the Help carefully)_. _(Misconfiguration can cause problems)_.
:docker_custom_network_type_help:
<?endif;?>
_(Host access to custom networks)_:
: <select name="DOCKER_ALLOW_ACCESS">
<?=mk_option(_var($dockercfg,'DOCKER_ALLOW_ACCESS'), '', _('Disabled'))?>
@@ -439,6 +438,7 @@ _(IPv6 custom network on interface)_ <?=$network?> (_(optional)_):
</div>
<?else: /* DOCKER STARTED */?>
_(Docker version)_:
: <?$arrInfo = $DockerClient->getInfo(); echo $arrInfo['Version']?>
@@ -454,6 +454,11 @@ _(Docker directory)_:
:docker_vdisk_location_active_help:
_(Docker storage driver)_:
: <?=_var($dockercfg,'DOCKER_BACKINGFS')?>
:docker_storage_driver_active_help:
_(Default appdata storage location)_:
: <?=_var($dockercfg,'DOCKER_APP_CONFIG_PATH')?>
@@ -465,13 +470,11 @@ _(Docker LOG rotation)_:
:docker_log_rotation_active_help:
<?if ($bridge):?>
_(Docker custom network type)_:
: <?=_var($dockercfg,'DOCKER_NETWORK_TYPE')=='1' ? _('ipvlan') : _('macvlan')?>
: <?=_var($dockercfg,'DOCKER_NETWORK_TYPE')!='1' || !$bridge ? _('macvlan') : _('ipvlan')?>
:docker_custom_network_type_help:
<?endif;?>
_(Host access to custom networks)_:
: <?=_var($dockercfg,'DOCKER_ALLOW_ACCESS')=='yes' ? _('Enabled') : _('Disabled')?>
@@ -615,6 +618,9 @@ function prepareDocker(form) {
$(form).find('input[name="DOCKER_IMAGE_FILE"]').val($('#DOCKER_IMAGE_TYPE').val()=='folder' ? $("#DOCKER_IMAGE_FILE2").val() : $("#DOCKER_IMAGE_FILE1").val());
$("#DOCKER_IMAGE_FILE1").prop('disabled',true);
$("#DOCKER_IMAGE_FILE2").prop('disabled',true);
<?if ($no_dockercfg):?>
$(form).find('input[name="DOCKER_BACKINGFS"]').val($('#DOCKER_IMAGE_TYPE').val()=='folder' ? $("#DOCKER_BACKINGFS").val() : $("#DOCKER_BACKINGFS").val('native'));
<?endif;?>
<?endif;?>
$(form).find('input:hidden[name^="DOCKER_DHCP_"]').each(function(){
var id = '#'+$(this).attr('name')+'_';
@@ -880,39 +886,54 @@ function btrfsScrub(path) {
}
});
}
var originalPath = $("#DOCKER_IMAGE_FILE2").val();
function updateLocation(val) {
var content1 = $("#DOCKER_IMAGE_FILE1");
var content2 = $("#DOCKER_IMAGE_FILE2");
var dropdown = $("#DOCKER_BACKINGFS");
var path = originalPath.split('/');
switch (val) {
case 'xfs':
var path = content2.val().split('/');
path.splice(-1,1);
content1.val((path.join('/') + '/docker-xfs.img'));
$('#vdisk_file').show('slow');
$('#vdisk_dir').hide('slow');
$('#backingfs_type').hide();
content1.prop('disabled',false).trigger('change');
content2.prop('disabled',true);
dropdown.val('native');
break;
case 'folder':
var path = content2.val().split('/');
if (path[path.length-1]=='') path.splice(-2,2); else path.splice(-1,1);
content2.val(path.join('/') + '/docker/');
content2.val(path.join('/') + '/');
$('#vdisk_file').hide('slow');
$('#vdisk_dir').show('slow');
$('#backingfs_type').show('slow');
content1.prop('disabled',true);
content2.prop('disabled',false).trigger('change');
break;
default:
var path = content2.val().split('/');
path.splice(-1,1);
content1.val((path.join('/') + '/docker.img'));
$('#vdisk_file').show('slow');
$('#vdisk_dir').hide('slow');
$('#backingfs_type').hide();
content1.prop('disabled',false).trigger('change');
content2.prop('disabled',true);
dropdown.val('native');
break;
}
}
function updateBackingFS(val) {
var backingfs = "<?= _var($dockercfg,'DOCKER_BACKINGFS') ?>";
var warning = document.getElementById("WARNING_BACKINGFS");
var checkbox = $(".deleteCheckbox");
if (val !== backingfs) {
warning.style.display = "inline";
} else {
warning.style.display = "none";
}
}
function checkbox_state(value) {
$.post('/plugins/dynamix.docker.manager/include/UpdateConfig.php',{action:'exist',name:value},function(state){state==0 ? $('.deleteLabel').fadeIn() : $('.deleteLabel').fadeOut();});
}
@@ -920,6 +941,7 @@ $(function() {
<?if ($DockerStopped):?>
if ($('#DOCKER_IMAGE_TYPE').val()=='folder') {
$('#vdisk_dir').show();
$('#backingfs_type').show();
checkbox_state($("#DOCKER_IMAGE_FILE2").val());
$("#DOCKER_IMAGE_FILE2").prop('disabled',false);
} else {

View File

@@ -3,9 +3,9 @@ Cond="(pgrep('dockerd')!==false)"
Markdown="false"
---
<?PHP
/* Copyright 2005-2020, Lime Technology
* Copyright 2014-2020, Guilherme Jardim, Eric Schultz, Jon Panozzo.
* Copyright 2012-2020, Bergware International.
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,

View File

@@ -8,3 +8,5 @@ DOCKER_USER_NETWORKS="remove"
DOCKER_ALLOW_ACCESS=""
DOCKER_TIMEOUT=10
DOCKER_READMORE="yes"
DOCKER_PID_LIMIT=""
DOCKER_BACKINGFS="overlay2"

View File

@@ -1,7 +1,7 @@
<?PHP
/* Copyright 2005-2022, Lime Technology
* Copyright 2014-2022, Guilherme Jardim, Eric Schultz, Jon Panozzo.
* Copyright 2012-2022, Bergware International.
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -12,7 +12,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/plugins/dynamix.docker.manager/include/DockerClient.php";
$user_prefs = $dockerManPaths['user-prefs'];

View File

@@ -1,7 +1,7 @@
<?PHP
/* Copyright 2005-2023, Lime Technology
* Copyright 2015-2023, Guilherme Jardim, Eric Schultz, Jon Panozzo.
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -12,10 +12,8 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/plugins/dynamix.docker.manager/include/DockerClient.php";
libxml_use_internal_errors(true);
require_once "$docroot/webGui/include/Helpers.php";
extract(parse_plugin_cfg('dynamix',true));
@@ -215,6 +213,9 @@ if (isset($_GET['xmlTemplate'])) {
if (is_file($xmlTemplate)) {
$xml = xmlToVar($xmlTemplate);
$templateName = $xml['Name'];
if (preg_match('/^container:(.*)/', $xml['Network'])) {
$xml['Network'] = explode(':', $xml['Network'], 2);
}
if ($xmlType == 'default') {
if (!empty($dockercfg['DOCKER_APP_CONFIG_PATH']) && file_exists($dockercfg['DOCKER_APP_CONFIG_PATH'])) {
// override /config
@@ -277,18 +278,6 @@ $bgcolor = strstr('white,azure',$display['theme']) ? '#f2f2f2' : '#1c1c1c';
<link type="text/css" rel="stylesheet" href="<?autov("/webGui/styles/jquery.filetree.css")?>">
<link type="text/css" rel="stylesheet" href="<?autov("/plugins/dynamix.docker.manager/styles/style-{$display['theme']}.css")?>">
<style>
.noshow,.advanced{display:none}
.fileTree{width:240px;max-height:200px;overflow-y:scroll;overflow-x:hidden;position:absolute;display:none;background:<?=$bgcolor?>}
.required:after{content:" *";color:#E80000}
span.boxed{display:inline-block;line-height:normal;white-space:normal;width:56%}
span.cpu,label.checkbox{display:inline-block;width:32px}
span.ct{display:inline-block;width:230px}
span.net{display:inline-block;width:120px}
span.ip{display:inline-block;width:160px}
dl,dt,dd{line-height:normal!important}
</style>
<script src="<?autov('/webGui/javascript/jquery.switchbutton.js')?>"></script>
<script src="<?autov('/webGui/javascript/jquery.filetree.js')?>" charset="utf-8"></script>
<script src="<?autov('/plugins/dynamix.vm.manager/javascript/dynamix.vm.manager.js')?>"></script>
@@ -319,6 +308,7 @@ if (!String.prototype.replaceAll) {
// Create config nodes using templateDisplayConfig
function makeConfig(opts) {
confNum += 1;
var icons = {'Path':'folder-o', 'Port':'minus-square-o', 'Variable':'file-text-o', 'Label':'tags', 'Device':'play-circle-o'};
var newConfig = $("#templateDisplayConfig").html();
newConfig = newConfig.format(
stripTags(opts.Name),
@@ -333,7 +323,8 @@ function makeConfig(opts) {
escapeQuote(opts.Value),
opts.Buttons,
opts.Required=='true' ? 'required' : '',
sprintf('Container %s',opts.Type)
sprintf('Container %s',opts.Type),
icons[opts.Type] || 'question'
);
newConfig = "<div id='ConfigNum"+opts.Number+"' class='config_"+opts.Display+"'' >"+newConfig+"</div>";
newConfig = $($.parseHTML(newConfig));
@@ -386,6 +377,13 @@ function getVal(el, name) {
}
}
function dialogStyle() {
$('.ui-dialog-titlebar-close').css({'display':'none'});
$('.ui-dialog-title').css({'text-align':'center','width':'100%','font-size':'1.8rem'});
$('.ui-dialog-content').css({'padding-top':'15px','vertical-align':'bottom'});
$('.ui-button-text').css({'padding':'0px 5px'});
}
function addConfigPopup() {
var title = "_(Add Configuration)_";
var popup = $("#dialogAddConfig");
@@ -403,11 +401,10 @@ function addConfigPopup() {
// Start Dialog section
popup.dialog({
title: title,
height: 'auto',
width: 900,
resizable: false,
width: 800,
modal: true,
show : {effect: 'fade' , duration: 250},
hide : {effect: 'fade' , duration: 250},
buttons: {
"_(Add)_": function() {
$(this).dialog("close");
@@ -429,6 +426,9 @@ function addConfigPopup() {
Opts.Buttons += "<button type='button' onclick='removeConfig("+confNum+")'>_(Remove)_</button>";
}
Opts.Number = confNum;
if (Opts.Type == "Device") {
Opts.Target = Opts.Value;
}
newConf = makeConfig(Opts);
$("#configLocation").append(newConf);
reloadTriggers();
@@ -439,11 +439,7 @@ function addConfigPopup() {
}
}
});
$(".ui-dialog .ui-dialog-titlebar").addClass('menu');
$('.ui-dialog .ui-dialog-titlebar-close').css({'display':'none'});
$(".ui-dialog .ui-dialog-title").css({'text-align':'center','width':'100%'});
$(".ui-dialog .ui-dialog-content").css({'padding-top':'15px','vertical-align':'bottom'});
$(".ui-button-text").css({'padding':'0px 5px'});
dialogStyle();
}
function editConfigPopup(num,disabled) {
@@ -477,11 +473,10 @@ function editConfigPopup(num,disabled) {
popup.find(".switch-button-background").css("margin-top", "6px");
popup.dialog({
title: title,
height: 'auto',
width: 900,
resizable: false,
width: 800,
modal: true,
show: {effect:'fade', duration: 250},
hide: {effect:'fade', duration: 250},
buttons: {
"_(Save)_": function() {
$(this).dialog("close");
@@ -502,6 +497,9 @@ function editConfigPopup(num,disabled) {
}
Opts.Number = num;
if (Opts.Type == "Device") {
Opts.Target = Opts.Value;
}
newConf = makeConfig(Opts);
if (config.hasClass("config_"+Opts.Display)) {
config.html(newConf);
@@ -522,11 +520,7 @@ function editConfigPopup(num,disabled) {
}
}
});
$(".ui-dialog .ui-dialog-titlebar").addClass('menu');
$('.ui-dialog .ui-dialog-titlebar-close').css({'display':'none'});
$(".ui-dialog .ui-dialog-title").css({'text-align':'center','width':'100%'});
$(".ui-dialog .ui-dialog-content").css({'padding-top':'15px','vertical-align':'bottom'});
$(".ui-button-text").css({'padding':'0px 5px'});
dialogStyle();
$('.desc_readmore').readmore({maxHeight:10});
}
@@ -763,6 +757,7 @@ _(Categories)_:
: <input type="hidden" name="contCategory">
<select id="catSelect" size="1" multiple="multiple" style="display:none" onchange="prepareCategory();">
<optgroup label="_(Categories)_">
<option value="AI:">_(AI)_</option>
<option value="Backup:">_(Backup)_</option>
<option value="Cloud:">_(Cloud)_</option>
<option value="Crypto:">_(Crypto Currency)_</option>
@@ -872,6 +867,7 @@ _(Network Type)_:
: <select name="contNetwork" onchange="showSubnet(this.value)">
<?=mk_option(1,'bridge',_('Bridge'))?>
<?=mk_option(1,'host',_('Host'))?>
<?=mk_option(1,'container',_('Container'))?>
<?=mk_option(1,'none',_('None'))?>
<?foreach ($custom as $network):?>
<?$name = $network;
@@ -894,6 +890,21 @@ _(Fixed IP address)_ (_(optional)_):
:docker_fixed_ip_help:
</div>
<div markdown="1" class="netCONT noshow">
_(Container Network)_:
: <select name="netCONT" id="netCONT">
<?php
foreach ($DockerClient->getDockerContainers() as $ct) {
if ($ct['Name'] !== $xml['Name']) {
$list[] = $ct['Name'];
echo mk_option($ct['Name'], $ct['Name'], $ct['Name']);
}
}
?>
:docker_container_network_help:
</select>
</div>
_(Console shell command)_:
: <select name="contShell">
@@ -1008,8 +1019,8 @@ _(Password Mask)_:
<input type="hidden" name="confDisplay[]" value="{6}">
<input type="hidden" name="confRequired[]" value="{7}">
<input type="hidden" name="confMask[]" value="{8}">
<span class="{11}">{0}:</span>
: <span class="boxed"><input type="text" name="confValue[]" default="{2}" value="{9}" autocomplete="off" spellcheck="false" {11}>{10}<br><span class='orange-text'>{12}: {1}</span><br><span class="orange-text">{4}</span><br>
<span class="{11}"><i class="fa fa-fw fa-{13}"></i>&nbsp;&nbsp;{0}:</span>
: <span class="boxed"><input type="text" class="setting_input" name="confValue[]" default="{2}" value="{9}" autocomplete="off" spellcheck="false" {11}>{10}<br><span class='orange-text'>{12}: {1}</span><br><span class="orange-text">{4}</span><br></span>
</div>
<div markdown="1" id="templateAllocations" style="display:none">
@@ -1027,9 +1038,18 @@ function showSubnet(bridge) {
if (bridge.match(/^(bridge|host|none)$/i) !== null) {
$('.myIP').hide();
$('input[name="contMyIP"]').val('');
$('.netCONT').hide();
$('#netCONT').val('');
} else if (bridge.match(/^(container)$/i) !== null) {
$('.netCONT').show();
$('#netCONT').val('<?php echo $xml['Network'][1]; ?>');
$('.myIP').hide();
$('input[name="contMyIP"]').val('');
} else {
$('.myIP').show();
$('#myIP').html('Subnet: '+subnet[bridge]);
$('.netCONT').hide();
$('#netCONT').val('');
}
}
@@ -1125,6 +1145,9 @@ $(function() {
Opts.Buttons += "<button type='button' onclick='removeConfig("+confNum+")'>_(Remove)_</button>";
}
Opts.Number = confNum;
if (Opts.Type == "Device") {
Opts.Target = Opts.Value;
}
newConf = makeConfig(Opts);
if (Opts.Display == 'advanced' || Opts.Display == 'advanced-hide') {
$("#configLocationAdvanced").append(newConf);

View File

@@ -1,7 +1,7 @@
<?PHP
/* Copyright 2005-2023, Lime Technology
* Copyright 2014-2023, Guilherme Jardim, Eric Schultz, Jon Panozzo.
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -12,10 +12,7 @@
*/
?>
<?
libxml_use_internal_errors(true); # Suppress any warnings from xml errors.
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/plugins/dynamix.docker.manager/include/Helpers.php";
require_once "$docroot/webGui/include/Wrappers.php";
@@ -51,13 +48,16 @@ $port = file_exists('/sys/class/net/br0') ? 'BR0' : (file_exists('/sys/class/net
// Docker configuration file - guaranteed to exist
$docker_cfgfile = '/boot/config/docker.cfg';
if (file_exists($docker_cfgfile) && exec("grep -Pom1 '_{$port}(_[0-9]+)?=' $docker_cfgfile")=='') {
# interface has changed, update configuration
exec("sed -ri 's/_(BR0|BOND0|ETH0)(_[0-9]+)?=/_{$port}\\2=/' $docker_cfgfile");
if (file_exists($docker_cfgfile)) {
exec("grep -Pom2 '_SUBNET_|_{$port}(_[0-9]+)?=' $docker_cfgfile",$cfg);
if (isset($cfg[0]) && $cfg[0]=='_SUBNET_' && empty($cfg[1])) {
# interface has changed, update configuration
exec("sed -ri 's/_(BR0|BOND0|ETH0)(_[0-9]+)?=/_{$port}\\2=/' $docker_cfgfile");
}
}
$defaults = @parse_ini_file("$docroot/plugins/dynamix.docker.manager/default.cfg") ?: [];
$dockercfg = array_replace_recursive($defaults, @parse_ini_file($docker_cfgfile) ?: []);
$defaults = (array)@parse_ini_file("$docroot/plugins/dynamix.docker.manager/default.cfg");
$dockercfg = array_replace_recursive($defaults, (array)@parse_ini_file($docker_cfgfile));
function var_split($item, $i=0) {
return array_pad(explode(' ',$item),$i+1,'')[$i];
@@ -176,7 +176,7 @@ class DockerTemplates {
}
// if after above we don't have a valid url, check for GitLab
if (empty($github_api['url'])) {
$source = file_get_contents($url);
$source = $this->download_url($url);
// the following should always exist for GitLab Community Edition or GitLab Enterprise Edition
if (preg_match("/<meta content='GitLab (Community|Enterprise) Edition' name='description'>/", $source) > 0) {
$parse = parse_url($url);
@@ -255,7 +255,7 @@ class DockerTemplates {
$doc = new DOMDocument();
$doc->load($file['path']);
if ($name) {
if ($doc->getElementsByTagName('Name')->item(0)->nodeValue !== $name) continue;
if (@$doc->getElementsByTagName('Name')->item(0)->nodeValue !== $name) continue;
}
$TemplateRepository = DockerUtil::ensureImageTag($doc->getElementsByTagName('Repository')->item(0)->nodeValue??'');
if ($TemplateRepository && $TemplateRepository==$Repository) {
@@ -293,7 +293,7 @@ class DockerTemplates {
}
public function getAllInfo($reload=false,$com=true,$communityApplications=false) {
global $dockerManPaths, $host;
global $driver, $dockerManPaths, $host;
$DockerClient = new DockerClient();
$DockerUpdate = new DockerUpdate();
//$DockerUpdate->verbose = $this->verbose;
@@ -307,9 +307,8 @@ class DockerTemplates {
$tmp['paused'] = $ct['Paused'];
$tmp['autostart'] = in_array($name,$autoStart);
$tmp['cpuset'] = $ct['CPUset'];
$tmp['url'] = $tmp['url'] ?? '';
$tmp['url'] = $ct['Url'] ?? $tmp['url'] ?? '';
// read docker label for WebUI & Icon
if (isset($ct['Url']) && !$tmp['url']) $tmp['url'] = $ct['Url'];
if (isset($ct['Icon'])) $tmp['icon'] = $ct['Icon'];
if (isset($ct['Shell'])) $tmp['shell'] = $ct['Shell'];
if (!$communityApplications) {
@@ -322,8 +321,18 @@ class DockerTemplates {
// non-templated webui, user specified
$tmp['url'] = $webui;
} else {
$ip = ($ct['NetworkMode']=='host'||_var($port,'NAT')) ? $host : _var($port,'IP');
if ($ct['NetworkMode']=='host') {
$ip = $host;
} elseif (isset($driver[$ct['NetworkMode']]) && ($driver[$ct['NetworkMode']] == 'ipvlan' || $driver[$ct['NetworkMode']] == 'macvlan')) {
$ip = reset($ct['Networks'])['IPAddress'];
} elseif (!is_null(_var($port,'PublicPort'))) {
$ip = $host;
} else {
$ip = _var($port,'IP');
}
$tmp['url'] = $ip ? (strpos($tmp['url'],$ip)!==false ? $tmp['url'] : $this->getControlURL($ct, $ip, $tmp['url'])) : $tmp['url'];
if (strpos($ct['NetworkMode'], 'container:') === 0)
$tmp['url'] = '';
}
if ( ($tmp['shell'] ?? false) == false )
$tmp['shell'] = $this->getTemplateValue($image, 'Shell');
@@ -338,8 +347,12 @@ class DockerTemplates {
$tmp['updated'] = var_export($DockerUpdate->getUpdateStatus($image),true);
}
if (!$com) $tmp['updated'] = 'undef';
if (empty($tmp['template']) || $reload) $tmp['template'] = $this->getUserTemplate($name);
if ($reload) $DockerUpdate->updateUserTemplate($name);
if ($ct['Manager'] !== 'dockerman')
$tmp['template'] = null;
else if (empty($tmp['template']) || $reload) {
$tmp['template'] = $this->getUserTemplate($name);
if ($reload) $DockerUpdate->updateUserTemplate($name);
}
//$this->debug("\n$name");
//foreach ($tmp as $c => $d) $this->debug(sprintf(' %-10s: %s', $c, $d));
}
@@ -353,7 +366,6 @@ class DockerTemplates {
if (!$imgUrl) $imgUrl = $tmpIconUrl;
if (!$imgUrl || trim($imgUrl) == "/plugins/dynamix.docker.manager/images/question.png") return '';
$imageName = $contName ?: $name;
$iconRAM = sprintf('%s/%s-%s.png', $dockerManPaths['images-ram'], $contName, 'icon');
$icon = sprintf('%s/%s-%s.png', $dockerManPaths['images'], $contName, 'icon');
@@ -367,8 +379,8 @@ class DockerTemplates {
if (!is_file($icon) && is_file($iconRAM)) {
@copy($iconRAM,$icon);
}
if ( !is_file($iconRAM) ) {
exec("logger -t webGUI -- \"$imageName: Could not download icon $imgUrl\"");
if (!is_file($iconRAM)) {
my_logger("$contName: Could not download icon $imgUrl");
}
return (is_file($iconRAM)) ? str_replace($docroot, '', $iconRAM) : '';
@@ -429,7 +441,7 @@ class DockerUpdate{
// DEPRECATED: Only used for Docker Index V1 type update checks
public function getRemoteVersion($image) {
[$strRepo, $strTag] = array_pad(explode(':', DockerUtil::ensureImageTag($image)),2,'');
extract(DockerUtil::parseImageTag($image));
$apiUrl = sprintf('http://index.docker.io/v1/repositories/%s/tags/%s', $strRepo, $strTag);
//$this->debug("API URL: $apiUrl");
$apiContent = $this->download_url($apiUrl);
@@ -437,7 +449,7 @@ class DockerUpdate{
}
public function getRemoteVersionV2($image) {
[$strRepo, $strTag] = array_pad(explode(':', DockerUtil::ensureImageTag($image)),2,'');
extract(DockerUtil::parseImageTag($image));
/*
* Step 1: Check whether or not the image is in a private registry, get corresponding auth data and generate manifest url
*/
@@ -722,7 +734,7 @@ class DockerClient {
$fp = stream_socket_client('unix:///var/run/docker.sock', $errno, $errstr);
if ($fp === false) {
echo "Couldn't create socket: [$errno] $errstr";
return null;
return [];
}
$protocol = $unchunk ? 'HTTP/1.0' : 'HTTP/1.1';
$out = "$method {$api}{$url} $protocol\r\nHost:127.0.0.1\r\nConnection:Close\r\n";
@@ -812,6 +824,13 @@ class DockerClient {
global $docroot, $dockerManPaths;
$id = $id ?: $name;
$info = DockerUtil::loadJSON($dockerManPaths['webui-info']);
// Check to see if the container is linked to other containers
$networks = array_map(function ($n) { return $n['NetworkMode']; }, $this->getDockerContainers());
if (in_array("container:{$name}", $networks)) {
return "Container currently assigned as network for another container.";
}
// Attempt to remove container
$this->getDockerJSON("/containers/$id?force=1", 'DELETE', $code);
if (isset($info[$name])) {
@@ -898,7 +917,7 @@ class DockerClient {
}
public function getDockerContainers() {
global $driver;
global $driver, $host;
// Return cached values
if (is_array($this::$containersCache)) return $this::$containersCache;
$this::$containersCache = [];
@@ -916,29 +935,58 @@ class DockerClient {
$c['Volumes'] = $info['HostConfig']['Binds'];
$c['Created'] = $this->humanTiming($ct['Created']);
$c['NetworkMode'] = $ct['HostConfig']['NetworkMode'];
$c['Manager'] = $info['Config']['Labels']['net.unraid.docker.managed'] ?? false;
if ($c['Manager'] == 'composeman') {
$c['ComposeProject'] = $info['Config']['Labels']['com.docker.compose.project'];
}
[$net, $id] = array_pad(explode(':',$c['NetworkMode']),2,'');
$c['CPUset'] = $info['HostConfig']['CpusetCpus'];
$c['BaseImage'] = $ct['Labels']['BASEIMAGE'] ?? false;
$c['Icon'] = $info['Config']['Labels']['net.unraid.docker.icon'] ?? false;
$c['Url'] = $info['Config']['Labels']['net.unraid.docker.webui'] ?? false;
$c['Shell'] = $info['Config']['Labels']['net.unraid.docker.shell'] ?? false;
$c['Manager'] = $info['Config']['Labels']['net.unraid.docker.managed'] ?? false;
$c['Ports'] = [];
$c['Networks'] = [];
if ($id) $c['NetworkMode'] = $net.str_replace('/',':',DockerUtil::ctMap($id)?:'/???');
if (isset($driver[$c['NetworkMode']])) {
if ($driver[$c['NetworkMode']]=='bridge') {
$ports = &$info['HostConfig']['PortBindings'];
$nat = true;
} elseif ($driver[$c['NetworkMode']]=='host') {
$c['Ports']['host'] = ['host' => ''];
} elseif ($driver[$c['NetworkMode']]=='ipvlan' || $driver[$c['NetworkMode']]=='macvlan') {
$i = $ct['NetworkSettings']['Networks'][$c['NetworkMode']]['IPAddress'];
$c['Ports']['vlan'] = ["$i" => $i];
} else {
$ports = &$info['Config']['ExposedPorts'];
$nat = false;
}
$ip = $ct['NetworkSettings']['Networks'][$c['NetworkMode']]['IPAddress'];
} else if (!$id) {
$c['NetworkMode'] = DockerUtil::ctMap($c['NetworkMode']);
$ports = &$info['Config']['ExposedPorts'];
}
foreach($ct['NetworkSettings']['Networks'] as $netName => $netVals) {
$i = $c['NetworkMode']=='host' ? $host : $netVals['IPAddress'];
$c['Networks'][$netName] = [ 'IPAddress' => $i ];
if ($driver[$netName]=='ipvlan' || $driver[$netName]=='macvlan') {
if (!isset($c['Ports']['vlan'])) $c['Ports']['vlan'] = [];
$c['Ports']['vlan']["$i"] = $i;
}
}
$ip = $c['NetworkMode']=='host' ? $host : $ct['NetworkSettings']['Networks'][$c['NetworkMode']]['IPAddress'] ?? null;
$c['Networks'][$c['NetworkMode']] = [ 'IPAddress' => $ip ];
$ports = (isset($ports) && is_array($ports)) ? $ports : [];
foreach ($ports as $port => $value) {
if (!isset($info['HostConfig']['PortBindings'][$port])) {
continue;
}
[$PrivatePort, $Type] = array_pad(explode('/', $port),2,'');
$c['Ports'][] = ['IP' => $ip, 'PrivatePort' => $PrivatePort, 'PublicPort' => $nat ? $value[0]['HostPort'] : $PrivatePort, 'NAT' => $nat, 'Type' => $Type];
$PublicPort = $info['HostConfig']['PortBindings']["$port"][0]['HostPort'] ?: null;
$nat = ($driver[$c['NetworkMode']]=='bridge');
if (array_key_exists($PrivatePort, $c['Ports']) && $Type != $c['Ports'][$PrivatePort]['Type'])
$Type = $c['Ports'][$PrivatePort]['Type'] . '/' . $Type;
$c['Ports'][$PrivatePort] = ['IP' => $ip, 'PrivatePort' => $PrivatePort, 'PublicPort' => $PublicPort, 'NAT' => $nat, 'Type' => $Type, 'Driver' => $driver[$c['NetworkMode']]];
}
ksort($c['Ports']);
$this::$containersCache[] = $c;
}
array_multisort(array_column($this::$containersCache,'Name'), SORT_NATURAL|SORT_FLAG_CASE, $this::$containersCache);
@@ -979,9 +1027,9 @@ class DockerClient {
$c['Id'] = $this->extractID($ct['Id']);
$c['ParentId'] = $this->extractID($ct['ParentId']);
$c['Size'] = $this->formatBytes($ct['Size']);
$c['VirtualSize'] = $this->formatBytes($ct['VirtualSize']);
$c['VirtualSize'] = $this->formatBytes($ct['VirtualSize'] ?? null);
$c['Tags'] = array_map('htmlspecialchars', $ct['RepoTags'] ?? []);
$c['Repository'] = vsprintf('%1$s/%2$s', preg_split("#[:\/]#", DockerUtil::ensureImageTag($ct['RepoTags'][0]??'')));
$c['Repository'] = DockerUtil::parseImageTag($ct['RepoTags'][0]??'')['strRepo'];
$c['usedBy'] = $this->usedBy($c['Id']);
$this::$imagesCache[$c['Id']] = $c;
}
@@ -994,18 +1042,50 @@ class DockerClient {
##################################
class DockerUtil {
public static function ensureImageTag($image) {
[$strRepo, $strTag] = array_map('trim', array_pad(explode(':', $image.':'),2,''));
if (strpos($strRepo, 'sha256:') === 0) {
public static function ensureImageTag($image): string
{
extract(static::parseImageTag($image));
return "$strRepo:$strTag";
}
public static function parseImageTag($image): array
{
if (strpos($image, 'sha256:') === 0) {
// sha256 was provided instead of actual repo name so truncate it for display:
$strRepo = substr($strRepo, 7, 12);
} elseif (strpos($strRepo, '/') === false) {
// Prefix library/ if there's no author (maybe a Docker offical image?)
$strRepo = "library/$strRepo";
$strRepo = substr($image, 7, 12);
} elseif (strpos($image, '/') === false) {
return static::parseImageTag('library/' . $image);
} else {
$parsedImage = static::splitImage($image);
if (!empty($parsedImage)) {
$strRepo = $parsedImage['strRepo'];
$strTag = $parsedImage['strTag'];
} else {
// Unprocessable input
$strRepo = $image;
}
}
// Add :latest tag to image if it's absent
if (empty($strTag)) $strTag = 'latest';
return "$strRepo:$strTag";
return array_map('trim', ['strRepo' => $strRepo, 'strTag' => $strTag]);
}
private static function splitImage($image): ?array
{
if (false === preg_match('@^(.+/)*([^/:]+)(:[^:/]*)*$@', $image, $newSections) || count($newSections) < 3) {
return null;
} else {
[, $strRepo, $image, $strTag] = array_merge($newSections, ['']);
$strTag = str_replace(':','',$strTag??'');
return [
'strRepo' => $strRepo . $image,
'strTag' => $strTag,
];
}
}
public static function loadJSON($path) {

View File

@@ -1,7 +1,7 @@
<?PHP
/* Copyright 2005-2023, Lime Technology
* Copyright 2014-2023, Guilherme Jardim, Eric Schultz, Jon Panozzo.
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -12,8 +12,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Helpers.php";
require_once "$docroot/plugins/dynamix.docker.manager/include/DockerClient.php";
@@ -34,7 +33,7 @@ if (!$containers && !$images) {
}
if (file_exists($user_prefs)) {
$prefs = @parse_ini_file($user_prefs) ?: [];
$prefs = (array)@parse_ini_file($user_prefs);
$sort = [];
foreach ($containers as $ct) $sort[] = array_search($ct['Name'],$prefs);
array_multisort($sort,SORT_NUMERIC,$containers);
@@ -46,7 +45,7 @@ $allInfo = $DockerTemplates->getAllInfo();
$docker = [];
$null = '0.0.0.0';
$autostart = @file($autostart_file,FILE_IGNORE_NEW_LINES) ?: [];
$autostart = (array)@file($autostart_file,FILE_IGNORE_NEW_LINES);
$names = array_map('var_split',$autostart);
function my_lang_time($text) {
@@ -70,7 +69,8 @@ foreach ($containers as $ct) {
$running = $info['running'] ? 1 : 0;
$paused = $info['paused'] ? 1 : 0;
$is_autostart = $info['autostart'] ? 'true':'false';
$updateStatus = substr($ct['NetworkMode'],-4)==':???' ? 2 : ($info['updated']=='true' ? 0 : ($info['updated']=='false' ? 1 : 3));
$composestack = isset($ct['ComposeProject']) ? $ct['ComposeProject'] : '';
$updateStatus = substr($ct['NetworkMode'], -4) == ':???' ? 2 : ($info['updated'] == 'true' ? 0 : ($info['updated'] == 'false' ? 1 : 3));
$template = $info['template']??'';
$shell = $info['shell']??'';
$webGui = html_entity_decode($info['url']??'');
@@ -84,15 +84,34 @@ foreach ($containers as $ct) {
$shape = $running ? ($paused ? 'pause' : 'play') : 'square';
$status = $running ? ($paused ? 'paused' : 'started') : 'stopped';
$color = $status=='started' ? 'green-text' : ($status=='paused' ? 'orange-text' : 'red-text');
$update = $updateStatus==1 ? 'blue-text' : '';
$update = $updateStatus==1 && !empty($compose) ? 'blue-text' : '';
$icon = $info['icon'] ?: '/plugins/dynamix.docker.manager/images/question.png';
$image = substr($icon,-4)=='.png' ? "<img src='$icon?".filemtime("$docroot{$info['icon']}")."' class='img' onerror=this.src='/plugins/dynamix.docker.manager/images/question.png';>" : (substr($icon,0,5)=='icon-' ? "<i class='$icon img'></i>" : "<i class='fa fa-$icon img'></i>");
$wait = var_split($autostart[array_search($name,$names)]??'',1);
$ports = [];
foreach ($ct['Ports'] as $port) {
$intern = $running ? ($ct['NetworkMode']=='host' ? $host : _var($port,'IP')) : $null;
$extern = $running ? (_var($port,'NAT') ? $host : $intern) : $null;
$ports[] = sprintf('%s:%s/%s<i class="fa fa-arrows-h" style="margin:0 6px"></i>%s:%s', $intern, _var($port,'PrivatePort'), strtoupper(_var($port,'Type')), $extern, _var($port,'PublicPort'));
$networks = [];
$network_ips = [];
$ports_internal = [];
$ports_external = [];
if (isset($ct['Ports']['vlan'])) {
foreach ($ct['Ports']['vlan'] as $i)
$ports_external[] = sprintf('%s', $i);
$ports_internal[0] = sprintf('%s', 'all');
}
foreach($ct['Networks'] as $netName => $netVals) {
$networks[] = $netName;
$network_ips[] = $running ? $netVals['IPAddress'] : null;
if (isset($ct['Networks']['host'])) {
$ports_external[] = sprintf('%s', $netVals['IPAddress']);
$ports_internal[0] = sprintf('%s', 'all');
} else if (!isset($ct['Ports']['vlan']) || strpos($ct['NetworkMode'], 'container:') != 0) {
foreach ($ct['Ports'] as $port) {
if (_var($port,'PublicPort') && _var($port,'Driver') == 'bridge')
$ports_external[] = sprintf('%s:%s', $host, strtoupper(_var($port,'PublicPort')));
if ((!isset($ct['Networks']['host'])) || (!isset($ct['Networks']['vlan'])))
$ports_internal[] = sprintf('%s:%s', _var($port,'PrivatePort'), strtoupper(_var($port,'Type')));
}
}
}
$paths = [];
$ct['Volumes'] = is_array($ct['Volumes']) ? $ct['Volumes'] : [];
@@ -101,17 +120,17 @@ foreach ($containers as $ct) {
$paths[] = sprintf('%s<i class="fa fa-%s" style="margin:0 6px"></i>%s', htmlspecialchars($container_path), $access_mode=='ro'?'long-arrow-left':'arrows-h', htmlspecialchars($host_path));
}
echo "<tr class='sortable'><td class='ct-name' style='width:220px;padding:8px'><i class='fa fa-arrows-v mover orange-text'></i>";
if ($template) {
if ($template && empty($composestack)) {
$appname = "<a class='exec' onclick=\"editContainer('".addslashes(htmlspecialchars($name))."','".addslashes(htmlspecialchars($template))."')\">".htmlspecialchars($name)."</a>";
} else {
$appname = htmlspecialchars($name);
}
echo "<span class='outer'><span id='$id' $menu class='hand'>$image</span><span class='inner'><span class='appname $update'>$appname</span><br><i id='load-$id' class='fa fa-$shape $status $color'></i><span class='state'>"._($status)."</span></span></span>";
echo "<span class='outer'><span id='$id' $menu class='hand'>$image</span><span class='inner'><span class='appname $update'>$appname</span><br><i id='load-$id' class='fa fa-$shape $status $color'></i><span class='state'>"._($status).(!empty($composestack) ? '<br/>Compose Stack: ' . $composestack : '')."</span></span></span>";
echo "<div class='advanced' style='margin-top:8px'>"._('Container ID').": $id<br>";
if ($ct['BaseImage']) echo "<i class='fa fa-cubes' style='margin-right:5px'></i>".htmlspecialchars(${ct['BaseImage']})."<br>";
if ($ct['BaseImage']) echo "<i class='fa fa-cubes' style='margin-right:5px'></i>".htmlspecialchars($ct['BaseImage'])."<br>";
echo _('By').": ";
$registry = $info['registry'];
[$author,$version] = my_explode(':',$ct['Image']);
['strRepo' => $author, 'strTag' => $version] = DockerUtil::parseImageTag($ct['Image']);
if ($registry) {
echo "<a href='".htmlspecialchars($registry)."' target='_blank'>".htmlspecialchars(compress($author,24))."</a>";
} else {
@@ -119,30 +138,64 @@ foreach ($containers as $ct) {
}
echo "</div></td><td class='updatecolumn'>";
switch ($updateStatus) {
case 0:
echo "<span class='green-text' style='white-space:nowrap;'><i class='fa fa-check fa-fw'></i> "._('up-to-date')."</span>";
echo "<div class='advanced'><a class='exec' onclick=\"updateContainer('".addslashes(htmlspecialchars($name))."');\"><span style='white-space:nowrap;'><i class='fa fa-cloud-download fa-fw'></i> "._('force update')."</span></a></div>";
break;
case 1:
echo "<div class='advanced'><span class='orange-text' style='white-space:nowrap;'><i class='fa fa-flash fa-fw'></i> "._('update ready')."</span></div>";
echo "<a class='exec' onclick=\"updateContainer('".addslashes(htmlspecialchars($name))."');\"><span style='white-space:nowrap;'><i class='fa fa-cloud-download fa-fw'></i> "._('apply update')."</span></a>";
break;
case 2:
echo "<div class='advanced'><span class='orange-text' style='white-space:nowrap;'><i class='fa fa-flash fa-fw'></i> "._('rebuild ready')."</span></div>";
echo "<a class='exec'><span style='white-space:nowrap;'><i class='fa fa-recycle fa-fw'></i> "._('rebuilding')."</span></a>";
break;
default:
echo "<span class='orange-text' style='white-space:nowrap;'><i class='fa fa-unlink'></i> "._('not available')."</span>";
echo "<div class='advanced'><a class='exec' onclick=\"updateContainer('".addslashes(htmlspecialchars($name))."');\"><span style='white-space:nowrap;'><i class='fa fa-cloud-download fa-fw'></i> "._('force update')."</span></a></div>";
break;
}
case 0:
if ($ct['Manager'] == "dockerman") {
echo "<span class='green-text' style='white-space:nowrap;'><i class='fa fa-check fa-fw'></i> "._('up-to-date')."</span>";
echo "<div class='advanced'><a class='exec' onclick=\"updateContainer('".addslashes(htmlspecialchars($name))."');\"><span style='white-space:nowrap;'><i class='fa fa-cloud-download fa-fw'></i> "._('force update')."</span></a></div>";
} elseif (!empty($composestack)) {
echo "<div><span><i class='fa fa-docker fa-fw'/></i> Compose</span></div>";
echo "<span tyle='white-space:nowrap;'><i class='fa fa-check fa-fw'></i> "._('up-to-date')."</span>";
} else {
echo "<div><span><i class='fa fa-docker fa-fw'/></i> 3rd Party</span></div>";
echo "<span tyle='white-space:nowrap;'><i class='fa fa-check fa-fw'></i> "._('up-to-date')."</span>";
}
break;
case 1:
echo "<div class='advanced'><span class='orange-text' style='white-space:nowrap;'><i class='fa fa-flash fa-fw'></i> "._('update ready')."</span></div>";
if ($ct['Manager'] == "dockerman") {
echo "<a class='exec' onclick=\"updateContainer('".addslashes(htmlspecialchars($name))."');\"><span style='white-space:nowrap;'><i class='fa fa-cloud-download fa-fw'></i> "._('apply update')."</span></a>";
} elseif (!empty($composestack)) {
echo "<div><span><i class='fa fa-docker fa-fw'/></i> Compose</span></a></div>";
echo "<span style='white-space:nowrap;'><i class='fa fa-cloud-download fa-fw'></i> "._('update available')."</span>";
} else {
echo "<div><span><i class='fa fa-docker fa-fw'/></i> 3rd Party</span></div>";
echo "<span style='white-space:nowrap;'><i class='fa fa-cloud-download fa-fw'></i> "._('update available')."</span>";
}
break;
case 2:
echo "<div class='advanced'><span class='orange-text' style='white-space:nowrap;'><i class='fa fa-flash fa-fw'></i> "._('rebuild ready')."</span></div>";
echo "<a class='exec'><span style='white-space:nowrap;'><i class='fa fa-recycle fa-fw'></i> "._('rebuilding')."</span></a>";
break;
default:
if ($ct['Manager'] == "dockerman") {
echo "<span class='orange-text' style='white-space:nowrap;'><i class='fa fa-unlink'></i> "._('not available')."</span>";
echo "<div class='advanced'><a class='exec' onclick=\"updateContainer('".addslashes(htmlspecialchars($name))."');\"><span style='white-space:nowrap;'><i class='fa fa-cloud-download fa-fw'></i> "._('force update')."</span></a></div>";
} elseif (!empty($composestack)) {
echo "<div><span><i class='fa fa-docker fa-fw'/></i> Compose</span></div>";
echo "<span style='white-space:nowrap;'><i class='fa fa-unlink'></i> "._('not available')."</span>";
} else {
echo "<div><span><i class='fa fa-docker fa-fw'/></i> 3rd Party</span></div>";
echo "<span style='white-space:nowrap;'><i class='fa fa-unlink'></i> "._('not available')."</span>";
}
break;
}
echo "<div class='advanced'><i class='fa fa-info-circle fa-fw'></i> ".compress(_($version),12,0)."</div></td>";
echo "<td>{$ct['NetworkMode']}</td>";
echo "<td style='white-space:nowrap'><span class='docker_readmore'>".implode('<br>',$ports)."</span></td>";
echo "<td style='white-space:nowrap'><span class='docker_readmore'> ".implode('<br>',$networks)."</span></td>";
echo "<td style='white-space:nowrap'><span class='docker_readmore'> ".implode('<br>',$network_ips)."</span></td>";
echo "<td style='white-space:nowrap'><span class='docker_readmore'>".implode('<br>',$ports_internal)."</span></td>";
echo "<td style='white-space:nowrap'><span class='docker_readmore'>".implode('<br>',$ports_external)."</span></td>";
echo "<td style='word-break:break-all'><span class='docker_readmore'>".implode('<br>',$paths)."</span></td>";
echo "<td class='advanced'><span class='cpu-$id'>0%</span><div class='usage-disk mm'><span id='cpu-$id' style='width:0'></span><span></span></div>";
echo "<br><span class='mem-$id'>0 / 0</span></td>";
echo "<td><input type='checkbox' id='$id-auto' class='autostart' container='".htmlspecialchars($name)."'".($info['autostart'] ? ' checked':'').">";
if (empty($composestack)) {
if ($ct['Manager'] == "dockerman") {
echo "<td><input type='checkbox' id='$id-auto' class='autostart' container='".htmlspecialchars($name)."'".($info['autostart'] ? ' checked':'').">";
} else {
echo "<td><i class='fa fa-docker fa-fw'/></i> 3rd Party";
}
} else {
echo "<td><i class='fa fa-docker'/></i> Compose";
}
echo "<span id='$id-wait' style='float:right;display:none'>"._('wait')."<input class='wait' container='".htmlspecialchars($name)."' type='number' value='$wait' placeholder='0' title=\""._('seconds')."\"></span></td>";
echo "<td><div style='white-space:nowrap'>".htmlspecialchars(str_replace('Up',_('Uptime').':',my_lang_log($ct['Status'])))."<div style='margin-top:4px'>"._('Created').": ".htmlspecialchars(my_lang_time($ct['Created']))."</div></div></td></tr>";
}
@@ -158,3 +211,4 @@ foreach ($images as $image) {
}
echo "\0".implode($docker)."\0".(pgrep('rc.docker')!==false ? 1:0);
?>

View File

@@ -1,7 +1,7 @@
<?PHP
/* Copyright 2005-2022, Lime Technology
* Copyright 2014-2022, Guilherme Jardim, Eric Schultz, Jon Panozzo.
* Copyright 2012-2022, Bergware International.
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -12,10 +12,11 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/plugins/dynamix.docker.manager/include/DockerClient.php";
require_once "$docroot/webGui/include/Wrappers.php";
$ncsi = exec("wget --spider --no-check-certificate -nv -T10 -t1 https://www.msftncsi.com/ncsi.txt 2>&1|grep -o 'OK'")=='OK';
$ncsi = check_network_connectivity();
$DockerTemplates = new DockerTemplates();
if ($ncsi) $DockerTemplates->downloadTemplates();
$DockerTemplates->getAllInfo($ncsi,$ncsi);

View File

@@ -1,7 +1,7 @@
<?PHP
/* Copyright 2005-2023, Lime Technology
* Copyright 2014-2023, Guilherme Jardim, Eric Schultz, Jon Panozzo.
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -12,8 +12,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Secure.php";
require_once "$docroot/webGui/include/Wrappers.php";
require_once "$docroot/plugins/dynamix.docker.manager/include/DockerClient.php";

View File

@@ -1,7 +1,7 @@
<?PHP
/* Copyright 2005-2023, Lime Technology
* Copyright 2014-2023, Guilherme Jardim, Eric Schultz, Jon Panozzo.
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -40,7 +40,11 @@ function postToXML($post, $setOwnership=false) {
$xml->Name = xml_encode(preg_replace('/\s+/', '', $post['contName']));
$xml->Repository = xml_encode(trim($post['contRepository']));
$xml->Registry = xml_encode(trim($post['contRegistry']));
$xml->Network = xml_encode($post['contNetwork']);
if (!empty(trim($post['netCONT']))) {
$xml->Network = xml_encode($post['contNetwork'].':'.$post['netCONT']);
} else {
$xml->Network = xml_encode($post['contNetwork']);
}
$xml->MyIP = xml_encode($post['contMyIP']);
$xml->Shell = xml_encode($post['contShell']);
$xml->Privileged = strtolower($post['contPrivileged']??'')=='on' ? 'true' : 'false';
@@ -59,7 +63,7 @@ function postToXML($post, $setOwnership=false) {
$xml->DonateLink = xml_encode($post['contDonateLink']);
$xml->Requires = xml_encode($post['contRequires']);
$size = is_array($post['confName']) ? count($post['confName']) : 0;
$size = is_array($post['confName']??null) ? count($post['confName']) : 0;
for ($i = 0; $i < $size; $i++) {
$Type = $post['confType'][$i];
$config = $xml->addChild('Config', xml_encode($post['confValue'][$i]));
@@ -132,7 +136,11 @@ function xmlToVar($xml) {
$out['Network'] = xml_decode($xml->Networking->Mode);
}
// check if network exists
if (!key_exists($out['Network'],$subnet)) $out['Network'] = 'none';
if (preg_match('/^container:(.*)/', $out['Network'])) {
$out['Network'] = $out['Network'];
} elseif (!key_exists($out['Network'],$subnet)) {
$out['Network'] = 'none';
}
// V1 compatibility
if ($xml['version'] != '2') {
if (isset($xml->Description)) {
@@ -237,11 +245,15 @@ function xmlSecurity(&$template) {
}
function xmlToCommand($xml, $create_paths=false) {
global $docroot, $var, $cfg, $driver;
global $docroot, $var, $driver;
$xml = xmlToVar($xml);
$cmdName = strlen($xml['Name']) ? '--name='.escapeshellarg($xml['Name']) : '';
$cmdPrivileged = strtolower($xml['Privileged'])=='true' ? '--privileged=true' : '';
$cmdNetwork = preg_match('/\-\-net(work)?=/',$xml['ExtraParams']) ? "" : '--net='.escapeshellarg(strtolower($xml['Network']));
if (preg_match('/^container:(.*)/', $xml['Network'])) {
$cmdNetwork = preg_match('/\-\-net(work)?=/',$xml['ExtraParams']) ? "" : '--net='.escapeshellarg($xml['Network']);
} else {
$cmdNetwork = preg_match('/\-\-net(work)?=/',$xml['ExtraParams']) ? "" : '--net='.escapeshellarg(strtolower($xml['Network']));
}
$cmdMyIP = '';
foreach (explode(' ',str_replace(',',' ',$xml['MyIP'])) as $myIP) if ($myIP) $cmdMyIP .= (strpos($myIP,':')?'--ip6=':'--ip=').escapeshellarg($myIP).' ';
$cmdCPUset = strlen($xml['CPUset']) ? '--cpuset-cpus='.escapeshellarg($xml['CPUset']) : '';
@@ -270,6 +282,8 @@ function xmlToCommand($xml, $create_paths=false) {
$Mode = strval($config['Mode']);
if ($confType != "device" && !strlen($containerConfig)) continue;
if ($confType == "path") {
if ( ! trim($hostConfig) || ! trim($containerConfig) )
continue;
$Volumes[] = escapeshellarg($hostConfig).':'.escapeshellarg($containerConfig).':'.escapeshellarg($Mode);
if (!file_exists($hostConfig) && $create_paths) {
@mkdir($hostConfig, 0777, true);
@@ -299,15 +313,27 @@ function xmlToCommand($xml, $create_paths=false) {
$Devices[] = escapeshellarg($hostConfig);
}
}
$logSize = $logFile = '';
if (($cfg['DOCKER_LOG_ROTATION']??'')=='yes') {
$logSize = $cfg['DOCKER_LOG_SIZE'] ?? '10m';
$logSize = "--log-opt max-size='$logSize'";
$logFile = $cfg['DOCKER_LOG_FILES'] ?? '1';
$logFile = "--log-opt max-file='$logFile'";
/* Read the docker configuration file. */
$cfgfile = "/boot/config/docker.cfg";
$config_ini = @parse_ini_file($cfgfile, true, INI_SCANNER_RAW);
$docker_cfg = ($config_ini !== false) ? $config_ini : [];
// Add pid limit if user has not specified it as an extra parameter
$pidsLimit = preg_match('/--pids-limit (\d+)/', $xml['ExtraParams'], $matches) ? $matches[1] : null;
if ($pidsLimit === null) {
$pid_limit = "--pids-limit ";
if (($docker_cfg['DOCKER_PID_LIMIT']??'') != "") {
$pid_limit .= $docker_cfg['DOCKER_PID_LIMIT'];
} else {
$pid_limit .= "2048";
}
} else {
$pid_limit = "";
}
$cmd = sprintf($docroot.'/plugins/dynamix.docker.manager/scripts/docker create %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s',
$cmdName, $cmdNetwork, $cmdMyIP, $cmdCPUset, $logSize, $logFile, $cmdPrivileged, implode(' -e ', $Variables), implode(' -l ', $Labels), implode(' -p ', $Ports), implode(' -v ', $Volumes), implode(' --device=', $Devices), $xml['ExtraParams'], escapeshellarg($xml['Repository']), $xml['PostArgs']);
$cmd = sprintf($docroot.'/plugins/dynamix.docker.manager/scripts/docker create %s %s %s %s %s %s %s %s %s %s %s %s %s %s',
$cmdName, $cmdNetwork, $cmdMyIP, $cmdCPUset, $pid_limit, $cmdPrivileged, implode(' -e ', $Variables), implode(' -l ', $Labels), implode(' -p ', $Ports), implode(' -v ', $Volumes), implode(' --device=', $Devices), $xml['ExtraParams'], escapeshellarg($xml['Repository']), $xml['PostArgs']);
return [preg_replace('/\s\s+/', ' ', $cmd), $xml['Name'], $xml['Repository']];
}
function stopContainer($name, $t=false, $echo=true) {
@@ -501,9 +527,15 @@ function getAllocations() {
$nat = $ip = false;
$list['Name'] = $ct['Name'];
foreach ($ct['Ports'] as $tmp) {
$nat = $tmp['NAT'];
$ip = $tmp['IP'];
$port[] = $tmp['PublicPort'];
if (isset($tmp['NAT'])) {
$nat = $tmp['NAT'];
}
if (isset($tmp['IP'])) {
$ip = $tmp['IP'];
}
if (isset($tmp['PublicPort'])) {
$port[] = $tmp['PublicPort'];
}
}
sort($port);
$ip = $ct['NetworkMode']=='host'||$nat ? $host : ($ip ?: DockerUtil::myIP($ct['Name']) ?: '0.0.0.0');

View File

@@ -1,6 +1,7 @@
<?PHP
/* Copyright 2005-2018, Lime Technology
* Copyright 2012-2018, Bergware International.
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,

View File

@@ -1,7 +1,7 @@
<?PHP
/* Copyright 2005-2021, Lime Technology
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
* Copyright 2012-2021, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -12,7 +12,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/plugins/dynamix.docker.manager/include/DockerClient.php";
$autostart_file = $dockerManPaths['autostart-file'];
@@ -25,7 +25,7 @@ case 'autostart':
$container = urldecode(($_POST['container']));
$wait = $_POST['wait'];
$item = rtrim("$container $wait");
$autostart = @file($autostart_file, FILE_IGNORE_NEW_LINES) ?: [];
$autostart = (array)@file($autostart_file, FILE_IGNORE_NEW_LINES);
$key = array_search($item, $autostart);
if ($_POST['auto']=='true') {
if ($key===false) $autostart[] = $item;
@@ -48,7 +48,7 @@ case 'wait':
$container = urldecode(($_POST['container']));
$wait = $_POST['wait'];
$item = rtrim("$container $wait");
$autostart = file($autostart_file, FILE_IGNORE_NEW_LINES) ?: [];
$autostart = (array)@file($autostart_file, FILE_IGNORE_NEW_LINES);
$names = array_map('var_split', $autostart);
$autostart[array_search($container,$names)] = $item;
file_put_contents($autostart_file, implode("\n", $autostart)."\n");

View File

@@ -1,7 +1,7 @@
<?PHP
/* Copyright 2005-2018, Lime Technology
* Copyright 2015-2018, Derek Macias, Eric Schultz, Jon Panozzo.
* Copyright 2012-2018, Bergware International.
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -12,7 +12,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/plugins/dynamix.docker.manager/include/DockerClient.php";
$autostart_file = $dockerManPaths['autostart-file'];

View File

@@ -61,17 +61,15 @@ function popupWithIframe(title, cmd, reload, func) {
$('#iframe-popup').dialog({
autoOpen:true,
title:title,
height: 600,
width: 900,
draggable:true,
width: Math.min(Math.max(window.innerWidth/2,900),1600),
height: Math.max(window.innerHeight*3/5,600),
resizable:true,
modal:true,
show:{effect:'fade', duration:250},
hide:{effect:'fade', duration:250},
open:function(ev, ui) {
open:function(ev, ui){
$('#myIframe').attr('src', cmd);
},
close:function(event, ui) {
close:function(event, ui){
if (reload && !$('#myIframe').contents().find('#canvas').length) {
if (func) setTimeout(func+'()',0); else location = window.location.href;
} else {
@@ -79,13 +77,13 @@ function popupWithIframe(title, cmd, reload, func) {
}
}
});
$(".ui-dialog .ui-dialog-titlebar").addClass('menu');
$('.ui-dialog .ui-dialog-titlebar-close').text('X').prop('title',_('Close'));
$(".ui-dialog .ui-dialog-title").css({'text-align':'center','width':'100%'});
$(".ui-dialog .ui-dialog-content").css({'padding-top':'15px','vertical-align':'bottom'});
$('.ui-dialog-titlebar-close').css({'display':'none'});
$('.ui-dialog-title').css({'text-align':'center','width':'100%','font-size':'1.8rem'});
$('.ui-dialog-content').css({'padding-top':'15px','vertical-align':'bottom'});
$('.ui-button-text').css({'padding':'0px 5px'});
}
function execUpContainer(container) {
var title = _('Updating the container')+': '+container;
var title = _('Updating the container TEST')+': '+container;
var cmd = '/plugins/dynamix.docker.manager/include/CreateDocker.php?updateContainer=true&ct[]='+encodeURIComponent(container);
popupWithIframe(title, cmd, true, 'loadlist');
}

View File

@@ -32,7 +32,7 @@ input:hover[type=button],input:hover[type=reset],input:hover[type=submit],button
input[type=button][disabled],input[type=reset][disabled],input[type=submit][disabled],button[disabled],button[type=button][disabled],a.button[disabled]
input:hover[type=button][disabled],input:hover[type=reset][disabled],input:hover[type=submit][disabled],button:hover[disabled],button:hover[type=button][disabled],a.button:hover[disabled]
input:active[type=button][disabled],input:active[type=reset][disabled],input:active[type=submit][disabled],button:active[disabled],button:active[type=button][disabled],a.button:active[disabled]
{cursor:default;color:#808080;background:-webkit-gradient(linear,left top,right top,from(#404040),to(#808080)) 0 0 no-repeat,-webkit-gradient(linear,left top,right top,from(#404040),to(#808080)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#404040),to(#404040)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#808080),to(#808080)) 100% 100% no-repeat;background:linear-gradient(90deg,#404040 0,#808080) 0 0 no-repeat,linear-gradient(90deg,#404040 0,#808080) 0 100% no-repeat,linear-gradient(0deg,#404040 0,#404040) 0 100% no-repeat,linear-gradient(0deg,#808080 0,#808080) 100% 100% no-repeat;background-size:100% 2px,100% 2px,2px 100%,2px 100%}
{opacity:0.5;cursor:default;color:#808080;background:-webkit-gradient(linear,left top,right top,from(#404040),to(#808080)) 0 0 no-repeat,-webkit-gradient(linear,left top,right top,from(#404040),to(#808080)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#404040),to(#404040)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#808080),to(#808080)) 100% 100% no-repeat;background:linear-gradient(90deg,#404040 0,#808080) 0 0 no-repeat,linear-gradient(90deg,#404040 0,#808080) 0 100% no-repeat,linear-gradient(0deg,#404040 0,#404040) 0 100% no-repeat,linear-gradient(0deg,#808080 0,#808080) 100% 100% no-repeat;background-size:100% 2px,100% 2px,2px 100%,2px 100%}
p.centered{text-align:center}
span.error{color:#D8000C;background-color:#FFBABA;display:block;width:100%}
span.warn{color:#9F6000;background-color:#FEEFB3;display:block;width:100%}

View File

@@ -12,8 +12,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Wrappers.php";
extract(parse_plugin_cfg('dynamix',true));
@@ -22,7 +21,7 @@ $_SERVER['REQUEST_URI'] = 'docker';
$login_locale = _var($display,'locale');
require_once "$docroot/webGui/include/Translations.php";
$unit = ['B','kB','MB','GB','TB','PB','EB','ZB','YB'];
$units = ['B','kB','MB','GB','TB','PB','EB','ZB','YB'];
$list = [];
function write(...$messages){
@@ -40,13 +39,13 @@ function write(...$messages){
curl_close($com);
}
function autoscale($value) {
global $unit;
$size = count($unit);
global $units;
$size = count($units);
$base = $value ? floor(log($value, 1000)) : 0;
if ($base>=$size) $base = $size-1;
$value /= pow(1000, $base);
$decimals = $base ? ($value>=100 ? 0 : ($value>=10 ? 1 : (round($value*100)%100===0 ? 0 : 2))) : 0;
return number_format($value, $decimals, '.', $value>9999 ? ',' : '').' '.$unit[$base];
return number_format($value, $decimals, '.', $value>9999 ? ',' : '').' '.$units[$base];
}
function align($text, $w=25) {
return $text.str_repeat('&nbsp;',$w-min(strlen($text),$w-1));
@@ -55,9 +54,9 @@ function gap($text) {
return preg_replace('/([kMGTPEZY]?B)$/'," $1",$text);
}
function byteval($data) {
global $unit;
global $units;
[$value,$base] = explode(' ',gap($data));
return $value*pow(1000,array_search($base,$unit));
return $value*pow(1000,array_search($base,$units));
}
exec("docker ps -sa --format='{{.Names}}|{{.Size}}'",$container);

View File

@@ -13,27 +13,46 @@
*/
?>
<?
/* Define the path to the docker configuration file */
$cfgfile = "/boot/config/docker.cfg";
/* Define the default configuration values */
$cfg_defaults = [
"DOCKER_ENABLED" => "no",
"DOCKER_IMAGE_FILE" => "/mnt/user/system/docker/docker.img",
"DOCKER_IMAGE_SIZE" => "20",
"DOCKER_APP_CONFIG_PATH" => "/mnt/user/appdata/",
"DOCKER_APP_UNRAID_PATH" => "",
"DOCKER_READMORE" => "yes"
"DOCKER_ENABLED" => "no",
"DOCKER_IMAGE_FILE" => "/mnt/user/system/docker/docker.img",
"DOCKER_IMAGE_SIZE" => "20",
"DOCKER_APP_CONFIG_PATH" => "/mnt/user/appdata/",
"DOCKER_APP_UNRAID_PATH" => "",
"DOCKER_READMORE" => "yes",
"DOCKER_PID_LIMIT" => ""
];
/* Initialize the new configuration with the default values */
$cfg_new = $cfg_defaults;
/* Check if the configuration file exists */
if (file_exists($cfgfile)) {
$cfg_old = parse_ini_file($cfgfile);
if (!empty($cfg_old)) {
$cfg_new = array_merge($cfg_defaults, $cfg_old);
if (empty(array_diff($cfg_new, $cfg_old))) unset($cfg_new);
}
/* Parse the existing configuration file */
$cfg_old = parse_ini_file($cfgfile);
/* If the existing configuration is not empty, merge it with the defaults */
if (!empty($cfg_old)) {
/* Merge only missing keys from defaults */
$cfg_new = array_merge($cfg_defaults, $cfg_old);
/* If there are no changes between the new and old configurations, unset the new configuration */
if (empty(array_diff_assoc($cfg_new, $cfg_old))) {
$cfg_new = null;
}
}
}
/* If the new configuration is set, write it to the configuration file */
if (isset($cfg_new)) {
$tmp = '';
foreach ($cfg_new as $key => $value) $tmp .= "$key=\"$value\"\n";
file_put_contents($cfgfile, $tmp);
$tmp = '';
foreach ($cfg_new as $key => $value) {
$tmp .= "$key=\"$value\"\n";
}
file_put_contents($cfgfile, $tmp);
}
?>

View File

@@ -1,8 +1,8 @@
#!/usr/bin/php -q
<?PHP
/* Copyright 2005-2023, Lime Technology
* Copyright 2014-2023, Guilherme Jardim, Eric Schultz, Jon Panozzo.
* Copyright 2012-2023, Bergware International.
/* Copyright 2005-2024, Lime Technology
* Copyright 2012-2024, Bergware International.
* Copyright 2014-2021, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -13,10 +13,10 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Wrappers.php";
require_once "$docroot/plugins/dynamix.docker.manager/include/DockerClient.php";
// this command will set the $notify array
extract(parse_plugin_cfg('dynamix', true));
// Multi-language support
@@ -24,7 +24,7 @@ $_SERVER['REQUEST_URI'] = "scripts";
$login_locale = _var($display,'locale');
require_once "$docroot/webGui/include/Translations.php";
exec("pgrep docker", $pid);
exec('pgrep --ns $$ docker', $pid);
if (count($pid) == 1) exit(0);
$DockerClient = new DockerClient();
@@ -44,8 +44,8 @@ if (!isset($check)) {
$DockerTemplates->getAllInfo(true);
echo " Done.";
} else {
$notify = "$docroot/webGui/scripts/notify";
$var = @parse_ini_file("/var/local/emhttp/var.ini") ?: [];
$script = "$docroot/webGui/scripts/notify";
$var = (array)@parse_ini_file("/var/local/emhttp/var.ini");
$server = strtoupper(_var($var,'NAME','tower'));
$output = _var($notify,'docker_notify');
$info = $DockerTemplates->getAllInfo(true);
@@ -60,7 +60,7 @@ if (!isset($check)) {
$event = str_replace("&apos;","'",_("Docker")." - $name [$new]");
$subject = str_replace("&apos;","'",sprintf(_("Notice [%s] - Version update %s"),$server,$new));
$description = str_replace("&apos;","'",sprintf(_("A new version of %s is available"),$name));
exec("$notify -e ".escapeshellarg($event)." -s ".escapeshellarg($subject)." -d ".escapeshellarg($description)." -i ".escapeshellarg("normal $output")." -l '/Docker' -x");
exec("$script -e ".escapeshellarg($event)." -s ".escapeshellarg($subject)." -d ".escapeshellarg($description)." -i ".escapeshellarg("normal $output")." -l '/Docker' -x");
}
}
}

View File

@@ -12,7 +12,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/plugins/dynamix.docker.manager/include/DockerClient.php";
$DockerClient = new DockerClient();

View File

@@ -12,8 +12,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Wrappers.php";
extract(parse_plugin_cfg('dynamix',true));
@@ -179,11 +178,16 @@ foreach (explode('*',rawurldecode($argv[1])) as $value) {
$startContainer = false;
if (!empty($oldContainerInfo) && !empty($oldContainerInfo['State']) && !empty($oldContainerInfo['State']['Running'])) {
// since container was already running, put it back it to a running state after update
$cmd = str_replace('/docker create ', '/docker run -d ', $cmd);
$startContainer = true;
// attempt graceful stop of container first
stopContainer_nchan($Name);
}
if ( ($argv[2]??null) == "ca_docker_run_override" )
$startContainer = true;
if ( $startContainer )
$cmd = str_replace('/docker create ', '/docker run -d ', $cmd);
// force kill container if still running after 10 seconds
if (empty($_GET['communityApplications'])) removeContainer_nchan($Name);
execCommand_nchan($cmd);

View File

@@ -0,0 +1 @@
.fileTree{width:240px;max-height:200px;overflow-y:scroll;overflow-x:hidden;position:absolute;display:none;background:#f2f2f2}

View File

@@ -0,0 +1 @@
.fileTree{width:240px;max-height:200px;overflow-y:scroll;overflow-x:hidden;position:absolute;display:none;background:#1c1c1c}

View File

@@ -0,0 +1 @@
.fileTree{width:240px;max-height:200px;overflow-y:scroll;overflow-x:hidden;position:absolute;display:none;background:#1c1c1c}

View File

@@ -0,0 +1 @@
.fileTree{width:240px;max-height:200px;overflow-y:scroll;overflow-x:hidden;position:absolute;display:none;background:#f2f2f2}

View File

@@ -0,0 +1,14 @@
.noshow,.advanced{display:none}
.required:after{content:" *";color:#E80000}
span.boxed{display:inline-block;line-height:normal;white-space:normal;width:60%}
span.cpu,label.checkbox{display:inline-block;width:32px}
span.ct{display:inline-block;width:230px}
span.net{display:inline-block;width:120px}
span.ip{display:inline-block;width:160px}
dl,dt,dd{line-height:normal!important;height:auto!important}
dl{padding:8px 0!important}
dl>dt:nth-of-type(2),dl>dd:nth-of-type(2){padding:20px 0 0 0!important}
input.setting_input{margin-right:4rem}
input,select{margin-top:-0.8rem!important}
div#configLocation,div#configLocation dl{padding:0!important}
div#configLocation dt{margin-top:-0.18rem!important}

View File

@@ -0,0 +1,12 @@
.basic{display:block}
.advanced{display:none;white-space:nowrap}
.log{cursor:zoom-in}
.exec{cursor:pointer}
table#docker_containers{text-align:left}
th.five{width:5%}
th.nine{width:9%}
th.load{width:140px}
input.wait{width:24px;margin:0 4px;padding:0 5px;border:none;box-shadow:none;background-color:transparent}
table tbody td{line-height:normal}
i.mover{margin-right:8px;display:none}
#resetsort{margin-left:12px;display:inline-block;width:32px}

View File

@@ -0,0 +1,2 @@
.fileTree{background:#f2f2f2;width:300px;max-height:150px;overflow-y:scroll;overflow-x:hidden;position:absolute;z-index:100;display:none}
span.disabled{color:#B0B0B0}

View File

@@ -0,0 +1,2 @@
.fileTree{background:#1c1c1c;width:300px;max-height:150px;overflow-y:scroll;overflow-x:hidden;position:absolute;z-index:100;display:none}
span.disabled{color:#404040}

View File

@@ -0,0 +1,2 @@
.fileTree{background:#1c1c1c;width:300px;max-height:150px;overflow-y:scroll;overflow-x:hidden;position:absolute;z-index:100;display:none}
span.disabled{color:#404040}

View File

@@ -0,0 +1,2 @@
.fileTree{background:#f2f2f2;width:300px;max-height:150px;overflow-y:scroll;overflow-x:hidden;position:absolute;z-index:100;display:none}
span.disabled{color:#B0B0B0}

View File

@@ -0,0 +1,17 @@
.errortext{color:#EF3D47;display:none;margin-left:20px}
.basic{display:inline-block}
.advanced{display:none}
select.mask{min-width:0;margin:0 10px 0 4px}
select.net{min-width:0;margin:0 4px 0 2px}
select option.hide{display:none}
input.ip4{width:100px;margin:0 4px 0 1px}
input.ip6{width:140px;margin:0 4px}
input.gw4{width:100px;margin:0 4px 0 1px}
input.gw6{width:160px;margin:0 4px}
input.pool6{width:40px;margin:0 4px 0 1px}
span.net{margin-left:4px;margin-right:2px}
span.ip4{display:inline-block;width:260px}
span.ip6{display:inline-block;width:310px}
span.gw4{display:inline-block;width:200px}
span.gw6{display:inline-block;width:270px}
span.nonexist{margin-left:20px}

View File

@@ -0,0 +1 @@
.fileTree{width:240px;max-height:200px;overflow-y:scroll;overflow-x:hidden;position:absolute;display:none;background:#f2f2f2}

View File

@@ -0,0 +1 @@
.fileTree{width:240px;max-height:200px;overflow-y:scroll;overflow-x:hidden;position:absolute;display:none;background:#1c1c1c}

View File

@@ -0,0 +1 @@
.fileTree{width:240px;max-height:200px;overflow-y:scroll;overflow-x:hidden;position:absolute;display:none;background:#1c1c1c}

View File

@@ -0,0 +1 @@
.fileTree{width:240px;max-height:200px;overflow-y:scroll;overflow-x:hidden;position:absolute;display:none;background:#f2f2f2}

View File

@@ -0,0 +1,14 @@
.noshow,.advanced{display:none}
.required:after{content:" *";color:#E80000}
span.boxed{display:inline-block;line-height:normal;white-space:normal;width:60%}
span.cpu,label.checkbox{display:inline-block;width:32px}
span.ct{display:inline-block;width:230px}
span.net{display:inline-block;width:120px}
span.ip{display:inline-block;width:160px}
dl,dt,dd{line-height:normal!important;height:auto!important}
dl{padding:8px 0!important}
dl>dt:nth-of-type(2),dl>dd:nth-of-type(2){padding:20px 0 0 0!important}
input.setting_input{margin-right:4rem}
input,select{margin-top:-0.8rem!important}
div#configLocation,div#configLocation dl{padding:0!important}
div#configLocation dt{margin-top:-0.18rem!important}

View File

@@ -1,62 +1,14 @@
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button{
font-family:clear-sans;font-size:1.1rem;font-weight:bold;letter-spacing:2px;text-transform:uppercase;margin:10px 12px 10px 0;padding:9px 18px;text-decoration:none;white-space:nowrap;cursor:pointer;outline:none;border-radius:4px;border:0;color:#ff8c2f;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 0 no-repeat,-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#e22828),to(#e22828)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#ff8c2f),to(#ff8c2f)) 100% 100% no-repeat;background:linear-gradient(90deg,#e22828 0,#ff8c2f) 0 0 no-repeat,linear-gradient(90deg,#e22828 0,#ff8c2f) 0 100% no-repeat,linear-gradient(0deg,#e22828 0,#e22828) 0 100% no-repeat,linear-gradient(0deg,#ff8c2f 0,#ff8c2f) 100% 100% no-repeat;background-size:100% 2px,100% 2px,2px 100%,2px 100%
}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button:hover{
color:#f2f2f2;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f));background:linear-gradient(90deg,#e22828 0,#ff8c2f)
}
.ui-dropdownchecklist .ui-state-default{
background:#f2f2f2;
border:none;
box-shadow:none;
outline:none;
cursor:pointer;
height:2.2rem;
line-height:2.2rem;
}
.ui-dropdownchecklist-group{
font-weight:normal;
font-style:italic;
padding:1px 9px 1px 8px;
}
.ui-dropdownchecklist-selector{
border:1px solid #1c1c1c;
display:inline-block;
cursor:pointer;
padding:1px 9px 1px 8px;
}
.ui-dropdownchecklist-selector-wrapper{
vertical-align:middle;
font-size:0;
}
.ui-widget-header{
border:none;
background:#e3e3e3;
color:#1c1c1c;
font-weight:bold;
}
.ui-widget-content{
border:1px solid #1c1c1c;
background:#f2f2f2;
color:#1c1c1c;
.ui-state-active{
background:#e8e8e8;
}
.ui-dropdownchecklist-dropcontainer{
background:#f2f2f2;
border:1px solid #1c1c1c;
}
.ui-state-disabled{
color:#1c1c1c;border-color:#a2a2a2;background:#e8e8e8;opacity:0.5;
}
.ui-dropdownchecklist-indent{
padding-left:7px;
}
.ui-dropdownchecklist-text{
color:#1c1c1c;
font-size:1.3rem;
}
.ui-dropdownchecklist .ui-widget-content .ui-state-default{
background:#f2f2f2;
border:0px;
}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button{font-family:clear-sans;font-size:1.1rem;font-weight:bold;letter-spacing:2px;text-transform:uppercase;margin:10px 12px 10px 0;padding:9px 18px;text-decoration:none;white-space:nowrap;cursor:pointer;outline:none;border-radius:4px;border:0;color:#ff8c2f;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 0 no-repeat,-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#e22828),to(#e22828)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#ff8c2f),to(#ff8c2f)) 100% 100% no-repeat;background:linear-gradient(90deg,#e22828 0,#ff8c2f) 0 0 no-repeat,linear-gradient(90deg,#e22828 0,#ff8c2f) 0 100% no-repeat,linear-gradient(0deg,#e22828 0,#e22828) 0 100% no-repeat,linear-gradient(0deg,#ff8c2f 0,#ff8c2f) 100% 100% no-repeat;background-size:100% 2px,100% 2px,2px 100%,2px 100%}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button:hover{color:#f2f2f2;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f));background:linear-gradient(90deg,#e22828 0,#ff8c2f)}
.ui-dropdownchecklist .ui-state-default{background:#f2f2f2;border:none;box-shadow:none;outline:none;cursor:pointer;height:2.2rem;line-height:2.2rem}
.ui-dropdownchecklist-group{font-weight:normal;font-style:italic;padding:1px 9px 1px 8px}
.ui-dropdownchecklist-selector{border:1px solid #1c1c1c;display:inline-block;cursor:pointer;padding:1px 9px 1px 8px}
.ui-dropdownchecklist-selector-wrapper{vertical-align:middle;font-size:0}
.ui-widget-header{border:none;background:#e3e3e3;color:#1c1c1c;font-weight:bold}
.ui-widget-content{border:1px solid #1c1c1c;background:#f2f2f2;color:#1c1c1c}
.ui-state-active{background:#e8e8e8}
.ui-dropdownchecklist-dropcontainer{background:#f2f2f2;border:1px solid #1c1c1c}
.ui-state-disabled{color:#1c1c1c;border-color:#a2a2a2;background:#e8e8e8;opacity:0.5}
.ui-dropdownchecklist-indent{padding-left:7px}
.ui-dropdownchecklist-text{color:#1c1c1c;font-size:1.3rem}
.ui-dropdownchecklist .ui-widget-content .ui-state-default{background:#f2f2f2;border:0px}

View File

@@ -1,62 +1,14 @@
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button{
font-family:clear-sans;font-size:1.1rem;font-weight:bold;letter-spacing:2px;text-transform:uppercase;margin:10px 12px 10px 0;padding:9px 18px;text-decoration:none;white-space:nowrap;cursor:pointer;outline:none;border-radius:4px;border:0;color:#ff8c2f;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 0 no-repeat,-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#e22828),to(#e22828)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#ff8c2f),to(#ff8c2f)) 100% 100% no-repeat;background:linear-gradient(90deg,#e22828 0,#ff8c2f) 0 0 no-repeat,linear-gradient(90deg,#e22828 0,#ff8c2f) 0 100% no-repeat,linear-gradient(0deg,#e22828 0,#e22828) 0 100% no-repeat,linear-gradient(0deg,#ff8c2f 0,#ff8c2f) 100% 100% no-repeat;background-size:100% 2px,100% 2px,2px 100%,2px 100%
}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button:hover{
color:#f2f2f2;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f));background:linear-gradient(90deg,#e22828 0,#ff8c2f)
}
.ui-dropdownchecklist .ui-state-default{
background:#1c1c1c;
border:none;
box-shadow:none;
outline:none;
cursor:pointer;
height:2.2rem;
line-height:2.2rem;
}
.ui-dropdownchecklist-group{
font-weight:normal;
font-style:italic;
padding:1px 9px 1px 8px;
}
.ui-dropdownchecklist-selector{
border:1px solid #e5e5e5;
display:inline-block;
cursor:pointer;
padding:1px 9px 1px 8px;
}
.ui-dropdownchecklist-selector-wrapper{
vertical-align:middle;
font-size:0;
}
.ui-widget-header{
border:none;
background:#2b2b2b;
color:#f2f2f2;
font-weight:bold;
}
.ui-widget-content{
border:1px solid #e5e5e5;
background:#1c1c1c;
color:#f2f2f2;
.ui-state-active{
background:#262626;
}
.ui-dropdownchecklist-dropcontainer{
background:#1c1c1c;
border:1px solid #e5e5e5;
}
.ui-state-disabled{
color:#f2f2f2;border-color:#6c6c6c;background:#262626;opacity:0.5;
}
.ui-dropdownchecklist-indent{
padding-left:7px;
}
.ui-dropdownchecklist-text{
color:#f2f2f2;
font-size:1.3rem;
}
.ui-dropdownchecklist .ui-widget-content .ui-state-default{
background:#1c1c1c;
border:0px;
}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button{font-family:clear-sans;font-size:1.1rem;font-weight:bold;letter-spacing:2px;text-transform:uppercase;margin:10px 12px 10px 0;padding:9px 18px;text-decoration:none;white-space:nowrap;cursor:pointer;outline:none;border-radius:4px;border:0;color:#ff8c2f;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 0 no-repeat,-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#e22828),to(#e22828)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#ff8c2f),to(#ff8c2f)) 100% 100% no-repeat;background:linear-gradient(90deg,#e22828 0,#ff8c2f) 0 0 no-repeat,linear-gradient(90deg,#e22828 0,#ff8c2f) 0 100% no-repeat,linear-gradient(0deg,#e22828 0,#e22828) 0 100% no-repeat,linear-gradient(0deg,#ff8c2f 0,#ff8c2f) 100% 100% no-repeat;background-size:100% 2px,100% 2px,2px 100%,2px 100%}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button:hover{color:#f2f2f2;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f));background:linear-gradient(90deg,#e22828 0,#ff8c2f)}
.ui-dropdownchecklist .ui-state-default{background:#1c1c1c;border:none;box-shadow:none;outline:none;cursor:pointer;height:2.2rem;line-height:2.2rem}
.ui-dropdownchecklist-group{font-weight:normal;font-style:italic;padding:1px 9px 1px 8px}
.ui-dropdownchecklist-selector{border:1px solid #e5e5e5;display:inline-block;cursor:pointer;padding:1px 9px 1px 8px}
.ui-dropdownchecklist-selector-wrapper{vertical-align:middle;font-size:0}
.ui-widget-header{border:none;background:#2b2b2b;color:#f2f2f2;font-weight:bold}
.ui-widget-content{border:1px solid #e5e5e5;background:#1c1c1c;color:#f2f2f2}
.ui-state-active{background:#262626}
.ui-dropdownchecklist-dropcontainer{background:#1c1c1c;border:1px solid #e5e5e5}
.ui-state-disabled{color:#f2f2f2;border-color:#6c6c6c;background:#262626;opacity:0.5}
.ui-dropdownchecklist-indent{padding-left:7px}
.ui-dropdownchecklist-text{color:#f2f2f2;font-size:1.3rem}
.ui-dropdownchecklist .ui-widget-content .ui-state-default{background:#1c1c1c;border:0px}

View File

@@ -1,62 +1,14 @@
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button{
font-family:clear-sans;font-size:1.1rem;font-weight:bold;letter-spacing:2px;text-transform:uppercase;margin:10px 12px 10px 0;padding:9px 18px;text-decoration:none;white-space:nowrap;cursor:pointer;outline:none;border-radius:4px;border:0;color:#ff8c2f;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 0 no-repeat,-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#e22828),to(#e22828)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#ff8c2f),to(#ff8c2f)) 100% 100% no-repeat;background:linear-gradient(90deg,#e22828 0,#ff8c2f) 0 0 no-repeat,linear-gradient(90deg,#e22828 0,#ff8c2f) 0 100% no-repeat,linear-gradient(0deg,#e22828 0,#e22828) 0 100% no-repeat,linear-gradient(0deg,#ff8c2f 0,#ff8c2f) 100% 100% no-repeat;background-size:100% 2px,100% 2px,2px 100%,2px 100%
}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button:hover{
color:#f2f2f2;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f));background:linear-gradient(90deg,#e22828 0,#ff8c2f)
}
.ui-dropdownchecklist .ui-state-default{
background:#1c1c1c;
border:none;
box-shadow:none;
outline:none;
cursor:pointer;
height:2.2rem;
line-height:2.2rem;
}
.ui-dropdownchecklist-group{
font-weight:normal;
font-style:italic;
padding:1px 9px 1px 8px;
}
.ui-dropdownchecklist-selector{
border:1px solid #e5e5e5;
display:inline-block;
cursor:pointer;
padding:1px 9px 1px 8px;
}
.ui-dropdownchecklist-selector-wrapper{
vertical-align:middle;
font-size:0;
}
.ui-widget-header{
border:none;
background:#2b2b2b;
color:#f2f2f2;
font-weight:bold;
}
.ui-widget-content{
border:1px solid #e5e5e5;
background:#1c1c1c;
color:#f2f2f2;
.ui-state-active{
background:#262626;
}
.ui-dropdownchecklist-dropcontainer{
background:#1c1c1c;
border:1px solid #e5e5e5;
}
.ui-state-disabled{
color:#f2f2f2;border-color:#6c6c6c;background:#262626;opacity:0.5;
}
.ui-dropdownchecklist-indent{
padding-left:7px;
}
.ui-dropdownchecklist-text{
color:#f2f2f2;
font-size:1.3rem;
}
.ui-dropdownchecklist .ui-widget-content .ui-state-default{
background:#1c1c1c;
border:0px;
}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button{font-family:clear-sans;font-size:1.1rem;font-weight:bold;letter-spacing:2px;text-transform:uppercase;margin:10px 12px 10px 0;padding:9px 18px;text-decoration:none;white-space:nowrap;cursor:pointer;outline:none;border-radius:4px;border:0;color:#ff8c2f;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 0 no-repeat,-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#e22828),to(#e22828)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#ff8c2f),to(#ff8c2f)) 100% 100% no-repeat;background:linear-gradient(90deg,#e22828 0,#ff8c2f) 0 0 no-repeat,linear-gradient(90deg,#e22828 0,#ff8c2f) 0 100% no-repeat,linear-gradient(0deg,#e22828 0,#e22828) 0 100% no-repeat,linear-gradient(0deg,#ff8c2f 0,#ff8c2f) 100% 100% no-repeat;background-size:100% 2px,100% 2px,2px 100%,2px 100%}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button:hover{color:#f2f2f2;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f));background:linear-gradient(90deg,#e22828 0,#ff8c2f)}
.ui-dropdownchecklist .ui-state-default{background:#1c1c1c;border:none;box-shadow:none;outline:none;cursor:pointer;height:2.2rem;line-height:2.2rem}
.ui-dropdownchecklist-group{font-weight:normal;font-style:italic;padding:1px 9px 1px 8px}
.ui-dropdownchecklist-selector{border:1px solid #e5e5e5;display:inline-block;cursor:pointer;padding:1px 9px 1px 8px}
.ui-dropdownchecklist-selector-wrapper{vertical-align:middle;font-size:0}
.ui-widget-header{border:none;background:#2b2b2b;color:#f2f2f2;font-weight:bold}
.ui-widget-content{border:1px solid #e5e5e5;background:#1c1c1c;color:#f2f2f2}
.ui-state-active{background:#262626}
.ui-dropdownchecklist-dropcontainer{background:#1c1c1c;border:1px solid #e5e5e5}
.ui-state-disabled{color:#f2f2f2;border-color:#6c6c6c;background:#262626;opacity:0.5}
.ui-dropdownchecklist-indent{padding-left:7px}
.ui-dropdownchecklist-text{color:#f2f2f2;font-size:1.3rem}
.ui-dropdownchecklist .ui-widget-content .ui-state-default{background:#1c1c1c;border:0px}

View File

@@ -1,62 +1,14 @@
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button{
font-family:clear-sans;font-size:1.1rem;font-weight:bold;letter-spacing:2px;text-transform:uppercase;margin:10px 12px 10px 0;padding:9px 18px;text-decoration:none;white-space:nowrap;cursor:pointer;outline:none;border-radius:4px;border:0;color:#ff8c2f;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 0 no-repeat,-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#e22828),to(#e22828)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#ff8c2f),to(#ff8c2f)) 100% 100% no-repeat;background:linear-gradient(90deg,#e22828 0,#ff8c2f) 0 0 no-repeat,linear-gradient(90deg,#e22828 0,#ff8c2f) 0 100% no-repeat,linear-gradient(0deg,#e22828 0,#e22828) 0 100% no-repeat,linear-gradient(0deg,#ff8c2f 0,#ff8c2f) 100% 100% no-repeat;background-size:100% 2px,100% 2px,2px 100%,2px 100%
}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button:hover{
color:#f2f2f2;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f));background:linear-gradient(90deg,#e22828 0,#ff8c2f)
}
.ui-dropdownchecklist .ui-state-default{
background:#f2f2f2;
border:none;
box-shadow:none;
outline:none;
cursor:pointer;
height:2.2rem;
line-height:2.2rem;
}
.ui-dropdownchecklist-group{
font-weight:normal;
font-style:italic;
padding:1px 9px 1px 8px;
}
.ui-dropdownchecklist-selector{
border:1px solid #1c1c1c;
display:inline-block;
cursor:pointer;
padding:1px 9px 1px 8px;
}
.ui-dropdownchecklist-selector-wrapper{
vertical-align:middle;
font-size:0;
}
.ui-widget-header{
border:none;
background:#e3e3e3;
color:#1c1c1c;
font-weight:bold;
}
.ui-widget-content{
border:1px solid #1c1c1c;
background:#f2f2f2;
color:#1c1c1c;
.ui-state-active{
background:#e8e8e8;
}
.ui-dropdownchecklist-dropcontainer{
background:#f2f2f2;
border:1px solid #1c1c1c;
}
.ui-state-disabled{
color:#1c1c1c;border-color:#a2a2a2;background:#e8e8e8;opacity:0.5;
}
.ui-dropdownchecklist-indent{
padding-left:7px;
}
.ui-dropdownchecklist-text{
color:#1c1c1c;
font-size:1.3rem;
}
.ui-dropdownchecklist .ui-widget-content .ui-state-default{
background:#f2f2f2;
border:0px;
}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button{font-family:clear-sans;font-size:1.1rem;font-weight:bold;letter-spacing:2px;text-transform:uppercase;margin:10px 12px 10px 0;padding:9px 18px;text-decoration:none;white-space:nowrap;cursor:pointer;outline:none;border-radius:4px;border:0;color:#ff8c2f;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 0 no-repeat,-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#e22828),to(#e22828)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#ff8c2f),to(#ff8c2f)) 100% 100% no-repeat;background:linear-gradient(90deg,#e22828 0,#ff8c2f) 0 0 no-repeat,linear-gradient(90deg,#e22828 0,#ff8c2f) 0 100% no-repeat,linear-gradient(0deg,#e22828 0,#e22828) 0 100% no-repeat,linear-gradient(0deg,#ff8c2f 0,#ff8c2f) 100% 100% no-repeat;background-size:100% 2px,100% 2px,2px 100%,2px 100%}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button:hover{color:#f2f2f2;background:-webkit-gradient(linear,left top,right top,from(#e22828),to(#ff8c2f));background:linear-gradient(90deg,#e22828 0,#ff8c2f)}
.ui-dropdownchecklist .ui-state-default{background:#f2f2f2;border:none;box-shadow:none;outline:none;cursor:pointer;height:2.2rem;line-height:2.2rem}
.ui-dropdownchecklist-group{font-weight:normal;font-style:italic;padding:1px 9px 1px 8px}
.ui-dropdownchecklist-selector{border:1px solid #1c1c1c;display:inline-block;cursor:pointer;padding:1px 9px 1px 8px}
.ui-dropdownchecklist-selector-wrapper{vertical-align:middle;font-size:0}
.ui-widget-header{border:none;background:#e3e3e3;color:#1c1c1c;font-weight:bold}
.ui-widget-content{border:1px solid #1c1c1c;background:#f2f2f2;color:#1c1c1c}
.ui-state-active{background:#e8e8e8}
.ui-dropdownchecklist-dropcontainer{background:#f2f2f2;border:1px solid #1c1c1c}
.ui-state-disabled{color:#1c1c1c;border-color:#a2a2a2;background:#e8e8e8;opacity:0.5}
.ui-dropdownchecklist-indent{padding-left:7px}
.ui-dropdownchecklist-text{color:#1c1c1c;font-size:1.3rem}
.ui-dropdownchecklist .ui-widget-content .ui-state-default{background:#f2f2f2;border:0px}

View File

@@ -0,0 +1,28 @@
#!/bin/bash
# Get active containers
ACTIVE_CONTAINERS="$(docker ps -q --no-trunc 2>/dev/null)"
# Exit if no containers are active and return zero
if [ -z "${ACTIVE_CONTAINERS}" ]; then
echo "0"
exit
fi
# Get all relevant memory entries from containers
for container in ${ACTIVE_CONTAINERS} ; do
CONT_MEMORY="$(cat /sys/fs/cgroup/docker/${container}/memory.stat 2>/dev/null | grep -Ew "anon|kernel|kernel_stack|pagetables|sec_pagetables|percpu|sock|vmalloc|shmem" | awk '{print $2}')"
# Add up memory values
for value in ${CONT_MEMORY} ; do
if [[ ${value} =~ ^[0-9]+$ ]]; then
((MEMORY_USAGE += value))
fi
done
unset CONT_MEMORY
done
# Check if value is a integer and return the value otherwiese return zero
if [[ ${MEMORY_USAGE} =~ ^[0-9]+$ ]]; then
echo "${MEMORY_USAGE}"
else
echo "0"
fi

View File

@@ -0,0 +1,115 @@
Menu='Buttons:1'
Icon='icon-u-search'
Title='Search'
Code='e956'
---
<?
###################################################
# #
# GUI Search copyright 2021-2023, Andrew Zawadzki #
# Licenced under GPLv2 #
# #
###################################################
$currentUnraidPage = str_replace('Browse','Main',basename(explode('?',$_SERVER['REQUEST_URI'])[0]));
$guiSearchBoxSpan = "<span id='guiSearchBoxSpan'><input type='text' id='guiSearchBox' autocomplete='new-password'></input></span><span class='guiSearchBoxResults'></span>";
?>
<script>
var languageVisible;
var guiSearchSuggestions;
var browserName = (function(agent){
switch (true) {
case agent.indexOf('edge') >= 0: return 'Edge'; // Edge
case agent.indexOf('edg/') >= 0: return 'Edge'; // Edge Chromium Based
case agent.indexOf('opr') >= 0 && !!window.opr: return 'Opera';
case agent.indexOf('chrome') >= 0 && !!window.chrome: return 'Chrome';
case agent.indexOf('trident') >= 0: return 'MS IE';
case agent.indexOf('firefox') >= 0: return 'Mozilla Firefox';
case agent.indexOf('safari') >= 0: return 'Safari';
default: return 'other';
}
})(window.navigator.userAgent.toLowerCase());
$(function(){
<?if ($themes2):?>
$('.nav-item.gui_search').hover(function(){gui_search();},function(e){closeSearchBox(e);});
<?endif;?>
$.post('/plugins/dynamix.gui.search/include/exec.php',function(data) {
if (data) {
try {guiSearchSuggestions = JSON.parse(data); setupGUIsearch();}
catch(e) {console.log('Invalid JSON for GUI search autocomplete');}
}
});
});
function guiSearchBoxSpan() {
return $('#guiSearchBoxSpan').length>0;
}
function setupGUIsearch() {
window.addEventListener('keydown',function(e){
if (!e.shiftKey && !e.altKey && (navigator.appVersion.indexOf('Mac')==-1 ? e.ctrlKey : e.metaKey) && e.keyCode==75) {
e.preventDefault();
<?if ($themes1):?>
if (guiSearchBoxSpan()) closeSearchBox(e); else gui_search();
<?endif;?>
}
});
if (browserName != 'Chrome' && browserName != 'Edge') {
var hashTag = (window.location.hash||'').substr(1).replace('%20',' ').replace('%2d','-');
if (hashTag.length) $('body').mark(hashTag,{'accuracy': {'value': 'exactly','limiters': ['.',':','?']},'separateWordSearch': false});
}
}
function gui_search() {
<?if ($themes1):?>
languageVisible = $('.nav-item.LanguageButton').is(':visible');
$('.nav-tile.right').prepend("<?=$guiSearchBoxSpan?>").css('overflow','visible');
$('.nav-item.util,.nav-user.show').hide();
<?else:?>
if (!guiSearchBoxSpan()) $('.nav-item.gui_search a').append("<?=$guiSearchBoxSpan?>");
$('.nav-item.gui_search').css('overflow','visible');
<?endif;?>
if (guiSearchSuggestions) {
var guiSearchAwesomplete = new Awesomplete(document.getElementById('guiSearchBox'));
guiSearchAwesomplete.list = guiSearchSuggestions;
guiSearchAwesomplete.maxItems = 15;
guiSearchAwesomplete.autoFirst = true;
Awesomplete.$('#guiSearchBox').removeEventListener('awesomplete-selectcomplete',guiSearch);
Awesomplete.$('#guiSearchBox').addEventListener('awesomplete-selectcomplete',guiSearch);
$('#guiSearchBox').attr('autocomplete','new-password'); // Stop awesomplete from resetting autocomplete
}
$('#guiSearchBox').focus().keydown(function(e){if (e.which==27) closeSearchBox(e);}).blur(function(e){closeSearchBox(e);});
}
function closeSearchBox(e) {
e.stopPropagation();
$('#guiSearchBoxSpan').remove();
<?if ($themes1):?>
$('.nav-tile.right').css({'overflow-x':'auto','overflow-y':'hidden'});
$('.nav-item.util,.nav-user.show').show();
if (!languageVisible) $('.nav-item.LanguageButton').hide();
<?else:?>
$('.nav-item.gui_search').css('overflow','hidden');
<?endif;?>
}
function guiSearch() {
var searchInfo = $('#guiSearchBox').val().split('**');
var separator = (browserName == 'Chrome' || browserName == 'Edge') ? '#:~:text=' : '#';
var scrollText = (typeof searchInfo[1] != 'undefined') ? separator+searchInfo[1].replace(' ','%20').replace('-','%2d') : '';
var newPage = "<?=$currentUnraidPage?>/Settings/Tools".replace(searchInfo[0]+'/','');
closeSearchBox(event);
if (newPage == 'Dashboard/Settings/Tools') newPage = 'Settings';
location.replace('/'+newPage+'/'+searchInfo[0]+scrollText);
}
if (browserName != 'Chrome' && browserName != 'Edge') {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = '<?autov('/plugins/dynamix.gui.search/javascript/jquery.mark.js')?>';
document.getElementsByTagName('head')[0].appendChild(script);
}
</script>

View File

@@ -29,7 +29,7 @@ if ( $locale ) {
}
}
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: "/usr/local/emhttp";
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
$_SERVER['REQUEST_URI'] = $uri;
$_SESSION['locale'] = $locale;

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
#guiSearchBoxSpan{display:inline-block;margin:0 0 0 20px;padding:0;height:auto;line-height:normal;font-size:1.3rem}
#guiSearchBox{position:relative;top:0;left:0;width:50rem;border:none;border-radius:20px;margin:0;padding:5px 12px;color:#1c1b1b;background-color:#feefb3}

View File

@@ -0,0 +1,3 @@
#guiSearchBoxSpan{display:inline-block;position:relative;margin:4px 2px 2px 2px;padding:0;text-align:left;height:auto;line-height:normal;font-size:1.3rem}
#guiSearchBoxSpan:after{font-family:unraid;content:'\e956';position:absolute;top:.8rem;left:1.5rem;font-size:1.3rem}
#guiSearchBox{width:50rem;border:none;border-radius:20px;padding-left:4rem;opacity:0.5;invert(100%)}

View File

@@ -0,0 +1,2 @@
#guiSearchBoxSpan{display:inline-block;margin:0 0 0 20px;padding:0;height:auto;line-height:normal;font-size:1.3rem}
#guiSearchBox{position:relative;top:0;left:0;width:50rem;border:none;border-radius:20px;margin:0;padding:5px 12px;color:#1c1b1b;background-color:#feefb3}

View File

@@ -0,0 +1,3 @@
#guiSearchBoxSpan{display:inline-block;position:relative;margin:4px 2px 2px 2px;padding:0;text-align:left;height:auto;line-height:normal;font-size:1.3rem}
#guiSearchBoxSpan:after{font-family:unraid;content:'\e956';position:absolute;top:.8rem;left:1.5rem;font-size:1.3rem}
#guiSearchBox{width:50rem;border:none;border-radius:20px;padding-left:4rem;opacity:0.5;invert(100%)}

View File

@@ -1,10 +1,10 @@
Menu="About"
Menu="About:30"
Type="xmenu"
Title="Registration"
Icon="icon-registration"
Tag="pencil"
---
<?PHP
<?php
/* Copyright 2005-2023, Lime Technology
*
* This program is free software; you can redistribute it and/or
@@ -15,248 +15,6 @@ Tag="pencil"
* all copies or substantial portions of the Software.
*/
?>
<?
function my_time_any($time) {
return $time ? _(my_time($time),0) : _('Anytime');
}
function my_time_now($time) {
return $time ? _(my_time($time),0) : _('Unknown');
}
$regGen = (int)$var['regGen'] ?? 0;
$trialExtensionEligible = $regGen === 0 || $regGen === 1;
?>
<style>
span.thanks{padding-left:12px;color:#6FA239;font-weight:bold;}
span.thanks.red{color:#F0000C;}
div.device{padding:0 12px;font-weight:normal;font-style:italic;}
div.remark{padding:0 12px;text-align:justify;}
</style>
<?if ( (strstr($var['regTy'], "unregistered")) or ($var['regTy']=="Trial") or (strstr($var['regTy'], "no connection")) or (strstr($var['regTy'], "withdrawn")) or (strstr($var['regTy'], "expired")) ):?>
<span class="thanks">_(Thank you for trying Unraid OS)_!</span>
<?elseif ( ($var['regTy']=="Basic") or ($var['regTy']=="Plus") or ($var['regTy']=="Pro") ):?>
<span class="thanks">_(Thank you for choosing Unraid OS)_!</span>
<?endif;?>
<?if (strstr($var['regTy'], "unregistered")):?>
<div markdown="1" class="remark">
:registration_1_plug:
Your server will not be usable until you purchase a Registration key or install a free 30 day *Trial* key. A *Trial*
key provides all the functionality of a *Pro* Registration key.
Registration keys are bound to your USB Flash boot device serial number (GUID). Please use a high quality name brand device
at least 1GB in size (min 4GB recommended).
Note: USB memory card readers are generally **not** supported because most do not present unique serial numbers.
:end
</div>
<?endif;?>
<?if ($var['regTy']=="Trial"):?>
<div markdown="1" class="remark">
:registration_3_plug:
Your *Trial* key includes all the functionality and device support of a *Pro* Registration key.
After your *Trial* key has reached expiration, your server **still functions normally** until the next time you **Stop** the array.
At that point, you may either purchase a Registration key, or request a *Trial* extension.
:end
</div>
<?endif;?>
<?if (strstr($var['regTy'], "no connection")):?>
<div markdown="1" class="remark">
<span class='red-text'>_(Cannot connect to key-server)_!</span>
_(Your *Trial* key requires an internet connection)_. _(Please check your)_ [_(Network Settings)_](NetworkSettings).
</div>
<?endif;?>
<?if (strstr($var['regTy'], "withdrawn")):?>
<div markdown="1" class="remark">
<span class='red-text'>_(Release has been withdrawn)_!</span>
_(This release has been withdrawn for use with *Trial* keys)_.
</div>
<?endif;?>
<?if (strstr($var['regTy'], "expired")):?>
<div markdown="1" class="remark">
<span class='red-text'>_(Your *Trial* key has expired)_.</span>
<? if ($trialExtensionEligible): ?>
:registration_4_plug:
To continue using Unraid OS you may purchase a Registration key. Alternately, you may request a *Trial* extension key.
:end
<? else: ?>
:registration_trial_extension_ineligible_plug:
You have used all your Trial extensions. To continue using Unraid OS you may purchase a Registration key.
:end
<? endif; ?>
</div>
<?endif;?>
<?if (strstr($var['regTy'], "invalid installation")):?>
<span class='thanks red'>_(Invalid *Trial* Installation)_</span>
<div markdown="1" class="remark">
:registration_5_plug:
It is not possible to use a *Trial* key with an existing Unraid OS installation.
You may purchase a Registration key corresponding to this USB Flash device to continue using this installation.
For more information, please [Contact Support](https://lime-technology.com/contact).
:end
</div>
<?endif;?>
<?if (strstr($var['regTy'], "missing")):?>
<span class='thanks red'>_(Missing Key File)_</span>
<div markdown="1" class="remark">
:registration_6_plug:
It appears that your Registration key file is corrupted or missing. The key file should be located in the
[config](/Registration/Browse?dir&#61;/boot/config) directory on your USB Flash boot device.
If you do not have a backup copy of your Registration key file, [Contact Support](https://lime-technology.com/contact).
If this was a *Trial* installation, you may purchase a Registration key.
:end
</div>
<?endif;?>
<?if (strstr($var['regTy'], "invalid key")):?>
<span class='thanks red'>_(The registered GUID does not match the USB Flash boot device GUID)_</span>
<?if (strstr($var['regTy'], "Trial")):?>
<div markdown="1" class="remark">
:registration_7_plug:
*Trial* installations are only valid with the originally registered USB Flash device.
To continue using this installation with this USB Flash device, you may purchase a Registration key.
:end
</div>
<?else:?>
<div markdown="1" class="remark">
:registration_8_plug:
The Registration key file does not correspond to the USB Flash boot device.
Please copy the correct key file to the [config](/Registration/Browse?dir&#61;/boot/config) directory
on your USB Flash boot device. If you do not have a backup copy of your key file, [Contact Support](https://lime-technology.com/contact).
If you want to replace your Registration key with a new key bound to this USB Flash device, click Replace Key below. An original key may be
replaced anytime. Thereafter, a replacement key may be replaced again after one year has passed. If you require
another replacement key sooner, [Contact Support](https://lime-technology.com/contact).
**Note:** Replacing a Registration key results in permanently *blacklisting* the previous USB Flash GUID.
:end
</div>
<?endif;?>
<?endif;?>
<?if (strstr($var['regTy'], "blacklisted")):?>
<span class='thanks red'>_(Blacklisted USB Flash GUID)_</span>
<div markdown="1" class="remark">
:registration_9_plug:
This USB Flash boot device has been *blacklisted*. This can occur as a result of transfering your Registration key to
a replacement USB Flash device, and you are currently booted from your old USB Flash device.
A USB Flash device may also be *blacklisted* if there is no serial number, or if we discover the serial number
is not unique (this is common with USB card readers).
For more information, please [Contact Support](https://lime-technology.com/contact).
:end
</div>
<?endif;?>
<?if ( ( !(strstr($var['regTy'], "invalid key")) and ((strstr($var['regTy'], "Trial"))) ) || (strstr($var['regTy'], "no connection")) || (strstr($var['regTy'], "withdrawn")) ):?>
_(***Trial*** key expires on)_:
: <?=my_time_now($var['regTm2'])?>
<?endif;?>
<?if ( strstr($var['regTy'], "invalid installation") || ( (strstr($var['regTy'], "invalid key")) && (strstr($var['regTy'], "Trial")) )):?>
_(Expiration)_:
: <?=my_time_now($var['regTm2'])?>
<?endif;?>
<?if ( (strstr($var['regTy'], "invalid installation")) || (strstr($var['regTy'], "invalid key")) || ($var['regTy']=="Basic") || ($var['regTy']=="Plus") || ($var['regTy']=="Pro") ):?>
_(Registered to)_:
: <?=htmlspecialchars($var['regTo'])?>
_(Registered on)_:
: <?=my_time_now($var['regTm'])?>
<?endif;?>
<?if ( (strstr($var['regTy'], "invalid installation")) or ( (strstr($var['regTy'], "invalid key")) and (!(strstr($var['regTy'], "Trial")))) ):?>
_(Registered GUID)_:
: <?=$var['regGUID']?>
<?endif;?>
<?if (strstr($var['regTy'], "flash device error")):?>
<span class='thanks red'>_(Error accessing your physical USB Flash boot device)_</span>
<div markdown="1" class="remark">
_(There is a physical problem accessing your USB Flash boot device)_. _(Please)_ [Contact Support](https://lime-technology.com/contact).
_(Flash GUID)_:
: _(Error code)_: <?=$var['regCheck']?>
<?else:?>
_(Flash GUID)_:
: <?=$var['flashGUID']?>
<?endif;?>
_(Flash Vendor)_:
: <?=$var['flashVendor']?>
_(Flash Product)_:
: <?=$var['flashProduct']?>
<?if ( ((strstr($var['regTy'], "invalid key")) and !(strstr($var['regTy'], "Trial"))) || ($var['regTy']=="Basic") || ($var['regTy']=="Plus") || ($var['regTy']=="Pro") ):?>
_(Replaceable)_:
: <?=my_time_any($var['regTm2'])?>
<?endif;?>
<?if ( !(strstr($var['regTy'], "flash device error")) || !(strstr($var['regTy'], "blacklisted")) ):?>
<div class="device"><?=sprintf(_("This server has %s attached storage device".($var['deviceCount']==1?'.':'s.')),$var['deviceCount'])?></div>
<?endif;?>
&nbsp;
: <unraid-i18n-host><unraid-key-actions></unraid-key-actions></unraid-i18n-host>
<unraid-i18n-host>
<unraid-registration></unraid-registration>
</unraid-i18n-host>

View File

@@ -1,5 +1,14 @@
<?php
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
/* Copyright 2005-2023, Lime Technology
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*/
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
$var = (array)parse_ini_file('state/var.ini');
require_once "$docroot/webGui/include/Wrappers.php";
@@ -7,6 +16,8 @@ require_once "$docroot/webGui/include/Helpers.php";
extract(parse_plugin_cfg('dynamix',true));
require_once "$docroot/plugins/dynamix.my.servers/include/state.php";
$serverState = new ServerState();
header('Content-type: application/json');
echo json_encode($serverState);
echo $serverState->getServerStateJson();

View File

@@ -1,3 +1,14 @@
<?php
/* Copyright 2005-2023, Lime Technology
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*/
?>
<style>
#header {
z-index: 102 !important;
@@ -16,6 +27,15 @@
margin-left: auto;
height: 100%;
}
/**
* Tools page, rotate the Downgrade icon to prevent needing to add a new icon to the icon font.
* The pseudo element is targeted here otherwise the rotation of the span would mess up spacing with the text.
*/
a[href="/Tools/Downgrade"] .icon-update:before {
display: inline-block; /* required otherwise the rotation won't work */
rotate: 180deg;
}
</style>
<?php
// Set the path for the local manifest file
@@ -39,4 +59,4 @@ if ($fileValue !== null) {
echo '<script src="' . $prefixedPath . $fileValue . '"></script>';
} else {
echo '<script>console.error("%cNo matching key containing \'' . $searchText . '\' found.", "font-weight: bold; color: white; background-color: red");</script>';
}
}

View File

@@ -1,10 +1,22 @@
<?php
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
/* Copyright 2005-2023, Lime Technology
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*/
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once("$docroot/plugins/dynamix.my.servers/include/state.php");
require_once("$docroot/plugins/dynamix.my.servers/include/translations.php");
$serverState = new ServerState();
$wCTranslations = new WebComponentTranslations();
?>
<script>
window.LOCALE_DATA = '<?= rawurlencode(json_encode($webComponentTranslations, JSON_UNESCAPED_SLASHES, JSON_UNESCAPED_UNICODE)) ?>';
window.LOCALE_DATA = '<?= $wCTranslations->getTranslationsJson(true) ?>';
/**
* So we're not needing to modify DefaultLayout with an additional include, we'll add the Modals web component to the bottom of the body.
*/
@@ -18,8 +30,7 @@ if (!document.getElementsByTagName(modalsWebComponent).length) {
$i18nHost.appendChild($modals);
}
</script>
<?
echo "
<unraid-i18n-host>
<unraid-user-profile server='" . json_encode($serverState) . "'></unraid-user-profile>
</unraid-i18n-host>";
<unraid-user-profile server="<?= $serverState->getServerStateJsonForHtmlAttr() ?>"></unraid-user-profile>
</unraid-i18n-host>

View File

@@ -0,0 +1,168 @@
<?php
/* Copyright 2005-2023, Lime Technology
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*/
/**
* RebootDetails class is responsible for detecting the type and version of a system reboot required in the context of an unRAID server.
*
* Usage:
* ```
* $rebootDetails = new RebootDetails();
* $rebootType = $rebootDetails->rebootType;
* ```
*/
class RebootDetails
{
const CURRENT_CHANGES_TXT_PATH = '/boot/changes.txt';
const CURRENT_README_RELATIVE_PATH = 'plugins/unRAIDServer/README.md';
const CURRENT_VERSION_PATH = '/etc/unraid-version';
const PREVIOUS_BZ_ROOT_PATH = '/boot/previous/bzroot';
const PREVIOUS_CHANGES_TXT_PATH = '/boot/previous/changes.txt';
private $currentVersion = '';
public $rebootType = ''; // 'update', 'downgrade', 'thirdPartyDriversDownloading'
public $rebootReleaseDate = '';
public $rebootVersion = '';
public $previousReleaseDate = '';
public $previousVersion = '';
/**
* Constructs a new RebootDetails object and automatically detects the reboot type during initialization.
*/
public function __construct()
{
$this->detectRebootType();
}
/**
* Detects the type of reboot required based on the contents of the unRAID server's README.md file.
* Sets the $rebootType property accordingly.
*/
private function detectRebootType()
{
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
/**
* Read the reboot readme, and see if it says "REBOOT REQUIRED" or "DOWNGRADE"
* only relying on the README.md file to save reads from the flash drive.
* because we started allowing downgrades from the account.unraid.net Update OS page, we can't
* fully rely on the README.md value of being accurate.
* For instance if on 6.13.0-beta.2.1 then chose to "Downgrade" to 6.13.0-beta.1.10 from the account app
* the README.md file would still say "REBOOT REQUIRED".
*/
$rebootReadme = @file_get_contents("$docroot/" . self::CURRENT_README_RELATIVE_PATH, false, null, 0, 20) ?: '';
$rebootDetected = preg_match("/^\*\*(REBOOT REQUIRED|DOWNGRADE)/", $rebootReadme);
if (!$rebootDetected) {
return;
}
/**
* if a reboot is required, then:
* get current Unraid version from /etc/unraid-version
* then get the version of the last update from self::CURRENT_CHANGES_TXT_PATH
* if they're different, then a reboot is required
* if the version in self::CURRENT_CHANGES_TXT_PATH is less than the current version, then a downgrade is required
* if the version in self::CURRENT_CHANGES_TXT_PATH is greater than the current version, then an update is required
*/
$this->setCurrentVersion();
$this->setRebootDetails();
if ($this->currentVersion == '' || $this->rebootVersion == '') {
return; // return to prevent potential incorrect outcome
}
$compareVersions = version_compare($this->rebootVersion, $this->currentVersion);
switch ($compareVersions) {
case -1:
$this->setRebootType('downgrade');
break;
case 0:
// we should never get here, but if we do, then no reboot is required and just return
return;
case 1:
$this->setRebootType('update');
break;
}
// Detect if third-party drivers were part of the update process
$processWaitingThirdPartyDrivers = "inotifywait -q " . self::CURRENT_CHANGES_TXT_PATH . " -e move_self,delete_self";
// Run the ps command to list processes and check if the process is running
$ps_command = "ps aux | grep -E \"$processWaitingThirdPartyDrivers\" | grep -v \"grep -E\"";
$output = shell_exec($ps_command) ?? '';
if ($this->rebootType != '' && strpos($output, $processWaitingThirdPartyDrivers) !== false) {
$this->setRebootType('thirdPartyDriversDownloading');
}
}
/**
* Detects and retrieves the version information related to the system reboot based on the contents of the '/boot/changes.txt' file.
*
* @return string The system version information or 'Not found' if not found, or 'File not found' if the file is not present.
*/
private function readChangesTxt(string $file_path = self::CURRENT_CHANGES_TXT_PATH)
{
// Check if the file exists
if (file_exists($file_path)) {
exec("head -n4 $file_path", $rows);
foreach ($rows as $row) {
$i = stripos($row,'version');
if ($i !== false) {
[$version, $releaseDate] = explode(' ', trim(substr($row, $i+7)));
break;
}
}
return [
'releaseDate' => $releaseDate ?? 'Not found',
'version' => $version ?? 'Not found',
];
} else {
return 'File not found';
}
}
/**
* Sets the current version of the Unraid server for comparison with the reboot version.
*/
private function setCurrentVersion() {
// output ex: version="6.13.0-beta.2.1"
$raw = @file_get_contents(self::CURRENT_VERSION_PATH) ?: '';
// Regular expression to match the version between the quotes
$pattern = '/version="([^"]+)"/';
if (preg_match($pattern, $raw, $matches)) {
$this->currentVersion = $matches[1];
}
}
private function setRebootDetails()
{
$rebootDetails = $this->readChangesTxt();
$this->rebootReleaseDate = $rebootDetails['releaseDate'];
$this->rebootVersion = $rebootDetails['version'];
}
private function setRebootType($rebootType)
{
$this->rebootType = $rebootType;
}
/**
* If self::PREVIOUS_BZ_ROOT_PATH exists, then the user has the option to downgrade to the previous version.
* Parse the text file /boot/previous/changes.txt to get the version number of the previous version.
* Then we move some files around and reboot.
*/
public function setPrevious()
{
if (@file_exists(self::PREVIOUS_BZ_ROOT_PATH) && @file_exists(self::PREVIOUS_CHANGES_TXT_PATH)) {
$parseOutput = $this->readChangesTxt(self::PREVIOUS_CHANGES_TXT_PATH);
$this->previousVersion = $parseOutput['version'];
$this->previousReleaseDate = $parseOutput['releaseDate'];
}
}
}

View File

@@ -1,81 +1,342 @@
<?php
// read flashbackup ini file
$flashbackup_ini = '/var/local/emhttp/flashbackup.ini';
$flashbackup_status = (file_exists($flashbackup_ini)) ? @parse_ini_file($flashbackup_ini) : [];
/* Copyright 2005-2023, Lime Technology
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*/
/**
* @todo refactor globals currently if you try to use $GLOBALS the class will break.
*/
$webguiGlobals = $GLOBALS;
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$nginx = parse_ini_file('/var/local/emhttp/nginx.ini');
require_once "$docroot/plugins/dynamix.my.servers/include/reboot-details.php";
require_once "$docroot/plugins/dynamix.plugin.manager/include/UnraidCheck.php";
/**
* ServerState class encapsulates server-related information and settings.
*
* Usage:
* ```
* require_once "$docroot/plugins/dynamix.my.servers/include/state.php";
* $serverStateClass = new ServerState();
*
* $serverStateClass->getServerState();
* or
* $serverStateClass->getServerStateJson();
* ```
*/
class ServerState
{
protected $webguiGlobals;
// base OS only, plugin not installed • show ad for plugin
$connectPluginInstalled = '';
if (file_exists('/var/lib/pkgtools/packages/dynamix.unraid.net')) $connectPluginInstalled = 'dynamix.unraid.net.plg';
if (file_exists('/var/lib/pkgtools/packages/dynamix.unraid.net.staging')) $connectPluginInstalled = 'dynamix.unraid.net.staging.plg';
// plugin install failed if the unraid-api file doesn't fully install • append failure detected so we can show warning about failed install via UPC
if ($connectPluginInstalled && !file_exists('/usr/local/sbin/unraid-api')) $connectPluginInstalled .= '_installFailed';
private $var;
private $apiKey = '';
private $apiVersion = '';
private $avatar = '';
private $email = '';
private $extraOrigins = [];
private $flashBackupActivated = '';
private $hasRemoteApikey = false;
private $registeredTime = '';
private $username = '';
private $connectPluginInstalled = '';
private $connectPluginVersion;
private $configErrorEnum = [
"error" => 'UNKNOWN_ERROR',
"ineligible" => 'INELIGIBLE',
"invalid" => 'INVALID',
"nokeyserver" => 'NO_KEY_SERVER',
"withdrawn" => 'WITHDRAWN',
];
private $osVersion;
private $osVersionBranch;
private $rebootDetails;
private $caseModel = '';
private $keyfileBase64UrlSafe = '';
private $updateOsCheck;
private $updateOsNotificationsEnabled = false;
private $updateOsResponse;
private $updateOsIgnoredReleases = [];
$connectPluginVersion = file_exists('/var/log/plugins/dynamix.unraid.net.plg')
? trim(@exec('/usr/local/sbin/plugin version /var/log/plugins/dynamix.unraid.net.plg 2>/dev/null'))
: (file_exists('/var/log/plugins/dynamix.unraid.net.staging.plg')
? trim(@exec('/usr/local/sbin/plugin version /var/log/plugins/dynamix.unraid.net.staging.plg 2>/dev/null'))
: 'base-' . $var['version']);
public $myServersFlashCfg = [];
public $myServersMemoryCfg = [];
public $host = 'unknown';
public $combinedKnownOrigins = [];
public $nginxCfg = [];
public $flashbackupStatus = [];
public $registered = false;
public $myServersMiniGraphConnected = false;
public $keyfileBase64 = '';
$myservers_flash_cfg_path='/boot/config/plugins/dynamix.my.servers/myservers.cfg';
$myservers = file_exists($myservers_flash_cfg_path) ? @parse_ini_file($myservers_flash_cfg_path,true) : [];
/**
* Constructor to initialize class properties and gather server information.
*/
public function __construct()
{
/**
* @note necessary evil until full webgui is class based.
* @see - getWebguiGlobal() for usage
* */
global $webguiGlobals;
$this->webguiGlobals =& $webguiGlobals;
// echo "<pre>" . json_encode($this->webguiGlobals, JSON_PRETTY_PRINT) . "</pre>";
$configErrorEnum = [
"error" => 'UNKNOWN_ERROR',
"invalid" => 'INVALID',
"nokeyserver" => 'NO_KEY_SERVER',
"withdrawn" => 'WITHDRAWN',
];
$this->var = (array)parse_ini_file('state/var.ini');
$this->nginxCfg = @parse_ini_file('/var/local/emhttp/nginx.ini') ?? [];
$registered = !empty($myservers['remote']['username']) && $connectPluginInstalled;
$this->osVersion = $this->var['version'];
$this->osVersionBranch = trim(@exec('plugin category /var/log/plugins/unRAIDServer.plg') ?? 'stable');
$serverState = [
"apiKey" => $myservers['upc']['apikey'] ?? '',
"apiVersion" => $myservers['api']['version'] ?? '',
"avatar" => (!empty($myservers['remote']['avatar']) && $connectPluginInstalled) ? $myservers['remote']['avatar'] : '',
"config" => [
'valid' => ($var['configValid'] === 'yes'),
'error' => isset($configErrorEnum[$var['configValid']]) ? $configErrorEnum[$var['configValid']] : 'UNKNOWN_ERROR',
],
"connectPluginInstalled" => $connectPluginInstalled,
"connectPluginVersion" => $connectPluginVersion,
"csrf" => $var['csrf_token'],
"description" => $var['COMMENT'] ? htmlspecialchars($var['COMMENT']) : '',
"deviceCount" => $var['deviceCount'],
"email" => $myservers['remote']['email'] ?? '',
"expireTime" => 1000 * (($var['regTy'] === 'Trial' || strstr($var['regTy'], 'expired')) ? $var['regTm2'] : 0),
"extraOrigins" => explode(',', $myservers['api']['extraOrigins'] ?? ''),
"flashProduct" => $var['flashProduct'],
"flashVendor" => $var['flashVendor'],
"flashBackupActivated" => empty($flashbackup_status['activated']) ? '' : 'true',
"guid" => $var['flashGUID'],
"hasRemoteApikey" => !empty($myservers['remote']['apikey']),
"internalPort" => $_SERVER['SERVER_PORT'],
"keyfile" => empty($var['regFILE']) ? '' : str_replace(['+', '/', '='], ['-', '_', ''], trim(base64_encode(@file_get_contents($var['regFILE'])))),
"lanIp" => ipaddr(),
"locale" => ($_SESSION['locale']) ? $_SESSION['locale'] : 'en_US',
"model" => $var['SYS_MODEL'],
"name" => htmlspecialchars($var['NAME']),
"osVersion" => $var['version'],
"protocol" => $_SERVER['REQUEST_SCHEME'],
"regGen" => (int)$var['regGen'],
"regGuid" => $var['regGUID'],
"registered" => $registered,
"registeredTime" => $myservers['remote']['regWizTime'] ?? '',
"site" => $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'],
"state" => strtoupper(empty($var['regCheck']) ? $var['regTy'] : $var['regCheck']),
"theme" => [
"banner" => !empty($display['banner']),
"bannerGradient" => $display['showBannerGradient'] === 'yes' ?? false,
"bgColor" => ($display['background']) ? '#' . $display['background'] : '',
"descriptionShow" => (!empty($display['headerdescription']) && $display['headerdescription'] !== 'no'),
"metaColor" => ($display['headermetacolor'] ?? '') ? '#' . $display['headermetacolor'] : '',
"name" => $display['theme'],
"textColor" => ($display['header']) ? '#' . $display['header'] : '',
],
"ts" => time(),
"uptime" => 1000 * (time() - round(strtok(exec("cat /proc/uptime"), ' '))),
"username" => $myservers['remote']['username'] ?? '',
"wanFQDN" => $nginx['NGINX_WANFQDN'] ?? '',
];
$caseModelFile = '/boot/config/plugins/dynamix/case-model.cfg';
$this->caseModel = file_exists($caseModelFile) ? htmlspecialchars(@file_get_contents($caseModelFile), ENT_HTML5, 'UTF-8') : '';
$this->rebootDetails = new RebootDetails();
$this->keyfileBase64 = empty($this->var['regFILE']) ? null : @file_get_contents($this->var['regFILE']);
if ($this->keyfileBase64 !== false) {
$this->keyfileBase64 = @base64_encode($this->keyfileBase64);
$this->keyfileBase64UrlSafe = str_replace(['+', '/', '='], ['-', '_', ''], trim($this->keyfileBase64));
}
$this->updateOsCheck = new UnraidOsCheck();
$this->updateOsIgnoredReleases = $this->updateOsCheck->getIgnoredReleases();
$this->updateOsNotificationsEnabled = !empty(@$this->getWebguiGlobal('notify', 'unraidos'));
$this->updateOsResponse = $this->updateOsCheck->getUnraidOSCheckResult();
$this->setConnectValues();
}
/**
* Retrieve the value of a webgui global setting.
*/
public function getWebguiGlobal(string $key, string $subkey = null) {
if (!$subkey) {
return _var($this->webguiGlobals, $key, '');
}
$keyArray = _var($this->webguiGlobals, $key, []);
return _var($keyArray, $subkey, '');
}
private function setConnectValues() {
if (file_exists('/var/lib/pkgtools/packages/dynamix.unraid.net')) {
$this->connectPluginInstalled = 'dynamix.unraid.net.plg';
}
if (file_exists('/var/lib/pkgtools/packages/dynamix.unraid.net.staging')) {
$this->connectPluginInstalled = 'dynamix.unraid.net.staging.plg';
}
if ($this->connectPluginInstalled && !file_exists('/usr/local/sbin/unraid-api')) {
$this->connectPluginInstalled .= '_installFailed';
}
// exit early if the plugin is not installed
if (!$this->connectPluginInstalled) {
return;
}
$this->connectPluginVersion = file_exists('/var/log/plugins/dynamix.unraid.net.plg')
? trim(@exec('/usr/local/sbin/plugin version /var/log/plugins/dynamix.unraid.net.plg 2>/dev/null'))
: (file_exists('/var/log/plugins/dynamix.unraid.net.staging.plg')
? trim(@exec('/usr/local/sbin/plugin version /var/log/plugins/dynamix.unraid.net.staging.plg 2>/dev/null'))
: 'base-' . $this->var['version']);
$this->getMyServersCfgValues();
$this->getConnectKnownOrigins();
$this->getFlashBackupStatus();
}
private function getFlashBackupStatus() {
$flashbackupCfg = '/var/local/emhttp/flashbackup.ini';
$this->flashbackupStatus = (file_exists($flashbackupCfg)) ? @parse_ini_file($flashbackupCfg) : [];
$this->flashBackupActivated = empty($this->flashbackupStatus['activated']) ? '' : 'true';
}
private function getMyServersCfgValues() {
/**
* @todo can we read this from somewhere other than the flash? Connect page uses this path and /boot/config/plugins/dynamix.my.servers/myservers.cfg…
* - $myservers_memory_cfg_path ='/var/local/emhttp/myservers.cfg';
* - $mystatus = (file_exists($myservers_memory_cfg_path)) ? @parse_ini_file($myservers_memory_cfg_path) : [];
*/
$flashCfgPath = '/boot/config/plugins/dynamix.my.servers/myservers.cfg';
$this->myServersFlashCfg = file_exists($flashCfgPath) ? @parse_ini_file($flashCfgPath, true) : [];
// ensure some vars are defined here so we don't have to test them later
if (empty($this->myServersFlashCfg['remote']['apikey'])) {
$this->myServersFlashCfg['remote']['apikey'] = "";
}
if (empty($this->myServersFlashCfg['remote']['wanaccess'])) {
$this->myServersFlashCfg['remote']['wanaccess'] = "no";
}
if (empty($this->myServersFlashCfg['remote']['wanport'])) {
$this->myServersFlashCfg['remote']['wanport'] = 33443;
}
if (empty($this->myServersFlashCfg['remote']['upnpEnabled'])) {
$this->myServersFlashCfg['remote']['upnpEnabled'] = "no";
}
if (empty($this->myServersFlashCfg['remote']['dynamicRemoteAccessType'])) {
$this->myServersFlashCfg['remote']['dynamicRemoteAccessType'] = "DISABLED";
}
$this->apiKey = $this->myServersFlashCfg['upc']['apikey'] ?? '';
$this->apiVersion = $this->myServersFlashCfg['api']['version'] ?? '';
$this->avatar = (!empty($this->myServersFlashCfg['remote']['avatar']) && $this->connectPluginInstalled) ? $this->myServersFlashCfg['remote']['avatar'] : '';
$this->email = $this->myServersFlashCfg['remote']['email'] ?? '';
$this->hasRemoteApikey = !empty($this->myServersFlashCfg['remote']['apikey']);
$this->registered = !empty($this->myServersFlashCfg['remote']['apikey']) && $this->connectPluginInstalled;
$this->registeredTime = $this->myServersFlashCfg['remote']['regWizTime'] ?? '';
$this->username = $this->myServersFlashCfg['remote']['username'] ?? '';
}
private function getConnectKnownOrigins() {
/**
* Allowed origins warning displayed when the current webGUI URL is NOT included in the known lists of allowed origins.
* Include localhost in the test, but only display HTTP(S) URLs that do not include localhost.
*/
$this->host = $_SERVER['HTTP_HOST'] ?? "unknown";
$memoryCfgPath = '/var/local/emhttp/myservers.cfg';
$this->myServersMemoryCfg = (file_exists($memoryCfgPath)) ? @parse_ini_file($memoryCfgPath) : [];
$this->myServersMiniGraphConnected = (($this->myServersMemoryCfg['minigraph']??'') === 'CONNECTED');
$allowedOrigins = $this->myServersMemoryCfg['allowedOrigins'] ?? "";
$extraOrigins = $this->myServersFlashCfg['api']['extraOrigins'] ?? "";
$combinedOrigins = $allowedOrigins . "," . $extraOrigins; // combine the two strings for easier searching
$combinedOrigins = str_replace(" ", "", $combinedOrigins); // replace any spaces with nothing
$hostNotKnown = stripos($combinedOrigins, $this->host) === false; // check if the current host is in the combined list of origins
if ($extraOrigins) {
$this->extraOrigins = explode(",", $extraOrigins);
}
if ($hostNotKnown) {
$this->combinedKnownOrigins = explode(",", $combinedOrigins);
if ($this->combinedKnownOrigins) {
foreach($this->combinedKnownOrigins as $key => $origin) {
if ( (strpos($origin, "http") === false) || (strpos($origin, "localhost") !== false) ) {
// clean up $this->combinedKnownOrigins, only display warning if origins still remain to display
unset($this->combinedKnownOrigins[$key]);
}
}
// for some reason the unset creates an associative array, so reindex the array with just the values. Otherwise we get an object passed to the UPC JS instead of an array.
if ($this->combinedKnownOrigins) {
$this->combinedKnownOrigins = array_values($this->combinedKnownOrigins);
}
}
}
}
/**
* Retrieve the server information as an associative array
*
* @return array An array containing server information.
*/
public function getServerState()
{
$serverState = [
"array" => [
"state" => @$this->getWebguiGlobal('var', 'fsState'),
"progress" => @$this->getWebguiGlobal('var', 'fsProgress'),
],
"apiKey" => $this->apiKey,
"apiVersion" => $this->apiVersion,
"avatar" => $this->avatar,
"caseModel" => $this->caseModel,
"config" => [
'valid' => ($this->var['configValid'] === 'yes'),
'error' => isset($this->configErrorEnum[$this->var['configValid']]) ? $this->configErrorEnum[$this->var['configValid']] : null,
],
"connectPluginInstalled" => $this->connectPluginInstalled,
"connectPluginVersion" => $this->connectPluginVersion,
"csrf" => $this->var['csrf_token'],
"dateTimeFormat" => [
"date" => @$this->getWebguiGlobal('display', 'date') ?? '',
"time" => @$this->getWebguiGlobal('display', 'time') ?? '',
],
"description" => $this->var['COMMENT'] ? htmlspecialchars($this->var['COMMENT'], ENT_HTML5, 'UTF-8') : '',
"deviceCount" => $this->var['deviceCount'],
"email" => $this->email,
"expireTime" => 1000 * (($this->var['regTy'] === 'Trial' || strstr($this->var['regTy'], 'expired')) ? $this->var['regTm2'] : 0),
"extraOrigins" => $this->extraOrigins,
"flashProduct" => $this->var['flashProduct'],
"flashVendor" => $this->var['flashVendor'],
"flashBackupActivated" => $this->flashBackupActivated,
"guid" => $this->var['flashGUID'],
"hasRemoteApikey" => $this->hasRemoteApikey,
"internalPort" => _var($_SERVER, 'SERVER_PORT'),
"keyfile" => $this->keyfileBase64UrlSafe,
"lanIp" => ipaddr(),
"locale" => (!empty($_SESSION) && $_SESSION['locale']) ? $_SESSION['locale'] : 'en_US',
"model" => $this->var['SYS_MODEL'] ? htmlspecialchars($this->var['SYS_MODEL'], ENT_HTML5, 'UTF-8') : '',
"name" => htmlspecialchars($this->var['NAME'], ENT_HTML5, 'UTF-8'),
"osVersion" => $this->osVersion,
"osVersionBranch" => $this->osVersionBranch,
"protocol" => _var($_SERVER, 'REQUEST_SCHEME'),
"rebootType" => $this->rebootDetails->rebootType,
"rebootVersion" => $this->rebootDetails->rebootVersion,
"regDevs" => @(int)$this->var['regDevs'] ?? 0,
"regGen" => @(int)$this->var['regGen'],
"regGuid" => @$this->var['regGUID'] ?? '',
"regTo" => @htmlspecialchars($this->var['regTo'], ENT_HTML5, 'UTF-8') ?? '',
"regTm" => $this->var['regTm'] ? @$this->var['regTm'] * 1000 : '', // JS expects milliseconds
"regTy" => @$this->var['regTy'] ?? '',
"regExp" => $this->var['regExp'] ? @$this->var['regExp'] * 1000 : '', // JS expects milliseconds
"registered" => $this->registered,
"registeredTime" => $this->registeredTime,
"site" => _var($_SERVER, 'REQUEST_SCHEME') . "://" . _var($_SERVER, 'HTTP_HOST'),
"state" => strtoupper(empty($this->var['regCheck']) ? $this->var['regTy'] : $this->var['regCheck']),
"theme" => [
"banner" => !empty($this->getWebguiGlobal('display', 'banner')),
"bannerGradient" => $this->getWebguiGlobal('display', 'showBannerGradient') === 'yes' ?? false,
"bgColor" => ($this->getWebguiGlobal('display', 'background')) ? '#' . $this->getWebguiGlobal('display', 'background') : '',
"descriptionShow" => (!empty($this->getWebguiGlobal('display', 'headerdescription')) && $this->getWebguiGlobal('display', 'headerdescription') !== 'no'),
"metaColor" => ($this->getWebguiGlobal('display', 'headermetacolor') ?? '') ? '#' . $this->getWebguiGlobal('display', 'headermetacolor') : '',
"name" => $this->getWebguiGlobal('display', 'theme'),
"textColor" => ($this->getWebguiGlobal('display', 'header')) ? '#' . $this->getWebguiGlobal('display', 'header') : '',
],
"ts" => time(),
"uptime" => 1000 * (time() - round(strtok(exec("cat /proc/uptime"), ' '))),
"username" => $this->username,
"wanFQDN" => @$this->nginxCfg['NGINX_WANFQDN'] ?? '',
];
if ($this->combinedKnownOrigins) {
$serverState['combinedKnownOrigins'] = $this->combinedKnownOrigins;
}
if ($this->updateOsIgnoredReleases) {
$serverState['updateOsIgnoredReleases'] = $this->updateOsIgnoredReleases;
}
if ($this->updateOsNotificationsEnabled) {
$serverState['updateOsNotificationsEnabled'] = $this->updateOsNotificationsEnabled;
}
if ($this->updateOsResponse) {
$serverState['updateOsResponse'] = $this->updateOsResponse;
}
return $serverState;
}
/**
* Retrieve the server information as JSON
*
* @return string
*/
public function getServerStateJson() {
return json_encode($this->getServerState());
}
/**
* Retrieve the server information as JSON string with converted special characters to HTML entities
*
* @return string
*/
public function getServerStateJsonForHtmlAttr() {
$json = json_encode($this->getServerState());
return htmlspecialchars($json, ENT_QUOTES, 'UTF-8');
}
}

View File

@@ -1,210 +1,410 @@
<?php
$webComponentTranslations = [
($_SESSION['locale']) ? $_SESSION['locale'] : 'en_US' => [
'LAN IP' => _('LAN IP'),
'LAN IP {0}' => sprintf(_('LAN IP %s'), '{0}'),
'LAN IP Copied' => _('LAN IP Copied'),
'Click to Copy LAN IP {0}' => sprintf(_('Click to copy LAN IP %s'), '{0}'),
'Trial Key Expired at {0}' => sprintf(_('Trial Key Expired at %s'), '{0}'),
'Trial Key Expires at {0}' => sprintf(_('Trial Key Expires at %s'), '{0}'),
'Trial Key Expired {0}' => sprintf(_('Trial Key Expired %s'), '{0}'),
'Trial Key Expires in {0}' => sprintf(_('Trial Key Expires in %s'), '{0}'),
'Server Up Since {0}' => sprintf(_('Server Up Since %s'), '{0}'),
'Uptime {0}' => sprintf(_('Uptime %s'), '{0}'),
'year' => sprintf(_('%s year'), '{n}') . ' | ' . sprintf(_('%s years'), '{n}'),
'month' => sprintf(_('%s month'), '{n}') . ' | ' . sprintf(_('%s months'), '{n}'),
'day' => sprintf(_('%s day'), '{n}') . ' | ' . sprintf(_('%s days'), '{n}'),
'hour' => sprintf(_('%s hour'), '{n}') . ' | ' . sprintf(_('%s hours'), '{n}'),
'minute' => sprintf(_('%s minute'), '{n}') . ' | ' . sprintf(_('%s minutes'), '{n}'),
'second' => sprintf(_('%s second'), '{n}') . ' | ' . sprintf(_('%s seconds'), '{n}'),
'ago' => _('ago'),
'Purchase' => _('Purchase'),
'Upgrade' => _('Upgrade'),
'Fix Error' => _('Fix Error'),
'Get Started' => _('Get Started'),
'Trial Expired, see options below' => _('Trial Expired, see options below'),
'Learn more about the error' => _('Learn more about the error'),
'Close Dropdown' => _('Close Dropdown'),
'Open Dropdown' => _('Open Dropdown'),
'Thank you for installing Connect!' => _('Thank you for installing Connect!'),
'Sign In to your Unraid.net account to get started' => _('Sign In to your Unraid.net account to get started'),
'Go to Connect' => _('Go to Connect'),
'Opens Connect in new tab' => _('Opens Connect in new tab'),
'Manage Unraid.net Account' => _('Manage Unraid.net Account'),
'Manage Unraid.net Account in new tab' => _('Manage Unraid.net Account in new tab'),
'Settings' => _('Settings'),
'Go to Connect plugin settings' => _('Go to Connect plugin settings'),
'Enhance your Unraid experience with Connect' => _('Enhance your Unraid experience with Connect'),
'Beta' => _('Beta'),
'Loading' => _('Loading'),
'Restarting unraid-api…' => _('Restarting unraid-api…'),
'unraid-api is offline' => _('unraid-api is offline'),
'Introducing Unraid Connect' => _('Introducing Unraid Connect'),
'Enhance your Unraid experience' => _('Enhance your Unraid experience'),
'Connected' => _('Connected'),
'Dynamic Remote Access' => _('Dynamic Remote Access'),
'Toggle on/off server accessibility with dynamic remote access. Automatically turn on UPnP and open a random WAN port on your router at the click of a button and close off access in seconds.' => _('Toggle on/off server accessibility with dynamic remote access.') . ' ' . _('Automatically turn on UPnP and open a random WAN port on your router at the click of a button and close off access in seconds.'),
'Manage Your Server Within Connect' => _('Manage Your Server Within Connect'),
'Servers equipped with a myunraid.net certificate can be managed directly from within the Connect web UI. Manage multiple servers from your phone, tablet, laptop, or PC in the same browser window.' => _('Servers equipped with a myunraid.net certificate can be managed directly from within the Connect web UI.') . ' ' . _('Manage multiple servers from your phone, tablet, laptop, or PC in the same browser window.'),
'Deep Linking' => _('Deep Linking'),
'The Connect dashboard links to relevant sections of the webgui, allowing quick access to those settings and server sections.' => _('The Connect dashboard links to relevant sections of the webgui, allowing quick access to those settings and server sections.'),
'Online Flash Backup' => _('Online Flash Backup'),
'Never ever be left without a backup of your config. If you need to change flash drives, generate a backup from Connect and be up and running in minutes.' => _('Never ever be left without a backup of your config.') . ' ' . _('If you need to change flash drives, generate a backup from Connect and be up and running in minutes.'),
'Real-time Monitoring' => _('Real-time Monitoring'),
'Get an overview of your server\'s state, storage space, apps and VMs status, and more.' => _('Get an overview of your server\'s state, storage space, apps and VMs status, and more.'),
'Customizable Dashboard Tiles' => _('Customizable Dashboard Tiles'),
'Set custom server tiles how you like and automatically display your server\'s banner image on your Connect Dashboard.' => _('Set custom server tiles how you like and automatically display your server\'s banner image on your Connect Dashboard.'),
'License Management' => _('License Management'),
'Manage your license keys at any time via the My Keys section.' => _('Manage your license keys at any time via the My Keys section.'),
'Plus more on the way' => _('Plus more on the way'),
'All you need is an active internet connection, an Unraid.net account, and the Connect plugin. Get started by installing the plugin.' => _('All you need is an active internet connection, an Unraid.net account, and the Connect plugin.') . ' ' . _('Get started by installing the plugin.'),
'Checkout the Connect Documentation' => _('Checkout the Connect Documentation'),
'No thanks' => _('No thanks'),
'Learn more' => _('Learn more'),
'Install Connect' => _('Install Connect'),
'Close Modal' => _('Close Modal'),
'Close' => _('Close'),
'Reload' => _('Reload'),
'Unraid logo animating with a wave like effect' => _('Unraid logo animating with a wave like effect'),
'Click to close modal' => _('Click to close modal'),
'Error' => _('Error'),
'Performing actions' => _('Performing actions'),
'Success!' => _('Success!'),
'Something went wrong' => _('Something went wrong'),
'Please keep this window open while we perform some actions' => _('Please keep this window open while we perform some actions'),
'You\'re one step closer to enhancing your Unraid experience' => _('You\'re one step closer to enhancing your Unraid experience'),
'Thank you for purchasing an Unraid {0} Key!' => sprintf(_('Thank you for purchasing an Unraid %s Key!'), '{0}'),
'Thank you for upgrading to an Unraid {0} Key!' => sprintf(_('Thank you for upgrading to an Unraid %s Key!'), '{0}'),
'Your {0} Key has been replaced!' => sprintf(_('Your %s Key has been replaced!'), '{0}'),
'Your Trial key has been extended!' => _('Your Trial key has been extended!'),
'Copied' => _('Copied'),
'Copy Key URL' => _('Copy Key URL'),
'Copy your Key URL: {0}' => sprintf(_('Copy your Key URL: %s'), '{0}'),
'Then go to Tools > Registration to manually install it' => _('Then go to Tools > Registration to manually install it'),
'Enhance your experience with Unraid Connect' => _('Enhance your experience with Unraid Connect'),
'Sign In to utilize Unraid Connect' => _('Sign In to utilize Unraid Connect'),
'Configure Connect Features' => _('Configure Connect Features'),
'The primary method of support for Unraid Connect is through our forums and Discord.' => _('The primary method of support for Unraid Connect is through our forums and Discord.'),
'If you are asked to supply logs, please open a support request on our Contact Page and reply to the email message you receive with your logs attached.' => _('If you are asked to supply logs, please open a support request on our Contact Page and reply to the email message you receive with your logs attached.'),
'The logs may contain sensitive information so do not post them publicly.' => _('The logs may contain sensitive information so do not post them publicly.'),
'Download unraid-api Logs' => _('Download unraid-api Logs'),
'Unraid Connect Forums' => _('Unraid Connect Forums'),
'Unraid Discord' => _('Unraid Discord'),
'Unraid Contact Page' => _('Unraid Contact Page'),
'DNS issue, unable to resolve wanip4.unraid.net' => _('DNS issue, unable to resolve wanip4.unraid.net'),
'Unable to fetch client WAN IPv4' => _('Unable to fetch client WAN IPv4'),
'Checking WAN IPs…' => _('Checking WAN IPs…'),
'Remark: your WAN IPv4 is {0}' => sprintf(_('Remark: your WAN IPv4 is %s'), '{0}'),
'Remark: Unraid\'s WAN IPv4 {0} does not match your client\'s WAN IPv4 {1}.' => sprintf(_('Remark: Unraid\'s WAN IPv4 %1s does not match your client\'s WAN IPv4 %2s.'), '{0}', '{1}'),
'This may indicate a complex network that will not work with this Remote Access solution.' => _('This may indicate a complex network that will not work with this Remote Access solution.'),
'Ignore this message if you are currently connected via Remote Access or VPN.' => _('Ignore this message if you are currently connected via Remote Access or VPN.'),
'Ready to update Connect account configuration' => _('Ready to update Connect account configuration'),
'Signing in {0}…' => sprintf(_('Signing in %s…'), '{0}'),
'Signing out {0}…' => sprintf(_('Signing out %s…'), '{0}'),
'{0} Signed In Successfully' => sprintf(_('%s Signed In Successfully'), '{0}'),
'{0} Signed Out Successfully' => sprintf(_('%s Signed Out Successfully'), '{0}'),
'Sign In Failed' => _('Sign In Failed'),
'Sign Out Failed' => _('Sign Out Failed'),
'Failed to update Connect account configuration' => _('Failed to update Connect account configuration'),
'Callback redirect type not present or incorrect' => _('Callback redirect type not present or incorrect'),
'Failed to install key' => _('Failed to install key'),
'Ready to Install Key' => _('Ready to Install Key'),
'Installing Extended Trial' => _('Installing Extended Trial'),
'Installing Recovered' => _('Installing Recovered'),
'Installing Replaced' => _('Installing Replaced'),
'{0} {1} Key…' => sprintf(_('%1s %2s Key…'), '{0}', '{1}'),
'{1} Key {0} Successfully' => sprintf(_('%2s Key %1s Successfully'), '{0}', '{1}'),
'Failed to {0} {1} Key' => sprintf(_('Failed to %1s %2s Key'), '{0}', '{1}'),
'Purchase Key' => _('Purchase Key'),
'Upgrade Key' => _('Upgrade Key'),
'Recover Key' => _('Recover Key'),
'Redeem Activation Code' => _('Redeem Activation Code'),
'Replace Key' => _('Replace Key'),
'Sign In with Unraid.net Account' => _('Sign In with Unraid.net Account'),
'Sign Out of Unraid.net' => _('Sign Out of Unraid.net'),
'Extend Trial' => _('Extend Trial'),
'Start Free 30 Day Trial' => _('Start Free 30 Day Trial'),
'Go to Management Access Now' => _('Go to Management Access Now'),
'Contact Support' => _('Contact Support'),
'Learn More' => _('Learn More'),
'No Keyfile' => _('No Keyfile'),
'Let\'s Unleash your Hardware!' => _('Let\'s Unleash your Hardware!'),
'<p>Your server will not be usable until you purchase a Registration key or install a free 30 day <em>Trial</em> key. A <em>Trial</em> key provides all the functionality of a Pro Registration key.</p><p>Registration keys are bound to your USB Flash boot device serial number (GUID). Please use a high quality name brand device at least 1GB in size.</p><p>Note: USB memory card readers are generally not supported because most do not present unique serial numbers.</p><p><strong>Important:</strong></p><ul class="list-disc pl-16px"><li>Please make sure your server time is accurate to within 5 minutes</li><li>Please make sure there is a DNS server specified</li></ul>' => '<p>' . _('Your server will not be usable until you purchase a Registration key or install a free 30 day <em>Trial</em> key.') . ' ' . _('A <em>Trial</em> key provides all the functionality of a Pro Registration key.') . '</p><p>' . _('Registration keys are bound to your USB Flash boot device serial number (GUID).') . ' ' . _('Please use a high quality name brand device at least 1GB in size.') . '</p><p>' . _('Note: USB memory card readers are generally not supported because most do not present unique serial numbers.') . '</p><p>' . _('*Important:*') . '</p><ul class="list-disc pl-16px"><li>' . _('Please make sure your server time is accurate to within 5 minutes') . '</li><li>' . _('Please make sure there is a DNS server specified') . '</li>>' . '</ul>',
'Trial' => _('Trial'),
'Thank you for choosing Unraid OS!' => _('Thank you for choosing Unraid OS!'),
'<p>Your <em>Trial</em> key includes all the functionality and device support of a <em>Pro</em> key.</p><p>After your <em>Trial</em> has reached expiration, your server <strong>still functions normally</strong> until the next time you Stop the array or reboot your server.</p><p>At that point you may either purchase a license key or request a <em>Trial</em> extension.</p>' => '<p>' . _('Your **Trial** key includes all the functionality and device support of a **Pro** key') . '</p><p>' . _('After your **Trial** has reached expiration, your server *still functions normally* until the next time you Stop the array or reboot your server') . '</p><p>' . _('At that point you may either purchase a license key or request a *Trial* extension.') . '</p>',
'Trial Expired' => _('Trial Expired'),
'Your Trial has expired' => _('Your Trial has expired'),
'<p>To continue using Unraid OS you may purchase a license key. Alternately, you may request a Trial extension.</p>' => '<p>' . _('To continue using Unraid OS you may purchase a license key.') . ' ' . _('Alternately, you may request a Trial extension.') . '</p>',
'<p>You have used all your Trial extensions. To continue using Unraid OS you may purchase a license key.</p>' => '<p>' . _('You have used all your Trial extensions.') . ' ' . _('To continue using Unraid OS you may purchase a license key.') . '</p>',
'Basic' => _('Basic'),
'<p>Register for Connect by signing in to your Unraid.net account</p>' => '<p>' . _('Register for Connect by signing in to your Unraid.net account') . '</p>',
'<p>To support more storage devices as your server grows, click Upgrade Key.</p>' => '<p>' . _('To support more storage devices as your server grows, click Upgrade Key.') . '</p>',
'Plus' => _('Plus'),
'Pro' => _('Pro'),
'Flash GUID Error' => _('Flash GUID Error'),
'Registration key / USB Flash GUID mismatch' => _('Registration key / USB Flash GUID mismatch'),
'<p>Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.</p>' => '<p>' . _('Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.') . '</p>',
'<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key.</p><p>Your Unraid registration key is ineligible for replacement as it is blacklisted.</p>' => '<p>' . _('The license key file does not correspond to the USB Flash boot device.') . ' ' . _('Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key') . '</p><p>' . _('Your Unraid registration key is ineligible for replacement as it is blacklisted.') . '</p>',
'<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key.</p><p>Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.</p>' => '<p>' . _('The license key file does not correspond to the USB Flash boot device.') . ' ' . _('Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key') . '</p><p>' . _('Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.') . '</p>',
'<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device.</p><p>You may also attempt to Purchase or Replace your key.</p>' => '<p>' . _('The license key file does not correspond to the USB Flash boot device.') . ' ' . _('Please copy the correct key file to the /config directory on your USB Flash boot device') . '</p><p>' . _('You may also attempt to Purchase or Replace your key.') . '</p>',
'Multiple License Keys Present' => _('Multiple License Keys Present'),
'<p>There are multiple license key files present on your USB flash device and none of them correspond to the USB Flash boot device. Please remove all key files, except the one you want to replace, from the /config directory on your USB Flash boot device.</p><p>Alternately you may purchase a license key for this USB flash device.</p><p>If you want to replace one of your license keys with a new key bound to this USB Flash device, please first remove all other key files first.</p>' => '<p>' . _('There are multiple license key files present on your USB flash device and none of them correspond to the USB Flash boot device.') . ' ' . _('Please remove all key files, except the one you want to replace, from the /config directory on your USB Flash boot device') . '</p><p>' . _('Alternately you may purchase a license key for this USB flash device') . '</p><p>' . _('If you want to replace one of your license keys with a new key bound to this USB Flash device, please first remove all other key files first.') . '</p>',
'Missing key file' => _('Missing key file'),
'<p>Your license key file is corrupted or missing. The key file should be located in the /config directory on your USB Flash boot device.</p><p>You may attempt to recover your key with your Unraid.net account.</p><p>If this was an expired Trial installation, you may purchase a license key.</p>' => '<p>' . _('Your license key file is corrupted or missing.') . ' ' . _('The key file should be located in the /config directory on your USB Flash boot device') . '</p><p>' . _('If you do not have a backup copy of your license key file you may attempt to recover your key with your Unraid.net account') . '</p><p>' . _('If this was an expired Trial installation, you may purchase a license key.') . '</p>',
'<p>Your license key file is corrupted or missing. The key file should be located in the /config directory on your USB Flash boot device.</p><p>If you do not have a backup copy of your license key file you may attempt to recover your key.</p><p>If this was an expired Trial installation, you may purchase a license key.</p>' => '<p>' . _('Your license key file is corrupted or missing.') . ' ' . _('The key file should be located in the /config directory on your USB Flash boot device') . '</p><p>' . _('If you do not have a backup copy of your license key file you may attempt to recover your key with your Unraid.net account') . '</p><p>' . _('If this was an expired Trial installation, you may purchase a license key.') . '</p>',
'Invalid installation' => _('Invalid installation'),
'<p>It is not possible to use a Trial key with an existing Unraid OS installation.</p><p>You may purchase a license key corresponding to this USB Flash device to continue using this installation.</p>' => '<p>' . _('It is not possible to use a Trial key with an existing Unraid OS installation') . '</p><p>' . _('You may purchase a license key corresponding to this USB Flash device to continue using this installation.') . '</p>',
/* Copyright 2005-2023, Lime Technology
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*/
/**
* Welcome to the Thunderdome. A place where you can get lost in a sea of translations.
*
* This file is used to generate the translations for the Vue3 based web components.
*
* These key value pairs are derived from web/locales/en_US.json.
* We use the en_US.json file as the source of truth for the translations.
* This file is then used to generate the translations for the web components and delivered to them via PHP as a JSON object in myservers2.php (my favorite file name).
* The web components then use the translations to display the appropriate text to the user.
*
* Workflow is as follows:
* 1. Create a new translation in en_US.json
* 2. Create a new translation in this file
* 3. Open unraid/lang-en_US and add the new translation to the appropriate file typically translations.txt.
* 3a. This is done so that the translation is available to the rest of the Unraid webgui.
* 3b. Unfortunately there are numerous "special characters" that aren't allowed in Unraid's translation keys as they're automatically stripped out.
* 3c. This means that we have to create a new translation key that is a "safe" version of the translation key used in the web components.
* 3d. Special characters that are not allowed are: ? { } | & ~ ! [ ] ( ) / : * ^ . " '
* 3e. There are likely more but I'm unable to find the documentation PDF - updated list of invalid characters above as mentioned in the language guide document.
*
* Usage example:
* ```
* $wCTranslations = new WebComponentTranslations();
* $wCTranslations->getTranslations();
* ```
*/
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Translations.php";
'No USB flash configuration data' => _('No USB flash configuration data'),
'<p>There is a problem with your USB Flash device</p>' => '<p>' . _('There is a problem with your USB Flash device') . '</p>',
'No Flash' => _('No Flash'),
'Cannot access your USB Flash boot device' => _('Cannot access your USB Flash boot device'),
'<p>There is a physical problem accessing your USB Flash boot device</p>' => '<p>' . _('There is a physical problem accessing your USB Flash boot device') . '</p>',
'BLACKLISTED' => _('BLACKLISTED'),
'Blacklisted USB Flash GUID' => _('Blacklisted USB Flash GUID'),
'<p>This USB Flash boot device has been blacklisted. This can occur as a result of transferring your license key to a replacement USB Flash device, and you are currently booted from your old USB Flash device.</p><p>A USB Flash device may also be blacklisted if we discover the serial number is not unique this is common with USB card readers.</p>' => '<p>' . _('This USB Flash boot device has been blacklisted.') . ' ' . _('This can occur as a result of transferring your license key to a replacement USB Flash device, and you are currently booted from your old USB Flash device.') . '</p><p>' . _('A USB Flash device may also be blacklisted if we discover the serial number is not unique this is common with USB card readers.') . '</p>',
'USB Flash device error' => _('USB Flash device error'),
'<p>This USB Flash device has an invalid GUID. Please try a different USB Flash device</p>' => '<p>' . _('This USB Flash device has an invalid GUID. Please try a different USB Flash device') . '</p>',
'USB Flash has no serial number' => _('USB Flash has no serial number'),
'Trial Requires Internet Connection' => _('Trial Requires Internet Connection'),
'Cannot validate Unraid Trial key' => _('Cannot validate Unraid Trial key'),
'<p>Your Trial key requires an internet connection.</p><p><a href="/Settings/NetworkSettings" class="underline">Please check Settings > Network</a></p>' => '<p>' . _('Your Trial key requires an internet connection') . '</p><p><a href="/Settings/NetworkSettings" class="underline">' . _('Please check Settings > Network') . '</a></p>',
'Stale' => _('Stale'),
'Stale Server' => _('Stale Server'),
'<p>Please refresh the page to ensure you load your latest configuration</p>' => '<p>' . _('Please refresh the page to ensure you load your latest configuration') . '</p>',
'Invalid API Key' => _('Invalid API Key'),
'Please sign out then sign back in to refresh your API key.' => _('Please sign out then sign back in to refresh your API key.'),
'Invalid API Key Format' => _('Invalid API Key Format'),
'Too Many Devices' => _('Too Many Devices'),
'You have exceeded the number of devices allowed for your license. Please remove a device before adding another.' => _('You have exceeded the number of devices allowed for your license. Please remove a device before adding another.'),
'Unraid Connect Install Failed' => _('Unraid Connect Install Failed'),
'Rebooting will likely solve this.' => _('Rebooting will likely solve this.'),
'SSL certificates for unraid.net deprecated' => _('SSL certificates for unraid.net deprecated'),
'On January 1st, 2023 SSL certificates for unraid.net were deprecated. You MUST provision a new SSL certificate to use our new myunraid.net domain. You can do this on the Settings > Management Access page.' => _('On January 1st, 2023 SSL certificates for unraid.net were deprecated. You MUST provision a new SSL certificate to use our new myunraid.net domain. You can do this on the Settings > Management Access page.'),
'Unraid Connect Error' => _('Unraid Connect Error'),
'Trial Key Creation Failed' => _('Trial Key Creation Failed'),
'Error creatiing a trial key. Please try again later.' => _('Error creatiing a trial key. Please try again later.'),
'Extending your free trial by 15 days' => _('Extending your free trial by 15 days'),
'Please keep this window open' => _('Please keep this window open'),
'Starting your free 30 day trial' => _('Starting your free 30 day trial'),
'Trial Key Created' => _('Trial Key Created'),
'Please wait while the page reloads to install your trial key' => _('Please wait while the page reloads to install your trial key'),
'A Trial key provides all the functionality of a Pro Registration key' => _('A Trial key provides all the functionality of a Pro Registration key'),
'Extension Installed' => _('Extension Installed'),
'Recovered' => _('Recovered'),
'Replaced' => _('Replaced'),
'Installing' => _('Installing'),
'Installed' => _('Installed'),
'Install' => _('Install'),
'Install Extended' => _('Install Extended'),
'Install Recovered' => _('Install Recovered'),
'Install Replaced' => _('Install Replaced'),
'Your free Trial key provides all the functionality of a Pro Registration key' => _('Your free Trial key provides all the functionality of a Pro Registration key'),
'Calculating trial expiration…' => _('Calculating trial expiration…'),
'Signing In' => _('Signing In'),
'Signing Out' => _('Signing Out'),
'Sign In requires the local unraid-api to be running' => _('Sign In requires the local unraid-api to be running'),
'Sign Out requires the local unraid-api to be running' => _('Sign Out requires the local unraid-api to be running')
],
];
class WebComponentTranslations
{
private $translations = [];
public function __construct()
{
$this->initializeTranslations();
}
private function initializeTranslations()
{
$this->translations[$_SESSION['locale'] ?? 'en_US'] = [
'{0} {1} Key' => sprintf(_('%1s %2s Key…'), '{0}', '{1}'),
'{0} devices' => sprintf(_('%s devices'), '{0}'),
'{0} out of {1} allowed devices upgrade your key to support more devices' => sprintf(_('%1s out of %2s allowed devices upgrade your key to support more devices'), '{0}', '{1}'),
'{0} out of {1} devices' => sprintf(_('%1s out of %2s devices'), '{0}', '{1}'),
'{0} Release Notes' => sprintf(_('%s Release Notes'), '{0}'),
'{0} Signed In Successfully' => sprintf(_('%s Signed In Successfully'), '{0}'),
'{0} Signed Out Successfully' => sprintf(_('%s Signed Out Successfully'), '{0}'),
'{0} Update Available' => sprintf(_('%s Update Available'), '{0}'),
'{1} Key {0} Successfully' => sprintf(_('%2s Key %1s Successfully'), '{0}', '{1}'),
'<p>It is not possible to use a Trial key with an existing Unraid OS installation.</p><p>You may purchase a license key corresponding to this USB Flash device to continue using this installation.</p>' => '<p>' . _('It is not possible to use a Trial key with an existing Unraid OS installation') . '</p><p>' . _('You may purchase a license key corresponding to this USB Flash device to continue using this installation.') . '</p>',
'<p>Please refresh the page to ensure you load your latest configuration</p>' => '<p>' . _('Please refresh the page to ensure you load your latest configuration') . '</p>',
'<p>Register for Connect by signing in to your Unraid.net account</p>' => '<p>' . _('Register for Connect by signing in to your Unraid.net account') . '</p>',
'<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key.</p><p>Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.</p>' => '<p>' . _('The license key file does not correspond to the USB Flash boot device.') . ' ' . _('Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key') . '</p><p>' . _('Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.') . '</p>',
'<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key.</p><p>Your Unraid registration key is ineligible for replacement as it is blacklisted.</p>' => '<p>' . _('The license key file does not correspond to the USB Flash boot device.') . ' ' . _('Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key') . '</p><p>' . _('Your Unraid registration key is ineligible for replacement as it is blacklisted.') . '</p>',
'<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device.</p><p>You may also attempt to Purchase or Replace your key.</p>' => '<p>' . _('The license key file does not correspond to the USB Flash boot device.') . ' ' . _('Please copy the correct key file to the /config directory on your USB Flash boot device') . '</p><p>' . _('You may also attempt to Purchase or Replace your key.') . '</p>',
'<p>There are multiple license key files present on your USB flash device and none of them correspond to the USB Flash boot device. Please remove all key files, except the one you want to replace, from the /config directory on your USB Flash boot device.</p><p>Alternately you may purchase a license key for this USB flash device.</p><p>If you want to replace one of your license keys with a new key bound to this USB Flash device, please first remove all other key files first.</p>' => '<p>' . _('There are multiple license key files present on your USB flash device and none of them correspond to the USB Flash boot device.') . ' ' . _('Please remove all key files, except the one you want to replace, from the /config directory on your USB Flash boot device') . '</p><p>' . _('Alternately you may purchase a license key for this USB flash device') . '</p><p>' . _('If you want to replace one of your license keys with a new key bound to this USB Flash device, please first remove all other key files first.') . '</p>',
'<p>There is a physical problem accessing your USB Flash boot device</p>' => '<p>' . _('There is a physical problem accessing your USB Flash boot device') . '</p>',
'<p>There is a problem with your USB Flash device</p>' => '<p>' . _('There is a problem with your USB Flash device') . '</p>',
'<p>This USB Flash boot device has been blacklisted. This can occur as a result of transferring your license key to a replacement USB Flash device, and you are currently booted from your old USB Flash device.</p><p>A USB Flash device may also be blacklisted if we discover the serial number is not unique this is common with USB card readers.</p>' => '<p>' . _('This USB Flash boot device has been blacklisted.') . ' ' . _('This can occur as a result of transferring your license key to a replacement USB Flash device, and you are currently booted from your old USB Flash device.') . '</p><p>' . _('A USB Flash device may also be blacklisted if we discover the serial number is not unique this is common with USB card readers.') . '</p>',
'<p>This USB Flash device has an invalid GUID. Please try a different USB Flash device</p>' => '<p>' . _('This USB Flash device has an invalid GUID. Please try a different USB Flash device') . '</p>',
'<p>To continue using Unraid OS you may purchase a license key. Alternately, you may request a Trial extension.</p>' => '<p>' . _('To continue using Unraid OS you may purchase a license key.') . ' ' . _('Alternately, you may request a Trial extension.') . '</p>',
'<p>To support more storage devices as your server grows, click Upgrade Key.</p>' => '<p>' . _('To support more storage devices as your server grows, click Upgrade Key.') . '</p>',
'<p>You have used all your Trial extensions. To continue using Unraid OS you may purchase a license key.</p>' => '<p>' . _('You have used all your Trial extensions.') . ' ' . _('To continue using Unraid OS you may purchase a license key.') . '</p>',
'<p>Your <em>Trial</em> key includes all the functionality and device support of an <em>Unleashed</em> key.</p><p>After your <em>Trial</em> has reached expiration, your server <strong>still functions normally</strong> until the next time you Stop the array or reboot your server.</p><p>At that point you may either purchase a license key or request a <em>Trial</em> extension.</p>' => '<p>' . _('Your **Trial** key includes all the functionality and device support of an **Unleashed** key') . '</p><p>' . _('After your **Trial** has reached expiration, your server *still functions normally* until the next time you Stop the array or reboot your server') . '</p><p>' . _('At that point you may either purchase a license key or request a *Trial* extension.') . '</p>',
'<p>Your license key file is corrupted or missing. The key file should be located in the /config directory on your USB Flash boot device.</p><p>If you do not have a backup copy of your license key file you may attempt to recover your key.</p><p>If this was an expired Trial installation, you may purchase a license key.</p>' => '<p>' . _('Your license key file is corrupted or missing.') . ' ' . _('The key file should be located in the /config directory on your USB Flash boot device') . '</p><p>' . _('If you do not have a backup copy of your license key file you may attempt to recover your key with your Unraid.net account') . '</p><p>' . _('If this was an expired Trial installation, you may purchase a license key.') . '</p>',
'<p>Your license key file is corrupted or missing. The key file should be located in the /config directory on your USB Flash boot device.</p><p>You may attempt to recover your key with your Unraid.net account.</p><p>If this was an expired Trial installation, you may purchase a license key.</p>' => '<p>' . _('Your license key file is corrupted or missing.') . ' ' . _('The key file should be located in the /config directory on your USB Flash boot device') . '</p><p>' . _('If you do not have a backup copy of your license key file you may attempt to recover your key with your Unraid.net account') . '</p><p>' . _('If this was an expired Trial installation, you may purchase a license key.') . '</p>',
'<p>Your server will not be usable until you purchase a Registration key or install a free 30 day <em>Trial</em> key. A <em>Trial</em> key provides all the functionality of an Unleashed Registration key.</p><p>Registration keys are bound to your USB Flash boot device serial number (GUID). Please use a high quality name brand device at least 1GB in size.</p><p>Note: USB memory card readers are generally not supported because most do not present unique serial numbers.</p><p><strong>Important:</strong></p><ul class="list-disc pl-16px"><li>Please make sure your server time is accurate to within 5 minutes</li><li>Please make sure there is a DNS server specified</li></ul>' => '<p>' . _('Your server will not be usable until you purchase a Registration key or install a free 30 day <em>Trial</em> key.') . ' ' . _('A <em>Trial</em> key provides all the functionality of an Unleashed Registration key.') . '</p><p>' . _('Registration keys are bound to your USB Flash boot device serial number (GUID).') . ' ' . _('Please use a high quality name brand device at least 1GB in size.') . '</p><p>' . _('Note: USB memory card readers are generally not supported because most do not present unique serial numbers.') . '</p><p>' . _('*Important:*') . '</p><ul class="list-disc pl-16px"><li>' . _('Please make sure your server time is accurate to within 5 minutes') . '</li><li>' . _('Please make sure there is a DNS server specified') . '</li>>' . '</ul>',
'<p>Your Trial key requires an internet connection.</p><p><a href="/Settings/NetworkSettings" class="underline">Please check Settings > Network</a></p>' => '<p>' . _('Your Trial key requires an internet connection') . '</p><p><a href="/Settings/NetworkSettings" class="underline">' . _('Please check Settings > Network') . '</a></p>',
'<p>Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.</p>' => '<p>' . _('Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.') . '</p>',
'A Trial key provides all the functionality of an Unleashed Registration key' => _('A Trial key provides all the functionality of an Unleashed Registration key'),
'Acklowledge that you have made a Flash Backup to enable this action' => _('Acklowledge that you have made a Flash Backup to enable this action'),
'ago' => _('ago'),
'All you need is an active internet connection, an Unraid.net account, and the Connect plugin. Get started by installing the plugin.' => _('All you need is an active internet connection, an Unraid.net account, and the Connect plugin.') . ' ' . _('Get started by installing the plugin.'),
'Attached Storage Devices' => _('Attached Storage Devices'),
'Backing up...this may take a few minutes' => _('Backing up...this may take a few minutes'),
'Basic' => _('Basic'),
'Begin downgrade to {0}' => sprintf(_('Begin downgrade to %s'), '{0}'),
'Beta' => _('Beta'),
'Blacklisted USB Flash GUID' => _('Blacklisted USB Flash GUID'),
'BLACKLISTED' => _('BLACKLISTED'),
'Calculating OS Update Eligibility…' => _('Calculating OS Update Eligibility…'),
'Calculating trial expiration…' => _('Calculating trial expiration…'),
'Callback redirect type not present or incorrect' => _('Callback redirect type not present or incorrect'),
'Cancel {0}' => sprintf(_('Cancel %s'), '{0}'),
'Cancel' => _('Cancel'),
'Cannot access your USB Flash boot device' => _('Cannot access your USB Flash boot device'),
'Cannot validate Unraid Trial key' => _('Cannot validate Unraid Trial key'),
'Check for OS Updates' => _('Check for OS Updates'),
'check for OS updates' => _('check for OS updates'),
'Check for Prereleases' => _('Check for Prereleases'),
'Checking WAN IPs…' => _('Checking WAN IPs…'),
'Checking...' => _('Checking...'),
'Checkout the Connect Documentation' => _('Checkout the Connect Documentation'),
'Click to close modal' => _('Click to close modal'),
'Click to Copy LAN IP {0}' => sprintf(_('Click to copy LAN IP %s'), '{0}'),
'Close Dropdown' => _('Close Dropdown'),
'Close Modal' => _('Close Modal'),
'Close' => _('Close'),
'Configure Connect Features' => _('Configure Connect Features'),
'Confirm and start update' => _('Confirm and start update'),
'Confirm to Install Unraid OS {0}' => sprintf(_('Confirm to Install Unraid OS %s'), '{0}'),
'Connected' => _('Connected'),
'Contact Support' => _('Contact Support'),
'Continue' => _('Continue'),
'Copied' => _('Copied'),
'Copy Key URL' => _('Copy Key URL'),
'Copy your Key URL: {0}' => sprintf(_('Copy your Key URL: %s'), '{0}'),
'Create Flash Backup' => _('Create Flash Backup'),
'Current Version {0}' => sprintf(_('Current Version %s'), '{0}'),
'Current Version: Unraid {0}' => sprintf(_('Current Version: Unraid %s'), '{0}'),
'Customizable Dashboard Tiles' => _('Customizable Dashboard Tiles'),
'day' => sprintf(_('%s day'), '{n}') . ' | ' . sprintf(_('%s days'), '{n}'),
'Deep Linking' => _('Deep Linking'),
'DNS issue, unable to resolve wanip4.unraid.net' => _('DNS issue, unable to resolve wanip4.unraid.net'),
'Downgrade Unraid OS to {0}' => sprintf(_('Downgrade Unraid OS to %s'), '{0}'),
'Downgrade Unraid OS' => _('Downgrade Unraid OS'),
'Downgrades are only recommended if you\'re unable to solve a critical issue.' => _('Downgrades are only recommended if you\'re unable to solve a critical issue.'),
'Download Diagnostics' => _('Download Diagnostics'),
'Download the Diagnostics zip then please open a bug report on our forums with a description of the issue along with your diagnostics.' => _('Download the Diagnostics zip then please open a bug report on our forums with a description of the issue along with your diagnostics.'),
'Download unraid-api Logs' => _('Download unraid-api Logs'),
'Dynamic Remote Access' => _('Dynamic Remote Access'),
'Enable update notifications' => _('Enable update notifications'),
'Enhance your experience with Unraid Connect' => _('Enhance your experience with Unraid Connect'),
'Enhance your Unraid experience with Connect' => _('Enhance your Unraid experience with Connect'),
'Enhance your Unraid experience' => _('Enhance your Unraid experience'),
'Error creating a trial key. Please try again later.' => _('Error creating a trial key. Please try again later.'),
'Error Parsing Changelog • {0}' => sprintf(_('Error Parsing Changelog • %s'), '{0}'),
'Error' => _('Error'),
'Expired {0}' => sprintf(_('Expired %s'), '{0}'),
'Expired' => _('Expired'),
'Expires at {0}' => sprintf(_('Expires at %s'), '{0}'),
'Expires in {0}' => sprintf(_('Expires in %s'), '{0}'),
'Extend License to Update' => _('Extend License to Update'),
'Extend License' => _('Extend License'),
'Extend Trial' => _('Extend Trial'),
'Extending your free trial by 15 days' => _('Extending your free trial by 15 days'),
'Extension Installed' => _('Extension Installed'),
'Failed to {0} {1} Key' => sprintf(_('Failed to %1s %2s Key'), '{0}', '{1}'),
'Failed to install key' => _('Failed to install key'),
'Failed to update Connect account configuration' => _('Failed to update Connect account configuration'),
'Fetching & parsing changelog…' => _('Fetching & parsing changelog…'),
'Fix Error' => _('Fix Error'),
'Flash Backup is not available. Navigate to {0}/Main/Settings/Flash to try again then come back to this page.' => sprintf(_('Flash Backup is not available. Navigate to %s/Main/Settings/Flash to try again then come back to this page.'), '{0}'),
'Flash GUID Error' => _('Flash GUID Error'),
'Flash GUID required to check replacement status' => _('Flash GUID required to check replacement status'),
'Flash GUID' => _('Flash GUID'),
'Flash Product' => _('Flash Product'),
'Flash Vendor' => _('Flash Vendor'),
'Get an overview of your server\'s state, storage space, apps and VMs status, and more.' => _('Get an overview of your server\'s state, storage space, apps and VMs status, and more.'),
'Get Started' => _('Get Started'),
'Go to Connect plugin settings' => _('Go to Connect plugin settings'),
'Go to Connect' => _('Go to Connect'),
'Go to Management Access Now' => _('Go to Management Access Now'),
'Go to Settings > Notifications to enable automatic OS update notifications for future releases.' => _('Go to Settings > Notifications to enable automatic OS update notifications for future releases.'),
'Go to Tools > Management Access to activate the Flash Backup feature and ensure your backup is up-to-date.' => _('Go to Tools > Management Access to activate the Flash Backup feature and ensure your backup is up-to-date.'),
'Go to Tools > Management Access to ensure your backup is up-to-date.' => _('Go to Tools > Management Access to ensure your backup is up-to-date.'),
'Go to Tools > Registration to fix' => _('Go to Tools > Registration to fix'),
'Go to Tools > Registration to Learn More' => _('Go to Tools > Registration to Learn More'),
'Go to Tools > Update OS for more options.' => _('Go to Tools > Update OS for more options.'),
'Go to Tools > Update' => _('Go to Tools > Update'),
'hour' => sprintf(_('%s hour'), '{n}') . ' | ' . sprintf(_('%s hours'), '{n}'),
'I have made a Flash Backup' => _('I have made a Flash Backup'),
'If you are asked to supply logs, please open a support request on our Contact Page and reply to the email message you receive with your logs attached.' => _('If you are asked to supply logs, please open a support request on our Contact Page and reply to the email message you receive with your logs attached.'),
'Ignore this message if you are currently connected via Remote Access or VPN.' => _('Ignore this message if you are currently connected via Remote Access or VPN.'),
'Ignore this release until next reboot' => _('Ignore this release until next reboot'),
'Ignored Releases' => _('Ignored Releases'),
'In the rare event you need to downgrade we ask that you please provide us with Diagnostics so we can investigate your issue.' => _('In the rare event you need to downgrade we ask that you please provide us with Diagnostics so we can investigate your issue.'),
'Install Connect' => _('Install Connect'),
'Install Recovered' => _('Install Recovered'),
'Install Replaced' => _('Install Replaced'),
'Install Unraid OS {0}' => sprintf(_('Install Unraid OS %s'), '{0}'),
'Install' => _('Install'),
'Installed' => _('Installed'),
'Installing Extended Trial' => _('Installing Extended Trial'),
'Installing Extended' => _('Installing Extended'),
'Installing Recovered' => _('Installing Recovered'),
'Installing Replaced' => _('Installing Replaced'),
'Installing' => _('Installing'),
'Introducing Unraid Connect' => _('Introducing Unraid Connect'),
'Invalid API Key Format' => _('Invalid API Key Format'),
'Invalid API Key' => _('Invalid API Key'),
'Invalid installation' => _('Invalid installation'),
'It\s highly recommended to review the changelog before continuing your update.' => _('It\'s highly recommended to review the changelog before continuing your update.'),
'Key ineligible for {0}' => sprintf(_('Key ineligible for %s'), '{0}'),
'Key ineligible for future releases' => _('Key ineligible for future releases'),
'Keyfile required to check replacement status' => _('Keyfile required to check replacement status'),
'LAN IP {0}' => sprintf(_('LAN IP %s'), '{0}'),
'LAN IP Copied' => _('LAN IP Copied'),
'LAN IP' => _('LAN IP'),
'Last checked: {0}' => sprintf(_('Last checked: %s'), '{0}'),
'Learn more about the error' => _('Learn more about the error'),
'Learn more and fix' => _('Learn more and fix'),
'Learn more and link your key to your account' => _('Learn more and link your key to your account'),
'Learn More' => _('Learn More'),
'Learn more' => _('Learn more'),
'Let\'s Unleash your Hardware!' => _('Let\'s Unleash your Hardware!'),
'License key actions' => _('License key actions'),
'License key type' => _('License key type'),
'License Management' => _('License Management'),
'Link Key' => _('Link Key'),
'Linked to Unraid.net account' => _('Linked to Unraidnet account'),
'Loading' => _('Loading'),
'Manage Unraid.net Account in new tab' => _('Manage Unraid.net Account in new tab'),
'Manage Unraid.net Account' => _('Manage Unraid.net Account'),
'Manage your license keys at any time via the My Keys section.' => _('Manage your license keys at any time via the My Keys section.'),
'Manage Your Server Within Connect' => _('Manage Your Server Within Connect'),
'minute' => sprintf(_('%s minute'), '{n}') . ' | ' . sprintf(_('%s minutes'), '{n}'),
'Missing key file' => _('Missing key file'),
'month' => sprintf(_('%s month'), '{n}') . ' | ' . sprintf(_('%s months'), '{n}'),
'More options' => _('More options'),
'Multiple License Keys Present' => _('Multiple License Keys Present'),
'Never ever be left without a backup of your config. If you need to change flash drives, generate a backup from Connect and be up and running in minutes.' => _('Never ever be left without a backup of your config.') . ' ' . _('If you need to change flash drives, generate a backup from Connect and be up and running in minutes.'),
'New Version: {0}' => sprintf(_('New Version: %s'), '{0}'),
'No downgrade available' => _('No downgrade available'),
'No Flash' => _('No Flash'),
'No Keyfile' => _('No Keyfile'),
'No thanks' => _('No thanks'),
'No USB flash configuration data' => _('No USB flash configuration data'),
'Not Linked' => _('Not Linked'),
'On January 1st, 2023 SSL certificates for unraid.net were deprecated. You MUST provision a new SSL certificate to use our new myunraid.net domain. You can do this on the Settings > Management Access page.' => _('On January 1st, 2023 SSL certificates for unraid.net were deprecated. You MUST provision a new SSL certificate to use our new myunraid.net domain. You can do this on the Settings > Management Access page.'),
'Online Flash Backup' => _('Online Flash Backup'),
'Open a bug report' => _('Open a bug report'),
'Open Dropdown' => _('Open Dropdown'),
'Opens Connect in new tab' => _('Opens Connect in new tab'),
'Original release date {0}' => sprintf(_('Original release date %s'), '{0}'),
'OS Update Eligibility Expired' => _('OS Update Eligibility Expired'),
'Performing actions' => _('Performing actions'),
'Please confirm the update details below' => _('Please confirm the update details below'),
'Please finish the initiated downgrade to enable updates.' => _('Please finish the initiated downgrade to enable updates.'),
'Please finish the initiated update to enable a downgrade.' => _('Please finish the initiated update to enable a downgrade.'),
'Please fix any errors and try again.' => _('Please fix any errors and try again.'),
'Please keep this window open while we perform some actions' => _('Please keep this window open while we perform some actions'),
'Please keep this window open' => _('Please keep this window open'),
'Please sign out then sign back in to refresh your API key.' => _('Please sign out then sign back in to refresh your API key.'),
'Please wait while the page reloads to install your trial key' => _('Please wait while the page reloads to install your trial key'),
'Plus more on the way' => _('Plus more on the way'),
'Plus' => _('Plus'),
'Pro' => _('Pro'),
'Purchase Key' => _('Purchase Key'),
'Purchase' => _('Purchase'),
'Ready to Install Key' => _('Ready to Install Key'),
'Ready to update Connect account configuration' => _('Ready to update Connect account configuration'),
'Real-time Monitoring' => _('Real-time Monitoring'),
'Reboot Now to Downgrade to {0}' => sprintf(_('Reboot Now to Downgrade to %s'), '{0}'),
'Reboot Now to Downgrade' => _('Reboot Now to Downgrade'),
'Reboot Now to Update to {0}' => sprintf(_('Reboot Now to Update to %s'), '{0}'),
'Reboot Now to Update' => _('Reboot Now to Update'),
'Reboot Required for Downgrade to {0}' => sprintf(_('Reboot Required for Downgrade to %s'), '{0}'),
'Reboot Required for Downgrade' => _('Reboot Required for Downgrade'),
'Reboot Required for Update to {0}' => sprintf(_('Reboot Required for Update to %s'), '{0}'),
'Reboot Required for Update' => _('Reboot Required for Update'),
'Rebooting will likely solve this.' => _('Rebooting will likely solve this.'),
'Receive the latest and greatest for Unraid OS. Whether it new features, security patches, or bug fixes keeping your server up-to-date ensures the best experience that Unraid has to offer.' => _('Receive the latest and greatest for Unraid OS.') . ' ' . _('Whether it new features, security patches, or bug fixes keeping your server up-to-date ensures the best experience that Unraid has to offer.'),
'Recover Key' => _('Recover Key'),
'Recovered' => _('Recovered'),
'Redeem Activation Code' => _('Redeem Activation Code'),
'Refresh' => _('Refresh'),
'Registered on' => _('Registered on'),
'Registered to' => _('Registered to'),
'Registration key / USB Flash GUID mismatch' => _('Registration key / USB Flash GUID mismatch'),
'Release date {0}' => sprintf(_('Release date %s'), '{0}'),
'Release requires verification to update' => _('Release requires verification to update'),
'Reload' => _('Reload'),
'Remark: Unraid\'s WAN IPv4 {0} does not match your client\'s WAN IPv4 {1}.' => sprintf(_('Remark: Unraid\'s WAN IPv4 %1s does not match your client\'s WAN IPv4 %2s.'), '{0}', '{1}'),
'Remark: your WAN IPv4 is {0}' => sprintf(_('Remark: your WAN IPv4 is %s'), '{0}'),
'Remove from ignore list' => _('Remove from ignore list'),
'Remove' => _('Remove'),
'Replace Key' => _('Replace Key'),
'Replaced' => _('Replaced'),
'Requires the local unraid-api to be running successfully' => _('Requires the local unraid-api to be running successfully'),
'Restarting unraid-api…' => _('Restarting unraid-api…'),
'second' => sprintf(_('%s second'), '{n}') . ' | ' . sprintf(_('%s seconds'), '{n}'),
'Server Up Since {0}' => sprintf(_('Server Up Since %s'), '{0}'),
'Servers equipped with a myunraid.net certificate can be managed directly from within the Connect web UI. Manage multiple servers from your phone, tablet, laptop, or PC in the same browser window.' => _('Servers equipped with a myunraid.net certificate can be managed directly from within the Connect web UI.') . ' ' . _('Manage multiple servers from your phone, tablet, laptop, or PC in the same browser window.'),
'Set custom server tiles how you like and automatically display your server\'s banner image on your Connect Dashboard.' => _('Set custom server tiles how you like and automatically display your server\'s banner image on your Connect Dashboard.'),
'Settings' => _('Settings'),
'Sign In Failed' => _('Sign In Failed'),
'Sign In requires the local unraid-api to be running' => _('Sign In requires the local unraid-api to be running'),
'Sign In to utilize Unraid Connect' => _('Sign In to utilize Unraid Connect'),
'Sign In to your Unraid.net account to get started' => _('Sign In to your Unraid.net account to get started'),
'Sign In with Unraid.net Account' => _('Sign In with Unraid.net Account'),
'Sign In' => _('Sign In'),
'Sign Out Failed' => _('Sign Out Failed'),
'Sign Out of Unraid.net' => _('Sign Out of Unraid.net'),
'Sign Out requires the local unraid-api to be running' => _('Sign Out requires the local unraid-api to be running'),
'Signing in {0}…' => sprintf(_('Signing in %s…'), '{0}'),
'Signing In' => _('Signing In'),
'Signing out {0}…' => sprintf(_('Signing out %s…'), '{0}'),
'Signing Out' => _('Signing Out'),
'Something went wrong' => _('Something went wrong'),
'SSL certificates for unraid.net deprecated' => _('SSL certificates for unraid.net deprecated'),
'Stale Server' => _('Stale Server'),
'Stale' => _('Stale'),
'Start Free 30 Day Trial' => _('Start Free 30 Day Trial'),
'Starting your free 30 day trial' => _('Starting your free 30 day trial'),
'Success!' => _('Success!'),
'Thank you for choosing Unraid OS!' => _('Thank you for choosing Unraid OS!'),
'Thank you for installing Connect!' => _('Thank you for installing Connect!'),
'Thank you for purchasing an Unraid {0} Key!' => sprintf(_('Thank you for purchasing an Unraid %s Key!'), '{0}'),
'Thank you for upgrading to an Unraid {0} Key!' => sprintf(_('Thank you for upgrading to an Unraid %s Key!'), '{0}'),
'The Connect dashboard links to relevant sections of the webgui, allowing quick access to those settings and server sections.' => _('The Connect dashboard links to relevant sections of the webgui, allowing quick access to those settings and server sections.'),
'The logs may contain sensitive information so do not post them publicly.' => _('The logs may contain sensitive information so do not post them publicly.'),
'The primary method of support for Unraid Connect is through our forums and Discord.' => _('The primary method of support for Unraid Connect is through our forums and Discord.'),
'Then go to Tools > Registration to manually install it' => _('Then go to Tools > Registration to manually install it'),
'This may indicate a complex network that will not work with this Remote Access solution.' => _('This may indicate a complex network that will not work with this Remote Access solution.'),
'This update will require a reboot' => _('This update will require a reboot'),
'Toggle on/off server accessibility with dynamic remote access. Automatically turn on UPnP and open a random WAN port on your router at the click of a button and close off access in seconds.' => _('Toggle on/off server accessibility with dynamic remote access.') . ' ' . _('Automatically turn on UPnP and open a random WAN port on your router at the click of a button and close off access in seconds.'),
'Too Many Devices' => _('Too Many Devices'),
'Transfer License to New Flash' => _('Transfer License to New Flash'),
'Trial Expired, see options below' => _('Trial Expired, see options below'),
'Trial Expired' => _('Trial Expired'),
'Trial Key Created' => _('Trial Key Created'),
'Trial Key Creation Failed' => _('Trial Key Creation Failed'),
'Trial Key Expired {0}' => sprintf(_('Trial Key Expired %s'), '{0}'),
'Trial Key Expired at {0}' => sprintf(_('Trial Key Expired at %s'), '{0}'),
'Trial Key Expires at {0}' => sprintf(_('Trial Key Expires at %s'), '{0}'),
'Trial Key Expires in {0}' => sprintf(_('Trial Key Expires in %s'), '{0}'),
'Trial Requires Internet Connection' => _('Trial Requires Internet Connection'),
'Trial' => _('Trial'),
'Unable to check for OS updates' => _('Unable to check for OS updates'),
'Unable to fetch client WAN IPv4' => _('Unable to fetch client WAN IPv4'),
'Unable to open release notes' => _('Unable to open release notes'),
'Unknown error' => _('Unknown error'),
'Unknown' => _('Unknown'),
'unlimited' => _('unlimited'),
'Unraid {0} Available' => sprintf(_('Unraid %s Available'), '{0}'),
'Unraid {0} Update Available' => sprintf(_('Unraid %s Update Available'), '{0}'),
'Unraid {0}' => sprintf(_('Unraid %s'), '{0}'),
'Unraid Connect Error' => _('Unraid Connect Error'),
'Unraid Connect Forums' => _('Unraid Connect Forums'),
'Unraid Connect Install Failed' => _('Unraid Connect Install Failed'),
'Unraid Contact Page' => _('Unraid Contact Page'),
'Unraid Discord' => _('Unraid Discord'),
'Unraid logo animating with a wave like effect' => _('Unraid logo animating with a wave like effect'),
'Unraid OS {0} Released' => sprintf(_('Unraid OS %s Released'), '{0}'),
'Unraid OS {0} Update Available' => sprintf(_('Unraid OS %s Update Available'), '{0}'),
'Unraid OS is up-to-date' => _('Unraid OS is up-to-date'),
'Unraid OS Update Available' => _('Unraid OS Update Available'),
'unraid-api is offline' => _('unraid-api is offline'),
'Up-to-date with eligible releases' => _('Up-to-date with eligible releases'),
'Up-to-date' => _('Up-to-date'),
'Update Available' => _('Update Available'),
'Update Released' => _('Update Released'),
'Update Unraid OS confirmation required' => _('Update Unraid OS confirmation required'),
'Update Unraid OS' => _('Update Unraid OS'),
'Updating 3rd party drivers' => _('Updating 3rd party drivers'),
'Upgrade Key' => _('Upgrade Key'),
'Upgrade' => _('Upgrade'),
'Uptime {0}' => sprintf(_('Uptime %s'), '{0}'),
'USB Flash device error' => _('USB Flash device error'),
'USB Flash has no serial number' => _('USB Flash has no serial number'),
'Verify to Update' => _('Verify to Update'),
'Version available for restore {0}' => sprintf(_('Version available for restore %s'), '{0}'),
'Version: {0}' => sprintf(_('Version: %s'), '{0}'),
'View Available Updates' => _('View Available Updates'),
'View Changelog & Update' => _('View Changelog & Update'),
'View Changelog for {0}' => sprintf(_('View Changelog for %s'), '{0}'),
'View Changelog on Docs' => _('View Changelog on Docs'),
'View Changelog to Start Update' => _('View Changelog to Start Update'),
'View Changelog' => _('View Changelog'),
'View on Docs' => _('View on Docs'),
'View release notes' => _('View release notes'),
'We recommend backing up your USB Flash Boot Device before starting the update.' => _('We recommend backing up your USB Flash Boot Device before starting the update.'),
'year' => sprintf(_('%s year'), '{n}') . ' | ' . sprintf(_('%s years'), '{n}'),
'You are still eligible to access OS updates that were published on or before {1}.' => sprintf(_('You are still eligible to access OS updates that were published on or before %s.'), '{1}'),
'You can also manually create a new backup by clicking the Create Flash Backup button.' => _('You can also manually create a new backup by clicking the Create Flash Backup button.'),
'You can manually create a backup by clicking the Create Flash Backup button.' => _('You can manually create a backup by clicking the Create Flash Backup button.'),
'You have already activated the Flash Backup feature via the Unraid Connect plugin.' => _('You have already activated the Flash Backup feature via the Unraid Connect plugin.'),
'You have exceeded the number of devices allowed for your license. Please remove a device before adding another.' => _('You have exceeded the number of devices allowed for your license. Please remove a device before adding another.'),
'You have not activated the Flash Backup feature via the Unraid Connect plugin.' => _('You have not activated the Flash Backup feature via the Unraid Connect plugin.'),
'You may still update to releases dated prior to your update expiration date.' => _('You may still update to releases dated prior to your update expiration date.'),
'You\'re one step closer to enhancing your Unraid experience' => _('You\'re one step closer to enhancing your Unraid experience'),
'Your {0} Key has been replaced!' => sprintf(_('Your %s Key has been replaced!'), '{0}'),
'Your {0} license included one year of free updates at the time of purchase. You are now eligible to extend your license and access the latest OS updates. You are still eligible to access OS updates that were published on or before {1}.' => sprintf(_('Your %s license included one year of free updates at the time of purchase.'), '{0}') . ' ' . _('You are now eligible to extend your license and access the latest OS updates.') . ' ' . sprintf(_('You are still eligible to access OS updates that were published on or before %s.'), '{1}'),
'Your {0} license included one year of free updates at the time of purchase. You are now eligible to extend your license and access the latest OS updates.' => sprintf(_('Your %s license included one year of free updates at the time of purchase.'), '{0}') . ' ' . _('You are now eligible to extend your license and access the latest OS updates.'),
'Your free Trial key provides all the functionality of an Unleashed Registration key' => _('Your free Trial key provides all the functionality of an Unleashed Registration key'),
'Your license key is not eligible for Unraid OS {0}' => sprintf(_('Your license key is not eligible for Unraid OS %s'), '{0}'),
'Your Trial has expired' => _('Your Trial has expired'),
'Your Trial key has been extended!' => _('Your Trial key has been extended!'),
];
}
public function getTranslations()
{
return $this->translations ?? [];
}
/**
* @param $urlEncode {bool}
* @return string
*/
public function getTranslationsJson($urlEncode = false)
{
if ($urlEncode) {
return rawurlencode(json_encode($this->getTranslations(), JSON_UNESCAPED_SLASHES, JSON_UNESCAPED_UNICODE));
}
return json_encode($this->getTranslations(), JSON_UNESCAPED_SLASHES, JSON_UNESCAPED_UNICODE);
}
}

View File

@@ -1,91 +0,0 @@
#!/usr/bin/php
<?PHP
/* Copyright 2005-2021, Lime Technology
* Copyright 2012-2021, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*/
function update($url, $payload) {
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
}
$dyn_cfg = '/boot/config/plugins/dynamix/dynamix.cfg';
$mys_cfg = '/boot/config/plugins/dynamix.my.servers/myservers.cfg';
if (file_exists($dyn_cfg) && !file_exists($mys_cfg)) {
$orig = @parse_ini_file($dyn_cfg,true);
$var = @(array)parse_ini_file('/usr/local/emhttp/state/var.ini',true);
$url = "http://localhost:".$var['PORT']."/update.php";
// write [remote] section to myservers.cfg
if(!empty($orig['remote'])) {
$fields_mys_remote = [
'csrf_token' => $var['csrf_token'],
'#file' => $mys_cfg,
'#section' => 'remote'
];
foreach($orig['remote'] as $key => $value) {
$fields_mys_remote[$key] = $value;
}
update($url, http_build_query($fields_mys_remote));
}
/*
// write [wizard] section to myservers.cfg
if(!empty($orig['wizard'])) {
$fields_mys_wizard = [
'csrf_token' => $var['csrf_token'],
'#file' => $mys_cfg,
'#section' => 'wizard'
];
foreach($orig['wizard'] as $key => $value) {
$fields_mys_wizard[$key] = $value;
}
update($url, http_build_query($fields_mys_wizard));
}
*/
// remove [remote] section from dynamix.cfg
if(!empty($orig['remote'])) {
$fields_dyn_remote = [
'csrf_token' => $var['csrf_token'],
'#file' => $dyn_cfg,
'#section' => 'remote',
'#cleanup' => 'true'
];
foreach($orig['remote'] as $key => $value) {
$fields_dyn_remote[$key] = '';
}
update($url, http_build_query($fields_dyn_remote));
}
// remove [wizard] section from dynamix.cfg
if(!empty($orig['wizard'])) {
$fields_dyn_wizard = [
'csrf_token' => $var['csrf_token'],
'#file' => $dyn_cfg,
'#section' => 'wizard',
'#cleanup' => 'true'
];
foreach($orig['wizard'] as $key => $value) {
$fields_dyn_wizard[$key] = '';
}
update($url, http_build_query($fields_dyn_wizard));
}
// remove [remote] and [wizard] section headings from dyn_cfg file
$oldtext = file_get_contents($dyn_cfg);
$newtext = preg_replace ('/\[(remote|wizard)\]\n/', '', $oldtext);
if (strcmp($oldtext, $newtext) !== 0) {
file_put_contents($dyn_cfg, $newtext);
}
}
if (!file_exists($mys_cfg)) touch($mys_cfg);
?>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,14 +1,12 @@
{
".nuxt/nuxt-custom-elements/entries/unraid-components.client.css": {
"file": "_nuxt/unraid-components.client-d0bc5449.css",
"src": ".nuxt/nuxt-custom-elements/entries/unraid-components.client.css"
},
".nuxt/nuxt-custom-elements/entries/unraid-components.client.mjs": {
"css": [
"_nuxt/unraid-components.client-d0bc5449.css"
],
"file": "_nuxt/unraid-components.client-3646d7f7.js",
"file": "_nuxt/unraid-components.client-CQOXNcK4.js",
"name": "unraid-components.client",
"src": ".nuxt/nuxt-custom-elements/entries/unraid-components.client.mjs",
"isEntry": true,
"src": ".nuxt/nuxt-custom-elements/entries/unraid-components.client.mjs"
}
"css": [
"_nuxt/unraid-components-p_3YF86n.css"
]
},
"ts": 1723595088
}

View File

@@ -0,0 +1,153 @@
Menu="About:20"
Title="Downgrade OS"
Icon="icon-update"
Tag="upload"
---
<?php
/* Copyright 2005-2023, Lime Technology
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*/
/**
* @note icon-update is rotated via CSS in myservers1.php
*/
require_once "$docroot/plugins/dynamix.my.servers/include/reboot-details.php";
// Create an instance of the RebootDetails class
$rebootDetails = new RebootDetails();
// Get the current reboot details if there are any
$rebootDetails->setPrevious();
$serverNameEscaped = htmlspecialchars(str_replace(' ', '_', strtolower($var['NAME'])));
?>
<script>
const nchan_diagnostics = new NchanSubscriber('/sub/diagnostics', { subscriber: 'websocket' });
const reportUrl = new URL('https://forums.unraid.net/bug-reports/');
let diagnosticsFile = '';
nchan_diagnostics.on('message', function(data) {
if (data == '_DONE_') {
nchan_diagnostics.stop();
$('.sweet-alert').hide('fast').removeClass('nchan');
swal.close();
$('div.spinner').show('slow');
location = diagnosticsFile;
setTimeout(() => {
cleanupDiagnostics();
reportAfterDiagnosticsDownload();
}, 2000);
} else if (data) {
let box = $('pre#swaltext');
box.html(box.html() + '<br>' + data).scrollTop(box[0].scrollHeight);
}
});
function downloadDiagnostics() {
const tzoffset = (new Date()).getTimezoneOffset() * 60000; // offset in milliseconds
const localISOTime = (new Date(Date.now() - tzoffset));
const year = localISOTime.getFullYear();
const month = String(localISOTime.getMonth() + 1).padStart(2, '0');
const day = String(localISOTime.getDate()).padStart(2, '0');
const hours = String(localISOTime.getHours()).padStart(2, '0');
const minutes = String(localISOTime.getMinutes()).padStart(2, '0');
const dateOutput = `${year}${month}${day}_${hours}${minutes}`;
const zipName = '<?=$serverNameEscaped?>-diagnostics-' + dateOutput + '.zip';
nchan_diagnostics.start();
$.post(
'/webGui/include/Download.php',
{
cmd: 'diag',
file: zipName,
anonymize: '',
},
function(zip) {
if (!zip) {
return nchan_diagnostics.stop();
}
diagnosticsFile = zip;
swal({
title: "_(Downloading)_...",
text: "/boot/logs" + zip + "<hr><pre id='swaltext'></pre>",
html: true,
animation: 'none',
showConfirmButton: false,
});
$('.sweet-alert').addClass('nchan');
$('button.confirm').prop('disabled', true);
},
);
}
function reportAfterDiagnosticsDownload() {
$('div.spinner').hide('fast');
swal({
title: "_(Open a bug report)_",
text: "_(Create a bug report on our forums with a description of the issue along with your diagsnotics)_",
html: true,
type: 'warning',
showCancelButton: true,
confirmButtonText: "<?= _('Create Bug Report') ?>",
cancelButtonText: "<?= _('Close') ?>",
}, function(confirm) {
if (!confirm) {
return false;
}
window.open(reportUrl, '_blank');
});
}
function cleanupDiagnostics() {
if (document.hasFocus()) {
return $.post('/webGui/include/Download.php', { cmd: 'delete', file: diagnosticsFile });
}
setTimeout(cleanupDiagnostics, 2000);
}
function startDowngrade() {
$('div.spinner').show('slow');
$.get(
'/plugins/dynamix.plugin.manager/include/Downgrade.php',
{
version: '<?= $rebootDetails->previousVersion ?>',
},
function() {
refresh();
}
);
}
function confirmDowngrade() {
swal({
title: "_(Confirm Downgrade)_",
text: "<?= $rebootDetails->previousVersion ?><br>_(A reboot will be required)_",
html: true,
type: 'warning',
showCancelButton: true,
confirmButtonText: "<?= _('Confirm') ?>",
cancelButtonText: "<?= _('Cancel') ?>",
}, function(confirm) {
if (!confirm) {
return false;
}
startDowngrade();
});
}
</script>
<unraid-i18n-host>
<unraid-downgrade-os
reboot-version="<?= $rebootDetails->rebootVersion ?>"
restore-version="<?= $rebootDetails->previousVersion ?>"
restore-release-date="<?= $rebootDetails->previousReleaseDate ?>"></unraid-downgrade-os>
</unraid-i18n-host>

View File

@@ -13,14 +13,6 @@ Link='nav-user'
* all copies or substantial portions of the Software.
*/
?>
<style>
/* Additional CSS for when user supplies element */
.ca_element_notice{padding-right:20px;width:100%;height:40px;line-height:40px;color:#e68a00;background:#feefb3;border-bottom:#e68a00 1px solid;text-align:center;font-size:1.4rem;z-index:900;}
a.ca_PluginUpdateInstall{cursor:pointer;}
span.ca_PluginUpdateDismiss{float:right;margin-right:20px;cursor:pointer;}
span.bannerInfo {cursor:pointer;text-decoration:none;margin:0 12px 0 6px;}
span.bannerInfo::before {content:"\f05a";font-family:fontAwesome;color:#e68a00;}
</style>
<script>
const ca_args = {};

View File

@@ -3,8 +3,8 @@ Title="Install Plugin"
Tag="download"
---
<?PHP
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,

View File

@@ -6,8 +6,8 @@ Tabs="true"
Code="e944"
---
<?PHP
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -19,16 +19,12 @@ Code="e944"
?>
<?
// Remove stale /tmp/plugin/*.plg entries (check that script 'plugin' is not running to avoid clashes)
if (!exec("pgrep -f $docroot/plugins/dynamix.plugin.manager/scripts/plugin")) {
if (!exec('pgrep --ns $$ -f '."$docroot/plugins/dynamix.plugin.manager/scripts/plugin")) {
foreach (glob("/tmp/plugins/*.{plg,txt}", GLOB_NOSORT+GLOB_BRACE) as $entry) if (!file_exists("/var/log/plugins/".basename($entry))) @unlink($entry);
}
$check = $notify['version'] ? 0 : 1;
?>
<link type="text/css" rel="stylesheet" href="<?autov('/webGui/styles/jquery.filetree.css')?>">
<style>
#plugin_tree{width:33%;height:200px;overflow-y:scroll}
table tbody td{line-height:normal}
</style>
<script src="<?autov('/webGui/javascript/jquery.filetree.js')?>" charset="utf-8"></script>
<script>
@@ -155,7 +151,7 @@ $(function() {
$('.tabs').append("<span id='removeall' class='status vhshift' style='display:none;margin-left:12px'><input type='button' value=\"_(Remove Selected Plugins)_\" onclick='removeList()'></span>");
});
</script>
<table class='tablesorter plugins shift' id='plugin_table'>
<table class='unraid tablesorter plugins shift' id='plugin_table'>
<thead><tr><th></th><th>_(Plugin)_</th><th>_(Author)_</th><th>_(Version)_</th><th>_(Status)_</th><th>_(Uninstall)_</th></tr></thead>
<tbody id="plugin_list"><tr><td colspan="6"></td><tr></tbody>
</table>

View File

@@ -4,8 +4,8 @@ Tag="puzzle-piece"
Cond="glob('/boot/config/plugins-error/*.plg')"
---
<?PHP
/* Copyright 2005-2021, Lime Technology
* Copyright 2012-2021, Bergware International.
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,

View File

@@ -4,8 +4,8 @@ Tag="puzzle-piece"
Cond="glob('/boot/config/plugins-stale/*.plg')"
---
<?PHP
/* Copyright 2005-2021, Lime Technology
* Copyright 2012-2021, Bergware International.
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,

View File

@@ -1,11 +1,10 @@
Menu="About"
Menu="About:10"
Title="Update OS"
Icon="icon-update"
Tag="upload"
---
<?PHP
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
<?php
/* Copyright 2005-2023, Lime Technology
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -14,186 +13,38 @@ Tag="upload"
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*/
require_once "$docroot/plugins/dynamix.my.servers/include/reboot-details.php";
$rebootDetails = new RebootDetails();
?>
<?
$version = $branch = $date = _('unknown');
$bzroot = file_exists('/boot/previous/bzroot');
$check = $notify['unraidos'] ? 0 : 1;
$changes = '/boot/previous/changes.txt';
$zip = htmlspecialchars(str_replace(' ','_',strtolower($var['NAME'])));
if (file_exists($changes)) {
exec("head -n4 $changes",$rows);
foreach ($rows as $row) {
$i = stripos($row,'version');
if ($i !== false) {
[$version,$date] = explode(' ',trim(substr($row,$i+7)));
break;
}
}
$branch = strpos($version,'rc')!==false ? _('Next') : (strpos($version,'beta')!==false ? _('Beta') : _('Stable'));
}
$reboot = preg_match("/^\*\*(REBOOT REQUIRED|DOWNGRADE)/",@file_get_contents("$docroot/plugins/unRAIDServer/README.md",false,null,0,20));
?>
<style>
ul,li{margin:0;padding-top:0;padding-bottom:0}
pre.pre{margin:30px 0}
pre>p{margin:0;padding:0}
pre#swaltext{height:600px!important}
@media (max-width:960px){pre#swaltext{height:400px!important}}
@media (max-width:960px){.sweet-alert.nchan{height:600px;width:900px;margin-left:-470px}}
@media (max-height:768px){pre#swaltext{height:400px!important}}
@media (max-height:768px){.sweet-alert.nchan{height:600px;width:900px;margin-left:-470px}}
input[value="_(Install)_"],input[value="_(Update)_"],input[value="_(Restore)_"]{margin:0}
<?if ($themes1):?>
span.vhshift{margin-top:13px!important}
<?endif;?>
</style>
<script>
var diagnosticsFile = "";
var nchan_diagnostics = new NchanSubscriber('/sub/diagnostics',{subscriber:'websocket'});
var original = null;
const args = {};
nchan_diagnostics.on('message', function(data) {
if (data == '_DONE_') {
nchan_diagnostics.stop();
$('.sweet-alert').hide('fast').removeClass('nchan');
swal.close();
location = diagnosticsFile;
setTimeout(cleanUp,4000);
} else if (data) {
let box = $('pre#swaltext');
box.html(box.html()+'<br>'+data).scrollTop(box[0].scrollHeight);
}
});
function openInstall(cmd,title,plg) {
if (cmd == null) {
openPlugin(args.cmd,args.title,args.plg);
return;
}
args.cmd = cmd;
args.title = title;
args.plg = plg;
$.get('/plugins/dynamix.plugin.manager/include/ShowPlugins.php',{cmd:'alert'},function(data) {
if (data==0) {
// no alert message - proceed with update
setTimeout(openInstall);
} else {
// show alert message and ask for confirmation
openAlert("showchanges <?=$alerts?>","_(Alert Message)_",'openInstall');
}
});
}
function update_table(branch) {
if (original) {
if (branch != original) branch = '';
} else {
if (branch) original = branch;
}
$.get('/plugins/dynamix.plugin.manager/include/ShowPlugins.php',{system:true,branch:branch},function(data) {
data = data.split('\0');
updateInfo(data[0]);
$('#os_table').trigger('update');
});
}
function downgrade() {
swal({title:"_(Diagnostics)_",text:"_(Please provide diagnostics when experiencing problems)_<br>_(Post these in the forums)_",html:true,type:'warning',showCancelButton:true,confirmButtonText:"<?=_('Diagnostics')?>",cancelButtonText:"<?=_('Restore')?>"},function(diag){
if (diag) {
// get diagnostics and then downgrade
setTimeout(function(){diagnostics(zipfile());},250);
} else {
// downgrade immediately
$.get('/plugins/dynamix.plugin.manager/include/Downgrade.php',{version:'<?=$version?>'},function(){refresh();});
}
});
}
function updateInfo(data) {
var updates = data.split('\n');
for (var n=0,update; update=updates[n]; n++) {
var fields = update.split('\r');
for (var i=0,field; field=fields[i]; i++) {
var row = field.split('::');
$('#'+row[0]).attr('data',row[1]).html(row[2]);
}
}
}
function initlist() {
$.get('/plugins/dynamix.plugin.manager/include/ShowPlugins.php',{init:true,system:true,check:<?=$check?>},function(data) {
$('#os_list').html(data);
<?if ($bzroot):?>
$('#previous').show();
<?endif;?>
loadlist();
});
}
function warning (data) {
$('#change_branch').prop('disabled',true);
return data.replace('green','orange').replace("<?=_('up-to-date')?>","<?=_('Reboot')?>").replace('checking','warning');
}
function loadlist(id,check) {
$.get('/plugins/dynamix.plugin.manager/include/ShowPlugins.php',{system:true,audit:id,check:check||<?=$check?>},function(data) {
var list = $('#os_list');
if (id) {
var cmd = id.split(':');
var tr = 'tr#'+cmd[0].replace(/[\. _]/g,'');
switch (cmd[1]) {
case 'update' : data = warning(data);
case 'return' : updateInfo(data); break;
case 'install': list.find(tr).remove(); list.append(warning(data)); break;
}
} else {
<?if (!$reboot):?>
updateInfo(data);
<?else:?>
updateInfo(warning(data));
<?endif;?>
}
$('#os_table').trigger('update');
$('#checkos').prop('disabled',false);
<?if ($reboot):?>
$('#change_branch').prop('disabled',true);
<?endif;?>
});
}
function cleanUp() {
function cleanUpFlashBackup(zip) {
if (document.hasFocus()) {
$.post('/webGui/include/Download.php',{cmd:'delete',file:diagnosticsFile},function(){
$.get('/plugins/dynamix.plugin.manager/include/Downgrade.php',{version:'<?=$version?>'},function(){refresh();});
});
$('input[value="_(Creating Flash backup)_..."]').val("_(Flash backup)_").prop('disabled',false);
$('div.spinner').hide('slow');
$('#pleaseWait').hide('slow');
$.post('/webGui/include/Download.php',{cmd:'unlink',file:zip});
} else {
setTimeout(cleanUp,2000);
setTimeout(function(){cleanUpFlashBackup(zip);},2000);
}
}
function zipfile(){
var tzoffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
var localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0,-1);
return '<?=$zip?>-diagnostics-'+localISOTime.substr(0,16).replace(/[-:]/g,'').replace('T','-')+'.zip';
}
function diagnostics(file) {
nchan_diagnostics.start();
$.post('/webGui/include/Download.php',{cmd:'diag',file:file,anonymize:''},function(zip) {
function flashBackup() {
$('input[value="_(Flash backup)_"]').val('_(Creating Flash backup)_...').prop('disabled',true);
$('div.spinner').show('slow');
$('#pleaseWait').show('slow');
$.post('/webGui/include/Download.php',{cmd:'backup'},function(zip) {
if (zip) {
diagnosticsFile = zip;
swal({title:"_(Downloading)_...",text:"/boot/logs"+zip+"<hr><pre id='swaltext'></pre>",html:true,animation:'none',showConfirmButton:false});
$('.sweet-alert').addClass('nchan');
$('button.confirm').prop('disabled',true);
location = '/'+zip;
setTimeout(function(){cleanUpFlashBackup(zip);},6000);
} else {
nchan_diagnostics.stop();
$('input[value="_(Creating Flash backup)_..."]').val("_(Flash backup)_");
$('div.spinner').hide('slow');
$('#pleaseWait').hide('slow');
swal({title:"_(Creation error)_",text:"_(Insufficient free disk space available)_",type:'error',html:true,confirmButtonText:"_(Ok)_"});
}
});
}
$(function() {
initlist();
$('.tabs').append("<span class='status vhshift'><input type='button' id='checkos' value=\"_(Check for Updates)_\" onclick='openPlugin(\"plugin checkos\",\"_(System Update Check)_\",\":return\")' disabled></span>");
});
</script>
<table class='tablesorter plugins shift' id='os_table'>
<thead><tr><th></th><th>_(Component)_</th><th>_(Author)_</th><th>_(Version)_</th><th>_(Status)_</th><th>_(Branch)_</th></tr></thead>
<tbody id="os_list"><tr><td colspan="6"></td></tr></tbody>
<?if ($bzroot):?>
<tbody id="previous" style="display:none"><tr><td><img src="/plugins/unRAIDServer/images/unRAIDServer.png" class="list"></td><td><b>_(Unraid OS)_ (_(previous)_)</b></td><td>LimeTech</td><td><?=$version?></td><td><input type="button" value="_(Restore)_" onclick="downgrade()"></td><td><?=$branch?></td></tbody>
<?endif;?>
</table>
<unraid-i18n-host>
<unraid-update-os reboot-version="<?= $rebootDetails->rebootVersion ?>"></unraid-update-os>
</unraid-i18n-host>

View File

@@ -11,8 +11,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Wrappers.php";
require_once "$docroot/webGui/include/Secure.php";

View File

@@ -11,6 +11,9 @@
*/
?>
<?
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Wrappers.php";
// Invoke the plugin command with indicated method
function plugin($method, $arg = '') {
global $docroot;
@@ -27,7 +30,7 @@ function language($method, $arg = '') {
function check_plugin($arg, &$ncsi) {
// Get network connection status indicator (NCSI)
if ($ncsi===null) $ncsi = exec("wget --spider --no-check-certificate -nv -T10 -t1 https://www.msftncsi.com/ncsi.txt 2>&1|grep -o 'OK'");
if ($ncsi===null) $ncsi = check_network_connectivity();
return $ncsi ? plugin('check',$arg) : false;
}

View File

@@ -11,8 +11,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Wrappers.php";
extract(parse_plugin_cfg('dynamix',true));

View File

@@ -11,8 +11,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Helpers.php";
require_once "$docroot/plugins/dynamix.plugin.manager/include/PluginHelpers.php";

View File

@@ -0,0 +1,261 @@
<?php
/* Copyright 2005-2024, Lime Technology
* Copyright 2012-2024, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*/
/**
* Abstracting this code into a separate file allows us to use it in multiple places without duplicating code.
* 1. unraidcheck script can call this
* require_once "$docroot/plugins/dynamix.plugin.manager/include/UnraidCheck.php";
* $unraidOsCheck = new UnraidOsCheck();
* $unraidOsCheck->checkForUpdate();
*
* 2. Unraid webgui web components can GET this file with action params to get updates, ignore updates, etc.
* - EX: Unraid webgui web components can check for updates via a GET request and receive a response with the json file directly
* - this is useful for the UPC to check for updates and display a model based on the value
* - `/plugins/dynamix.plugin.manager/scripts/unraidcheck.php?json=true`
* - note the json=true query param to receive a json response
*
* @param action {'check'|'removeAllIgnored'|'removeIgnoredVersion'|'ignoreVersion'} - the action to perform
* @param version {string} - the version to ignore or remove
* @param json {string} - if set to true, will return the json response from the external request
* @param altUrl {URL} - if set, will use this url instead of the default
*/
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Wrappers.php";
require_once "$docroot/plugins/dynamix.plugin.manager/include/PluginHelpers.php";
class UnraidOsCheck
{
private const BASE_RELEASES_URL = 'https://releases.unraid.net/os';
private const JSON_FILE_IGNORED = '/tmp/unraidcheck/ignored.json';
private const JSON_FILE_IGNORED_KEY = 'updateOsIgnoredReleases';
private const JSON_FILE_RESULT = '/tmp/unraidcheck/result.json';
private const PLG_PATH = '/usr/local/emhttp/plugins/unRAIDServer/unRAIDServer.plg';
public function __construct()
{
$isGetRequest = !empty($_SERVER) && isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'GET';
$getHasAction = $_GET !== null && !empty($_GET) && isset($_GET['action']);
if ($isGetRequest && $getHasAction) {
$this->handleGetRequestWithActions();
}
}
private function handleGetRequestWithActions()
{
switch ($_GET['action']) {
case 'check':
$this->checkForUpdate();
break;
case 'removeAllIgnored':
$this->removeAllIgnored();
break;
case 'removeIgnoredVersion':
if (isset($_GET['version'])) {
$this->removeIgnoredVersion($_GET['version']);
}
break;
case 'ignoreVersion':
if (isset($_GET['version'])) {
$this->ignoreVersion($_GET['version']);
}
break;
default:
$this->respondWithError(400, "Unhandled action");
break;
}
}
public function getUnraidOSCheckResult()
{
if (file_exists(self::JSON_FILE_RESULT)) {
return $this->readJsonFile(self::JSON_FILE_RESULT);
}
}
public function getIgnoredReleases()
{
if (!file_exists(self::JSON_FILE_IGNORED)) {
return [];
}
$ignoredData = $this->readJsonFile(self::JSON_FILE_IGNORED);
if (is_array($ignoredData) && array_key_exists(self::JSON_FILE_IGNORED_KEY, $ignoredData)) {
return $ignoredData[self::JSON_FILE_IGNORED_KEY];
}
return [];
}
/** @todo clean up this method to be more extensible */
public function checkForUpdate()
{
// Multi-language support
if (!function_exists('_')) {
function _($text) {return $text;}
}
// this command will set the $notify array
extract(parse_plugin_cfg('dynamix', true));
$var = (array)@parse_ini_file('/var/local/emhttp/var.ini');
$params = [];
$params['branch'] = plugin('category', self::PLG_PATH, 'stable');
$params['current_version'] = plugin('version', self::PLG_PATH) ?: _var($var,'version');
if (_var($var,'regExp')) $params['update_exp'] = date('Y-m-d', _var($var,'regExp')*1);
$defaultUrl = self::BASE_RELEASES_URL;
// pass a param of altUrl to use the provided url instead of the default
$parsedAltUrl = (array_key_exists('altUrl',$_GET) && $_GET['altUrl']) ? $_GET['altUrl'] : null;
// if $parsedAltUrl pass to params
if ($parsedAltUrl) $params['altUrl'] = $parsedAltUrl;
$urlbase = $parsedAltUrl ?? $defaultUrl;
$url = $urlbase.'?'.http_build_query($params);
$curlinfo = [];
$response = http_get_contents($url,[],$curlinfo);
if (array_key_exists('error', $curlinfo)) {
$response = json_encode(array('error' => $curlinfo['error']), JSON_PRETTY_PRINT);
}
$responseMutated = json_decode($response, true);
if (!$responseMutated) {
$response = json_encode(array('error' => 'Invalid response from '.$urlbase), JSON_PRETTY_PRINT);
$responseMutated = json_decode($response, true);
}
// add params that were used for debugging
$responseMutated['params'] = $params;
// store locally for UPC to access
$this->writeJsonFile(self::JSON_FILE_RESULT, $responseMutated);
// if we have a query param of json=true then just output the json
if (array_key_exists('json',$_GET) && $_GET['json']) {
header('Content-Type: application/json');
echo $response;
exit(0);
}
// send notification if a newer version is available and not ignored
$isNewerVersion = array_key_exists('isNewer',$responseMutated) ? $responseMutated['isNewer'] : false;
$isReleaseIgnored = array_key_exists('version',$responseMutated) ? in_array($responseMutated['version'], $this->getIgnoredReleases()) : false;
if ($responseMutated && $isNewerVersion && !$isReleaseIgnored) {
$output = _var($notify,'plugin');
$server = strtoupper(_var($var,'NAME','server'));
$newver = (array_key_exists('version',$responseMutated) && $responseMutated['version']) ? $responseMutated['version'] : 'unknown';
$script = '/usr/local/emhttp/webGui/scripts/notify';
$event = "System - Unraid [$newver]";
$subject = "Notice [$server] - Version update $newver";
$description = "A new version of Unraid is available";
exec("$script -e ".escapeshellarg($event)." -s ".escapeshellarg($subject)." -d ".escapeshellarg($description)." -i ".escapeshellarg("normal $output")." -l '/Tools/Update' -x");
}
exit(0);
}
private function removeAllIgnored()
{
if (file_exists(self::JSON_FILE_IGNORED)) {
$this->deleteJsonFile(self::JSON_FILE_IGNORED);
$this->respondWithSuccess([]);
}
// fail silently if file doesn't exist
}
private function removeIgnoredVersion($removeVersion)
{
if ($this->isValidSemVerFormat($removeVersion)) {
if (file_exists(self::JSON_FILE_IGNORED)) {
$existingData = $this->readJsonFile(self::JSON_FILE_IGNORED);
if (isset($existingData[self::JSON_FILE_IGNORED_KEY])) {
$existingData[self::JSON_FILE_IGNORED_KEY] = array_diff($existingData[self::JSON_FILE_IGNORED_KEY], [$removeVersion]);
$this->writeJsonFile(self::JSON_FILE_IGNORED, $existingData);
$this->respondWithSuccess($existingData);
} else {
$this->respondWithError(400, "No versions to remove in the JSON file");
}
} else {
$this->respondWithError(400, "No JSON file found");
}
} else {
$this->respondWithError(400, "Invalid removeVersion format");
}
}
private function ignoreVersion($version)
{
if ($this->isValidSemVerFormat($version)) {
$newData = [$this::JSON_FILE_IGNORED_KEY => [$version]];
$existingData = file_exists(self::JSON_FILE_IGNORED) ? $this->readJsonFile(self::JSON_FILE_IGNORED) : [];
if (isset($existingData[self::JSON_FILE_IGNORED_KEY])) {
$existingData[self::JSON_FILE_IGNORED_KEY][] = $version;
} else {
$existingData[self::JSON_FILE_IGNORED_KEY] = [$version];
}
$this->writeJsonFile(self::JSON_FILE_IGNORED, $existingData);
$this->respondWithSuccess($existingData);
} else {
$this->respondWithError(400, "Invalid version format");
}
}
private function isValidSemVerFormat($version)
{
return preg_match('/^\d+\.\d+(\.\d+)?(-.+)?$/', $version);
}
private function readJsonFile($file)
{
return @json_decode(@file_get_contents($file), true) ?? [];
}
private function writeJsonFile($file, $data)
{
if (!is_dir(dirname($file))) { // prevents errors when directory doesn't exist
mkdir(dirname($file));
}
file_put_contents($file, json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
}
private function deleteJsonFile($file)
{
unlink($file);
}
private function respondWithError($statusCode, $message)
{
http_response_code($statusCode);
echo $message;
}
private function respondWithSuccess($data)
{
http_response_code(200);
header('Content-Type: application/json');
echo json_encode($data, JSON_PRETTY_PRINT);
}
}
// Instantiate and handle the request for GET requests with actions vars are duplicated here for multi-use of this file
$isGetRequest = !empty($_SERVER) && isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'GET';
$getHasAction = $_GET !== null && !empty($_GET) && isset($_GET['action']);
if ($isGetRequest && $getHasAction) {
new UnraidOsCheck();
}

View File

@@ -0,0 +1,60 @@
<?php
class UnraidUpdateCancel
{
private $PLG_FILENAME;
private $PLG_BOOT;
private $PLG_VAR;
private $USR_LOCAL_PLUGIN_UNRAID_PATH;
public function __construct() {
$this->PLG_FILENAME = "unRAIDServer.plg";
$this->PLG_BOOT = "/boot/config/plugins/{$this->PLG_FILENAME}";
$this->PLG_VAR = "/var/log/plugins/{$this->PLG_FILENAME}";
$this->USR_LOCAL_PLUGIN_UNRAID_PATH = "/usr/local/emhttp/plugins/unRAIDServer";
// Handle the cancellation
$revertResult = $this->revertFiles();
// Return JSON response for front-end client
$statusCode = $revertResult['success'] ? 200 : 500;
http_response_code($statusCode);
header('Content-Type: application/json');
echo json_encode($revertResult);
}
public function revertFiles() {
try {
$command = '/sbin/mount | grep -q "/boot/previous/bz"';
exec($command, $output, $returnCode);
if ($returnCode !== 0) {
return ['success' => true]; // Nothing to revert
}
// Clear the results of previous unraidcheck run
@unlink("/tmp/unraidcheck/result.json");
// Revert changes made by unRAIDServer.plg
shell_exec("mv -f /boot/previous/* /boot");
unlink($this->PLG_BOOT);
unlink($this->PLG_VAR);
symlink("{$this->USR_LOCAL_PLUGIN_UNRAID_PATH}/{$this->PLG_FILENAME}", $this->PLG_VAR);
// Restore README.md by echoing the content into the file
$readmeFile = "{$this->USR_LOCAL_PLUGIN_UNRAID_PATH}/README.md";
$readmeContent = "**Unraid OS**\n\n";
$readmeContent .= "Unraid OS by [Lime Technology, Inc.](https://lime-technology.com).\n";
file_put_contents($readmeFile, $readmeContent);
return ['success' => true]; // Upgrade handled successfully
} catch (\Throwable $th) {
return [
'success' => false,
'message' => $th->getMessage(),
];
}
}
}
// Self instantiate the class and handle the cancellation
new UnraidUpdateCancel();

View File

@@ -12,7 +12,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: "/usr/local/emhttp";
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/plugins/dynamix.plugin.manager/include/PluginHelpers.php";
function readJson($file) {
@@ -24,7 +24,7 @@ function newurl($url) {
return str_replace($oldURL,$newURL,$url);
}
function searchLink(&$db,$url) {
if ($url) for ($i = 0; $i < count($db); $i++) if ($db[$i]['PluginURL']==$url) return $db[$i]['Support'];
if ($url) for ($i = 0; $i < count($db); $i++) if ( ($db[$i]['PluginURL']??null)==$url) return $db[$i]['Support']??null;
}
$type = $argv[1]??''; // plugin or language

View File

@@ -12,7 +12,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: "/usr/local/emhttp";
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/plugins/dynamix.plugin.manager/include/PluginHelpers.php";
$type = $argv[1]??''; // plugin or language

View File

@@ -10,12 +10,13 @@
* all copies or substantial portions of the Software.
*/
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/plugins/dynamix.plugin.manager/include/PluginHelpers.php";
require_once "$docroot/plugins/dynamix/include/Secure.php";
//add translations
$_SERVER['REQUEST_URI'] = "plugins";
require_once "$docroot/plugins/dynamix/include/Translations.php";
require_once "$docroot/plugins/dynamix.plugin.manager/include/PluginHelpers.php";
require_once "$docroot/plugins/dynamix/include/Secure.php";
function download_url($url, $path = "") {
$ch = curl_init();
@@ -39,21 +40,17 @@ switch ($_POST['action']) {
case 'checkPlugin':
$options = $_POST['options'] ?? '';
$plugin = $options['plugin'] ?? '';
$name = unbundle($options['name'] ?? $plugin);
$file = "/boot/config/plugins/$plugin";
$file = realpath($file)==$file ? $file : "";
if ( ! $plugin || ! file_exists($file) ) {
echo json_encode(["updateAvailable"=>false]);
break;
}
exec("mkdir -p /tmp/plugins");
@unlink("/tmp/plugins/$plugin");
$url = plugin("pluginURL","/boot/config/plugins/$plugin");
download_url($url,"/tmp/plugins/$plugin");
$changes = plugin("changes","/tmp/plugins/$plugin");
$alerts = plugin("alert","/tmp/plugins/$plugin");
$version = plugin("version","/tmp/plugins/$plugin");
@@ -69,7 +66,6 @@ switch ($_POST['action']) {
} else {
@unlink('/tmp/plugins/my_alerts.txt');
}
$update = false;
if ( strcmp($version,$installedVersion) > 0 ) {
$unraid = parse_ini_file("/etc/unraid-version");
@@ -77,17 +73,14 @@ switch ($_POST['action']) {
}
$updateMessage = sprintf(_("%s: An update is available."),$name);
$linkMessage = sprintf(_("Click here to install version %s"),$version);
echo json_encode(["updateAvailable"=>$update, "version"=>$version, "min"=>$min, "alert"=>$alerts, "changes"=>$changes, "installedVersion"=>$installedVersion, "updateMessage"=>$updateMessage, "linkMessage"=>$linkMessage]);
break;
case 'addRebootNotice':
$message = htmlspecialchars(trim($_POST['message']));
if ( ! $message ) break;
$existing = @file("/tmp/reboot_notifications",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ?: [];
if (!$message) break;
$existing = (array)@file("/tmp/reboot_notifications",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$existing[] = $message;
file_put_contents("/tmp/reboot_notifications",implode("\n",array_unique($existing)));
break;

View File

@@ -12,8 +12,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Wrappers.php";
extract(parse_plugin_cfg('dynamix',true));
@@ -45,7 +44,7 @@ function write(...$messages){
}
write(_("Checking connectivity")." ...\n");
if (exec("wget --spider --no-check-certificate -nv -T10 -t1 https://www.msftncsi.com/ncsi.txt 2>&1|grep -om1 'OK'")) {
if (check_network_connectivity()) {
$check = popen('plugin checkall','r');
while (!feof($check)) write(fgets($check));
pclose($check);

View File

@@ -6,6 +6,10 @@
// Program updates made by Bergware International (April 2020)
// Program updates made by Bergware International (June 2022)
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Wrappers.php";
$logger = 'language-manager';
$usage = <<<EOF
Process language files.
@@ -148,12 +152,6 @@ function download($url, $name, &$error) {
}
}
// Deal with logging message.
//
function logger($message) {
exec("logger -t 'language-manager' -- \"$message\"");
}
// Interpret a language file
// Returns TRUE if success, else FALSE and fills in error string.
//
@@ -314,7 +312,7 @@ if ($method == 'install') {
copy($xml_file, $lang_file);
symlink($lang_file, $link_file);
write("language: $lang language pack installed\n");
logger("$lang language pack installed");
my_logger("$lang language pack installed", $logger);
// run hook scripts for post processing
post_hooks();
done(0);
@@ -396,7 +394,7 @@ if ($method == 'update') {
copy($xml_file, $lang_file);
symlink($lang_file, $link_file);
write("language: $lang language pack updated\n");
logger("$lang language pack updated");
my_logger("$lang language pack updated", $logger);
// run hook scripts for post processing
post_hooks();
done(0);
@@ -423,7 +421,7 @@ if ($method == 'remove') {
done(1);
}
write("language: $lang language pack removed\n");
logger("$lang language pack removed");
my_logger("$lang language pack removed", $logger);
// run hook scripts for post processing
post_hooks();
done(0);

View File

@@ -1,7 +1,7 @@
#!/usr/bin/php -q
<?PHP
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
/* Copyright 2005-2024, Lime Technology
* Copyright 2012-2024, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -12,10 +12,10 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Wrappers.php";
require_once "$docroot/plugins/dynamix.plugin.manager/include/PluginHelpers.php";
// this command will set the $notify array
extract(parse_plugin_cfg('dynamix', true));
// Multi-language support
@@ -23,7 +23,7 @@ $_SERVER['REQUEST_URI'] = "scripts";
$login_locale = _var($display,'locale');
require_once "$docroot/webGui/include/Translations.php";
$var = @parse_ini_file('/var/local/emhttp/var.ini') ?: [];
$var = (array)@parse_ini_file('/var/local/emhttp/var.ini');
function apos($text) {
// So that "&apos;" doesn't show up in email

View File

@@ -1,11 +1,15 @@
#!/usr/bin/php -q
<?PHP
// Copyright 2005-2022, Lime Technology
// Copyright 2005-2023, Lime Technology
// License: GPLv2 only
//
// Program updates made by Bergware International (April 2020)
// Program updates made by Bergware International (June 2022)
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Wrappers.php";
$logger = 'plugin-manager';
$usage = <<<EOF
Process plugin files.
@@ -154,7 +158,7 @@ function error_desc($code) {
case 2: return 'Parse error';
case 3: return 'File I/O error';
case 4: return 'Network failure';
case 5: return 'SSL verification failure';
case 5: return 'SSL verification failure - Check the date and time of your server in Settings - Date And Time';
case 6: return 'Username/password authentication failure';
case 7: return 'Protocol errors';
case 8: return 'Invalid URL / Server error response';
@@ -275,18 +279,12 @@ function filter_url($url) {
if (strpos($url, '.cdn') !== false) {
$new_url = str_replace('"', '', $url);
$new_url = str_replace('.cdn', '', $new_url);
} else {
} else {
$new_url = "";
}
return($new_url);
}
// Deal with logging message.
//
function logger($message) {
exec("logger -t 'plugin-manager' -- \"$message\"");
}
// Interpret a plugin file
// Returns TRUE if success, else FALSE and fills in error string.
//
@@ -295,7 +293,7 @@ function logger($message) {
// is processed for any of those methods.
//
function plugin($method, $plugin_file, &$error) {
global $unraid;
global $unraid, $logger;
$methods = ['install', 'remove'];
// parse plugin definition XML file
@@ -357,7 +355,7 @@ function plugin($method, $plugin_file, &$error) {
if (isset($file->attributes()->Method)) {
if (!in_array($method, explode(" ", $file->attributes()->Method))) continue;
} elseif ($method != 'install') continue;
$name = $file->attributes()->Name;
$name = $file->attributes()->Name ?: '';
// bergware - check Unraid version dependency (if present)
$min = $file->attributes()->Min;
if ($min && version_compare($unraid['version'],$min,'<')) {
@@ -382,12 +380,12 @@ function plugin($method, $plugin_file, &$error) {
// If file already exists, check the SHA256/MD5 (if supplied)
if (file_exists($name)) {
if ($file->SHA256) {
logger("checking: $name - SHA256");
my_logger("checking: $name - SHA256", $logger);
if (hash_file('sha256', $name) != $file->SHA256) {
unlink($name);
}
} elseif ($file->MD5) {
logger("checking: $name - MD5");
my_logger("checking: $name - MD5", $logger);
if (md5_file($name) != $file->MD5) {
unlink($name);
}
@@ -396,12 +394,12 @@ function plugin($method, $plugin_file, &$error) {
// If file already exists, do not overwrite
//
if (file_exists($name)) {
logger("skipping: $name already exists");
my_logger("skipping: $name already exists", $logger);
} elseif ($file->LOCAL) {
// Create the file
//
// for local file, just copy it
logger("creating: $name - copying LOCAL file $file->LOCAL");
my_logger("creating: $name - copying LOCAL file $file->LOCAL", $logger);
if (!copy($file->LOCAL, $name)) {
$error = "unable to copy LOCAL file: $name";
@unlink($name);
@@ -409,10 +407,10 @@ function plugin($method, $plugin_file, &$error) {
}
} elseif ($file->INLINE) {
// for inline file, create with inline contents
logger("creating: $name - from INLINE content");
my_logger("creating: $name - from INLINE content", $logger);
$contents = trim($file->INLINE).PHP_EOL;
if ($file->attributes()->Type == 'base64') {
logger("decoding: $name as base64");
my_logger("decoding: $name as base64", $logger);
$contents = base64_decode($contents);
if ($contents === false) {
$error = "unable to decode inline base64: $name";
@@ -426,20 +424,20 @@ function plugin($method, $plugin_file, &$error) {
}
} elseif ($file->URL) {
// for download file, download and maybe verify the file MD5
logger("creating: $name - downloading from URL $file->URL");
my_logger("creating: $name - downloading from URL $file->URL", $logger);
if ( (download($file->URL, $name, $error) === false) && (download(filter_url($file->URL), $name, $error) === false) ) {
@unlink($name);
return false;
}
if ($file->SHA256) {
logger("checking: $name - SHA256");
my_logger("checking: $name - SHA256", $logger);
if (hash_file('sha256', $name) != $file->SHA256) {
$error = "bad file SHA256: $name";
unlink($name);
return false;
}
} elseif ($file->MD5) {
logger("checking: $name - MD5");
my_logger("checking: $name - MD5", $logger);
if (md5_file($name) != $file->MD5) {
$error = "bad file MD5: $name";
unlink($name);
@@ -452,7 +450,7 @@ function plugin($method, $plugin_file, &$error) {
if ($file->attributes()->Mode) {
// if file has 'Mode' attribute, apply it
$mode = $file->attributes()->Mode;
logger("setting: $name - mode to $mode");
my_logger("setting: $name - mode to $mode", $logger);
if (!chmod($name, octdec($mode))) {
$error = "chmod failure: $name";
return false;
@@ -464,13 +462,13 @@ function plugin($method, $plugin_file, &$error) {
if ($file->attributes()->Run) {
$command = $file->attributes()->Run;
if ($name) {
logger("running: $command $name");
my_logger("running: $command $name", $logger);
$retval = run("$command $name");
} elseif ($file->LOCAL) {
logger("running: $command $file->LOCAL");
my_logger("running: $command $file->LOCAL", $logger);
$retval = run("$command $file->LOCAL");
} elseif ($file->INLINE) {
logger("running: 'anonymous'");
my_logger("running: 'anonymous'", $logger);
$name = '/tmp/inline.sh';
file_put_contents($name, $file->INLINE);
$retval = run("$command $name");
@@ -691,7 +689,7 @@ if ($method == 'install') {
$event = "Install error";
$subject = "plugin: ".basename($plugin_file);
$description = "Plugin failed to install";
exec("$notify -e $event -s $subject -d $description) -i 2");
exec("$notify -e ".escapeshellarg($event)." -s ".escapeshellarg($subject)." -d ".escapeshellarg($description)." -i 'warning'");
// run hook scripts for post processing
post_hooks($error);
done(1);
@@ -718,10 +716,10 @@ if ($method == 'install') {
if ($target != $plugin_file) copy($plugin_file, $target);
symlink($target, $symlink);
write("plugin: $plugin installed\n");
logger("$plugin installed");
my_logger("$plugin installed", $logger);
} else {
write("script: $plugin executed\n");
logger("script: $plugin executed");
my_logger("script: $plugin executed", $logger);
}
// run hook scripts for post processing
post_hooks();
@@ -835,7 +833,7 @@ if ($method == 'update') {
copy($plugin_file, $target);
symlink($target, $symlink);
write("plugin: $plugin updated\n");
logger("$plugin updated");
my_logger("$plugin updated", $logger);
// run hook scripts for post processing
post_hooks();
done(0);
@@ -867,7 +865,7 @@ if ($method == 'remove') {
// remove the plugin file
move($installed_plugin_file, "$boot-removed");
write("plugin: $plugin removed\n");
logger("$plugin removed");
my_logger("$plugin removed", $logger);
exec("/usr/local/sbin/update_cron");
// run hook scripts for post processing
post_hooks();

View File

@@ -1,7 +1,7 @@
#!/usr/bin/php -q
<?PHP
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
/* Copyright 2005-2024, Lime Technology
* Copyright 2012-2024, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -12,11 +12,10 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Wrappers.php";
require_once "$docroot/plugins/dynamix.plugin.manager/include/PluginHelpers.php";
// this command will set the $notify array
extract(parse_plugin_cfg('dynamix',true));
// Multi-language support
@@ -24,7 +23,7 @@ $_SERVER['REQUEST_URI'] = "scripts";
$login_locale = _var($display,'locale');
require_once "$docroot/webGui/include/Translations.php";
$var = @parse_ini_file('/var/local/emhttp/var.ini') ?: [];
$var = (array)@parse_ini_file('/var/local/emhttp/var.ini');
function apos($text) {
// So that "&apos;" doesn't show up in email

View File

@@ -12,8 +12,7 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Wrappers.php";
extract(parse_plugin_cfg('dynamix',true));
@@ -23,7 +22,7 @@ $login_locale = _var($display,'locale');
require_once "$docroot/webGui/include/Translations.php";
$file = realpath($argv[1]??'');
$valid = ['/var/tmp/','/tmp/plugins/'];
$valid = ['/var/tmp/','/tmp/plugins/','/boot/previous'];
$good = false;
foreach ($valid as $check) if (strncmp($file,$check,strlen($check))===0) $good = true;

View File

@@ -12,35 +12,8 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/plugins/dynamix.plugin.manager/include/UnraidCheck.php";
require_once "$docroot/webGui/include/Wrappers.php";
require_once "$docroot/plugins/dynamix.plugin.manager/include/PluginHelpers.php";
// Multi-language support
if (!function_exists('_')) {
function _($text) {return $text;}
}
extract(parse_plugin_cfg('dynamix', true));
$var = @parse_ini_file('/var/local/emhttp/var.ini') ?: [];
$script = "$docroot/webGui/scripts/notify";
$server = strtoupper(_var($var,'NAME','server'));
$output = _var($notify,'plugin');
$builtin = ['unRAIDServer'];
foreach ($builtin as $name) {
$plg = "$name.plg";
plugin('check',$plg);
$file = "/tmp/plugins/$plg";
$old = plugin('version', "/var/log/plugins/$plg");
$new = plugin('version', $file);
// silently suppress bad download of PLG file
if (version_compare($new,$old,'>')) {
exec("$script -e ".escapeshellarg("System - $name [$new]")." -s ".escapeshellarg("Notice [$server] - Version update $new")." -d ".escapeshellarg("A new version of $name is available")." -i ".escapeshellarg("normal $output")." -l '/Tools/Update' -x");
}
}
exit(0);
?>
$unraidOsCheck = new UnraidOsCheck();
$unraidOsCheck->checkForUpdate();

View File

@@ -0,0 +1,5 @@
.ca_element_notice{padding-right:20px;width:100%;height:40px;line-height:40px;color:#e68a00;background:#feefb3;border-bottom:#e68a00 1px solid;text-align:center;font-size:1.4rem;z-index:900}
a.ca_PluginUpdateInstall{cursor:pointer}
span.ca_PluginUpdateDismiss{float:right;margin-right:20px;cursor:pointer}
span.bannerInfo {cursor:pointer;text-decoration:none;margin:0 12px 0 6px}
span.bannerInfo::before {content:"\f05a";font-family:fontAwesome;color:#e68a00}

View File

@@ -0,0 +1,2 @@
#plugin_tree{width:33%;height:200px;overflow-y:scroll}
table tbody td{line-height:normal}

Some files were not shown because too many files have changed in this diff Show More