From 84934b044de95ceb70a30ecf923a907aa735d81b Mon Sep 17 00:00:00 2001 From: KubaPro010 Date: Thu, 2 Jul 2026 13:35:49 +0200 Subject: [PATCH] don't be a puss and configure your settings with vim (or nano) --- server/server_config.js | 2 +- views/setup.ejs | 711 +++------------------------------------- web/js/rtc-audio.js | 15 +- 3 files changed, 60 insertions(+), 668 deletions(-) diff --git a/server/server_config.js b/server/server_config.js index 5374e9b..ed603f6 100644 --- a/server/server_config.js +++ b/server/server_config.js @@ -125,7 +125,7 @@ let serverConfig = { antennaNoUsersDelay: false, trustedProxies: [], webRtc: { - flags: {disable3las: false}, + flags: {disablews: false}, audio: {} } }; diff --git a/views/setup.ejs b/views/setup.ejs index 5ca4e7e..227ae8e 100644 --- a/views/setup.ejs +++ b/views/setup.ejs @@ -13,526 +13,59 @@
-
-
-
-

Dashboard

+

Dashboard

-
-
- <%= onlineUsers %> -

Online users

-
- -
- <%= memoryUsage %> - (<%= memoryHeap %> heap) -

Memory usage

-
- -
- <%= processUptime %> -

Uptime

-
+
+
+ <%= onlineUsers %> +

Online users

-
-
-

Current users

- - - - - - - - - - - <% if (connectedUsers.length > 0) { %> - <% connectedUsers.forEach(user => { %> - - - - - - - <% }); %> - <% } else { %> - - - - <% } %> - -
IP AddressLocationOnline since
- - <%= user.ip.replace('::ffff:', '') %> - - - <%= user.location %><% if (user.isp) { %> (<%= user.isp %>)<% } %> - <%= user.time %>Kick
No users online
-
+
+ <%= memoryUsage %> + (<%= memoryHeap %> heap) +

Memory usage

-
-
-

Quick settings

-
- <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Unlocked Tuner', id: 'publicTuner'}) %> - <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Admin lock', id: 'lockToAdmin'}) %>
-
- - <%- include('_components', {component: 'text', cssClass: 'w-150 br-15', placeholder: '', label: 'Tune password', id: 'password-tunePass', password: true}) %> - <%- include('_components', {component: 'text', cssClass: 'w-150 br-15', placeholder: '', label: 'Admin password', id: 'password-adminPass', password: true}) %>
-
-
- -
-
-

Console

- <% if (consoleOutput && consoleOutput.length > 0) { %> -
- <% consoleOutput.forEach(function(log) { %> -
<%= log %>
- <% }); %> -
- <% } else { %> -

No console output available.

- <% } %> -
+
+ <%= processUptime %> +

Uptime

-
-

Audio settings

- -
-
-

Device

-

Your audio device port.
- This is where your tuner is plugged in. -

- - <%- include('_components', { - component: 'dropdown', - id: 'audioList', - inputId: 'audio-audioDevice', - label: 'Audio device', - cssClass: '', - placeholder: 'Choose your audio device', - options: [ - ...videoDevices.map(device => ({ - value: device.name, - label: `${device.name}` - })), - ...audioDevices.map(device => ({ - value: device.name, - label: `${device.name}` - })) - ] - }) %> -
-
-

Channels

-

Audio channel count.
- Choose between Mono / Stereo. -

- <%- include('_components', { component: 'dropdown', id: 'audio-channels-dropdown', inputId: 'audio-audioChannels', label: 'Audio channels', cssClass: '', placeholder: 'Stereo', - options: [ - { value: '2', label: 'Stereo' }, - { value: '1', label: 'Mono' } - ] - }) %>
-
-
-

Bitrate

-

The bitrate of the mp3 audio.
- Minimum: 64 Kbps • Maximum: 320 Kbps -

- <%- include('_components', { component: 'dropdown', id: 'audio-quality-dropdown', inputId: 'audio-audioBitrate', label: 'Audio quality', cssClass: '', placeholder: '128kbps (standard)', - options: [ - { value: '64k', label: '64kbps (lowest quality)' }, - { value: '96k', label: '96kbps (low quality)' }, - { value: '128k', label: '128kbps (standard)' }, - { value: '192k', label: '192kbps (high quality)' }, - { value: '256k', label: '256kbps (very high quality)' }, - { value: '320k', label: '320kbps (ultra quality)' } - ] - }) %>
-
-
-
- -
-

Webserver settings

-
-
-

Connection

- <%- include('_components', {component: 'text', cssClass: 'w-150 br-15', placeholder: '0.0.0.0', label: 'Webserver IP', id: 'webserver-webserverIp'}) %> - <%- include('_components', {component: 'text', cssClass: 'w-100 br-15', placeholder: '8080', label: 'Webserver port', id: 'webserver-webserverPort'}) %>
-
-
-

Design

-

Background image

- <%- include('_components', {component: 'text', cssClass: 'br-15', placeholder: 'Direct image link', label: 'Image link', id: 'webserver-bgImage'}) %>
- -

Themes

- <%- include('_components', { component: 'dropdown', id: 'server-theme-selector', inputId: 'webserver-defaultTheme', label: 'Default server theme', cssClass: '', placeholder: 'Default', - options: [ - { value: 'theme1', label: 'Mint' }, - { value: 'theme2', label: 'Cappuccino' }, - { value: 'theme3', label: 'Nature' }, - { value: 'theme4', label: 'Ocean' }, - { value: 'theme5', label: 'Terminal' }, - { value: 'theme6', label: 'Nightlife' }, - { value: 'theme7', label: 'Blurple' }, - { value: 'theme8', label: 'Construction' }, - { value: 'theme9', label: 'Amoled' }, - ] - }) %>
-
-
-
-
-

Antennas

- <%- include('_components', {component: 'checkbox', cssClass: 'bottom-20', label: 'Antenna switch', id: 'antennas-enabled'}) %>
- -
-
- <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Antenna 1', id: 'antennas-ant1-enabled'}) %> - <%- include('_components', {component: 'text', cssClass: 'w-100 br-15', placeholder: 'Ant A', label: 'Antenna 1 name', id: 'antennas-ant1-name'}) %>
-
- -
- <%- include('_components', {component: 'checkbox', cssClass: 'top-25', label: 'Antenna 2', id: 'antennas-ant2-enabled'}) %> - <%- include('_components', {component: 'text', cssClass: 'w-100 br-15', placeholder: 'Ant B', label: 'Antenna 2 name', id: 'antennas-ant2-name'}) %>
-
- -
- <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Antenna 3', id: 'antennas-ant3-enabled'}) %> - <%- include('_components', {component: 'text', cssClass: 'w-100 br-15', placeholder: 'Ant C', label: 'Antenna 3 name', id: 'antennas-ant3-name'}) %>
-
- -
- <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Antenna 4', id: 'antennas-ant4-enabled'}) %> - <%- include('_components', {component: 'text', cssClass: 'w-100 br-15', placeholder: 'Ant D', label: 'Antenna 4 name', id: 'antennas-ant4-name'}) %>
-
-
-
-
- -
-
-

Tuning options

-

If you want to limit which frequencies the users can tune to,
you can set the lower and upper limit here.
- Enter frequencies in MHz. -

- - <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Limit tuning', id: 'webserver-tuningLimit'}) %>
- <%- include('_components', {component: 'text', cssClass: 'w-100 br-15', placeholder: '0', label: 'Lower limit', id: 'webserver-tuningLowerLimit'}) %> - <%- include('_components', {component: 'text', cssClass: 'w-100 br-15', placeholder: '108', label: 'Upper limit', id: 'webserver-tuningUpperLimit'}) %> -
- -
-

Presets

-

You can set up to 4 presets.
These presets are accessible with the F1-F4 buttons.
- Enter frequencies in MHz.

- <%- include('_components', {component: 'text', cssClass: 'w-100 br-15', placeholder: '87.5', label: 'Preset 1', id: 'webserver-presets-1'}) %> - <%- include('_components', {component: 'text', cssClass: 'w-100 br-15', placeholder: '87.5', label: 'Preset 2', id: 'webserver-presets-2'}) %> -
- <%- include('_components', {component: 'text', cssClass: 'w-100 br-15', placeholder: '87.5', label: 'Preset 3', id: 'webserver-presets-3'}) %> - <%- include('_components', {component: 'text', cssClass: 'w-100 br-15', placeholder: '87.5', label: 'Preset 4', id: 'webserver-presets-4'}) %> -
-
- -
-
-

RDS Mode

-

You can switch between American (RBDS) / Global (RDS) mode here.

- <%- include('_components', {component: 'checkbox', cssClass: 'bottom-20', iconClass: '', label: 'American RDS mode (RBDS)', id: 'webserver-rdsMode'}) %> -

RDS Timeout

-

If no data is received, RDS will be automatically cleared after a timeout.
- Enter timeout in seconds or 0 to disable.

- - <%- include('_components', {component: 'text', cssClass: 'w-100', placeholder: '0', label: 'RDS Timeout', id: 'webserver-rdsTimeout'}) %> -
-
-

Transmitter Search Algorithm

-

Different modes may help with more accurate transmitter identification depending on your region.

- <%- include('_components', { component: 'dropdown', id: 'server-tx-id-algo', inputId: 'webserver-txIdAlgorithm', label: 'Transmitter ID Algorithm', cssClass: '', placeholder: 'Algorithm 1', - options: [ - { value: '0', label: 'Algorithm 1' }, - { value: '1', label: 'Algorithm 2' }, - { value: '2', label: 'Algorithm 3' }, - ] - }) %> -
-
- -
- -
-

Tuner settings

-
-

Device type

-
- <%- include('_components', { component: 'dropdown', id: 'device-selector', inputId: 'device', label: 'Device', cssClass: '', placeholder: 'TEF668x / TEA685x', - options: tunerProfiles.map(profile => ({ - value: profile.id, - label: profile.label - })) - }) %>
-
-
- -
-
-

Connection type

-

If you want to choose the serial port directly, choose "Direct".
If you use xdrd or your receiver is connected via Wi-Fi, choose TCP/IP.

-
- -
-
-

Choose your desired serial port
 

- <%- include('_components', { - component: 'dropdown', - id: 'deviceList', - inputId: 'xdrd-comPort', - label: 'Serial port', - cssClass: '', - placeholder: 'Choose your serial port', - options: serialPorts.map(serialPort => ({ - value: serialPort.path, - label: `${serialPort.path} - ${serialPort.friendlyName}` - })) - }) %> -
- -
-

If you are connecting your tuner wirelessly, enter the tuner IP.
If you use xdrd, use 127.0.0.1 as your IP.

- <%- include('_components', {component: 'text', cssClass: 'w-150 br-15', label: 'xdrd IP address', id: 'xdrd-xdrdIp'}) %> - <%- include('_components', {component: 'text', cssClass: 'w-100 br-15', label: 'xdrd port', id: 'xdrd-xdrdPort'}) %> - <%- include('_components', {component: 'text', cssClass: 'w-150 br-15', label: 'xdrd password', id: 'xdrd-xdrdPassword', password: true}) %> -
-
-
-
-
-

Startup

-

Startup volume

-
- -
-

- -
-

Default frequency

- <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Default frequency for first client', id: 'enableDefaultFreq'}) %>
- <%- include('_components', {component: 'text', cssClass: 'w-100', placeholder: '87.5', label: 'Default frequency', id: 'defaultFreq'}) %> -
-
-

Miscellaneous

-
-
-

Bandwidth switch

-

Bandwidth switch allows the user to set the bandwidth manually.

- <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Bandwidth switch', id: 'bwSwitch'}) %>
-
-
-

Automatic shutdown

-

Toggling this option will put the tuner to sleep when no clients are connected.

- <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Auto-shutdown', id: 'autoShutdown'}) %>
-
-
-

SI47XX AGC control

-

Allow users to change SI47XX AGC mode from the main UI.

- <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Enable AGC control', id: 'si47xx-agcControl'}) %>
-
-
-
-
-
- -
-

Plugins

-
-

Plugin list

-

Any compatible .js plugin, which is in the "plugins" folder, will be listed here.
- Click on the individual plugins to enable/disable them.

-

- Download new plugins here! -
- -
-

Plugin settings

-
No plugin settings are available.
-
-
- -
-

Identification & Map

- -
-
-

Basic info

- -

Set your tuner name and description here.
This info will be visible to anyone who tunes in.

-
- - -
- - -
-
- -
-

Online map

-

If your location information is filled,
you can add your tuner to a public list.

- - <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Broadcast to map', id: 'identification-broadcastTuner'}) %>
- <%- include('_components', {component: 'text', cssClass: 'br-15', placeholder: 'Your e-mail or Discord...', label: 'Owner contact', id: 'identification-contact'}) %> - <%- include('_components', {component: 'text', cssClass: 'br-15', label: 'Proxy address', id: 'identification-proxyIp'}) %> - -

Check your tuner at servers.fmdx.org.

-

By activating the Broadcast to map option,
you agree to the Terms of Service.

-
-
- -
-

Location

-

Location info is useful for automatic identification of stations using RDS.

- - <%- include('_components', {component: 'text', cssClass: 'w-150 br-15', placeholder: '', label: 'Latitude', id: 'identification-lat'}) %> - <%- include('_components', {component: 'text', cssClass: 'w-150 br-15', placeholder: '', label: 'Longitude', id: 'identification-lon'}) %> - -
-
-
-
- -
-

User management

-
-

Chat options

- <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Chat', id: 'webserver-chatEnabled'}) %> -
- -
-

Banlist

-

If you have users that don't behave on your server, you can choose to ban them by their IP address.
- You can see their IP address by hovering over their nickname. One IP per row.

- +
+
+

Current users

- - - + + - - - - - - - - <% if (banlist.length > 0) { %> - <% banlist.forEach(bannedUser => { %> + <% if (connectedUsers.length > 0) { %> + <% connectedUsers.forEach(user => { %> - <% if (Array.isArray(bannedUser)) { %> - - - - - - <% } else { %> - - - - - - <% } %> - + + + + <% }); %> <% } else { %> - + <% } %> @@ -540,163 +73,31 @@ -
-

Startup settings

-
-
-

On startup

-

These settings will be applied after a server launch or restart.

-
- <% if (device === 'tef') { %> - <%- include('_components', { component: 'dropdown', id: 'ceqStartup-dropdown', inputId: 'ceqStartup', label: 'cEQ', cssClass: '', placeholder: 'Disabled', - options: [ - { value: '0', label: 'Disabled' }, - { value: '1', label: 'Enabled' }, - ] - }) %>
- <%- include('_components', { component: 'dropdown', id: 'imsStartup-dropdown', inputId: 'imsStartup', label: 'iMS', cssClass: '', placeholder: 'Disabled', - options: [ - { value: '0', label: 'Disabled' }, - { value: '1', label: 'Enabled' }, - ] - }) %>
- <% } else if (device === 'xdr') { %> - <%- include('_components', { component: 'dropdown', id: 'rfStartup-dropdown', inputId: 'ceqStartup', label: 'RF+', cssClass: '', placeholder: 'Disabled', - options: [ - { value: '0', label: 'Disabled' }, - { value: '1', label: 'Enabled' }, - ] - }) %>
- <%- include('_components', { component: 'dropdown', id: 'ifStartup-dropdown', inputId: 'imsStartup', label: 'IF+', cssClass: '', placeholder: 'Disabled', - options: [ - { value: '0', label: 'Disabled' }, - { value: '1', label: 'Enabled' }, - ] - }) %>
- <% } %> - <%- include('_components', { component: 'dropdown', id: 'stereoStartup-dropdown', inputId: 'stereoStartup', label: 'Stereo Mode', cssClass: '', placeholder: 'Stereo (Default)', - options: [ - { value: '0', label: 'Stereo (Default)' }, - { value: '1', label: 'Mono' }, - ] - }) %>
-
-
- <%- include('_components', { component: 'dropdown', id: 'antennaStartup-dropdown', inputId: 'antennaStartup', label: 'Antenna', cssClass: '', placeholder: 'Antenna 0 (Default)', - options: [ - { value: '0', label: 'Antenna 0 (Default)' }, - { value: '1', label: 'Antenna 1' }, - { value: '2', label: 'Antenna 2' }, - { value: '3', label: 'Antenna 3' }, - ] - }) %>
-
-
-
-
-
-

Empty server defaults

-

These settings will apply once the last user disconnects from the server, so the server can be ready for a new user with default settings.

-
- <%- include('_components', { component: 'dropdown', id: 'bwAutoNoUsers-dropdown', inputId: 'bwAutoNoUsers', label: 'Auto BW', cssClass: '', placeholder: 'Unchanged', - options: [ - { value: '0', label: 'Unchanged' }, - { value: '1', label: 'Enabled' }, - ] - }) %>
- <% if (device === 'tef') { %> - <%- include('_components', { component: 'dropdown', id: 'ceqNoUsers-dropdown', inputId: 'ceqNoUsers', label: 'cEQ', cssClass: '', placeholder: 'Unchanged', - options: [ - { value: '0', label: 'Unchanged' }, - { value: '1', label: 'Disabled' }, - { value: '2', label: 'Enabled' }, - ] - }) %>
- <%- include('_components', { component: 'dropdown', id: 'imsNoUsers-dropdown', inputId: 'imsNoUsers', label: 'iMS', cssClass: '', placeholder: 'Unchanged', - options: [ - { value: '0', label: 'Unchanged' }, - { value: '1', label: 'Disabled' }, - { value: '2', label: 'Enabled' }, - ] - }) %>
- <% } else if (device === 'xdr') { %> - <%- include('_components', { component: 'dropdown', id: 'rfNoUsers-dropdown', inputId: 'ceqNoUsers', label: 'RF+', cssClass: '', placeholder: 'Unchanged', - options: [ - { value: '0', label: 'Unchanged' }, - { value: '1', label: 'Disabled' }, - { value: '2', label: 'Enabled' }, - ] - }) %>
- <%- include('_components', { component: 'dropdown', id: 'ifNoUsers-dropdown', inputId: 'imsNoUsers', label: 'IF+', cssClass: '', placeholder: 'Unchanged', - options: [ - { value: '0', label: 'Unchanged' }, - { value: '1', label: 'Disabled' }, - { value: '2', label: 'Enabled' }, - ] - }) %>
- <% } %> - <%- include('_components', { component: 'dropdown', id: 'stereoNoUsers-dropdown', inputId: 'stereoNoUsers', label: 'Stereo Mode', cssClass: '', placeholder: 'Unchanged', - options: [ - { value: '0', label: 'Unchanged' }, - { value: '1', label: 'Stereo' }, - { value: '2', label: 'Mono' }, - ] - }) %>
-
-
- <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Delayed Antenna Change', id: 'antennaNoUsersDelay'}) %>
- <%- include('_components', { component: 'dropdown', id: 'antennaNoUsers-dropdown', inputId: 'antennaNoUsers', label: 'Antenna', cssClass: '', placeholder: 'Unchanged', - options: [ - { value: '0', label: 'Unchanged' }, - { value: '1', label: 'Antenna 0' }, - { value: '2', label: 'Antenna 1' }, - { value: '3', label: 'Antenna 2' }, - { value: '4', label: 'Antenna 3' }, - ] - }) %> -
-
+
+
+

Quick settings

+
+ <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Unlocked Tuner', id: 'publicTuner'}) %> + <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Admin lock', id: 'lockToAdmin'}) %>
+ + <%- include('_components', {component: 'text', cssClass: 'w-150 br-15', placeholder: '', label: 'Tune password', id: 'password-tunePass', password: true}) %> + <%- include('_components', {component: 'text', cssClass: 'w-150 br-15', placeholder: '', label: 'Admin password', id: 'password-adminPass', password: true}) %>
-
-

Extras

-
-

FMLIST Integration

-

FMLIST integration allows you to get potential DXes logged on the FMLIST Visual Logbook.
- Your server also needs to have a valid UUID, which is obtained by registering on maps in the Identification & Map tab.

- <%- include('_components', {component: 'checkbox', cssClass: 'm-right-10', label: 'FMLIST integration', id: 'extras-fmlistIntegration'}) %>
-

If you don't feel comfortable with the general public logging on your server, you can make this feature available only for people with a password

- <%- include('_components', {component: 'checkbox', cssClass: 'm-right-10', label: 'Admin-only logging', id: 'extras-fmlistAdminOnly'}) %>
- -

You can also fill in your OMID from FMLIST.org, if you want the logs to be saved to your account.

- <%- include('_components', {component: 'text', cssClass: 'w-100 br-15', placeholder: '', label: 'OMID', id: 'extras-fmlistOmid'}) %> -
-
-

Tunnel

-

When you become an FMDX.org supporter, you can host your webserver without the need of a public IP address & port forwarding.
- When you become a supporter, you can message the Founders on Discord for your login details.


-

You can also get an tunnel from kuba201 discord, one of the contributors of this version of the application.

-

Main tunnel settings

- <%- include('_components', {component: 'checkbox', cssClass: 'm-right-10', label: 'Enable tunnel', id: 'tunnel-enabled'}) %>
- <%- include('_components', { component: 'dropdown', id: 'tunnel-regionSelect', inputId: 'tunnel-region', label: 'Official server region', cssClass: '', placeholder: 'Europe', - options: [ - { value: 'eu', label: 'Europe' }, - { value: 'us', label: 'Americas' }, - { value: 'sg', label: 'Asia & Oceania' }, - ] - }) %> - <%- include('_components', {component: 'text', cssClass: 'w-150 br-15', placeholder: '', label: 'Username', id: 'tunnel-username'}) %> - <%- include('_components', {component: 'text', cssClass: 'w-250 br-15', password: true, placeholder: '', label: 'Token', id: 'tunnel-token'}) %> - <%- include('_components', {component: 'text', cssClass: 'w-150 br-15', placeholder: '', label: 'Subdomain name', id: 'tunnel-subdomain'}) %>
- <%- include('_components', {component: 'checkbox', cssClass: 'm-right-10', label: 'Low latency mode', id: 'tunnel-lowLatencyMode'}) %>
-

Enabling low latency mode may provide better experience, however it will also use more bandwidth.

- -

Community tunnel settings

-

You can also self-host or ask other people to provide you a token. In this case, the server owner is responsible for any potential security issues.

- <%- include('_components', {component: 'checkbox', cssClass: 'm-right-10', label: 'Use a community tunnel', id: 'tunnel-community-enabled'}) %>
- <%- include('_components', {component: 'text', cssClass: 'w-250 br-15', placeholder: '', label: 'Community Tunnel host (IP or hostname)', id: 'tunnel-community-host'}) %> +
+
+

Console

+ <% if (consoleOutput && consoleOutput.length > 0) { %> +
+ <% consoleOutput.forEach(function(log) { %> +
<%= log %>
+ <% }); %> +
+ <% } else { %> +

No console output available.

+ <% } %>
@@ -711,15 +112,5 @@ <% enabledPlugins?.forEach(function(plugin) { %> <% }); %> - - diff --git a/web/js/rtc-audio.js b/web/js/rtc-audio.js index 77aa25d..c03118a 100644 --- a/web/js/rtc-audio.js +++ b/web/js/rtc-audio.js @@ -3,6 +3,7 @@ * FM-DX Webserver WHEP Audio Plugin * ************************************************ * Created by techkrzysiek + * Stolen by me (thanks man) * ************************************************ */ @@ -152,7 +153,7 @@ window.addEventListener('load', (() => { } }`; - let disable3las = false; + let disablews = false; let disableMobileSelect = true; let peerConnection = null; @@ -231,7 +232,7 @@ window.addEventListener('load', (() => { return; } const flags = await response.json(); - disable3las = Boolean(flags.disable3las); + disablews = Boolean(flags.disablews); } catch (error) { console.warn('[WHEP] Failed to fetch flags:', error); } @@ -243,8 +244,8 @@ window.addEventListener('load', (() => { function getCookieDomainAttribute() { const hostname = String(window.location.hostname || '').toLowerCase(); - if (hostname === 'fmdx.pro' || hostname.endsWith('.fmdx.pro')) { - return '; domain=.fmdx.pro'; + if (hostname === 'fmtuner.org' || hostname.endsWith('.fmtuner.org')) { + return '; domain=.fmtuner.org'; } return ''; } @@ -616,7 +617,7 @@ window.addEventListener('load', (() => { function getDefaultSourceValue() { const storedValue = normalizeStoredSourceValue(getStoredSource()); - if (storedValue === LEGACY_SOURCE_VALUE && !disable3las) { + if (storedValue === LEGACY_SOURCE_VALUE && !disablews) { return LEGACY_SOURCE_VALUE; } @@ -636,7 +637,7 @@ window.addEventListener('load', (() => { const $selects = $(`.fmdx-webrtc-mode-select`); const buttonState = getActivePlaybackBackend() ? 'connected' : 'disconnected'; - if (value === LEGACY_SOURCE_VALUE && !disable3las) { + if (value === LEGACY_SOURCE_VALUE && !disablews) { if (syncSelect) { $selects.val(LEGACY_SOURCE_VALUE); } @@ -745,7 +746,7 @@ window.addEventListener('load', (() => { }); } - if (!disable3las) { + if (!disablews) { options.push({ value: LEGACY_SOURCE_VALUE, label: getLegacyOptionLabel()
IP Address LocationBan dateReasonOnline since
<%- include('_components', {component: 'text', cssClass: 'w-100 br-15', placeholder: 'IP address', label: '', id: 'banlist-add-ip'}) %><%- include('_components', {component: 'text', cssClass: 'w-150 br-15', placeholder: 'Ban reason (note)', label: '', id: 'banlist-add-reason'}) %> - -
<%= bannedUser[0] %><%= bannedUser[1] %><%= new Date(parseInt(bannedUser[2])).toLocaleString() %> <%= bannedUser[3] %><%= bannedUser %>UnknownUnknownUnknown + + <%= user.ip.replace('::ffff:', '') %> + + + <%= user.location %><% if (user.isp) { %> (<%= user.isp %>)<% } %> + <%= user.time %>Kick
The banlist is empty.No users online