160 lines
6.3 KiB
Vue
160 lines
6.3 KiB
Vue
<script setup>
|
|
import { computed, ref } from 'vue'
|
|
import Checkbox from "../../Checkbox.vue";
|
|
|
|
const props = defineProps([
|
|
'platform',
|
|
'config'
|
|
])
|
|
|
|
const defaultMoonlightPort = 47989
|
|
|
|
const config = ref(props.config)
|
|
const effectivePort = computed(() => +config.value?.port ?? defaultMoonlightPort)
|
|
</script>
|
|
|
|
<template>
|
|
<div id="network" class="config-page">
|
|
<!-- UPnP -->
|
|
<Checkbox class="mb-3"
|
|
id="upnp"
|
|
locale-prefix="config"
|
|
v-model="config.upnp"
|
|
default="false"
|
|
></Checkbox>
|
|
|
|
<!-- Address family -->
|
|
<div class="mb-3">
|
|
<label for="address_family" class="form-label">{{ $t('config.address_family') }}</label>
|
|
<select id="address_family" class="form-select" v-model="config.address_family">
|
|
<option value="ipv4">{{ $t('config.address_family_ipv4') }}</option>
|
|
<option value="both">{{ $t('config.address_family_both') }}</option>
|
|
</select>
|
|
<div class="form-text">{{ $t('config.address_family_desc') }}</div>
|
|
</div>
|
|
|
|
<!-- Port family -->
|
|
<div class="mb-3">
|
|
<label for="port" class="form-label">{{ $t('config.port') }}</label>
|
|
<input type="number" min="1029" max="65514" class="form-control" id="port" :placeholder="defaultMoonlightPort"
|
|
v-model="config.port" />
|
|
<div class="form-text">{{ $t('config.port_desc') }}</div>
|
|
<!-- Add warning if any port is less than 1024 -->
|
|
<div class="alert alert-danger" v-if="(+effectivePort - 5) < 1024">
|
|
<i class="fa-solid fa-xl fa-triangle-exclamation"></i> {{ $t('config.port_alert_1') }}
|
|
</div>
|
|
<!-- Add warning if any port is above 65535 -->
|
|
<div class="alert alert-danger" v-if="(+effectivePort + 21) > 65535">
|
|
<i class="fa-solid fa-xl fa-triangle-exclamation"></i> {{ $t('config.port_alert_2') }}
|
|
</div>
|
|
<!-- Create a port table for the various ports needed by Sunshine -->
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col">{{ $t('config.port_protocol') }}</th>
|
|
<th scope="col">{{ $t('config.port_port') }}</th>
|
|
<th scope="col">{{ $t('config.port_note') }}</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<!-- HTTPS -->
|
|
<td>{{ $t('config.port_tcp') }}</td>
|
|
<td>{{+effectivePort - 5}}</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<!-- HTTP -->
|
|
<td>{{ $t('config.port_tcp') }}</td>
|
|
<td>{{+effectivePort}}</td>
|
|
<td>
|
|
<div class="alert alert-primary" role="alert" v-if="+effectivePort !== defaultMoonlightPort">
|
|
<i class="fa-solid fa-xl fa-circle-info"></i> {{ $t('config.port_http_port_note') }}
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<!-- Web UI -->
|
|
<td>{{ $t('config.port_tcp') }}</td>
|
|
<td>{{+effectivePort + 1}}</td>
|
|
<td>{{ $t('config.port_web_ui') }}</td>
|
|
</tr>
|
|
<tr>
|
|
<!-- RTSP -->
|
|
<td>{{ $t('config.port_tcp') }}</td>
|
|
<td>{{+effectivePort + 21}}</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<!-- Video, Control, Audio -->
|
|
<td>{{ $t('config.port_udp') }}</td>
|
|
<td>{{+effectivePort + 9}} - {{+effectivePort + 11}}</td>
|
|
<td></td>
|
|
</tr>
|
|
<!-- <tr>-->
|
|
<!-- <!– Mic –>-->
|
|
<!-- <td>UDP</td>-->
|
|
<!-- <td>{{+effectivePort + 13}}</td>-->
|
|
<!-- <td></td>-->
|
|
<!-- </tr>-->
|
|
</tbody>
|
|
</table>
|
|
<!-- add warning about exposing web ui to the internet -->
|
|
<div class="alert alert-warning" v-if="config.origin_web_ui_allowed === 'wan'">
|
|
<i class="fa-solid fa-xl fa-triangle-exclamation"></i> {{ $t('config.port_warning') }}
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Origin Web UI Allowed -->
|
|
<div class="mb-3">
|
|
<label for="origin_web_ui_allowed" class="form-label">{{ $t('config.origin_web_ui_allowed') }}</label>
|
|
<select id="origin_web_ui_allowed" class="form-select" v-model="config.origin_web_ui_allowed">
|
|
<option value="pc">{{ $t('config.origin_web_ui_allowed_pc') }}</option>
|
|
<option value="lan">{{ $t('config.origin_web_ui_allowed_lan') }}</option>
|
|
<option value="wan">{{ $t('config.origin_web_ui_allowed_wan') }}</option>
|
|
</select>
|
|
<div class="form-text">{{ $t('config.origin_web_ui_allowed_desc') }}</div>
|
|
</div>
|
|
|
|
<!-- External IP -->
|
|
<div class="mb-3">
|
|
<label for="external_ip" class="form-label">{{ $t('config.external_ip') }}</label>
|
|
<input type="text" class="form-control" id="external_ip" placeholder="123.456.789.12" v-model="config.external_ip" />
|
|
<div class="form-text">{{ $t('config.external_ip_desc') }}</div>
|
|
</div>
|
|
|
|
<!-- LAN Encryption Mode -->
|
|
<div class="mb-3">
|
|
<label for="lan_encryption_mode" class="form-label">{{ $t('config.lan_encryption_mode') }}</label>
|
|
<select id="lan_encryption_mode" class="form-select" v-model="config.lan_encryption_mode">
|
|
<option value="0">{{ $t('_common.disabled_def') }}</option>
|
|
<option value="1">{{ $t('config.lan_encryption_mode_1') }}</option>
|
|
<option value="2">{{ $t('config.lan_encryption_mode_2') }}</option>
|
|
</select>
|
|
<div class="form-text">{{ $t('config.lan_encryption_mode_desc') }}</div>
|
|
</div>
|
|
|
|
<!-- WAN Encryption Mode -->
|
|
<div class="mb-3">
|
|
<label for="wan_encryption_mode" class="form-label">{{ $t('config.wan_encryption_mode') }}</label>
|
|
<select id="wan_encryption_mode" class="form-select" v-model="config.wan_encryption_mode">
|
|
<option value="0">{{ $t('_common.disabled') }}</option>
|
|
<option value="1">{{ $t('config.wan_encryption_mode_1') }}</option>
|
|
<option value="2">{{ $t('config.wan_encryption_mode_2') }}</option>
|
|
</select>
|
|
<div class="form-text">{{ $t('config.wan_encryption_mode_desc') }}</div>
|
|
</div>
|
|
|
|
<!-- Ping Timeout -->
|
|
<div class="mb-3">
|
|
<label for="ping_timeout" class="form-label">{{ $t('config.ping_timeout') }}</label>
|
|
<input type="text" class="form-control" id="ping_timeout" placeholder="10000" v-model="config.ping_timeout" />
|
|
<div class="form-text">{{ $t('config.ping_timeout_desc') }}</div>
|
|
</div>
|
|
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped>
|
|
|
|
</style>
|