diff --git a/emhttp/plugins/dynamix.apcupsd/UPSsettings.page b/emhttp/plugins/dynamix.apcupsd/UPSsettings.page index bf4e63027..e69d5ff03 100644 --- a/emhttp/plugins/dynamix.apcupsd/UPSsettings.page +++ b/emhttp/plugins/dynamix.apcupsd/UPSsettings.page @@ -44,7 +44,10 @@ $(function() {   - _(Online Manual)_ + +  +: _(Online Manual)_ +
@@ -122,5 +125,8 @@ _(Turn off UPS after shutdown)_: :apc_killups_help: -: +: + + +
diff --git a/emhttp/plugins/dynamix.docker.manager/DockerContainers.page b/emhttp/plugins/dynamix.docker.manager/DockerContainers.page index a5acf32ea..3b6861e15 100644 --- a/emhttp/plugins/dynamix.docker.manager/DockerContainers.page +++ b/emhttp/plugins/dynamix.docker.manager/DockerContainers.page @@ -28,10 +28,25 @@ $cpus = cpu_list(); ?> - - - -
_(Application)__(Version)__(Network)__(Container IP)__(Container Port)__(LAN IP:Port)__(Volume Mappings)_ (_(App to Host)_)_(CPU & Memory load)__(Autostart)__(Uptime)_
+
+ + + + + + + + + + + + + + + + +
_(Application)__(Version)__(Network)__(Container IP)__(Container Port)__(LAN IP:Port)__(Volume Mappings)_ (_(App to Host)_)_(CPU & Memory load)__(Autostart)__(Uptime)_
+
diff --git a/emhttp/plugins/dynamix.docker.manager/DockerSettings.page b/emhttp/plugins/dynamix.docker.manager/DockerSettings.page index 32844a089..35201c609 100644 --- a/emhttp/plugins/dynamix.docker.manager/DockerSettings.page +++ b/emhttp/plugins/dynamix.docker.manager/DockerSettings.page @@ -130,7 +130,9 @@ $no_dockercfg = !is_file('/boot/config/docker.cfg'); ?> - + +  +:
@@ -183,7 +185,11 @@ _(Docker data-root)_: @@ -635,7 +641,10 @@ _(IPv6 custom network on interface)_ :   -: +: + + +
@@ -659,7 +668,10 @@ _(btrfs scrub status)_:   -: +: + + + :docker_scrub_help: @@ -668,7 +680,9 @@ _(btrfs scrub status)_:   -: +: + + :docker_cancel_help: diff --git a/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php b/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php index 0e77a6cb4..170332b75 100644 --- a/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php +++ b/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php @@ -863,11 +863,11 @@ function prepareCategory() { } $(function() { - var ctrl = "'>"; + var ctrl = ""; $('.tabs').append(ctrl); - $('div[class=title]').append(ctrl); + $('div[class=title] .right').append(ctrl); $('.advancedview').switchButton({labels_placement:'left', on_label: "_(Advanced View)_", off_label: "_(Basic View)_"}); $('.advancedview').change(function() { @@ -1427,8 +1427,11 @@ _(Privileged)_: : _(Add another Path, Port, Variable, Label or Device)_   -: "> - +: + "> + + +
diff --git a/emhttp/plugins/dynamix.plugin.manager/PluginInstall.page b/emhttp/plugins/dynamix.plugin.manager/PluginInstall.page index f3e30735c..4de43cdb5 100644 --- a/emhttp/plugins/dynamix.plugin.manager/PluginInstall.page +++ b/emhttp/plugins/dynamix.plugin.manager/PluginInstall.page @@ -50,18 +50,22 @@ Tag="download" }); -**_(Enter URL of remote plugin file or local plugin file)_**
- - - +

_(Enter URL of remote plugin file or local plugin file)_

+
+ + + +
:plugin_install_help: -**_(Select local plugin file)_** -
+
+

_(Select local plugin file)_

+
+
diff --git a/emhttp/plugins/dynamix.plugin.manager/Plugins.page b/emhttp/plugins/dynamix.plugin.manager/Plugins.page index 66ccdb768..661fd3c28 100644 --- a/emhttp/plugins/dynamix.plugin.manager/Plugins.page +++ b/emhttp/plugins/dynamix.plugin.manager/Plugins.page @@ -151,7 +151,19 @@ $(function() { $('.tabs').append(""); }); - - - -
_(Plugin)__(Author)__(Version)__(Status)__(Uninstall)_
+ +
+ + + + + + + + + + + + +
_(Plugin)__(Author)__(Version)__(Status)__(Uninstall)_
+
diff --git a/emhttp/plugins/dynamix.plugin.manager/sheets/Plugins.css b/emhttp/plugins/dynamix.plugin.manager/sheets/Plugins.css deleted file mode 100644 index dd3d30489..000000000 --- a/emhttp/plugins/dynamix.plugin.manager/sheets/Plugins.css +++ /dev/null @@ -1,15 +0,0 @@ -#plugin_tree { - width: 33%; - height: 200px; - overflow-y: scroll; -} -table tbody td { - line-height: normal; -} - -.Theme--black, -.Theme--white { - span.status.vhshift { - margin-top: 8px !important; - } -} \ No newline at end of file diff --git a/emhttp/plugins/dynamix.vm.manager/VMMachines.page b/emhttp/plugins/dynamix.vm.manager/VMMachines.page index 9b465d814..2cc691b9b 100644 --- a/emhttp/plugins/dynamix.vm.manager/VMMachines.page +++ b/emhttp/plugins/dynamix.vm.manager/VMMachines.page @@ -486,10 +486,23 @@ $(function() { }); - - - -
_(Name)__(Description)__(CPUs)__(Memory)__(vDisks / vCDs)__(Graphics)__(IP Address)__(Autostart)_
+
+ + + + + + + + + + + + + + +
_(Name)__(Description)__(CPUs)__(Memory)__(vDisks / vCDs)__(Graphics)__(IP Address)__(Autostart)_
+
diff --git a/emhttp/plugins/dynamix.vm.manager/VMSettings.page b/emhttp/plugins/dynamix.vm.manager/VMSettings.page index 01b809ba1..823238922 100644 --- a/emhttp/plugins/dynamix.vm.manager/VMSettings.page +++ b/emhttp/plugins/dynamix.vm.manager/VMSettings.page @@ -3,7 +3,7 @@ Title="VM Manager" Icon="icon-virtualization" Tag="columns" --- - -"._('Your hardware does not have Intel VT-x or AMD-V capability').". "._('This is required to create VMs in KVM').". "._('Please disable the VM function').". "; - echo " "._('View the Docs for more information')."

"; + echo "

"._('Your hardware does not have Intel VT-x or AMD-V capability').". "._('This is required to create VMs in KVM').". "._('Please disable the VM function').". "; + echo " "._('View the Docs for more information')."

"; } -function scan($area, $text) { - return strpos($area,$text)!==false; +function scan($area, $text) +{ + return strpos($area, $text) !== false; } -function detect(&$bootcfg, $bootenv, $key) { - if ($bootenv === 'syslinux') { - $size = count($bootcfg); - $menu = $i = 0; - $value = ''; - // find the default section - while ($i < $size) { - if (scan($bootcfg[$i],'label ')) { - $n = $i + 1; - // find the current requested setting - while (!scan($bootcfg[$n],'label ') && $n < $size) { - if (scan($bootcfg[$n],'menu default')) $menu = 1; - if (scan($bootcfg[$n],'append')) foreach (explode(' ',$bootcfg[$n]) as $cmd) if (scan($cmd,$key)) {$value = explode('=',$cmd)[1]; break;} - $n++; +function detect(&$bootcfg, $bootenv, $key) +{ + if ($bootenv === 'syslinux') { + $size = count($bootcfg); + $menu = $i = 0; + $value = ''; + // find the default section + while ($i < $size) { + if (scan($bootcfg[$i], 'label ')) { + $n = $i + 1; + // find the current requested setting + while (!scan($bootcfg[$n], 'label ') && $n < $size) { + if (scan($bootcfg[$n], 'menu default')) { + $menu = 1; + } + if (scan($bootcfg[$n], 'append')) { + foreach (explode(' ', $bootcfg[$n]) as $cmd) { + if (scan($cmd, $key)) { + $value = explode('=', $cmd)[1]; + break; + } + } + } + $n++; + } + if ($menu) { + break; + } else { + $i = $n - 1; + } + } + $i++; } - if ($menu) break; else $i = $n - 1; - } - $i++; - } - } elseif ($bootenv === 'grub') { - $menu_entries = []; - // find the current boot entry - foreach ($bootcfg as $line) { - if (preg_match('/set default=(\d+)/', $line, $match)) { - $bootentry = (int)$match[1]; - break; - } - } - // split boot entries - foreach ($bootcfg as $line) { - if (strpos($line, 'menuentry ') === 0) { - $in_menuentry = true; - $current_entry = $line . "\n"; - } elseif ($in_menuentry) { - $current_entry .= $line . "\n"; - if (trim($line) === "}") { - $menu_entries[] = $current_entry; - $in_menuentry = false; + } elseif ($bootenv === 'grub') { + $menu_entries = []; + // find the current boot entry + foreach ($bootcfg as $line) { + if (preg_match('/set default=(\d+)/', $line, $match)) { + $bootentry = (int)$match[1]; + break; + } + } + // split boot entries + foreach ($bootcfg as $line) { + if (strpos($line, 'menuentry ') === 0) { + $in_menuentry = true; + $current_entry = $line . "\n"; + } elseif ($in_menuentry) { + $current_entry .= $line . "\n"; + if (trim($line) === "}") { + $menu_entries[] = $current_entry; + $in_menuentry = false; + } + } + } + // search in selected menuentry + $menuentry = explode("\n", $menu_entries[$bootentry]); + foreach (explode(' ', $menu_entries[$bootentry]) as $cmd) { + if (scan($cmd, $key)) { + $value = explode('=', $cmd)[1]; + break; + } } - } } - // search in selected menuentry - $menuentry = explode("\n", $menu_entries[$bootentry]); - foreach (explode(' ', $menu_entries[$bootentry]) as $cmd) { - if (scan($cmd,$key)) { - $value = explode('=',$cmd)[1]; - break; - } - } - } - return trim($value); + return trim($value); } if (is_file('/boot/syslinux/syslinux.cfg')) { - $bootcfg = file('/boot/syslinux/syslinux.cfg',FILE_IGNORE_NEW_LINES+FILE_SKIP_EMPTY_LINES); - $bootenv = 'syslinux'; + $bootcfg = file('/boot/syslinux/syslinux.cfg', FILE_IGNORE_NEW_LINES + FILE_SKIP_EMPTY_LINES); + $bootenv = 'syslinux'; } elseif (is_file('/boot/grub/grub.cfg')) { - $bootcfg = file('/boot/grub/grub.cfg',FILE_IGNORE_NEW_LINES+FILE_SKIP_EMPTY_LINES); - $bootenv = 'grub'; + $bootcfg = file('/boot/grub/grub.cfg', FILE_IGNORE_NEW_LINES + FILE_SKIP_EMPTY_LINES); + $bootenv = 'grub'; } $arrValidNetworks = getValidNetworks(); $pcie_acs_override = detect($bootcfg, $bootenv, 'pcie_acs_override'); $vfio_allow_unsafe = detect($bootcfg, $bootenv, 'allow_unsafe_interrupts'); $bgcolor = $themeHelper->isLightTheme() ? '#f2f2f2' : '#1c1c1c'; // $themeHelper set in DefaultPageLayout.php -$started = $var['fsState']=='Started'; -$libvirt_up = $libvirt_running=='yes'; +$started = $var['fsState'] == 'Started'; +$libvirt_up = $libvirt_running == 'yes'; $libvirt_log = file_exists("/var/log/libvirt/libvirtd.log"); ?> - +  +:
+ _(Enable VMs)_: : - + @@ -171,7 +188,7 @@ _(Default VM storage path)_: :vms_libvirt_storage_help: _(Default ISO storage path)_: -: +: _(Modify with caution: unable to validate path until Array is Started)_ @@ -180,7 +197,7 @@ _(Default ISO storage path)_: _(Default Windows VirtIO driver ISO)_ (_(optional)_): -: placeholder="_(Click to Select)_" pattern="^[^\\]*\.(iso|ISO)$"> +: placeholder="_(Click to Select)_" pattern="^[^\\]*\.(iso|ISO)$">  _(Remove)_ _(Download)_ @@ -245,7 +262,7 @@ _(VM Usage refresh timer(seconds))_: :vms_usage_timer_help: _(PCIe ACS override)_: -: > @@ -255,7 +272,7 @@ _(PCIe ACS override)_: :vms_acs_override_help: _(VFIO allow unsafe interrupts)_: -: > *_(Setting disabled in **safe mode**)_* @@ -271,7 +288,10 @@ _(VFIO allow unsafe interrupts)_:   -: +: + + +
@@ -296,7 +316,10 @@ _(btrfs scrub status)_:   -: +: + + + :vms_scrub_help: @@ -305,7 +328,9 @@ _(btrfs scrub status)_:   -: +: + + :vms_cancel_help: @@ -482,7 +507,7 @@ $(function(){ $("#IMAGE_FILE").on("input change", function(){ $("#IMAGE_ERROR").fadeOut(); $("#applyBtn").prop("disabled", false); - + if ($(this).val() != "") { $("#deleteCheckbox").prop("disabled", true).attr("checked", false); $("#deletePanel").fadeOut(); @@ -490,7 +515,7 @@ $(function(){ $("#deleteCheckbox").attr("checked", false).prop("disabled", false); $("#deletePanel").fadeIn(); } - + }); $("#deleteCheckbox").change(function(){ var checked = $(this).is(":checked"); diff --git a/emhttp/plugins/dynamix.vm.manager/include/VMedit.php b/emhttp/plugins/dynamix.vm.manager/include/VMedit.php index e122b051d..b976a5ee6 100644 --- a/emhttp/plugins/dynamix.vm.manager/include/VMedit.php +++ b/emhttp/plugins/dynamix.vm.manager/include/VMedit.php @@ -105,7 +105,7 @@ if (strpos($strSelectedTemplate,"User-") !== false) { - +
diff --git a/emhttp/plugins/dynamix/Apps.page b/emhttp/plugins/dynamix/Apps.page index bf8efacaf..b9399d750 100644 --- a/emhttp/plugins/dynamix/Apps.page +++ b/emhttp/plugins/dynamix/Apps.page @@ -26,5 +26,7 @@ function installPlugin(file) {   -: +: + +
diff --git a/emhttp/plugins/dynamix/ArrayDevices.page b/emhttp/plugins/dynamix/ArrayDevices.page index 034c919fe..1a9edc4cf 100644 --- a/emhttp/plugins/dynamix/ArrayDevices.page +++ b/emhttp/plugins/dynamix/ArrayDevices.page @@ -14,8 +14,6 @@ Cond="(_var($var,'SYS_ARRAY_SLOTS') > 0 || $var['fsState']=='Stopped')" * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. */ -?> - - - - - -"; -if (_var($display,'total') && _var($var,'mdNumDisks',0)>1) echo ""; -?> - -
_(Device)__(Identification)__(Temp)__(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
- +
+ + + + + + + + + + + + + + + + + + + + + + 1) :?> + + + +
_(Device)__(Identification)__(Temp)__(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
+
:main_array_devices_help: -
:main_slots_help: - + \ No newline at end of file diff --git a/emhttp/plugins/dynamix/ArrayOperation.page b/emhttp/plugins/dynamix/ArrayOperation.page index 33189fbb2..2dc4541e7 100644 --- a/emhttp/plugins/dynamix/ArrayOperation.page +++ b/emhttp/plugins/dynamix/ArrayOperation.page @@ -84,7 +84,7 @@ function print_error($error) { } ?> - - - - -";?> - -
_(Device)__(Identification)__(Temp)__(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
- +
+ + + + + + + + + + + + + + + + + + + + +
_(Device)__(Identification)__(Temp)__(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
+
:boot_device_help: diff --git a/emhttp/plugins/dynamix/Browse.page b/emhttp/plugins/dynamix/Browse.page index 9f9ca88dd..6ef3f1703 100644 --- a/emhttp/plugins/dynamix/Browse.page +++ b/emhttp/plugins/dynamix/Browse.page @@ -1017,7 +1017,23 @@ $(function(){
-
_(Type)__(Name)__(Owner)__(Permission)__(Size)__(Last Modified)__(Location)__(Action)_
+
+ + + + + + + + + + + + + + +
_(Type)__(Name)__(Owner)__(Permission)__(Size)__(Last Modified)__(Location)__(Action)_
+
diff --git a/emhttp/plugins/dynamix/CPUisol.page b/emhttp/plugins/dynamix/CPUisol.page index c367bb564..5dc51c9fa 100644 --- a/emhttp/plugins/dynamix/CPUisol.page +++ b/emhttp/plugins/dynamix/CPUisol.page @@ -16,10 +16,18 @@ Tag="icon-cpu" ?>
- - - -
_(Isolation)_
+ +
+ + + + + + + + +
_(Isolation)_
+
diff --git a/emhttp/plugins/dynamix/CPUpin.page b/emhttp/plugins/dynamix/CPUpin.page index 73e37a453..29d8c0a18 100644 --- a/emhttp/plugins/dynamix/CPUpin.page +++ b/emhttp/plugins/dynamix/CPUpin.page @@ -17,10 +17,19 @@ Tag="icon-cpu"
- - - -
_(Container)_
+
+ + + + + + + + + + +
_(Container)_
+
diff --git a/emhttp/plugins/dynamix/CPUvms.page b/emhttp/plugins/dynamix/CPUvms.page index 297ab883c..a5e756c48 100644 --- a/emhttp/plugins/dynamix/CPUvms.page +++ b/emhttp/plugins/dynamix/CPUvms.page @@ -311,10 +311,17 @@ $(function() {
- - - -
_(VM)_
+
+ + + + + + + + +
_(VM)_
+
diff --git a/emhttp/plugins/dynamix/CacheDevices.page b/emhttp/plugins/dynamix/CacheDevices.page index 307b2d3c7..007ee398f 100644 --- a/emhttp/plugins/dynamix/CacheDevices.page +++ b/emhttp/plugins/dynamix/CacheDevices.page @@ -129,6 +129,7 @@ $('#tab2').bind({click:function() {$('i.toggle').show('slow');}}); +
@@ -139,9 +140,26 @@ $power = _var($display,'power') && in_array('nvme',array_column($cache,'transpor $root = explode($_tilde_,$pool)[0]; ?> - + + + + + + + + + + + + + + - + + + + + @@ -151,6 +169,7 @@ $root = explode($_tilde_,$pool)[0];
_(Device)__(Identification)__(Temp)__(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
_(Device)__(Identification)__(Temp)__(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
+
:cache_devices_help: @@ -167,6 +186,7 @@ $root = explode($_tilde_,$pool)[0];
+ _(Name)_: : @@ -184,6 +204,7 @@ _(Slots)_: + _(Name)_: : + _(Confirm reboot & powerdown commands)_: : -   -: +: + + + +
diff --git a/emhttp/plugins/dynamix/Console.page b/emhttp/plugins/dynamix/Console.page index ac8d16699..56785bfa4 100644 --- a/emhttp/plugins/dynamix/Console.page +++ b/emhttp/plugins/dynamix/Console.page @@ -114,5 +114,8 @@ _(Persistent Bash History)_: :console_bash_help:   -: +: + + + diff --git a/emhttp/plugins/dynamix/DateTime.page b/emhttp/plugins/dynamix/DateTime.page index 6edddfdeb..bcfa41d24 100644 --- a/emhttp/plugins/dynamix/DateTime.page +++ b/emhttp/plugins/dynamix/DateTime.page @@ -3,7 +3,7 @@ Title="Date and Time" Icon="icon-clock" Tag="clock-o" --- - -
+ _(Current date and time)_: -: +: _(Date format)_: : _(Time zone)_: -: @@ -87,25 +94,25 @@ _(Time sync)_:
_(NTP interval)_: : - _(Use DEFAULT setting when public NTP servers are defined)_ + _(Use DEFAULT setting when public NTP servers are defined)_ _(NTP server)_ 1: -: - _(Input a NTP server name, NTP pool name or IP address)_ +: + _(Input a NTP server name, NTP pool name or IP address)_ _(NTP server)_ 2: -: +: _(NTP server)_ 3: -: +: _(NTP server)_ 4: -: +:
@@ -114,57 +121,60 @@ _(PTP profile)_: _(PTP transport)_: : _(PTP mode)_: :
_(PTP server)_ 1: -: +: _(Input a IPv4 address)__(Input a IPv6 address)__(Input a MAC address)_ _(PTP server)_ 2: -: +: _(PTP server)_ 3: -: +: _(PTP server)_ 4: -: +:
_(PTP interface)_: : _(PTP clock)_: :
_(New date and time)_: -: "> +: "> _(Input the correct date and time manually)_ :current_time_help:
  -: +: + + +
- - - -
#_(Attribute Name)__(Flag)__(Value)__(Worst)__(Threshold)__(Type)__(Updated)__(Failed)__(Raw Value)_
+
+ + + + + + + + + + + + + + + + + + +
#_(Attribute Name)__(Flag)__(Value)__(Worst)__(Threshold)__(Type)__(Updated)__(Failed)__(Raw Value)_
+
:smart_attributes_help: diff --git a/emhttp/plugins/dynamix/DeviceIdentify.page b/emhttp/plugins/dynamix/DeviceIdentify.page index 2a888f87a..8a9e1e98d 100644 --- a/emhttp/plugins/dynamix/DeviceIdentify.page +++ b/emhttp/plugins/dynamix/DeviceIdentify.page @@ -26,10 +26,19 @@ $(function() { }); - - - -
_(Title)__(Information)_
+
+ + + + + + + + + + +
_(Title)__(Information)_
+
:smart_identity_help: diff --git a/emhttp/plugins/dynamix/DeviceInfo.page b/emhttp/plugins/dynamix/DeviceInfo.page index 955e799c1..865659aae 100644 --- a/emhttp/plugins/dynamix/DeviceInfo.page +++ b/emhttp/plugins/dynamix/DeviceInfo.page @@ -822,7 +822,7 @@ _(Enable user share assignment)_: :info_share_assignment_help: _(Minimum free space)_: -: disabled> +: disabled> _(Calculated free space value)_ :info_free_space_help: @@ -830,18 +830,20 @@ _(Minimum free space)_: _(Warning disk utilization threshold)_ (%): -: +: :info_warning_utilization_help: _(Critical disk utilization threshold)_ (%): -: +: :info_critical_utilization_help:   -: +: + + @@ -855,6 +857,7 @@ _(Critical disk utilization threshold)_ (%): > + @@ -929,7 +932,10 @@ _(btrfs balance status)_:   -: _(Balance)_ _(is only available when the filesyestem is mounted)_ +: + + _(Balance)_ _(is only available when the filesyestem is mounted)_ + @@ -965,12 +971,12 @@ _(Day of the month)_: _(Time of the day)_: -: _(Block group usage)_ (%): -: +:   : @@ -1061,12 +1067,12 @@ _(Day of the month)_: _(Time of the day)_: -:
  -: +: + + + @@ -376,15 +382,18 @@ _(Default SMART controller type)_: :disk_default_smart_controller_help: _(Default SMART attribute notifications)_: -: _(Custom attributes (use comma to separate numbers))_ +: _(Custom attributes (use comma to separate numbers))_   -: >_(Attribute)_ = +: >_(Attribute)_ = :disk_default_smart_attribute_help: -: +: + + + diff --git a/emhttp/plugins/dynamix/DisplaySettings.page b/emhttp/plugins/dynamix/DisplaySettings.page index e017faeb8..4c1160203 100644 --- a/emhttp/plugins/dynamix/DisplaySettings.page +++ b/emhttp/plugins/dynamix/DisplaySettings.page @@ -298,14 +298,15 @@ _(Show banner)_: @@ -333,5 +334,8 @@ _(Allow realtime updates on inactive browsers)_: -: +: + + + diff --git a/emhttp/plugins/dynamix/Eth0.page b/emhttp/plugins/dynamix/Eth0.page index 680f9fbd7..b85e740ed 100644 --- a/emhttp/plugins/dynamix/Eth0.page +++ b/emhttp/plugins/dynamix/Eth0.page @@ -2,7 +2,7 @@ Menu="NetworkSettings:100" Title="_(Interface)_ eth0" Tag="icon-ethernet" --- - - $value) { - if ($member == $source) continue; - if ($value['BONDING']=='yes' && in_array($port,explode(',',$value['BONDNICS']))) return $value['BONDNAME'].' '.$member; - if ($value['BRIDGING']=='yes' && in_array($port,explode(',',$value['BRNICS']))) return $value['BRNAME'].' '.$member; - } - return false; +function locked($source, $port) +{ + global $members; + foreach ($members as $member => $value) { + if ($member == $source) { + continue; + } + if ($value['BONDING'] == 'yes' && in_array($port, explode(',', $value['BONDNICS']))) { + return $value['BONDNAME'].' '.$member; + } + if ($value['BRIDGING'] == 'yes' && in_array($port, explode(',', $value['BRNICS']))) { + return $value['BRNAME'].' '.$member; + } + } + return false; } -function vlanID($cfg) { - return array_filter($cfg, function($key){return strpos($key, 'VLANID:')===0;}, ARRAY_FILTER_USE_KEY); +function vlanID($cfg) +{ + return array_filter($cfg, function ($key) {return strpos($key, 'VLANID:') === 0;}, ARRAY_FILTER_USE_KEY); } -function index($key) { - return filter_var($key, FILTER_SANITIZE_NUMBER_INT); +function index($key) +{ + return filter_var($key, FILTER_SANITIZE_NUMBER_INT); } function metric($eth) { @@ -66,31 +75,36 @@ function metric($eth) { // remove non-existing ethernet ports foreach (glob("$docroot/webGui/Eth[1-9]*.page", GLOB_NOSORT) as $port) { - if (!in_array(strtolower(basename($port, '.page')), $ports)) { - @unlink($port); - $build = true; - } + if (!in_array(strtolower(basename($port, '.page')), $ports)) { + @unlink($port); + $build = true; + } } // add new ethernet ports foreach ($ports as $ethX) { - $file = "$docroot/webGui/".ucfirst($ethX).".page"; - if (!file_exists($file)) { - $X = filter_var($ethX, FILTER_SANITIZE_NUMBER_INT); - file_put_contents($file, str_replace(['parentname:nnn','tabX','bondX','brX','ethX'],['NetworkSettings:'.($X+100),'tab'.($X+1),'bond'.$X,'br'.$X,$ethX], file_get_contents($template))); - $build = true; - } + $file = "$docroot/webGui/".ucfirst($ethX).".page"; + if (!file_exists($file)) { + $X = filter_var($ethX, FILTER_SANITIZE_NUMBER_INT); + file_put_contents($file, str_replace(['parentname:nnn','tabX','bondX','brX','ethX'], ['NetworkSettings:'.($X + 100),'tab'.($X + 1),'bond'.$X,'br'.$X,$ethX], file_get_contents($template))); + $build = true; + } } // enable interface only when VMs and Docker are stopped $service = exec('pgrep --ns $$ libvirt') ? _('VM manager') : ''; $service .= exec('pgrep --ns $$ docker') ? ($service ? ' '._('and').' ' : '')._('Docker service') : ''; // eth0 port status -$no_eth0 = exec("ip -br link show eth0 | awk '{print \$2;exit}'")=='DOWN'; +$no_eth0 = exec("ip -br link show eth0 | awk '{print \$2;exit}'") == 'DOWN'; // get VLAN interfaces $vlan_eth0 = $sort_eth0 = []; -if (isset($eth0)) foreach (vlanID($eth0) as $key => $val) {$vlan_eth0[] = index($key); $sort_eth0[] = (int)$val;} +if (isset($eth0)) { + foreach (vlanID($eth0) as $key => $val) { + $vlan_eth0[] = index($key); + $sort_eth0[] = (int)$val; + } +} array_multisort($sort_eth0, $vlan_eth0); ?> @@ -554,31 +568,30 @@ function networkInfo(port, vlan) { } -
 
-
+
_(IPv4 DNS server assignment)_: : :eth_ipv4_dns_server_assignment_help:
_(IPv4 DNS server)_ 1: -: +: :eth_ipv4_dns_server_help: _(IPv4 DNS server)_ 2: -: +: :eth_ipv4_dns_server2_help: _(IPv4 DNS server)_ 3: -: +: :eth_ipv4_dns_server3_help: @@ -587,25 +600,25 @@ _(IPv4 DNS server)_ 3:
_(IPv6 DNS server assignment)_: : :eth_ipv6_dns_server_assignment_help:
_(IPv6 DNS server)_ 1: -: +: :eth_ipv6_dns_server_help: _(IPv6 DNS server)_ 2: -: +: :eth_ipv6_dns_server2_help: _(IPv6 DNS server)_ 3: -: +: :eth_ipv6_dns_server3_help: @@ -635,8 +648,12 @@ _(IPv6 DNS server)_ 3: _(Interface description)_: -: "> - +: "> + +  +: + + :eth_interface_description_help: @@ -647,8 +664,8 @@ _(MAC address)_: _(Enable bonding)_: : :eth_enable_bonding_help: @@ -656,13 +673,13 @@ _(Enable bonding)_:
_(Bonding mode)_: : **_(Attention)_:** _(this mode requires a network switch with proper setup and support)_... @@ -670,7 +687,7 @@ _(Bonding mode)_: _(Bonding members of)_ bond0: : - - + + :eth_enable_bridging_help: @@ -690,7 +707,7 @@ _(Enable bridging)_:
_(Bridging members of)_ br0: : - - - + + + :eth_network_protocol_help: @@ -711,15 +728,15 @@ _(Network protocol)_:
_(IPv4 address assignment)_: : :eth_ipv4_address_assignment_help:
_(IPv4 address)_: -: " class="narrow" pattern="" title="_(IPv4 address A.B.C.D)_">/" class="narrow" pattern="" title="_(IPv4 address A.B.C.D)_">/ @@ -736,15 +753,15 @@ _(IPv4 default gateway)_:
_(IPv6 address assignment)_: : :eth_ipv6_address_assignment_help:
_(IPv6 address)_: -: " pattern="" title="_(IPv6 address nnnn:xxxx::yyyy)_">/" class="slim"> +: " pattern="" title="_(IPv6 address nnnn:xxxx::yyyy)_">/" class="slim"> :eth_ipv6_address_help: @@ -758,8 +775,8 @@ _(IPv6 default gateway)_:
_(IPv6 privacy extensions)_: : :eth_ipv6_privacy_extensions_help: @@ -767,15 +784,15 @@ _(IPv6 privacy extensions)_:
_(Desired MTU)_: -: > - >  +: > +>  :eth_desired_mtu_help: _(Enable VLANs)_: : @@ -786,22 +803,28 @@ _(Enable VLANs)_:
_(Interface description)_: -: "> - )"> +: "> + + )"> + :eth_interface_description_help: _(VLAN number)_: -: " class="narrow gap" required> - +: " class="narrow gap" required> + + + + + :eth_vlan_number_help: _(Network protocol)_: : :eth_network_protocol_help: @@ -809,17 +832,17 @@ _(Network protocol)_:
_(IPv4 address assignment)_: : - > + > :eth_ipv4_address_assignment_help:
_(IPv4 address)_: -: " class="narrow" pattern="" title="_(IPv4 address A.B.C.D)_">/" class="narrow" pattern="" title="_(IPv4 address A.B.C.D)_">/ @@ -838,19 +861,19 @@ _(IPv4 default gateway)_:
_(IPv6 address assignment)_: : - > + > :eth_ipv6_address_assignment_help:
_(IPv6 address)_: -: " pattern="" title="_(IPv6 address nnnn:xxxx::yyyy)_">/" class="slim"> +: " pattern="" title="_(IPv6 address nnnn:xxxx::yyyy)_">/" class="slim"> :eth_ipv6_address_help: @@ -866,8 +889,8 @@ _(IPv6 default gateway)_:
_(IPv6 privacy extensions)_: : :eth_ipv6_privacy_extensions_help: @@ -879,34 +902,41 @@ _(IPv6 privacy extensions)_:
  -: +: + + + - -'._('Settings').')'?> + + + +'._('Settings').')'?> - + +  +: + +
_(Use this to install official language packs)_
@@ -90,7 +94,10 @@ _(Installed languages)_: : _(Enter URL of language pack XML file)_: -: +: + + +
@@ -114,6 +121,9 @@ _(Select language file)_:
  -: +: + + +
diff --git a/emhttp/plugins/dynamix/ManagementAccess.page b/emhttp/plugins/dynamix/ManagementAccess.page index e343cd7af..a2eae391c 100644 --- a/emhttp/plugins/dynamix/ManagementAccess.page +++ b/emhttp/plugins/dynamix/ManagementAccess.page @@ -4,7 +4,7 @@ Title="Management Access" Icon="icon-key" Tag="expeditedssl" --- - -/dev/null|sed -n 's/ *commonName *= //p'"); - $cert2Issuer = exec("/usr/bin/openssl x509 -in $cert2File -noout -text | sed -n -e 's/^.*Issuer: //p'"); - $cert2Expires = exec("/usr/bin/openssl x509 -in $cert2File -noout -text | sed -n -e 's/^.*Not After : //p'"); - $isWildcardCert = preg_match('/.*\.myunraid\.net$/', $cert2Subject); - $subject2URL = $cert2Subject; - $dnsValid = false; - $dnsRebindingProtection = false; - if ($isWildcardCert) { - exec("openssl x509 -checkend 2592000 -noout -in $cert2File 2>/dev/null", $arrout, $retval_expired); - if (!$addr) { - // if eth0 doesn't have an IP address, then show noip.hash.myunraid.net as a placeholder url - $subject2URL = str_replace("*", 'noip', $subject2URL); - $dnsValid = false; - $dnsRebindingProtection = false; - } elseif (strpos($addr, ":") === false) { - // eth0 is IPv4 - $subject2URL = str_replace("*", str_replace(".", "-", $addr), $subject2URL); - $rebindtest_ip = exec("host -4 -t A rebindtest4.myunraid.net 2>/dev/null|awk '{print \$4}'"); - $dnsRebindingProtection = ($rebindtest_ip != "192.168.42.42"); - if (!$dnsRebindingProtection) { - $cert_ip = exec("host -4 -t A $subject2URL 2>/dev/null|awk '{print \$4}'"); - $dnsValid = $cert_ip==$addr; - } - } else { - // eth0 is IPv6 - $subject2URL = str_replace("*", str_replace(":", "-", $addr), $subject2URL); - $rebindtest_ip = exec("host -6 -t AAAA rebindtest6.myunraid.net 2>/dev/null|awk '{print \$4}'"); - // more: restore this after TTL expires - // $dnsRebindingProtection = ($rebindtest_ip != "fd42::42"); - $dnsRebindingProtection = ($rebindtest_ip != "fd42::42") && ($rebindtest_ip != "fd42::"); - if (!$dnsRebindingProtection) { - $cert_ip = exec("host -6 -t AAAA $subject2URL 2>/dev/null|awk '{print \$4}'"); - $dnsValid = $cert_ip==$addr; - } + $cert2Subject = exec("/usr/bin/openssl x509 -in $cert2File -noout -subject -nameopt multiline 2>/dev/null|sed -n 's/ *commonName *= //p'"); + $cert2Issuer = exec("/usr/bin/openssl x509 -in $cert2File -noout -text | sed -n -e 's/^.*Issuer: //p'"); + $cert2Expires = exec("/usr/bin/openssl x509 -in $cert2File -noout -text | sed -n -e 's/^.*Not After : //p'"); + $isWildcardCert = preg_match('/.*\.myunraid\.net$/', $cert2Subject); + $subject2URL = $cert2Subject; + $dnsValid = false; + $dnsRebindingProtection = false; + if ($isWildcardCert) { + exec("openssl x509 -checkend 2592000 -noout -in $cert2File 2>/dev/null", $arrout, $retval_expired); + if (!$addr) { + // if eth0 doesn't have an IP address, then show noip.hash.myunraid.net as a placeholder url + $subject2URL = str_replace("*", 'noip', $subject2URL); + $dnsValid = false; + $dnsRebindingProtection = false; + } elseif (strpos($addr, ":") === false) { + // eth0 is IPv4 + $subject2URL = str_replace("*", str_replace(".", "-", $addr), $subject2URL); + $rebindtest_ip = exec("host -4 -t A rebindtest4.myunraid.net 2>/dev/null|awk '{print \$4}'"); + $dnsRebindingProtection = ($rebindtest_ip != "192.168.42.42"); + if (!$dnsRebindingProtection) { + $cert_ip = exec("host -4 -t A $subject2URL 2>/dev/null|awk '{print \$4}'"); + $dnsValid = $cert_ip == $addr; + } + } else { + // eth0 is IPv6 + $subject2URL = str_replace("*", str_replace(":", "-", $addr), $subject2URL); + $rebindtest_ip = exec("host -6 -t AAAA rebindtest6.myunraid.net 2>/dev/null|awk '{print \$4}'"); + // more: restore this after TTL expires + // $dnsRebindingProtection = ($rebindtest_ip != "fd42::42"); + $dnsRebindingProtection = ($rebindtest_ip != "fd42::42") && ($rebindtest_ip != "fd42::"); + if (!$dnsRebindingProtection) { + $cert_ip = exec("host -6 -t AAAA $subject2URL 2>/dev/null|awk '{print \$4}'"); + $dnsValid = $cert_ip == $addr; + } + } } - } } // Tailscale LE cert $cert3File = "/boot/config/ssl/certs/ts_bundle.pem"; $cert3Present = file_exists("$cert3File"); if ($cert3Present) { - $cert3Subject = exec("/usr/bin/openssl x509 -in $cert3File -noout -subject -nameopt multiline 2>/dev/null|sed -n 's/ *commonName *= //p'"); - $cert3Issuer = exec("/usr/bin/openssl x509 -in $cert3File -noout -text | sed -n -e 's/^.*Issuer: //p'"); - $cert3Expires = exec("/usr/bin/openssl x509 -in $cert3File -noout -text | sed -n -e 's/^.*Not After : //p'"); + $cert3Subject = exec("/usr/bin/openssl x509 -in $cert3File -noout -subject -nameopt multiline 2>/dev/null|sed -n 's/ *commonName *= //p'"); + $cert3Issuer = exec("/usr/bin/openssl x509 -in $cert3File -noout -text | sed -n -e 's/^.*Issuer: //p'"); + $cert3Expires = exec("/usr/bin/openssl x509 -in $cert3File -noout -text | sed -n -e 's/^.*Not After : //p'"); } // Note: this disables FQDN6 urls since they are not supported by myunraid.net DNS currently -if (!empty($nginx['NGINX_LANFQDN6'])) unset($nginx['NGINX_LANFQDN6']); +if (!empty($nginx['NGINX_LANFQDN6'])) { + unset($nginx['NGINX_LANFQDN6']); +} -$http_port = _var($var,'PORT','80') != '80' ? ":{$var['PORT']}" : ''; -$https_port = _var($var,'PORTSSL','443') != '443' ? ":{$var['PORTSSL']}" : ''; -$http_ip_url = 'http://'._var($nginx,'NGINX_LANIP').$http_port.'/'; -$https_ip_url = 'https://'._var($nginx,'NGINX_LANIP').$https_port.'/'; +$http_port = _var($var, 'PORT', '80') != '80' ? ":{$var['PORT']}" : ''; +$https_port = _var($var, 'PORTSSL', '443') != '443' ? ":{$var['PORTSSL']}" : ''; +$http_ip_url = 'http://'._var($nginx, 'NGINX_LANIP').$http_port.'/'; +$https_ip_url = 'https://'._var($nginx, 'NGINX_LANIP').$https_port.'/'; // bare IPv6 addresses need to be surrounded in brackets -$http_ip6_url = 'http://'.'['._var($nginx,'NGINX_LANIP6').']'.$http_port.'/'; -$https_ip6_url = 'https://'.'['._var($nginx,'NGINX_LANIP6').']'.$https_port.'/'; -$http_mdns_url = 'http://'._var($nginx,'NGINX_LANMDNS').$http_port.'/'; -$https_mdns_url = 'https://'._var($nginx,'NGINX_LANMDNS').$https_port.'/'; -$https_fqdn_url = 'https://'._var($nginx,'NGINX_LANFQDN').$https_port.'/'; -$https_fqdn6_url = 'https://'._var($nginx,'NGINX_LANFQDN6').$https_port.'/'; +$http_ip6_url = 'http://'.'['._var($nginx, 'NGINX_LANIP6').']'.$http_port.'/'; +$https_ip6_url = 'https://'.'['._var($nginx, 'NGINX_LANIP6').']'.$https_port.'/'; +$http_mdns_url = 'http://'._var($nginx, 'NGINX_LANMDNS').$http_port.'/'; +$https_mdns_url = 'https://'._var($nginx, 'NGINX_LANMDNS').$https_port.'/'; +$https_fqdn_url = 'https://'._var($nginx, 'NGINX_LANFQDN').$https_port.'/'; +$https_fqdn6_url = 'https://'._var($nginx, 'NGINX_LANFQDN6').$https_port.'/'; $urls = []; // push an array of five values into the $urls array: @@ -150,94 +166,138 @@ $urls = []; // 5 - self-signed certificate, or false // define LAN access urls and redirects that change based on USE_SSL setting -switch(_var($var,'USE_SSL','no')) { -case 'no': - if (!empty($nginx['NGINX_LANIP'])) $urls[] = ['LAN', $http_ip_url, null, null, false]; - if (!empty($nginx['NGINX_LANIP6'])) $urls[] = ['LAN', $http_ip6_url, null, null, false]; - if (!empty($nginx['NGINX_LANMDNS'])) $urls[] = ['LAN', $http_mdns_url, null, null, false]; - break; -case 'yes': - if (!empty($nginx['NGINX_LANIP'])) $urls[] = ['LAN', $http_ip_url, $https_ip_url, null, false]; - if (!empty($nginx['NGINX_LANIP'])) $urls[] = ['LAN', $https_ip_url, null, "{$var['NAME']}_unraid_bundle.pem", $cert1SelfSigned]; - if (!empty($nginx['NGINX_LANIP6'])) $urls[] = ['LAN', $http_ip6_url, $https_ip6_url, null, false]; - if (!empty($nginx['NGINX_LANIP6'])) $urls[] = ['LAN', $https_ip6_url, null, "{$var['NAME']}_unraid_bundle.pem", $cert1SelfSigned]; - if (!empty($nginx['NGINX_LANMDNS'])) $urls[] = ['LAN', $http_mdns_url, $https_mdns_url, null, false]; - if (!empty($nginx['NGINX_LANMDNS'])) $urls[] = ['LAN', $https_mdns_url, null, "{$var['NAME']}_unraid_bundle.pem", $cert1SelfSigned]; - break; -case 'auto': // aka strict - if (!empty($nginx['NGINX_LANIP']) && !empty($nginx['NGINX_LANFQDN'])) $urls[] = ['LAN', $http_ip_url, $https_fqdn_url, null, false]; - if (!empty($nginx['NGINX_LANIP6']) && !empty($nginx['NGINX_LANFQDN6'])) $urls[] = ['LAN', $http_ip6_url, $https_fqdn6_url, null, false]; - if (!empty($nginx['NGINX_LANMDNS']) && !empty($nginx['NGINX_LANFQDN'])) $urls[] = ['LAN', $http_mdns_url, $https_fqdn_url, null, false]; - break; +switch (_var($var, 'USE_SSL', 'no')) { + case 'no': + if (!empty($nginx['NGINX_LANIP'])) { + $urls[] = ['LAN', $http_ip_url, null, null, false]; + } + if (!empty($nginx['NGINX_LANIP6'])) { + $urls[] = ['LAN', $http_ip6_url, null, null, false]; + } + if (!empty($nginx['NGINX_LANMDNS'])) { + $urls[] = ['LAN', $http_mdns_url, null, null, false]; + } + break; + case 'yes': + if (!empty($nginx['NGINX_LANIP'])) { + $urls[] = ['LAN', $http_ip_url, $https_ip_url, null, false]; + } + if (!empty($nginx['NGINX_LANIP'])) { + $urls[] = ['LAN', $https_ip_url, null, "{$var['NAME']}_unraid_bundle.pem", $cert1SelfSigned]; + } + if (!empty($nginx['NGINX_LANIP6'])) { + $urls[] = ['LAN', $http_ip6_url, $https_ip6_url, null, false]; + } + if (!empty($nginx['NGINX_LANIP6'])) { + $urls[] = ['LAN', $https_ip6_url, null, "{$var['NAME']}_unraid_bundle.pem", $cert1SelfSigned]; + } + if (!empty($nginx['NGINX_LANMDNS'])) { + $urls[] = ['LAN', $http_mdns_url, $https_mdns_url, null, false]; + } + if (!empty($nginx['NGINX_LANMDNS'])) { + $urls[] = ['LAN', $https_mdns_url, null, "{$var['NAME']}_unraid_bundle.pem", $cert1SelfSigned]; + } + break; + case 'auto': // aka strict + if (!empty($nginx['NGINX_LANIP']) && !empty($nginx['NGINX_LANFQDN'])) { + $urls[] = ['LAN', $http_ip_url, $https_fqdn_url, null, false]; + } + if (!empty($nginx['NGINX_LANIP6']) && !empty($nginx['NGINX_LANFQDN6'])) { + $urls[] = ['LAN', $http_ip6_url, $https_fqdn6_url, null, false]; + } + if (!empty($nginx['NGINX_LANMDNS']) && !empty($nginx['NGINX_LANFQDN'])) { + $urls[] = ['LAN', $http_mdns_url, $https_fqdn_url, null, false]; + } + break; } // define FQDN urls for each interface // when multiple FQDN urls are available for a given interface, make sure they are sorted asort($nginx); foreach ($nginx as $key => $host) { - if (!$host) continue; - // Only process keys that include 'FQDN' - if (strpos($key, 'FQDN') === false) continue; - // Extract the interface from the key, e.g., 'NGINX_LANFQDN' -> 'LAN', 'NGINX_WANFQDN' -> 'WAN', NGINX_WG0FQDN -> WG, NGINX_TAILSCALE1FQDN -> TAILSCALE - // Note: this specifically excludes FQDN6 urls since they are not supported by myunraid.net DNS currently - if (preg_match('/^NGINX_([A-Z]+)(\d*)FQDN$/', $key, $matches)) { - $interface = $matches[1]; // Interface type (LAN, WAN, WG, TAILSCALE, etc.) - // ignore the WAN interface because we don't have access to the WANPORT here - if ($interface == "WAN") continue; - $pem = null; - if (str_ends_with($host, '.myunraid.net')) $pem = 'certificate_bundle.pem'; - elseif (str_ends_with($host, '.ts.net')) $pem = 'ts_bundle.pem'; - $url = 'https://'.$host.$https_port."/"; - $urls[] = [$interface, $url, null, $pem, false]; - } + if (!$host) { + continue; + } + // Only process keys that include 'FQDN' + if (strpos($key, 'FQDN') === false) { + continue; + } + // Extract the interface from the key, e.g., 'NGINX_LANFQDN' -> 'LAN', 'NGINX_WANFQDN' -> 'WAN', NGINX_WG0FQDN -> WG, NGINX_TAILSCALE1FQDN -> TAILSCALE + // Note: this specifically excludes FQDN6 urls since they are not supported by myunraid.net DNS currently + if (preg_match('/^NGINX_([A-Z]+)(\d*)FQDN$/', $key, $matches)) { + $interface = $matches[1]; // Interface type (LAN, WAN, WG, TAILSCALE, etc.) + // ignore the WAN interface because we don't have access to the WANPORT here + if ($interface == "WAN") { + continue; + } + $pem = null; + if (str_ends_with($host, '.myunraid.net')) { + $pem = 'certificate_bundle.pem'; + } elseif (str_ends_with($host, '.ts.net')) { + $pem = 'ts_bundle.pem'; + } + $url = 'https://'.$host.$https_port."/"; + $urls[] = [$interface, $url, null, $pem, false]; + } } // determine whether there are urls for a given list of interfaces -function has_urls(array $interfaces) { - global $urls; - foreach($urls as $url) { - if (in_array($url[0], $interfaces)) return true; - } - return false; +function has_urls(array $interfaces) +{ + global $urls; + foreach ($urls as $url) { + if (in_array($url[0], $interfaces)) { + return true; + } + } + return false; } // show all urls for a given list of interface -function show_urls(array $interfaces) { - global $urls; - // 0 - type of url ['LAN','WLAN','WAN','WG','TAILSCALE'] - // 1 - the url - // 3 - the url it redirects to, or null - // 4 - the certificate file used, or null - // 5 - self-signed certificate, or false - $output = ""; - $linestart = "
 
"; - $lineend = "
\n"; - $first = true; - foreach($urls as $url) { - if (in_array($url[0], $interfaces)) { - $msg = "$url[1]"; - if ($url[2]) $msg .= " "._("redirects to")." $url[2]"; - if ($url[3]) $msg .= " "._("uses")." ".$url[3]; - if ($url[4]) $msg .= " "._("is a self-signed certificate, ignore the browser's warning and proceed to the GUI").""; - // 2nd+ urls need leading $linestart - $output .= ($first ? "" : $linestart).$msg.$lineend; - $first = false; +function show_urls(array $interfaces) +{ + global $urls; + // 0 - type of url ['LAN','WLAN','WAN','WG','TAILSCALE'] + // 1 - the url + // 3 - the url it redirects to, or null + // 4 - the certificate file used, or null + // 5 - self-signed certificate, or false + $output = ""; + $linestart = "
 
"; + $lineend = "
\n"; + $first = true; + foreach ($urls as $url) { + if (in_array($url[0], $interfaces)) { + $msg = "$url[1]"; + if ($url[2]) { + $msg .= " "._("redirects to")." $url[2]"; + } + if ($url[3]) { + $msg .= " "._("uses")." ".$url[3]; + } + $msg .= ""; + if ($url[4]) { + $msg .= " "._("is a self-signed certificate, ignore the browser's warning and proceed to the GUI").""; + } + // 2nd+ urls need leading $linestart + $output .= ($first ? "" : $linestart).$msg.$lineend; + $first = false; + } } - } - if ($first) { - $output = "none"; - } else { - // strip final trailing $lineend as it will be added by markdown - $output = substr($output, 0, strlen($lineend)*-1); - } - echo $output; + if ($first) { + $output = "none"; + } else { + // strip final trailing $lineend as it will be added by markdown + $output = substr($output, 0, strlen($lineend) * -1); + } + echo $output; } -$cert_time_format = $display['date'].($display['date']!='%c' ? ', '.str_replace(['%M','%R'],['%M:%S','%R:%S'],$display['time']):''); +$cert_time_format = $display['date'].($display['date'] != '%c' ? ', '.str_replace(['%M','%R'], ['%M:%S','%R:%S'], $display['time']) : ''); $provisionlabel = $isWildcardCert ? _('Renew') : _('Provision'); -$disabled_provision = $keyfile===false || ($isWildcardCert && $retval_expired===0) || !$addr ? 'disabled' : ''; +$disabled_provision = $keyfile === false || ($isWildcardCert && $retval_expired === 0) || !$addr ? 'disabled' : ''; $disabled_provision_msg = !$addr ? _('Ensure the primary network card eth0 has an IP address.') : ''; -$disabled_delete = $cert2Present && $var['USE_SSL']!='auto' ? '' : 'disabled'; +$disabled_delete = $cert2Present && $var['USE_SSL'] != 'auto' ? '' : 'disabled'; $disabled_auto = $isWildcardCert && !$dnsRebindingProtection && $dnsValid ? '' : 'disabled'; // Get ports in use @@ -246,14 +306,20 @@ exec("lsof -Pni|awk '/LISTEN/ && \$9!~/127.0.0.1/ && \$9!~/\\[::1\\]/{print \$9} $bind = false; //= $var['BIND_MGT']=='yes'; - not used in 6.10 $list = ['*']; -if ($addr) array_push($list, $addr); +if ($addr) { + array_push($list, $addr); +} foreach ($output as $line) { - [$ip, $port] = my_explode($line[0]=='[' ? ']:' : ':',$line); - if ($ip[0]=='[') $ip = substr($ip,1); // ipv6 address - if (!in_array($port,$portsInUse) && (!$bind || in_array($ip,$list))) $portsInUse[] = $port; + [$ip, $port] = my_explode($line[0] == '[' ? ']:' : ':', $line); + if ($ip[0] == '[') { + $ip = substr($ip, 1); + } // ipv6 address + if (!in_array($port, $portsInUse) && (!$bind || in_array($ip, $list))) { + $portsInUse[] = $port; + } } -sort($portsInUse,SORT_NUMERIC); +sort($portsInUse, SORT_NUMERIC); ?>
-"> - +"> + + _(User 'root')_: : [_(Manage)_](/Settings/Users/ManagementAccess/UserEdit?name=root) @@ -401,21 +468,24 @@ _(Local TLD)_: :mgmt_local_tld_help:   -: +: + + +

_(Local access URLs)_: -: +: :mgmt_local_access_urls_help: _(WireGuard URLs)_: -: +: :mgmt_wg_access_urls_help: @@ -424,7 +494,7 @@ _(WireGuard URLs)_: _(Tailscale URLs)_: -: +: :mgmt_tailscale_access_urls_help: @@ -439,11 +509,9 @@ _(Self-signed or user-provided certificate)_: _(Certificate URL)_: : $cert1URL"?> - _(Certificate URL)_: : - _(Certificate URL)_: : _(Certificate not valid for)_ @@ -456,7 +524,7 @@ _(Certificate issuer)_: _(Certificate expiration)_: -: +: _(Self-signed certificate file)_: @@ -464,8 +532,9 @@ _(Self-signed certificate file)_:
-"> - +"> + +
@@ -480,7 +549,7 @@ _(Certificate issuer)_: : _(Certificate expiration)_: -: +:   @@ -492,13 +561,17 @@ _(Certificate expiration)_: + _(CA-signed certificate file)_: : _(Not present)_   -: - +: + + + + @@ -514,7 +587,7 @@ _(Certificate issuer)_: : _(Certificate expiration)_: -: +: diff --git a/emhttp/plugins/dynamix/MoverSettings.page b/emhttp/plugins/dynamix/MoverSettings.page index c32272d23..930940fe3 100644 --- a/emhttp/plugins/dynamix/MoverSettings.page +++ b/emhttp/plugins/dynamix/MoverSettings.page @@ -119,7 +119,10 @@ _(Mover logging)_:   -: +: + + + diff --git a/emhttp/plugins/dynamix/NFS.page b/emhttp/plugins/dynamix/NFS.page index dd7ef6a23..3fa840f4d 100644 --- a/emhttp/plugins/dynamix/NFS.page +++ b/emhttp/plugins/dynamix/NFS.page @@ -41,12 +41,16 @@ _(Enable NFS)_: :nfs_enable_help: _(Tunable (fuse_remember))_: -: +: + :nfs_tunable_fuse_remember_help:   -: +: + + +
@@ -75,7 +79,10 @@ _(Number of Threads)_: :nfs_threads_help:   -: +: + + +
-
 
@@ -68,19 +67,22 @@ $(function(){ _(Current listening interfaces)_: -: +:
_(Include listening interfaces)_: -: +: :eth_network_extra_include_help: _(Exclude listening interfaces)_: -: +: :eth_network_extra_exclude_help:   -: +: + + +
diff --git a/emhttp/plugins/dynamix/NetworkRules.page b/emhttp/plugins/dynamix/NetworkRules.page index 0bd8bcd62..aa5c1b257 100644 --- a/emhttp/plugins/dynamix/NetworkRules.page +++ b/emhttp/plugins/dynamix/NetworkRules.page @@ -71,7 +71,10 @@ _(Interface)_ :   -: +: + + + :eth_network_rules_help: diff --git a/emhttp/plugins/dynamix/NewConfig.page b/emhttp/plugins/dynamix/NewConfig.page index e4d3651ef..0f3205335 100644 --- a/emhttp/plugins/dynamix/NewConfig.page +++ b/emhttp/plugins/dynamix/NewConfig.page @@ -58,23 +58,34 @@ effect of making it ***impossible*** to rebuild an existing failed drive - you h :end
-
+ -_(Preserve current assignments)_: - -
- - -_(Array has been **Reset**)_ (_(please configure)_) - -_(Array must be **Stopped** to change)_ - -_(Yes, I want to do this)_ - +_(Preserve current assignments)_: +: + +  +: + + _(Array has been **Reset**)_ (_(please configure)_) + + _(Array must be **Stopped** to change)_ + + + + + +  +: + + +
diff --git a/emhttp/plugins/dynamix/NotificationAgents.page b/emhttp/plugins/dynamix/NotificationAgents.page index dfb7e2bec..2ec66f7e4 100644 --- a/emhttp/plugins/dynamix/NotificationAgents.page +++ b/emhttp/plugins/dynamix/NotificationAgents.page @@ -126,7 +126,7 @@ foreach ($xml_files as $xml_file) { } } foreach (explode(PHP_EOL,(String) $xml->Script) as $line) if (trim($line)) $script .= trim($line)."{1}"; - echo '
'.str_replace('_',' ',$name).''.(is_file($enabledAgent) ? ''._("Enabled").'' : ''._("Disabled").'').'
'; + echo '
'.str_replace('_',' ',$name).''.(is_file($enabledAgent) ? ''._("Enabled").'' : ''._("Disabled").'').'
'; echo '
'; echo ''; echo ''; diff --git a/emhttp/plugins/dynamix/Notifications.page b/emhttp/plugins/dynamix/Notifications.page index 22e485de7..a31c737b5 100644 --- a/emhttp/plugins/dynamix/Notifications.page +++ b/emhttp/plugins/dynamix/Notifications.page @@ -111,8 +111,9 @@ $(function(){ + _(Notifications display)_: -: @@ -120,7 +121,7 @@ _(Notifications display)_: :notifications_display_help: _(Display position)_: -: @@ -131,12 +132,13 @@ _(Display position)_: :notifications_display_position_help: _(Auto-close)_ (_(seconds)_): -: _(a value of zero means no automatic closure)_ +: + _(a value of zero means no automatic closure)_ :notifications_auto_close_help: _(Date format)_: -: @@ -145,7 +147,7 @@ _(Date format)_: :notifications_date_format_help: _(Time format)_: -: @@ -153,7 +155,7 @@ _(Time format)_: :notifications_time_format_help: _(Store notifications to flash)_: -: @@ -161,7 +163,7 @@ _(Store notifications to flash)_: :notifications_store_flash_help: _(System notifications)_: -: @@ -169,7 +171,7 @@ _(System notifications)_: :notifications_system_help: _(Unraid OS update notification)_: -: @@ -181,7 +183,7 @@ _(Unraid OS update notification)_: :notifications_os_update_help: _(Plugins update notification)_: -: @@ -193,7 +195,7 @@ _(Plugins update notification)_: :notifications_plugins_update_help: _(Docker update notification)_: -: @@ -205,7 +207,7 @@ _(Docker update notification)_: :notifications_docker_update_help: _(Language update notification)_: -: @@ -215,7 +217,7 @@ _(Language update notification)_: _(Array status notification)_: -: @@ -230,57 +232,140 @@ _(Array status notification)_: :notifications_array_status_help: -: +: -: +: -: +: -: +: -: +: + :notifications_agent_selection_help: _(Notification entity)_: -: _(Notices)_ - >_(Browser)_   - >_(Email)_   - >_(Agents)_   +: + _(Notices)_ + + + + + +   -: _(Warnings)_ - >_(Browser)_   - >_(Email)_   - >_(Agents)_   +: + _(Warnings)_ + + + + + +   -: _(Alerts)_ - >_(Browser)_   - >_(Email)_   - >_(Agents)_   +: + _(Alerts)_ + + + >_(Browser)_   + + + >_(Email)_   + + + >_(Agents)_   + + :notifications_classification_help: -: +: + + + diff --git a/emhttp/plugins/dynamix/NotificationsArchive.page b/emhttp/plugins/dynamix/NotificationsArchive.page index 06cf7fb56..0ca457c94 100644 --- a/emhttp/plugins/dynamix/NotificationsArchive.page +++ b/emhttp/plugins/dynamix/NotificationsArchive.page @@ -101,8 +101,24 @@ $(function(){ // Adjust the width of thead cells when window resizes - - - -
_(Time)__(Event)__(Subject)__(Description)__(Importance)_
+ +
+ + + + + + + + + + + + + + + + +
_(Time)__(Event)__(Subject)__(Description)__(Importance)_
+
diff --git a/emhttp/plugins/dynamix/OpenDevices.page b/emhttp/plugins/dynamix/OpenDevices.page index f187aeb49..a341465b1 100644 --- a/emhttp/plugins/dynamix/OpenDevices.page +++ b/emhttp/plugins/dynamix/OpenDevices.page @@ -25,15 +25,30 @@ $('').bind({click:function() {$('i.toggle').show('slow');}}); - - - -"; -endforeach; -?> - -
_(Device)__(Identification)__(Temp)__(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
+
+ + + + + + + + + + + + + + + + + "; + endforeach; + ?> + +
_(Device)__(Identification)__(Temp)__(Reads)__(Writes)__(Errors)__(FS)__(Size)__(Used)__(Free)_
+
:open_devices_help: diff --git a/emhttp/plugins/dynamix/OutgoingProxy.page b/emhttp/plugins/dynamix/OutgoingProxy.page index bae4eac28..e48cb584a 100644 --- a/emhttp/plugins/dynamix/OutgoingProxy.page +++ b/emhttp/plugins/dynamix/OutgoingProxy.page @@ -63,9 +63,11 @@ $proxy_3_url = $url_array['full_url']; -

_(Enable Outgoing Proxy)_

+_(Enable Outgoing Proxy)_ +:   + _(Select Proxy)_: -: @@ -88,16 +90,20 @@ _(Select Proxy)_: > For a more comprehensive solution you might consider setting up _(VPN tunnel access for System)_. :end -

_(Outgoing Proxy)_ 1

+
+_(Outgoing Proxy)_ 1 +:   + _(Name)_: -: +: + :outgoing_proxy_name_plug: > Outgoing Proxy name for this Proxy. :end _(URL)_: -: +: :outgoing_proxy_url_plug: > Outgoing Proxy URL for this Proxy. The URL can be entered with or without credentials. The credentials will be parsed from the URL. @@ -106,29 +112,33 @@ _(URL)_: :end _(User)_: -: +: :outgoing_proxy_user_plug: > Outgoing Proxy User Name for this Proxy. :end _(Password)_: -: +: :outgoing_proxy_password_plug: > Outgoing Proxy Password for this Proxy. :end +
+ +
+_(Outgoing Proxy)_ 2 +:   -

_(Outgoing Proxy)_ 2

_(Name)_: -: +: :outgoing_proxy_name_plug: > Outgoing Proxy name for this Proxy. :end _(URL)_: -: +: :outgoing_proxy_url_plug: > Outgoing Proxy URL for this Proxy. The URL can be entered with or without credentials. The credentials will be parsed from the URL. @@ -137,29 +147,34 @@ _(URL)_: :end _(User)_: -: +: :outgoing_proxy_user_plug: > Outgoing Proxy User Name for this Proxy. :end _(Password)_: -: +: :outgoing_proxy_password_plug: > Outgoing Proxy Password for this Proxy. :end -

_(Outgoing Proxy)_ 3

+
+ +
+_(Outgoing Proxy)_ 3 +:   + _(Name)_: -: +: :outgoing_proxy_name_plug: > Outgoing Proxy name for this Proxy. :end _(URL)_: -: +: :outgoing_proxy_url_plug: > Outgoing Proxy URL for this Proxy. The URL can be entered with or without credentials. The credentials will be parsed from the URL. @@ -168,21 +183,26 @@ _(URL)_: :end _(User)_: -: +: :outgoing_proxy_user_plug: > Outgoing Proxy User Name for this Proxy. :end _(Password)_: -: +: :outgoing_proxy_password_plug: > Outgoing Proxy Password for this Proxy. :end +
+   -: +: + + + - - - -
_(Protocol)__(Route)__(Gateway)__(Metric)__(Delete)_
+
+ + + + + + + + + + + +
_(Protocol)__(Route)__(Gateway)__(Metric)__(Delete)_
+
@@ -63,11 +77,16 @@ _(Enter route + gateway + metric)_: : "?> - *_(optional metric (lowest is preferred))_* + + *_(optional metric (lowest is preferred))_* + :eth_routing_table_help:   -: +: + + +
diff --git a/emhttp/plugins/dynamix/SMBActiveDirectory.page b/emhttp/plugins/dynamix/SMBActiveDirectory.page index 1952ae5bf..8f6d4d164 100644 --- a/emhttp/plugins/dynamix/SMBActiveDirectory.page +++ b/emhttp/plugins/dynamix/SMBActiveDirectory.page @@ -48,5 +48,8 @@ _(AD initial group)_: :   -: +: + + + \ No newline at end of file diff --git a/emhttp/plugins/dynamix/SMBExtras.page b/emhttp/plugins/dynamix/SMBExtras.page index ffeeaefc9..483b78a16 100644 --- a/emhttp/plugins/dynamix/SMBExtras.page +++ b/emhttp/plugins/dynamix/SMBExtras.page @@ -36,7 +36,11 @@ _(Samba extra configuration)_: :   -: *_(Array must be **Stopped** to change)_* +: + + + +*_(Array must be **Stopped** to change)_* :smb_extra_button_help: diff --git a/emhttp/plugins/dynamix/SMBWorkGroup.page b/emhttp/plugins/dynamix/SMBWorkGroup.page index 7d0ceaf94..279fb27d1 100644 --- a/emhttp/plugins/dynamix/SMBWorkGroup.page +++ b/emhttp/plugins/dynamix/SMBWorkGroup.page @@ -32,5 +32,9 @@ _(Local master)_:   -: *_(Array must be **Stopped** to change)_* +: + + + +*_(Array must be **Stopped** to change)_* diff --git a/emhttp/plugins/dynamix/SMBsettings.page b/emhttp/plugins/dynamix/SMBsettings.page index 8f1587237..f7e4a6f8e 100644 --- a/emhttp/plugins/dynamix/SMBsettings.page +++ b/emhttp/plugins/dynamix/SMBsettings.page @@ -71,7 +71,11 @@ _(WSD options [experimental])_: :smb_wsd_options_help:   -: *_(Array must be **Stopped** to change)_* +: + + + +*_(Array must be **Stopped** to change)_* - + +  +: :syslinux_cfg_help: @@ -194,25 +194,38 @@ _(Syslinux configuration)_: $label = ($i) ? array_shift($area):$title; $start = in_array($menu,$area); if ($start) unset($area[array_search($menu,$area)]); -?> - title="_(Set default boot menu)_" onchange="changeMenu(this.form,this.id,true)"> - +?> + + + + +
_(Syslinux configuration)_: -: +:
_(Server boot mode)_: : -_(Permit UEFI boot mode)_ > -: *_(Boot system in UEFI mode)_. _(Please check your system settings to support UEFI boot mode)_.* +_(Boot system in UEFI mode)_: +: + *_(Please check your system settings to support UEFI boot mode)_.* -: +: + + + :syslinux_button_help: diff --git a/emhttp/plugins/dynamix/SyslogSettings.page b/emhttp/plugins/dynamix/SyslogSettings.page index 0914c7088..16b613a9c 100644 --- a/emhttp/plugins/dynamix/SyslogSettings.page +++ b/emhttp/plugins/dynamix/SyslogSettings.page @@ -181,5 +181,8 @@ _(Copy syslog to flash on shutdown)_: :syslog_shutdown_flash_help:   -: +: + + + diff --git a/emhttp/plugins/dynamix/TrimSettings.page b/emhttp/plugins/dynamix/TrimSettings.page index 8cb8807af..ec77ca257 100644 --- a/emhttp/plugins/dynamix/TrimSettings.page +++ b/emhttp/plugins/dynamix/TrimSettings.page @@ -123,5 +123,9 @@ _(Time of the day)_: :end   -: +: + + + + diff --git a/emhttp/plugins/dynamix/UserAdd.page b/emhttp/plugins/dynamix/UserAdd.page index e32f64c22..3e542e540 100644 --- a/emhttp/plugins/dynamix/UserAdd.page +++ b/emhttp/plugins/dynamix/UserAdd.page @@ -156,21 +156,28 @@ _(Description)_: :user_add_description_help: _(Custom image)_: -: _(Drag-n-drop a PNG file or click the image at the left)_ +: + + _(Drag-n-drop a PNG file or click the image at the left)_ + + :user_add_custom_image_help: _(Password)_: - -: +: + :user_password_help: _(Retype password)_: - -: +: +   -: +: + + + diff --git a/emhttp/plugins/dynamix/UserEdit.page b/emhttp/plugins/dynamix/UserEdit.page index ad044a999..498976d20 100644 --- a/emhttp/plugins/dynamix/UserEdit.page +++ b/emhttp/plugins/dynamix/UserEdit.page @@ -169,6 +169,7 @@ $(function(){
)"> + _(User name)_: : @@ -178,13 +179,16 @@ _(Description)_: :user_edit_description_help: _(Custom image)_: -: +: + - _(Drag-n-drop a PNG file or click the image at the left)_ + + + _(Drag-n-drop a PNG file or click the image at the left)_ :user_edit_custom_image_help: @@ -193,35 +197,46 @@ _(Custom image)_: _(Delete)_ -: +: + + +


+ _(Password)_: - -: +: + :user_password_help: _(Retype password)_: - -: +: +   -: +: + + +
+ _(SSH authorized keys)_: :   -: +: + + +
@@ -318,6 +333,9 @@ echo ""; ?>   -: +: + + + diff --git a/emhttp/plugins/dynamix/UserList.page b/emhttp/plugins/dynamix/UserList.page index 963e6ee6a..806a3235b 100644 --- a/emhttp/plugins/dynamix/UserList.page +++ b/emhttp/plugins/dynamix/UserList.page @@ -13,26 +13,48 @@ Tag="users" * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. */ -?> - -
_(Management Access)_
- - - -
_(Shares Access)_
- - - -

- - - -_(No users are defined)_. _(Click **Add User** to create a user for remote shares access)_ +
+ + _(Management Access)_ + +
+ +
+ + _(Shares Access)_ + +
+ +

_(No users are defined)_. _(Click **Add User** to create a user for remote shares access)_

+ +
+ + + + + +
- -
- + +
diff --git a/emhttp/plugins/dynamix/WG0.page b/emhttp/plugins/dynamix/WG0.page index e21ac8820..23d2e3b58 100644 --- a/emhttp/plugins/dynamix/WG0.page +++ b/emhttp/plugins/dynamix/WG0.page @@ -503,6 +503,7 @@ function clearTunnel(vtun) { } function addTunnel() { + console.log('addTunnel'); $.post('/webGui/include/update.wireguard.php',{'#cmd':'addtunnel','#name':''},function(){refresh();}); } @@ -1048,20 +1049,20 @@ function getPublicIP(ip,wg,protocol) { var ext_ipv6 = ips[3]; if ((protocol==''||protocol=='46') && ext_ipv4 && ip) { if (!wgx_ipv4) { - if (!wgx_ipv6) $('#endpoint4-'+wg).html("
 
_(Remark)_: _(The Local endpoint does not resolve to an IPv4 address)_. _(In most cases, this should be your public WAN IPv4)_: "+ext_ipv4+"
\n").show(); + if (!wgx_ipv6) $('#endpoint4-'+wg).html("
 
_(Remark)_: _(The Local endpoint does not resolve to an IPv4 address)_. _(In most cases, this should be your public WAN IPv4)_: "+ext_ipv4+"
\n").show(); } else if (wgx_ipv4 != ext_ipv4) { - $('#endpoint4-'+wg).html("
 
_(Remark)_: _(The Local endpoint resolves to)_ "+wgx_ipv4+". _(In most cases, this should be your public WAN IPv4 instead)_: "+ext_ipv4+"
\n").show(); + $('#endpoint4-'+wg).html("
 
_(Remark)_: _(The Local endpoint resolves to)_ "+wgx_ipv4+". _(In most cases, this should be your public WAN IPv4 instead)_: "+ext_ipv4+"
\n").show(); } else if (endpoints.includes(wgx_ipv4) && isPublic(wgx_ipv4)) { - $('#endpoint4-'+wg).html("
 
_(Remark)_: _(The Local endpoint resolves to)_ "+wgx_ipv4+". _(Your Unraid Server is reachable from the internet)_
\n").show(); + $('#endpoint4-'+wg).html("
 
_(Remark)_: _(The Local endpoint resolves to)_ "+wgx_ipv4+". _(Your Unraid Server is reachable from the internet)_
\n").show(); } } if ((protocol=='6'||protocol=='46') && ext_ipv6 && ip) { if (!wgx_ipv6) { - if (!wgx_ipv4) $('#endpoint6-'+wg).html("
 
_(Remark)_: _(The Local endpoint does not resolve to an IPv6 address)_. _(In most cases, this should be your public WAN IPv6)_: "+ext_ipv6+"
\n").show(); + if (!wgx_ipv4) $('#endpoint6-'+wg).html("
 
_(Remark)_: _(The Local endpoint does not resolve to an IPv6 address)_. _(In most cases, this should be your public WAN IPv6)_: "+ext_ipv6+"
\n").show(); } else if (wgx_ipv6 != ext_ipv6) { - $('#endpoint6-'+wg).html("
 
_(Remark)_: _(The Local endpoint resolves to)_ "+wgx_ipv6+". _(In most cases, this should be your public WAN IPv6 instead)_: "+ext_ipv6+"
\n").show(); + $('#endpoint6-'+wg).html("
 
_(Remark)_: _(The Local endpoint resolves to)_ "+wgx_ipv6+". _(In most cases, this should be your public WAN IPv6 instead)_: "+ext_ipv6+"
\n").show(); } else if (endpoints.includes(wgx_ipv6)) { - $('#endpoint6-'+wg).html("
 
_(Remark)_: _(The Local endpoint resolves to)_ "+wgx_ipv6+". _(Your Unraid Server is reachable from the internet)_
\n").show(); + $('#endpoint6-'+wg).html("
 
_(Remark)_: _(The Local endpoint resolves to)_ "+wgx_ipv6+". _(Your Unraid Server is reachable from the internet)_
\n").show(); } } @@ -1111,14 +1112,16 @@ statistics.on('message', function(data) { $(function(){ var form = $(document.wg0); - var ctrl = ""; - ctrl += "_(Autostart)_>"; - ctrl += ""; - ctrl += ""; + var ctrl = ""; + ctrl += "_(Autostart)_>"; + ctrl += ""; + ctrl += ""; + ctrl += ""; + ctrl += ""; statistics.start(); getPublicIP($('#endpoint-wg0').val(),'wg0',$('#protocol-wg0').val()); - $('div.content').prepend('
>
'); - $('div.title').eq(0).find('span.left').append(ctrl); + $('div.content').prepend('
"WireGuard" and the "WireGuard" logo are registered trademarks of Jason A. Donenfeld
>
'); + $('div.title').eq(0).find('.right').append(ctrl); $.post('/webGui/include/update.wireguard.php',{'#cmd':'upnp','#gw':"",'#link':""},function(url){ if (url) { $('div.upnp').show(); @@ -1265,30 +1268,40 @@ $(function(){ + _(Local name)_: -: " pattern="" title="_(Use only letters A-Z, digits or space,dash,underscore)_" placeholder="(_(optional)_)"> - - - +: + " pattern="" title="_(Use only letters A-Z, digits or space,dash,underscore)_" placeholder="(_(optional)_)"> + + + + + + :wg_local_name_help: -