236 lines
10 KiB
Vue
236 lines
10 KiB
Vue
<template>
|
|
<b-form-fieldset>
|
|
<div class="form-row">
|
|
<b-wrapped-form-group class="col-md-12" id="edit_form_frontend_type"
|
|
:field="form.frontend_type">
|
|
<template #label>
|
|
{{ $gettext('Broadcasting Service') }}
|
|
</template>
|
|
<template #description>
|
|
{{ $gettext('This software delivers your broadcast to the listening audience.') }}
|
|
</template>
|
|
<template #default="props">
|
|
<b-form-radio-group stacked :id="props.id" :options="frontendTypeOptions"
|
|
v-model="props.field.$model">
|
|
</b-form-radio-group>
|
|
</template>
|
|
</b-wrapped-form-group>
|
|
</div>
|
|
</b-form-fieldset>
|
|
|
|
<b-form-fieldset v-if="isLocalFrontend">
|
|
<b-form-fieldset v-if="isShoutcastFrontend">
|
|
<div class="form-row">
|
|
<b-wrapped-form-group class="col-md-6" id="edit_form_frontend_sc_license_id"
|
|
:field="form.frontend_config.sc_license_id">
|
|
<template #label>
|
|
{{ $gettext('Shoutcast License ID') }}
|
|
</template>
|
|
</b-wrapped-form-group>
|
|
|
|
<b-wrapped-form-group class="col-md-6" id="edit_form_frontend_sc_user_id"
|
|
:field="form.frontend_config.sc_user_id">
|
|
<template #label>
|
|
{{ $gettext('Shoutcast User ID') }}
|
|
</template>
|
|
</b-wrapped-form-group>
|
|
</div>
|
|
</b-form-fieldset>
|
|
|
|
<b-form-fieldset>
|
|
<div class="form-row">
|
|
<b-wrapped-form-group class="col-md-6" id="edit_form_frontend_source_pw"
|
|
:field="form.frontend_config.source_pw">
|
|
<template #label>
|
|
{{ $gettext('Customize Source Password') }}
|
|
</template>
|
|
<template #description>
|
|
{{ $gettext('Leave blank to automatically generate a new password.') }}
|
|
</template>
|
|
</b-wrapped-form-group>
|
|
|
|
<b-wrapped-form-group class="col-md-6" id="edit_form_frontend_admin_pw"
|
|
:field="form.frontend_config.admin_pw">
|
|
<template #label>
|
|
{{ $gettext('Customize Administrator Password') }}
|
|
</template>
|
|
<template #description>
|
|
{{ $gettext('Leave blank to automatically generate a new password.') }}
|
|
</template>
|
|
</b-wrapped-form-group>
|
|
|
|
<b-wrapped-form-group v-if="showAdvanced" class="col-md-6" id="edit_form_frontend_port"
|
|
:field="form.frontend_config.port" input-type="number"
|
|
:input-attrs="{min: '0'}" advanced>
|
|
<template #label>
|
|
{{ $gettext('Customize Broadcasting Port') }}
|
|
</template>
|
|
<template #description>
|
|
{{
|
|
$gettext('No other program can be using this port. Leave blank to automatically assign a port.')
|
|
}}
|
|
</template>
|
|
</b-wrapped-form-group>
|
|
|
|
<b-wrapped-form-group v-if="showAdvanced" class="col-md-6" id="edit_form_max_listeners"
|
|
:field="form.frontend_config.max_listeners" advanced>
|
|
<template #label>
|
|
{{ $gettext('Maximum Listeners') }}
|
|
</template>
|
|
<template #description>
|
|
{{
|
|
$gettext('Maximum number of total listeners across all streams. Leave blank to use the default.')
|
|
}}
|
|
</template>
|
|
</b-wrapped-form-group>
|
|
</div>
|
|
</b-form-fieldset>
|
|
|
|
<b-form-fieldset v-if="showAdvanced">
|
|
<div class="form-row">
|
|
<b-col md="5">
|
|
<b-wrapped-form-group id="edit_form_frontend_banned_ips"
|
|
:field="form.frontend_config.banned_ips" input-type="textarea"
|
|
:input-attrs="{class: 'text-preformatted'}" advanced>
|
|
<template #label>
|
|
{{ $gettext('Banned IP Addresses') }}
|
|
</template>
|
|
<template #description>
|
|
{{ $gettext('List one IP address or group (in CIDR format) per line.') }}
|
|
</template>
|
|
</b-wrapped-form-group>
|
|
|
|
<b-wrapped-form-group id="edit_form_frontend_allowed_ips"
|
|
:field="form.frontend_config.allowed_ips" input-type="textarea"
|
|
:input-attrs="{class: 'text-preformatted'}" advanced>
|
|
<template #label>
|
|
{{ $gettext('Allowed IP Addresses') }}
|
|
</template>
|
|
<template #description>
|
|
{{ $gettext('List one IP address or group (in CIDR format) per line.') }}
|
|
</template>
|
|
</b-wrapped-form-group>
|
|
|
|
<b-wrapped-form-group id="edit_form_frontend_banned_user_agents"
|
|
:field="form.frontend_config.banned_user_agents" input-type="textarea"
|
|
:input-attrs="{class: 'text-preformatted'}" advanced>
|
|
<template #label>
|
|
{{ $gettext('Banned User Agents') }}
|
|
</template>
|
|
<template #description>
|
|
{{ $gettext('List one user agent per line. Wildcards (*) are allowed.') }}
|
|
</template>
|
|
</b-wrapped-form-group>
|
|
</b-col>
|
|
|
|
<b-wrapped-form-group class="col-md-7" id="edit_form_frontend_banned_countries"
|
|
:field="form.frontend_config.banned_countries"
|
|
advanced>
|
|
<template #label>
|
|
{{ $gettext('Banned Countries') }}
|
|
</template>
|
|
<template #description>
|
|
{{ $gettext('Select the countries that are not allowed to connect to the streams.') }}
|
|
</template>
|
|
<template #default="props">
|
|
<b-form-select :id="props.id" v-model="props.field.$model"
|
|
:options="countryOptions" style="min-height: 300px;"
|
|
multiple></b-form-select>
|
|
|
|
<b-button block variant="outline-primary" @click.prevent="clearCountries">
|
|
{{ $gettext('Clear List') }}
|
|
</b-button>
|
|
</template>
|
|
</b-wrapped-form-group>
|
|
</div>
|
|
</b-form-fieldset>
|
|
|
|
<b-form-fieldset v-if="showAdvanced">
|
|
<template #label>
|
|
{{ $gettext('Custom Configuration') }}
|
|
</template>
|
|
<template #description>
|
|
{{ $gettext('This code will be included in the frontend configuration. Allowed formats are:') }}
|
|
<ul>
|
|
<li>JSON: <code>{"new_key": "new_value"}</code></li>
|
|
<li>XML: <code><new_key>new_value</new_key></code></li>
|
|
</ul>
|
|
</template>
|
|
|
|
<div class="form-row">
|
|
<b-wrapped-form-group class="col-md-12" id="edit_form_frontend_custom_config"
|
|
:field="form.frontend_config.custom_config" input-type="textarea"
|
|
:input-attrs="{class: 'text-preformatted', spellcheck: 'false', 'max-rows': 25, rows: 5}"
|
|
advanced>
|
|
<template #label>
|
|
{{ $gettext('Custom Configuration') }}
|
|
</template>
|
|
</b-wrapped-form-group>
|
|
</div>
|
|
</b-form-fieldset>
|
|
</b-form-fieldset>
|
|
</template>
|
|
|
|
<script setup>
|
|
import BFormFieldset from "~/components/Form/BFormFieldset";
|
|
import BWrappedFormGroup from "~/components/Form/BWrappedFormGroup";
|
|
import {FRONTEND_ICECAST, FRONTEND_REMOTE, FRONTEND_SHOUTCAST} from "~/components/Entity/RadioAdapters";
|
|
import objectToFormOptions from "~/functions/objectToFormOptions";
|
|
import {computed} from "vue";
|
|
import gettext from "~/vendor/gettext";
|
|
|
|
const props = defineProps({
|
|
form: Object,
|
|
isShoutcastInstalled: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
countries: Object,
|
|
showAdvanced: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
});
|
|
|
|
const {$gettext} = gettext;
|
|
|
|
const frontendTypeOptions = computed(() => {
|
|
let frontendOptions = [
|
|
{
|
|
text: $gettext('Use Icecast 2.4 on this server.'),
|
|
value: FRONTEND_ICECAST
|
|
},
|
|
];
|
|
|
|
if (props.isShoutcastInstalled) {
|
|
frontendOptions.push({
|
|
text: $gettext('Use Shoutcast DNAS 2 on this server.'),
|
|
value: FRONTEND_SHOUTCAST
|
|
});
|
|
}
|
|
|
|
frontendOptions.push({
|
|
text: $gettext('Only connect to a remote server.'),
|
|
value: FRONTEND_REMOTE
|
|
});
|
|
|
|
return frontendOptions;
|
|
});
|
|
|
|
const countryOptions = computed(() => {
|
|
return objectToFormOptions(props.countries);
|
|
});
|
|
|
|
const isLocalFrontend = computed(() => {
|
|
return props.form.frontend_type.$model !== FRONTEND_REMOTE;
|
|
});
|
|
|
|
const isShoutcastFrontend = computed(() => {
|
|
return props.form.frontend_type.$model === FRONTEND_SHOUTCAST;
|
|
});
|
|
|
|
const clearCountries = () => {
|
|
props.form.frontend_config.banned_countries.$model = [];
|
|
}
|
|
</script>
|