translations #106
This commit is contained in:
@@ -1,17 +1,17 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-card subtitle="Dial" style="background-color: inherit;">
|
<v-card :subtitle="$t('objects.dial')" style="background-color: inherit;">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="optionDetour">
|
<v-col cols="12" sm="6" md="4" v-if="optionDetour">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Forward to Outbound tag"
|
:label="$t('listen.detourText')"
|
||||||
:items="outTags"
|
:items="outTags"
|
||||||
v-model="dial.detour">
|
v-model="dial.detour">
|
||||||
</v-select>
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="optionBind">
|
<v-col cols="12" sm="6" md="4" v-if="optionBind">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Bind to Network Interface"
|
:label="$t('dial.bindIf')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="dial.bind_interface"></v-text-field>
|
v-model="dial.bind_interface"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
@@ -19,13 +19,13 @@
|
|||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="optionIPV4">
|
<v-col cols="12" sm="6" md="4" v-if="optionIPV4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Bind to IPv4"
|
:label="$t('dial.bindIp4')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="dial.inet4_bind_address"></v-text-field>
|
v-model="dial.inet4_bind_address"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="optionIPV6">
|
<v-col cols="12" sm="6" md="4" v-if="optionIPV6">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Bind to IPv6"
|
:label="$t('dial.bindIp6')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="dial.inet6_bind_address"></v-text-field>
|
v-model="dial.inet6_bind_address"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
v-model.number="routingMark"></v-text-field>
|
v-model.number="routingMark"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="optionRA">
|
<v-col cols="12" sm="6" md="4" v-if="optionRA">
|
||||||
<v-switch v-model="dial.reuse_addr" color="primary" label="Reuse listener address" hide-details></v-switch>
|
<v-switch v-model="dial.reuse_addr" color="primary" :label="$t('dial.reuseAddr')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row v-if="optionTCP">
|
<v-row v-if="optionTCP">
|
||||||
@@ -57,11 +57,11 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="optionCT">
|
<v-col cols="12" sm="6" md="4" v-if="optionCT">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Connection Timeout"
|
:label="$t('dial.connTimeout')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
min="1"
|
min="1"
|
||||||
suffix="s"
|
:suffix="$t('date.s')"
|
||||||
v-model.number="connectTimeout"></v-text-field>
|
v-model.number="connectTimeout"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
@@ -72,19 +72,19 @@
|
|||||||
clearable
|
clearable
|
||||||
@click:clear="delete dial.domain_strategy"
|
@click:clear="delete dial.domain_strategy"
|
||||||
width="100"
|
width="100"
|
||||||
label="Domain to IP Strategy"
|
:label="$t('listen.domainStrategy')"
|
||||||
:items="['prefer_ipv4','prefer_ipv6','ipv4_only','ipv6_only']"
|
:items="['prefer_ipv4','prefer_ipv6','ipv4_only','ipv6_only']"
|
||||||
v-model="dial.domain_strategy">
|
v-model="dial.domain_strategy">
|
||||||
</v-select>
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Fallback Timeout"
|
:label="$t('dial.fbTimeout')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
min="50"
|
min="50"
|
||||||
step="50"
|
step="50"
|
||||||
suffix="ms"
|
:suffix="$t('date.ms')"
|
||||||
v-model.number="fallbackDelay"></v-text-field>
|
v-model.number="fallbackDelay"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
@@ -92,39 +92,39 @@
|
|||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
||||||
<template v-slot:activator="{ props }">
|
<template v-slot:activator="{ props }">
|
||||||
<v-btn v-bind="props" hide-details>Dial Options</v-btn>
|
<v-btn v-bind="props" hide-details>{{ $t('dial.options') }}</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-list>
|
<v-list>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionDetour" color="primary" label="Detour" hide-details></v-switch>
|
<v-switch v-model="optionDetour" color="primary" :label="$t('listen.detour')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionBind" color="primary" label="Bind Interface" hide-details></v-switch>
|
<v-switch v-model="optionBind" color="primary" :label="$t('dial.bindIf')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionIPV4" color="primary" label="Bind to IPv4" hide-details></v-switch>
|
<v-switch v-model="optionIPV4" color="primary" :label="$t('dial.bindIp4')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionIPV6" color="primary" label="Bind to IPv6" hide-details></v-switch>
|
<v-switch v-model="optionIPV6" color="primary" :label="$t('dial.bindIp6')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionRM" color="primary" label="Routing Mark" hide-details></v-switch>
|
<v-switch v-model="optionRM" color="primary" label="Routing Mark" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionRA" color="primary" label="Reuse Address" hide-details></v-switch>
|
<v-switch v-model="optionRA" color="primary" :label="$t('dial.reuseAddr')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionTCP" color="primary" label="TCP Options" hide-details></v-switch>
|
<v-switch v-model="optionTCP" color="primary" :label="$t('listen.tcpOptions')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionUDP" color="primary" label="UDP Options" hide-details></v-switch>
|
<v-switch v-model="optionUDP" color="primary" :label="$t('listen.udpOptions')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionCT" color="primary" label="Connection Timeout" hide-details></v-switch>
|
<v-switch v-model="optionCT" color="primary" :label="$t('dial.connTimeout')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionDS" color="primary" label="Domain Strategy" hide-details></v-switch>
|
<v-switch v-model="optionDS" color="primary" :label="$t('listen.domainStrategy')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-card subtitle="Headers">
|
<v-card>
|
||||||
|
<v-card-subtitle>
|
||||||
|
{{ $t('objects.headers') }}
|
||||||
|
<v-icon @click="add_header" icon="mdi-plus"></v-icon>
|
||||||
|
</v-card-subtitle>
|
||||||
<v-row v-for="(header, index) in hdrs">
|
<v-row v-for="(header, index) in hdrs">
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Key"
|
:label="$t('objects.key')"
|
||||||
hide-details
|
hide-details
|
||||||
@input="update_key(index,$event.target.value)"
|
@input="update_key(index,$event.target.value)"
|
||||||
v-model="header.name">
|
v-model="header.name">
|
||||||
@@ -11,7 +15,7 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Value"
|
:label="$t('objects.value')"
|
||||||
hide-details
|
hide-details
|
||||||
@input="update_value(index,$event.target.value)"
|
@input="update_value(index,$event.target.value)"
|
||||||
append-icon="mdi-delete"
|
append-icon="mdi-delete"
|
||||||
@@ -20,10 +24,6 @@
|
|||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-card-actions>
|
|
||||||
<v-spacer></v-spacer>
|
|
||||||
<v-btn hide-details @click="add_header" density="compact" icon="mdi-plus"></v-btn>
|
|
||||||
</v-card-actions>
|
|
||||||
</v-card>
|
</v-card>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-card :subtitle="$t('in.tls')">
|
<v-card :subtitle="$t('objects.tls')">
|
||||||
<v-row v-if="tlsOptional">
|
<v-row v-if="tlsOptional">
|
||||||
<v-col cols="auto">
|
<v-col cols="auto">
|
||||||
<v-switch color="primary" :label="$t('tls.enable')" v-model="tlsEnable" hide-details></v-switch>
|
<v-switch color="primary" :label="$t('tls.enable')" v-model="tlsEnable" hide-details></v-switch>
|
||||||
@@ -77,7 +77,7 @@
|
|||||||
<v-col cols="12" sm="6" md="4" v-if="tls.min_version">
|
<v-col cols="12" sm="6" md="4" v-if="tls.min_version">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Minimum Version"
|
:label="$t('tls.minVer')"
|
||||||
:items="tlsVersions"
|
:items="tlsVersions"
|
||||||
v-model="tls.min_version">
|
v-model="tls.min_version">
|
||||||
</v-select>
|
</v-select>
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
<v-col cols="12" sm="6" md="4" v-if="tls.max_version">
|
<v-col cols="12" sm="6" md="4" v-if="tls.max_version">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Maximum Version"
|
:label="$t('tls.maxVer')"
|
||||||
:items="tlsVersions"
|
:items="tlsVersions"
|
||||||
v-model="tls.max_version">
|
v-model="tls.max_version">
|
||||||
</v-select>
|
</v-select>
|
||||||
@@ -95,7 +95,7 @@
|
|||||||
<v-col cols="12" md="8" v-if="tls.cipher_suites != undefined">
|
<v-col cols="12" md="8" v-if="tls.cipher_suites != undefined">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Cipher Suites"
|
:label="$t('tls.cs')"
|
||||||
multiple
|
multiple
|
||||||
:items="cipher_suites"
|
:items="cipher_suites"
|
||||||
v-model="tls.cipher_suites">
|
v-model="tls.cipher_suites">
|
||||||
@@ -107,7 +107,7 @@
|
|||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-menu v-model="menu" :close-on-content-click="false" location="start" v-if="tls.enabled">
|
<v-menu v-model="menu" :close-on-content-click="false" location="start" v-if="tls.enabled">
|
||||||
<template v-slot:activator="{ props }">
|
<template v-slot:activator="{ props }">
|
||||||
<v-btn v-bind="props" hide-details>TLS Options</v-btn>
|
<v-btn v-bind="props" hide-details>{{ $t('tls.options') }}</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-list>
|
<v-list>
|
||||||
@@ -118,13 +118,13 @@
|
|||||||
<v-switch v-model="optionALPN" color="primary" label="ALPN" hide-details></v-switch>
|
<v-switch v-model="optionALPN" color="primary" label="ALPN" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionMinV" color="primary" label="Min Version" hide-details></v-switch>
|
<v-switch v-model="optionMinV" color="primary" :label="$t('tls.minVer')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionMaxV" color="primary" label="Max Version" hide-details></v-switch>
|
<v-switch v-model="optionMaxV" color="primary" :label="$t('tls.maxVer')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionCS" color="primary" label="Cipher Suites" hide-details></v-switch>
|
<v-switch v-model="optionCS" color="primary" :label="$t('tls.cs')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-card subtitle="Listen">
|
<v-card :subtitle="$t('objects.listen')">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
@@ -21,28 +21,28 @@
|
|||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="optionDetour">
|
<v-col cols="12" sm="6" md="4" v-if="optionDetour">
|
||||||
<v-select
|
<v-select
|
||||||
label="Detour"
|
:label="$t('listen.detourText')"
|
||||||
hide-details
|
hide-details
|
||||||
:items="inTags"
|
:items="inTags"
|
||||||
v-model="inbound.detour">
|
v-model="inbound.detour">
|
||||||
</v-select>
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch v-model="inbound.sniff" color="primary" :label="$t('in.sniffing')" hide-details></v-switch>
|
<v-switch v-model="inbound.sniff" color="primary" :label="$t('listen.sniffing')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row v-if="inbound.sniff">
|
<v-row v-if="inbound.sniff">
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch v-model="inbound.sniff_override_destination" color="primary" label="Override Sniffed Domain" hide-details></v-switch>
|
<v-switch v-model="inbound.sniff_override_destination" color="primary" :label="$t('listen.sniffingOverride')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Sniffing Timeout"
|
:label="$t('listen.sniffingTimeout')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
min="50"
|
min="50"
|
||||||
step="50"
|
step="50"
|
||||||
suffix="ms"
|
:suffix="$t('date.ms')"
|
||||||
v-model.number="sniffTimeout"></v-text-field>
|
v-model.number="sniffTimeout"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
min="1"
|
min="1"
|
||||||
suffix="Min"
|
:suffix="$t('date.m')"
|
||||||
v-model.number="udpTimeout"></v-text-field>
|
v-model.number="udpTimeout"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
width="100"
|
width="100"
|
||||||
label="Domain to IP Strategy"
|
:label="$t('listen.domainStrategy')"
|
||||||
:items="['prefer_ipv4','prefer_ipv6','ipv4_only','ipv6_only']"
|
:items="['prefer_ipv4','prefer_ipv6','ipv4_only','ipv6_only']"
|
||||||
v-model="inbound.domain_strategy">
|
v-model="inbound.domain_strategy">
|
||||||
</v-select>
|
</v-select>
|
||||||
@@ -83,21 +83,21 @@
|
|||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
||||||
<template v-slot:activator="{ props }">
|
<template v-slot:activator="{ props }">
|
||||||
<v-btn v-bind="props" hide-details>Listen Options</v-btn>
|
<v-btn v-bind="props" hide-details>{{ $t('listen.options') }}</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-list>
|
<v-list>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionTCP" color="primary" label="TCP Options" hide-details></v-switch>
|
<v-switch v-model="optionDetour" color="primary" :label="$t('listen.detour')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionUDP" color="primary" label="UDP Options" hide-details></v-switch>
|
<v-switch v-model="optionTCP" color="primary" :label="$t('listen.tcpOptions')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionDetour" color="primary" label="Detour" hide-details></v-switch>
|
<v-switch v-model="optionUDP" color="primary" :label="$t('listen.udpOptions')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionDS" color="primary" label="Domain Strategy" hide-details></v-switch>
|
<v-switch v-model="optionDS" color="primary" :label="$t('listen.domainStrategy')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-card :subtitle="$t('in.multiplex')">
|
<v-card :subtitle="$t('objects.multiplex')">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch color="primary" label="Enable Multiplex" v-model="muxEnable" hide-details></v-switch>
|
<v-switch color="primary" :label="$t('mux.enable')" v-model="muxEnable" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
<template v-if="mux.enabled">
|
<template v-if="mux.enabled">
|
||||||
<template v-if="direction=='out'">
|
<template v-if="direction=='out'">
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
:items="[ 'smux', 'yamux', 'h2mux']"
|
:items="[ 'smux', 'yamux', 'h2mux']"
|
||||||
label="Protocol"
|
:label="$t('protocol')"
|
||||||
clearable
|
clearable
|
||||||
@click:clear="mux.protocol=undefined"
|
@click:clear="mux.protocol=undefined"
|
||||||
v-model="mux.protocol">
|
v-model="mux.protocol">
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Max Connections"
|
:label="$t('mux.maxConn')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
min=0
|
min=0
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Min Streams"
|
:label="$t('mux.minStr')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
min=0
|
min=0
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Max Streams"
|
:label="$t('mux.maxStr')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
:min="min_streams"
|
:min="min_streams"
|
||||||
@@ -45,29 +45,29 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
</template>
|
</template>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch color="primary" label="Reject Non-Padded" v-model="mux.padding" hide-details></v-switch>
|
<v-switch color="primary" :label="$t('mux.padding')" v-model="mux.padding" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch color="primary" label="Enable Brutal" v-model="burtalEnable" hide-details></v-switch>
|
<v-switch color="primary" :label="$t('mux.enableBrutal')" v-model="burtalEnable" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</template>
|
</template>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row v-if="mux.brutal?.enabled">
|
<v-row v-if="mux.brutal?.enabled">
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Uplink Bandwidth"
|
:label="$t('stats.upload')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
suffix="Mbps"
|
:suffix="$t('stats.Mbps')"
|
||||||
v-model.number="up_mbps">
|
v-model.number="up_mbps">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Downlink Bandwidth"
|
:label="$t('stats.download')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
suffix="Mbps"
|
:suffix="$t('stats.Mbps')"
|
||||||
min="0"
|
min="0"
|
||||||
v-model.number="down_mbps">
|
v-model.number="down_mbps">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-card :subtitle="$t('in.tls')">
|
<v-card :subtitle="$t('objects.tls')">
|
||||||
<v-row v-if="tlsOptional">
|
<v-row v-if="tlsOptional">
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch color="primary" :label="$t('tls.enable')" v-model="tlsEnable" hide-details></v-switch>
|
<v-switch color="primary" :label="$t('tls.enable')" v-model="tlsEnable" hide-details></v-switch>
|
||||||
@@ -8,10 +8,10 @@
|
|||||||
<template v-if="tls.enabled">
|
<template v-if="tls.enabled">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch color="primary" label="Disable SNI" v-model="disable_sni" hide-details></v-switch>
|
<v-switch color="primary" :label="$t('tls.disableSni')" v-model="disable_sni" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch color="primary" label="Allow Insecure" v-model="insecure" hide-details></v-switch>
|
<v-switch color="primary" :label="$t('tls.insecure')" v-model="insecure" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<template v-if="optionCert">
|
<template v-if="optionCert">
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
<v-col cols="12" sm="6" md="4" v-if="tls.min_version">
|
<v-col cols="12" sm="6" md="4" v-if="tls.min_version">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Minimum Version"
|
:label="$t('tls.minVer')"
|
||||||
:items="tlsVersions"
|
:items="tlsVersions"
|
||||||
v-model="tls.min_version">
|
v-model="tls.min_version">
|
||||||
</v-select>
|
</v-select>
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
<v-col cols="12" sm="6" md="4" v-if="tls.max_version">
|
<v-col cols="12" sm="6" md="4" v-if="tls.max_version">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Maximum Version"
|
:label="$t('tls.maxVer')"
|
||||||
:items="tlsVersions"
|
:items="tlsVersions"
|
||||||
v-model="tls.max_version">
|
v-model="tls.max_version">
|
||||||
</v-select>
|
</v-select>
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
<v-col cols="12" md="8">
|
<v-col cols="12" md="8">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Cipher Suites"
|
:label="$t('tls.cs')"
|
||||||
multiple
|
multiple
|
||||||
:items="cipher_suites"
|
:items="cipher_suites"
|
||||||
v-model="tls.cipher_suites">
|
v-model="tls.cipher_suites">
|
||||||
@@ -111,7 +111,7 @@
|
|||||||
<v-row v-if="tls.reality != undefined">
|
<v-row v-if="tls.reality != undefined">
|
||||||
<v-col cols="12" md="6">
|
<v-col cols="12" md="6">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Public Key"
|
:label="$t('tls.pubKey')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="tls.reality.public_key">
|
v-model="tls.reality.public_key">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
@@ -177,12 +177,12 @@
|
|||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
||||||
<template v-slot:activator="{ props }">
|
<template v-slot:activator="{ props }">
|
||||||
<v-btn v-bind="props" hide-details>TLS Options</v-btn>
|
<v-btn v-bind="props" hide-details>{{ $t('tls.options') }}</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-list>
|
<v-list>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionCert" color="primary" label="Certificate" hide-details></v-switch>
|
<v-switch v-model="optionCert" color="primary" :label="$t('tls.cert')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionSNI" color="primary" label="SNI" hide-details></v-switch>
|
<v-switch v-model="optionSNI" color="primary" label="SNI" hide-details></v-switch>
|
||||||
@@ -191,13 +191,13 @@
|
|||||||
<v-switch v-model="optionALPN" color="primary" label="ALPN" hide-details></v-switch>
|
<v-switch v-model="optionALPN" color="primary" label="ALPN" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionMinV" color="primary" label="Min Version" hide-details></v-switch>
|
<v-switch v-model="optionMinV" color="primary" :label="$t('tls.minVer')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionMaxV" color="primary" label="Max Version" hide-details></v-switch>
|
<v-switch v-model="optionMaxV" color="primary" :label="$t('tls.maxVer')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionCS" color="primary" label="Cipher Suites" hide-details></v-switch>
|
<v-switch v-model="optionCS" color="primary" :label="$t('tls.cs')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionFP" color="primary" label="UTLS" hide-details></v-switch>
|
<v-switch v-model="optionFP" color="primary" label="UTLS" hide-details></v-switch>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
<v-col cols="12" sm="6" md="4" v-if="optionIPver">
|
<v-col cols="12" sm="6" md="4" v-if="optionIPver">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="IP Version"
|
:label="$t('rule.ipVer')"
|
||||||
:items="[4,6]"
|
:items="[4,6]"
|
||||||
v-model.number="rule.ip_version">
|
v-model.number="rule.ip_version">
|
||||||
</v-select>
|
</v-select>
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
<v-combobox
|
<v-combobox
|
||||||
v-model="rule.protocol"
|
v-model="rule.protocol"
|
||||||
:items="['http','tls', 'quic', 'stun', 'dns']"
|
:items="['http','tls', 'quic', 'stun', 'dns']"
|
||||||
label="Protocols"
|
:label="$t('protocol')"
|
||||||
multiple
|
multiple
|
||||||
chips
|
chips
|
||||||
hide-details
|
hide-details
|
||||||
@@ -51,36 +51,36 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" v-if="rule.domain != undefined">
|
<v-col cols="12" sm="6" v-if="rule.domain != undefined">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Domains (comma separated)"
|
:label="$t('rule.domain') + ' ' + $t('commaSeparated')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="domain"></v-text-field>
|
v-model="domain"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" v-if="rule.domain_suffix != undefined">
|
<v-col cols="12" sm="6" v-if="rule.domain_suffix != undefined">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Domain Suffixes (comma separated)"
|
:label="$t('rule.domainSufix') + ' ' + $t('commaSeparated')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="domain_suffix"></v-text-field>
|
v-model="domain_suffix"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" v-if="rule.domain_keyword != undefined">
|
<v-col cols="12" sm="6" v-if="rule.domain_keyword != undefined">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Domain Keywords (comma separated)"
|
:label="$t('rule.domainKw') + ' ' + $t('commaSeparated')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="domain_keyword"></v-text-field>
|
v-model="domain_keyword"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" v-if="rule.domain_regex != undefined">
|
<v-col cols="12" sm="6" v-if="rule.domain_regex != undefined">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Domain Regexes (comma separated)"
|
:label="$t('rule.domainRgx') + ' ' + $t('commaSeparated')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="domain_regex"></v-text-field>
|
v-model="domain_regex"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" v-if="rule.ip_cidr != undefined">
|
<v-col cols="12" sm="6" v-if="rule.ip_cidr != undefined">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="IP CIDRs (comma separated)"
|
:label="$t('rule.ip') + ' ' + $t('commaSeparated')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="ip_cidr"></v-text-field>
|
v-model="ip_cidr"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" v-if="rule.ip_is_private != undefined">
|
<v-col cols="12" sm="6" v-if="rule.ip_is_private != undefined">
|
||||||
<v-switch v-model="rule.ip_is_private" color="primary" label="Private IP" hide-details></v-switch>
|
<v-switch v-model="rule.ip_is_private" color="primary" :label="$t('rule.privateIp')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row v-if="optionPort">
|
<v-row v-if="optionPort">
|
||||||
@@ -94,13 +94,13 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" v-if="rule.port != undefined">
|
<v-col cols="12" sm="6" v-if="rule.port != undefined">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Ports (comma separated)"
|
:label="$t('rule.port') + ' ' + $t('commaSeparated')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="port"></v-text-field>
|
v-model="port"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" v-if="rule.port_range != undefined">
|
<v-col cols="12" sm="6" v-if="rule.port_range != undefined">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Port Ranges (comma separated)"
|
:label="$t('rule.portRange') + ' ' + $t('commaSeparated')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="port_range"></v-text-field>
|
v-model="port_range"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
@@ -116,12 +116,12 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" v-if="rule.source_ip_cidr != undefined">
|
<v-col cols="12" sm="6" v-if="rule.source_ip_cidr != undefined">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Source IP CIDRs (comma separated)"
|
:label="$t('rule.srcIp') + ' ' + $t('commaSeparated')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="source_ip_cidr"></v-text-field>
|
v-model="source_ip_cidr"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" v-if="rule.source_ip_is_private != undefined">
|
<v-col cols="12" sm="6" v-if="rule.source_ip_is_private != undefined">
|
||||||
<v-switch v-model="rule.source_ip_is_private" color="primary" label="Private Source IP" hide-details></v-switch>
|
<v-switch v-model="rule.source_ip_is_private" color="primary" :label="$t('rule.srcPrivateIp')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row v-if="optionSrcPort">
|
<v-row v-if="optionSrcPort">
|
||||||
@@ -135,13 +135,13 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" v-if="rule.source_port != undefined">
|
<v-col cols="12" sm="6" v-if="rule.source_port != undefined">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Source Ports (comma separated)"
|
:label="$t('rule.srcPort') + ' ' + $t('commaSeparated')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="source_port"></v-text-field>
|
v-model="source_port"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" v-if="rule.source_port_range != undefined">
|
<v-col cols="12" sm="6" v-if="rule.source_port_range != undefined">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Source Port Ranges (comma separated)"
|
:label="$t('rule.srcPortRange') + ' ' + $t('commaSeparated')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="source_port_range"></v-text-field>
|
v-model="source_port_range"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
@@ -151,21 +151,21 @@
|
|||||||
<v-combobox
|
<v-combobox
|
||||||
v-model="rule.rule_set"
|
v-model="rule.rule_set"
|
||||||
:items="rsTags"
|
:items="rsTags"
|
||||||
label="Rulesets"
|
:label="$t('rule.ruleset')"
|
||||||
multiple
|
multiple
|
||||||
chips
|
chips
|
||||||
hide-details
|
hide-details
|
||||||
></v-combobox>
|
></v-combobox>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6">
|
<v-col cols="12" sm="6">
|
||||||
<v-switch v-model="rule.rule_set_ipcidr_match_source" color="primary" label="Ruleset IPcidr Match Source" hide-details></v-switch>
|
<v-switch v-model="rule.rule_set_ipcidr_match_source" color="primary" :label="$t('rule.rulesetMatchSrc')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-card-actions>
|
<v-card-actions>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
||||||
<template v-slot:activator="{ props }">
|
<template v-slot:activator="{ props }">
|
||||||
<v-btn v-bind="props" hide-details variant="tonal">Rule Options</v-btn>
|
<v-btn v-bind="props" hide-details variant="tonal">{{ $t('rule.options') }}</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-list>
|
<v-list>
|
||||||
@@ -176,25 +176,25 @@
|
|||||||
<v-switch v-model="optionClient" color="primary" :label="$t('pages.clients')" hide-details></v-switch>
|
<v-switch v-model="optionClient" color="primary" :label="$t('pages.clients')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionIPver" color="primary" label="IP Version" hide-details></v-switch>
|
<v-switch v-model="optionIPver" color="primary" :label="$t('rule.ipVer')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionProtocol" color="primary" label="Protocol" hide-details></v-switch>
|
<v-switch v-model="optionProtocol" color="primary" :label="$t('protocol')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionDomain" color="primary" label="Domain/IP" hide-details></v-switch>
|
<v-switch v-model="optionDomain" color="primary" :label="$t('rule.domainRules')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionPort" color="primary" label="Port" hide-details></v-switch>
|
<v-switch v-model="optionPort" color="primary" :label="$t('in.port')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionSrcIP" color="primary" label="Source IP" hide-details></v-switch>
|
<v-switch v-model="optionSrcIP" color="primary" :label="$t('rule.srcIpRules')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionSrcPort" color="primary" label="Source Port" hide-details></v-switch>
|
<v-switch v-model="optionSrcPort" color="primary" :label="$t('rule.srcPortRules')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionRuleSet" color="primary" label="Rule Set" hide-details></v-switch>
|
<v-switch v-model="optionRuleSet" color="primary" :label="$t('rule.ruleset')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-card :subtitle="$t('in.transport')">
|
<v-card :subtitle="$t('objects.transport')">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch color="primary" :label="$t('transport.enable')" v-model="tpEnable" hide-details></v-switch>
|
<v-switch color="primary" :label="$t('transport.enable')" v-model="tpEnable" hide-details></v-switch>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-card subtitle="Clients">
|
<v-card :subtitle="$t('pages.clients')">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch
|
<v-switch
|
||||||
|
|||||||
@@ -2,14 +2,14 @@
|
|||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Server Address"
|
:label="$t('out.addr')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="data.server">
|
v-model="data.server">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Server Port"
|
:label="$t('out.port')"
|
||||||
type="number"
|
type="number"
|
||||||
min="0"
|
min="0"
|
||||||
hide-details
|
hide-details
|
||||||
@@ -18,19 +18,19 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6">
|
||||||
<v-text-field v-model="data.public_key" label="Public Key" hide-details></v-text-field>
|
<v-text-field v-model="data.public_key" :label="$t('types.wg.pubKey')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6">
|
||||||
<v-text-field v-model="data.pre_shared_key" label="Pre-Shared Key" hide-details></v-text-field>
|
<v-text-field v-model="data.pre_shared_key" :label="$t('types.wg.psk')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6">
|
||||||
<v-text-field v-model="allowed_ips" label="Allowed IPs (comma separated)" hide-details></v-text-field>
|
<v-text-field v-model="allowed_ips" :label="$t('types.wg.allowedIp') + ' ' + $t('commaSeparated')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6">
|
||||||
<v-text-field v-model="reserved" label="Reserved (comma separated)" hide-details></v-text-field>
|
<v-text-field v-model="reserved" :label="'Reserved ' + $t('commaSeparated')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -6,29 +6,29 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Override Address"
|
:label="$t('types.direct.overrideAddr')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="data.override_address">
|
v-model="data.override_address">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Override Port"
|
:label="$t('types.direct.overridePort')"
|
||||||
type="number"
|
type="number"
|
||||||
min="0"
|
min="0"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="override_port">
|
v-model.number="override_port">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="direction == 'out'">
|
<v-col cols="12" sm="6" md="4" v-if="direction == 'out'">
|
||||||
<v-text-field
|
<v-select
|
||||||
label="Proxy Protocol"
|
:label="$t('types.direct.proxyProtocol')"
|
||||||
type="number"
|
:items="[1,2]"
|
||||||
min="0"
|
|
||||||
max="2"
|
|
||||||
hide-details
|
hide-details
|
||||||
v-model="proxy_protocol">
|
clearable
|
||||||
</v-text-field>
|
@click:clear="delete data.proxy_protocol"
|
||||||
|
v-model.number="data.proxy_protocol">
|
||||||
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-card>
|
</v-card>
|
||||||
@@ -47,10 +47,6 @@ export default {
|
|||||||
get() { return this.$props.data.override_port ? this.$props.data.override_port : ''; },
|
get() { return this.$props.data.override_port ? this.$props.data.override_port : ''; },
|
||||||
set(newValue: any) { this.$props.data.override_port = newValue.length == 0 || newValue == 0 ? undefined : parseInt(newValue); }
|
set(newValue: any) { this.$props.data.override_port = newValue.length == 0 || newValue == 0 ? undefined : parseInt(newValue); }
|
||||||
},
|
},
|
||||||
proxy_protocol: {
|
|
||||||
get() { return this.$props.data.proxy_protocol ? this.$props.data.proxy_protocol : ''; },
|
|
||||||
set(newValue: any) { this.$props.data.proxy_protocol = newValue.length == 0 || newValue == 0 ? undefined : parseInt(newValue); }
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
components: { Network }
|
components: { Network }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,21 +3,21 @@
|
|||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Username"
|
:label="$t('types.un')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="username">
|
v-model="username">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Password"
|
:label="$t('types.pw')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="password">
|
v-model="password">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Path"
|
:label="$t('transport.path')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="data.path">
|
v-model="data.path">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
|
|||||||
@@ -3,19 +3,19 @@
|
|||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Uplink Limit"
|
:label="$t('stats.upload')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
suffix="Mbps"
|
:suffix="$t('stats.Mbps')"
|
||||||
v-model.number="up_mbps">
|
v-model.number="up_mbps">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Downlink Limit"
|
:label="$t('stats.download')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
suffix="Mbps"
|
:suffix="$t('stats.Mbps')"
|
||||||
min="0"
|
min="0"
|
||||||
v-model.number="down_mbps">
|
v-model.number="down_mbps">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
@@ -24,14 +24,14 @@
|
|||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="obfs Password"
|
:label="$t('types.hy.obfs')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="data.obfs">
|
v-model="data.obfs">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="direction=='out'">
|
<v-col cols="12" sm="6" md="4" v-if="direction=='out'">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Authentication String"
|
:label="$t('types.hy.auth')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="data.auth_str">
|
v-model="data.auth_str">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
@@ -87,7 +87,7 @@
|
|||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
||||||
<template v-slot:activator="{ props }">
|
<template v-slot:activator="{ props }">
|
||||||
<v-btn v-bind="props" hide-details>Hysteria Options</v-btn>
|
<v-btn v-bind="props" hide-details>{{ $t('types.hy.hyOptions') }}</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-list>
|
<v-list>
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
<v-switch v-model="optionRsvClnt" color="primary" label="Recv window client" hide-details></v-switch>
|
<v-switch v-model="optionRsvClnt" color="primary" label="Recv window client" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item v-if="direction=='in'">
|
<v-list-item v-if="direction=='in'">
|
||||||
<v-switch v-model="optionMaxConn" color="primary" label="Max connection" hide-details></v-switch>
|
<v-switch v-model="optionMaxConn" color="primary" label="Max conn client" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|||||||
@@ -3,19 +3,19 @@
|
|||||||
<v-row v-if="direction == 'in'">
|
<v-row v-if="direction == 'in'">
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Masquerade"
|
label="HTTP3 server on auth fail"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="data.masquerade">
|
v-model="data.masquerade">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch v-model="data.ignore_client_bandwidth" color="primary" label="Ignore Client Bandwidth" hide-details></v-switch>
|
<v-switch v-model="data.ignore_client_bandwidth" color="primary" :label="$t('types.hy.ignoreBw')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row v-else>
|
<v-row v-else>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Password"
|
:label="$t('types.pw')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="data.password">
|
v-model="data.password">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
@@ -27,20 +27,20 @@
|
|||||||
<v-row v-if="!data.ignore_client_bandwidth">
|
<v-row v-if="!data.ignore_client_bandwidth">
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Uplink Limit"
|
:label="$t('stats.upload')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
suffix="Mbps"
|
:suffix="$t('stats.Mbps')"
|
||||||
min="0"
|
min="0"
|
||||||
v-model.number="up_mbps">
|
v-model.number="up_mbps">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Downlink Limit"
|
:label="$t('stats.download')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
suffix="Mbps"
|
:suffix="$t('stats.Mbps')"
|
||||||
min="0"
|
min="0"
|
||||||
v-model.number="down_mbps">
|
v-model.number="down_mbps">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
<v-row v-if="data.obfs">
|
<v-row v-if="data.obfs">
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="obfs Password"
|
:label="$t('types.hy.obfs')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="data.obfs.password">
|
v-model="data.obfs.password">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
@@ -59,12 +59,12 @@
|
|||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
||||||
<template v-slot:activator="{ props }">
|
<template v-slot:activator="{ props }">
|
||||||
<v-btn v-bind="props" hide-details>Hysteria2 Options</v-btn>
|
<v-btn v-bind="props" hide-details>{{ $t('types.hy.hy2Options') }}</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-list>
|
<v-list>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionObfs" color="primary" label="Obfs" hide-details></v-switch>
|
<v-switch v-model="optionObfs" color="primary" :label="$t('types.hy.obfs')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|||||||
@@ -5,13 +5,13 @@
|
|||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
:items="[1,2,3]"
|
:items="[1,2,3]"
|
||||||
label="Version"
|
:label="$t('version')"
|
||||||
v-model="version">
|
v-model="version">
|
||||||
</v-select>
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="data.version > 1">
|
<v-col cols="12" sm="6" md="4" v-if="data.version > 1">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Password"
|
:label="$t('types.pw')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="data.password">
|
v-model="data.password">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
|
|||||||
@@ -16,13 +16,13 @@
|
|||||||
<v-combobox
|
<v-combobox
|
||||||
v-model="data.default"
|
v-model="data.default"
|
||||||
:items="data.outbounds"
|
:items="data.outbounds"
|
||||||
label="Default"
|
:label="$t('types.lb.defaultOut')"
|
||||||
clearable
|
clearable
|
||||||
hide-details
|
hide-details
|
||||||
></v-combobox>
|
></v-combobox>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6">
|
<v-col cols="12" sm="6">
|
||||||
<v-switch v-model="data.interrupt_exist_connections" color="primary" label="Interrupt exist connections" hide-details></v-switch>
|
<v-switch v-model="data.interrupt_exist_connections" color="primary" :label="$t('types.lb.interruptConn')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|||||||
@@ -5,13 +5,13 @@
|
|||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
:items="[1,2,3]"
|
:items="[1,2,3]"
|
||||||
label="Version"
|
:label="$t('version')"
|
||||||
v-model="version">
|
v-model="version">
|
||||||
</v-select>
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="data.password != undefined">
|
<v-col cols="12" sm="6" md="4" v-if="data.password != undefined">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Password"
|
:label="$t('types.pw')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="data.password">
|
v-model="data.password">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
@@ -20,14 +20,14 @@
|
|||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Handshake Server"
|
:label="$t('types.shdwTls.hs')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="Inbound.handshake.server">
|
v-model="Inbound.handshake.server">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Server Port"
|
:label="$t('out.port')"
|
||||||
type="number"
|
type="number"
|
||||||
min="0"
|
min="0"
|
||||||
hide-details
|
hide-details
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
<v-row v-if="Inbound.handshake_for_server_name != undefined">
|
<v-row v-if="Inbound.handshake_for_server_name != undefined">
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Add Hanshake Server"
|
:label="$t('types.shdwTls.adHS')"
|
||||||
hide-details
|
hide-details
|
||||||
append-icon="mdi-plus"
|
append-icon="mdi-plus"
|
||||||
@click:append="addHandshakeServer()"
|
@click:append="addHandshakeServer()"
|
||||||
@@ -67,14 +67,14 @@
|
|||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Handshake Server"
|
:label="$t('types.shdwTls.hs')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="value.server">
|
v-model="value.server">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Server Port"
|
:label="$t('out.port')"
|
||||||
type="number"
|
type="number"
|
||||||
min="0"
|
min="0"
|
||||||
hide-details
|
hide-details
|
||||||
|
|||||||
@@ -4,13 +4,13 @@
|
|||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Method"
|
:label="$t('in.ssMethod')"
|
||||||
:items="ssMethods"
|
:items="ssMethods"
|
||||||
v-model="data.method">
|
v-model="data.method">
|
||||||
</v-select>
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field v-model="data.password" label="Password" hide-details></v-text-field>
|
<v-text-field v-model="data.password" :label="$t('types.pw')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<Network :data="data" />
|
<Network :data="data" />
|
||||||
|
|||||||
@@ -3,14 +3,14 @@
|
|||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Username"
|
:label="$t('types.un')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="username">
|
v-model="username">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Password"
|
:label="$t('types.pw')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="password">
|
v-model="password">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
:items="['4','4a','5']"
|
:items="['4','4a','5']"
|
||||||
label="Version"
|
:label="$t('version')"
|
||||||
v-model="data.version">
|
v-model="data.version">
|
||||||
</v-select>
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6">
|
<v-col cols="12" sm="6">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Passphrase"
|
:label="$t('types.ssh.passphrase')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="data.private_key_passphrase">
|
v-model="data.private_key_passphrase">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
@@ -49,17 +49,17 @@
|
|||||||
<template v-else>
|
<template v-else>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field v-model="data.user" label="SSH User" hide-details></v-text-field>
|
<v-text-field v-model="data.user" :label="$t('types.un')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field v-model="data.password" label="Password" hide-details></v-text-field>
|
<v-text-field v-model="data.password" :label="$t('types.pw')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</template>
|
</template>
|
||||||
<v-row v-if="optionHostKey">
|
<v-row v-if="optionHostKey">
|
||||||
<v-col cols="12" sm="6">
|
<v-col cols="12" sm="6">
|
||||||
<v-textarea
|
<v-textarea
|
||||||
label="Host Keys"
|
:label="$t('types.ssh.hostKey')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="host_key">
|
v-model="host_key">
|
||||||
</v-textarea>
|
</v-textarea>
|
||||||
@@ -67,17 +67,17 @@
|
|||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="data.host_key_algorithms != undefined">
|
<v-col cols="12" sm="6" md="4" v-if="data.host_key_algorithms != undefined">
|
||||||
<v-text-field v-model="algorithms" label="Key Algorithms (comma separated)" hide-details></v-text-field>
|
<v-text-field v-model="algorithms" :label="$t('types.ssh.algorithm') + ' ' + $t('commaSeparated')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="data.client_version != undefined">
|
<v-col cols="12" sm="6" md="4" v-if="data.client_version != undefined">
|
||||||
<v-text-field v-model="data.client_version" label="Client Version" hide-details></v-text-field>
|
<v-text-field v-model="data.client_version" :label="$t('types.ssh.clientVer')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-card-actions>
|
<v-card-actions>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
||||||
<template v-slot:activator="{ props }">
|
<template v-slot:activator="{ props }">
|
||||||
<v-btn v-bind="props" hide-details>SSH Options</v-btn>
|
<v-btn v-bind="props" hide-details>{{ $t('types.ssh.options') }}</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-list>
|
<v-list>
|
||||||
@@ -85,13 +85,13 @@
|
|||||||
<v-switch v-model="optionKey" color="primary" label="SSH Key" hide-details></v-switch>
|
<v-switch v-model="optionKey" color="primary" label="SSH Key" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionHostKey" color="primary" label="Host Key" hide-details></v-switch>
|
<v-switch v-model="optionHostKey" color="primary" :label="$t('types.ssh.hostKey')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionAlgorithms" color="primary" label="Key Algorithms" hide-details></v-switch>
|
<v-switch v-model="optionAlgorithms" color="primary" :label="$t('types.ssh.algorithm')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionVer" color="primary" label="Client Version" hide-details></v-switch>
|
<v-switch v-model="optionVer" color="primary" :label="$t('types.ssh.clientVer')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|||||||
@@ -2,15 +2,15 @@
|
|||||||
<v-card subtitle="Tor">
|
<v-card subtitle="Tor">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field v-model="data.executable_path" label="Executable Path" hide-details></v-text-field>
|
<v-text-field v-model="data.executable_path" :label="$t('types.tor.execPath')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field v-model="data.data_directory" label="Data Directory" hide-details></v-text-field>
|
<v-text-field v-model="data.data_directory" :label="$t('types.tor.dataDir')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field v-model="extra_args" label="Extra Args (comma separated)" hide-details></v-text-field>
|
<v-text-field v-model="extra_args" :label="$t('types.tor.extArgs') + ' ' + $t('commaSeparated')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<v-card subtitle="Trojan">
|
<v-card subtitle="Trojan">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field v-model="data.password" label="Password" hide-details></v-text-field>
|
<v-text-field v-model="data.password" :label="$t('types.pw')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<Network :data="data" />
|
<Network :data="data" />
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<v-text-field v-model="data.uuid" label="UUID" hide-details></v-text-field>
|
<v-text-field v-model="data.uuid" label="UUID" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field v-model="data.password" label="Password" hide-details></v-text-field>
|
<v-text-field v-model="data.password" :label="$t('types.pw')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<Network :data="data" />
|
<Network :data="data" />
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Congestion Control"
|
:label="$t('types.tuic.congControl')"
|
||||||
:items="congestion_controls"
|
:items="congestion_controls"
|
||||||
v-model="data.congestion_control">
|
v-model="data.congestion_control">
|
||||||
</v-select>
|
</v-select>
|
||||||
@@ -40,20 +40,20 @@
|
|||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="direction == 'in'">
|
<v-col cols="12" sm="6" md="4" v-if="direction == 'in'">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Authentication Timeout"
|
:label="$t('types.tuic.authTimeout')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
suffix="s"
|
:suffix="$t('date.s')"
|
||||||
min="1"
|
min="1"
|
||||||
v-model.number="auth_timeout">
|
v-model.number="auth_timeout">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Heartbeat"
|
:label="$t('types.tuic.hb')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
suffix="s"
|
:suffix="$t('date.s')"
|
||||||
min="1"
|
min="1"
|
||||||
v-model.number="heartbeat">
|
v-model.number="heartbeat">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
|
|||||||
@@ -14,62 +14,62 @@
|
|||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" v-if="optionUrl">
|
<v-col cols="12" sm="6" v-if="optionUrl">
|
||||||
<v-select v-model="data.url" label="URL" hide-details></v-select>
|
<v-text-field v-model="data.url" :label="$t('types.lb.testUrl')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="optionInterval">
|
<v-col cols="12" sm="6" md="4" v-if="optionInterval">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Interval"
|
:label="$t('types.lb.interval')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
min="3"
|
min="3"
|
||||||
suffix="s"
|
:suffix="$t('date.s')"
|
||||||
v-model.number="interval"></v-text-field>
|
v-model.number="interval"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="optionTolerance">
|
<v-col cols="12" sm="6" md="4" v-if="optionTolerance">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Tolerance"
|
:label="$t('types.lb.tolerance')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
min="0"
|
min="0"
|
||||||
suffix="ms"
|
:suffix="$t('date.ms')"
|
||||||
v-model.number="tolerance"></v-text-field>
|
v-model.number="tolerance"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="optionIdle">
|
<v-col cols="12" sm="6" md="4" v-if="optionIdle">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Idle Timeout"
|
:label="$t('transport.idleTimeout')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
min="0"
|
min="0"
|
||||||
suffix="m"
|
:suffix="$t('date.m')"
|
||||||
v-model.number="idle_timeout"></v-text-field>
|
v-model.number="idle_timeout"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6">
|
<v-col cols="12" sm="6">
|
||||||
<v-switch v-model="data.interrupt_exist_connections" color="primary" label="Interrupt exist connections" hide-details></v-switch>
|
<v-switch v-model="data.interrupt_exist_connections" color="primary" :label="$t('types.lb.interruptConn')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-card-actions>
|
<v-card-actions>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
||||||
<template v-slot:activator="{ props }">
|
<template v-slot:activator="{ props }">
|
||||||
<v-btn v-bind="props" hide-details>SSH Options</v-btn>
|
<v-btn v-bind="props" hide-details>{{ $t('types.lb.urlTestOptions') }}</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-list>
|
<v-list>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionUrl" color="primary" label="Test URL" hide-details></v-switch>
|
<v-switch v-model="optionUrl" color="primary" :label="$t('types.lb.testUrl')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionInterval" color="primary" label="Interval" hide-details></v-switch>
|
<v-switch v-model="optionInterval" color="primary" :label="$t('types.lb.interval')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionTolerance" color="primary" label="Tolerance" hide-details></v-switch>
|
<v-switch v-model="optionTolerance" color="primary" :label="$t('types.lb.tolerance')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionIdle" color="primary" label="Idle Timeout" hide-details></v-switch>
|
<v-switch v-model="optionIdle" color="primary" :label="$t('transport.idleTimeout')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Flow"
|
:label="$t('types.vless.flow')"
|
||||||
:items="['','xtls-rprx-vision']"
|
:items="['','xtls-rprx-vision']"
|
||||||
v-model="data.flow">
|
v-model="data.flow">
|
||||||
</v-select>
|
</v-select>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="UDP Packet Encoding"
|
:label="$t('types.vless.udpEnc')"
|
||||||
:items="['none','packetaddr','xudp']"
|
:items="['none','packetaddr','xudp']"
|
||||||
v-model="packet_encoding">
|
v-model="packet_encoding">
|
||||||
</v-select>
|
</v-select>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Security"
|
:label="$t('types.vmess.security')"
|
||||||
:items="securities"
|
:items="securities"
|
||||||
v-model="data.security">
|
v-model="data.security">
|
||||||
</v-select>
|
</v-select>
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="UDP Packet Encoding"
|
:label="$t('types.vless.udpEnc')"
|
||||||
:items="['none','packetaddr','xudp']"
|
:items="['none','packetaddr','xudp']"
|
||||||
v-model="packet_encoding">
|
v-model="packet_encoding">
|
||||||
</v-select>
|
</v-select>
|
||||||
@@ -35,10 +35,10 @@
|
|||||||
<Network :data="data" />
|
<Network :data="data" />
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch v-model="data.global_padding" color="primary" label="Global Padding" hide-details></v-switch>
|
<v-switch v-model="data.global_padding" color="primary" :label="$t('types.vmess.globalPadding')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch v-model="data.authenticated_length" color="primary" label="Encryptrd Length" hide-details></v-switch>
|
<v-switch v-model="data.authenticated_length" color="primary" :label="$t('types.vmess.authLen')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|||||||
@@ -2,25 +2,25 @@
|
|||||||
<v-card subtitle="Wireguard">
|
<v-card subtitle="Wireguard">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="8">
|
<v-col cols="12" sm="8">
|
||||||
<v-text-field v-model="data.private_key" label="Private Key" hide-details></v-text-field>
|
<v-text-field v-model="data.private_key" :label="$t('types.wg.privKey')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="8">
|
<v-col cols="12" sm="8">
|
||||||
<v-text-field v-model="data.peer_public_key" label="Peer Public Key" hide-details></v-text-field>
|
<v-text-field v-model="data.peer_public_key" :label="$t('types.wg.pubKey')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="8" v-if="data.pre_shared_key != undefined">
|
<v-col cols="12" sm="8" v-if="data.pre_shared_key != undefined">
|
||||||
<v-text-field v-model="data.pre_shared_key" label="Pre-Shared Key" hide-details></v-text-field>
|
<v-text-field v-model="data.pre_shared_key" :label="$t('types.wg.psk')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="8">
|
<v-col cols="12" sm="8">
|
||||||
<v-text-field v-model="local_ips" label="Local IPs (comma separated)" hide-details></v-text-field>
|
<v-text-field v-model="local_ips" :label="$t('types.wg.localIp') + ' ' + $t('commaSeparated')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="data.reserved != undefined">
|
<v-col cols="12" sm="6" md="4" v-if="data.reserved != undefined">
|
||||||
<v-text-field v-model="reserved" label="Reserved (comma separated)" hide-details></v-text-field>
|
<v-text-field v-model="reserved" :label="'Reserved ' + $t('commaSeparated')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="data.workers != undefined">
|
<v-col cols="12" sm="6" md="4" v-if="data.workers != undefined">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Workers"
|
:label="$t('types.wg.worker')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
min=1
|
min=1
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" v-if="data.interface_name != undefined">
|
<v-col cols="12" sm="6" md="4" v-if="data.interface_name != undefined">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Interface Name"
|
:label="$t('types.wg.ifName')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model.number="data.interface_name">
|
v-model.number="data.interface_name">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
@@ -51,55 +51,55 @@
|
|||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch v-model="data.system_interface" color="primary" label="System Interface" hide-details></v-switch>
|
<v-switch v-model="data.system_interface" color="primary" :label="$t('types.wg.sysIf')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch v-model="data.gso" color="primary" label="Segmentation Offload" hide-details></v-switch>
|
<v-switch v-model="data.gso" color="primary" :label="$t('types.wg.gso')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-card-actions>
|
<v-card-actions>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
<v-menu v-model="menu" :close-on-content-click="false" location="start">
|
||||||
<template v-slot:activator="{ props }">
|
<template v-slot:activator="{ props }">
|
||||||
<v-btn v-bind="props" hide-details>Wireguard Options</v-btn>
|
<v-btn v-bind="props" hide-details>{{ $t('types.wg.options') }}</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-list>
|
<v-list>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionPsk" color="primary" label="Pre-shared Key" hide-details></v-switch>
|
<v-switch v-model="optionPsk" color="primary" :label="$t('types.wg.psk')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionRsrv" color="primary" label="Reserved" hide-details></v-switch>
|
<v-switch v-model="optionRsrv" color="primary" label="Reserved" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionWorker" color="primary" label="Worker" hide-details></v-switch>
|
<v-switch v-model="optionWorker" color="primary" :label="$t('types.wg.worker')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionMtu" color="primary" label="MTU" hide-details></v-switch>
|
<v-switch v-model="optionMtu" color="primary" label="MTU" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionInterface" color="primary" label="Interface Name" hide-details></v-switch>
|
<v-switch v-model="optionInterface" color="primary" :label="$t('types.wg.ifName')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model="optionPeers" color="primary" label="Multi Peer" hide-details></v-switch>
|
<v-switch v-model="optionPeers" color="primary" :label="$t('types.wg.multiPeer')" hide-details></v-switch>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-menu>
|
</v-menu>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
</v-card>
|
</v-card>
|
||||||
<v-card subtitle="Peers" v-if="data.peers != undefined">
|
<v-card v-if="data.peers != undefined">
|
||||||
|
<v-card-subtitle>
|
||||||
|
{{ $t('types.wg.peers') }} <v-icon @click="addPeer" icon="mdi-plus" />
|
||||||
|
</v-card-subtitle>
|
||||||
<template v-for="(p, index) in data.peers">
|
<template v-for="(p, index) in data.peers">
|
||||||
Peer {{ index+1 }} <v-icon icon="mdi-delete" @click="data.peers.splice(index,1)" />
|
<v-card style="margin-top: 1rem;">
|
||||||
<v-divider></v-divider>
|
<v-card-subtitle>
|
||||||
|
{{ $t('types.wg.peer') + ' ' + (index+1) }} <v-icon icon="mdi-delete" @click="data.peers.splice(index,1)" />
|
||||||
|
</v-card-subtitle>
|
||||||
<Peer :data="p" />
|
<Peer :data="p" />
|
||||||
|
</v-card>
|
||||||
</template>
|
</template>
|
||||||
<v-card-actions class="pt-0">
|
|
||||||
<v-spacer></v-spacer>
|
|
||||||
<v-btn @click="addPeer" rounded>
|
|
||||||
<v-icon icon="mdi-plus" />Peer
|
|
||||||
</v-btn>
|
|
||||||
</v-card-actions>
|
|
||||||
</v-card>
|
</v-card>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -15,17 +15,20 @@
|
|||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-select
|
||||||
label="Method"
|
:label="$t('transport.httpMethod')"
|
||||||
hide-details
|
hide-details
|
||||||
|
clearable
|
||||||
|
@click:clear="delete transport.method"
|
||||||
|
:items="methodList"
|
||||||
v-model="transport.method">
|
v-model="transport.method">
|
||||||
</v-text-field>
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Idle Timeout"
|
:label="$t('transport.idleTimeout')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
suffix="s"
|
suffix="s"
|
||||||
@@ -35,7 +38,7 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Ping Timeout"
|
:label="$t('transport.pingTimeout')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
suffix="s"
|
suffix="s"
|
||||||
@@ -54,6 +57,7 @@ export default {
|
|||||||
props: ['transport'],
|
props: ['transport'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
methodList: ['POST', 'GET', 'PUT', 'PATCH', 'DELETE']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Service Name"
|
:label="$t('transport.grpcServiceName')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="transport.service_name">
|
v-model="transport.service_name">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
<v-switch
|
<v-switch
|
||||||
color="primary"
|
color="primary"
|
||||||
v-model="transport.permit_without_stream"
|
v-model="transport.permit_without_stream"
|
||||||
label="Permit Without Stream"
|
:label="$t('transport.grpcPws')"
|
||||||
hide-details>
|
hide-details>
|
||||||
</v-switch>
|
</v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Idle Timeout"
|
:label="$t('transport.idleTimeout')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
suffix="s"
|
suffix="s"
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Ping Timeout"
|
:label="$t('transport.pingTimeout')"
|
||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
suffix="s"
|
suffix="s"
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
</v-select>
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field v-model="inbound.tag" :label="$t('in.tag')" hide-details></v-text-field>
|
<v-text-field v-model="inbound.tag" :label="$t('objects.tag')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<Listen :inbound="inbound" :inTags="inTags" />
|
<Listen :inbound="inbound" :inTags="inTags" />
|
||||||
@@ -97,13 +97,16 @@ export default {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const port = RandomUtil.randomIntRange(10000, 60000)
|
const port = RandomUtil.randomIntRange(10000, 60000)
|
||||||
this.inbound = createInbound("mixed",{ tag: "in-"+port ,listen: "::", listen_port: port })
|
this.inbound = createInbound("direct",{ tag: "direct-"+port ,listen: "::", listen_port: port })
|
||||||
this.title = "add"
|
this.title = "add"
|
||||||
}
|
}
|
||||||
this.inboundStats = this.$props.stats
|
this.inboundStats = this.$props.stats
|
||||||
},
|
},
|
||||||
changeType() {
|
changeType() {
|
||||||
const prevConfig = { tag: this.inbound.tag ,listen: this.inbound.listen, listen_port: this.inbound.listen_port }
|
// Tag change only in add outbound
|
||||||
|
const tag = this.$props.id != -1 ? this.inbound.tag : this.inbound.type + "-" + this.inbound.listen_port
|
||||||
|
// Use previous data
|
||||||
|
const prevConfig = { tag: tag ,listen: this.inbound.listen, listen_port: this.inbound.listen_port }
|
||||||
this.inbound = createInbound(this.inbound.type, prevConfig)
|
this.inbound = createInbound(this.inbound.type, prevConfig)
|
||||||
},
|
},
|
||||||
closeModal() {
|
closeModal() {
|
||||||
|
|||||||
@@ -18,20 +18,20 @@
|
|||||||
</v-select>
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field v-model="outbound.tag" :label="$t('in.tag')" hide-details></v-text-field>
|
<v-text-field v-model="outbound.tag" :label="$t('objects.tag')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row v-if="!NoServer.includes(outbound.type)">
|
<v-row v-if="!NoServer.includes(outbound.type)">
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Server Address"
|
:label="$t('out.addr')"
|
||||||
hide-details
|
hide-details
|
||||||
v-model="outbound.server">
|
v-model="outbound.server">
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
label="Server Port"
|
:label="$t('out.addr')"
|
||||||
type="number"
|
type="number"
|
||||||
min="0"
|
min="0"
|
||||||
hide-details
|
hide-details
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<v-card-text style="padding: 0 16px;">
|
<v-card-text style="padding: 0 16px;">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch color="primary" v-model="logical" label="Logical Rule" hide-details></v-switch>
|
<v-switch color="primary" v-model="logical" :label="$t('rule.logical')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-col cols="auto" v-if="logical" justify="center" align="center">
|
<v-col cols="auto" v-if="logical" justify="center" align="center">
|
||||||
@@ -46,12 +46,12 @@
|
|||||||
<v-combobox
|
<v-combobox
|
||||||
v-model="ruleData.mode"
|
v-model="ruleData.mode"
|
||||||
:items="['and', 'or']"
|
:items="['and', 'or']"
|
||||||
label="Mode"
|
:label="$t('rule.mode')"
|
||||||
hide-details
|
hide-details
|
||||||
></v-combobox>
|
></v-combobox>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-switch color="primary" v-model="ruleData.invert" label="Invert" hide-details></v-switch>
|
<v-switch color="primary" v-model="ruleData.invert" :label="$t('rule.invert')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
|
|||||||
@@ -10,19 +10,19 @@
|
|||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Type"
|
:label="$t('type')"
|
||||||
:items="['local', 'remote']"
|
:items="[{title: $t('ruleset.local'), value: 'local'},{ title: $t('ruleset.remote'), value: 'remote'}]"
|
||||||
@update:model-value="updateType($event)"
|
@update:model-value="updateType($event)"
|
||||||
v-model="rule_set.type">
|
v-model="rule_set.type">
|
||||||
</v-select>
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field v-model="rule_set.tag" :label="$t('in.tag')" hide-details></v-text-field>
|
<v-text-field v-model="rule_set.tag" :label="$t('objects.tag')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Format"
|
:label="$t('ruleset.format')"
|
||||||
:items="['source', 'binary']"
|
:items="['source', 'binary']"
|
||||||
v-model="rule_set.format">
|
v-model="rule_set.format">
|
||||||
</v-select>
|
</v-select>
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
</v-row>
|
</v-row>
|
||||||
<v-row v-if="rule_set.type == 'local'">
|
<v-row v-if="rule_set.type == 'local'">
|
||||||
<v-col cols="12">
|
<v-col cols="12">
|
||||||
<v-text-field v-model="rule_set.path" label="Path" hide-details></v-text-field>
|
<v-text-field v-model="rule_set.path" :label="$t('transport.path')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row v-else>
|
<v-row v-else>
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
</v-select>
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-col cols="12" sm="6" md="4">
|
||||||
<v-text-field v-model.number="update_intervals" :suffix="$t('date.d')" type="number" min="0" label="Update Intervals" hide-details></v-text-field>
|
<v-text-field v-model.number="update_intervals" :suffix="$t('date.d')" type="number" min="0" :label="$t('ruleset.interval')" hide-details></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
|
|||||||
+192
-7
@@ -11,6 +11,7 @@ export default {
|
|||||||
unlimited: "infinite",
|
unlimited: "infinite",
|
||||||
remained: "Remained",
|
remained: "Remained",
|
||||||
type: "Type",
|
type: "Type",
|
||||||
|
protocol: "Protocol",
|
||||||
submit: "Submit",
|
submit: "Submit",
|
||||||
reset: "Reset",
|
reset: "Reset",
|
||||||
now: "Now",
|
now: "Now",
|
||||||
@@ -19,6 +20,8 @@ export default {
|
|||||||
noData: "No data!",
|
noData: "No data!",
|
||||||
invalidLogin: "Invalid Login!",
|
invalidLogin: "Invalid Login!",
|
||||||
online: "Online",
|
online: "Online",
|
||||||
|
version: "Version",
|
||||||
|
commaSeparated: "(comma separated)",
|
||||||
pages: {
|
pages: {
|
||||||
login: "Login",
|
login: "Login",
|
||||||
home: "Home",
|
home: "Home",
|
||||||
@@ -63,6 +66,16 @@ export default {
|
|||||||
outbound: "Outbound",
|
outbound: "Outbound",
|
||||||
rule: "Rule",
|
rule: "Rule",
|
||||||
user: "User",
|
user: "User",
|
||||||
|
tag: "Tag",
|
||||||
|
listen: "Listen",
|
||||||
|
dial: "Dial",
|
||||||
|
tls: "TLS",
|
||||||
|
multiplex: "Multiplex",
|
||||||
|
transport: "Transport",
|
||||||
|
method: "Method",
|
||||||
|
headers: "Headers",
|
||||||
|
key: "Key",
|
||||||
|
value: "Value",
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
action: "Action",
|
action: "Action",
|
||||||
@@ -90,6 +103,9 @@ export default {
|
|||||||
oldPass: "Current Password",
|
oldPass: "Current Password",
|
||||||
newUname: "New Username",
|
newUname: "New Username",
|
||||||
newPass: "New Password",
|
newPass: "New Password",
|
||||||
|
lastLogin: "Last login",
|
||||||
|
date: "Date",
|
||||||
|
time: "Time",
|
||||||
},
|
},
|
||||||
setting: {
|
setting: {
|
||||||
interface: "Interface",
|
interface: "Interface",
|
||||||
@@ -120,23 +136,181 @@ export default {
|
|||||||
external: "External Link",
|
external: "External Link",
|
||||||
sub: "External Subscription",
|
sub: "External Subscription",
|
||||||
},
|
},
|
||||||
|
types: {
|
||||||
|
un: "Username",
|
||||||
|
pw: "Password",
|
||||||
|
direct: {
|
||||||
|
overrideAddr: "Override Address",
|
||||||
|
overridePort: "Override Port",
|
||||||
|
proxyProtocol: "Proxy Protocol",
|
||||||
|
},
|
||||||
|
hy: {
|
||||||
|
obfs: "Obfuscated Password",
|
||||||
|
auth: "Authentication Password",
|
||||||
|
hyOptions: "Hysteria Options",
|
||||||
|
hy2Options: "Hysteria2 Options",
|
||||||
|
ignoreBw: "Ignore Client Bandwidth",
|
||||||
|
},
|
||||||
|
shdwTls: {
|
||||||
|
hs: "Handshake Server",
|
||||||
|
addHS: "Add Handshake Server",
|
||||||
|
},
|
||||||
|
ssh: {
|
||||||
|
passphrase: "Passphrase",
|
||||||
|
hostKey: "Host Keys",
|
||||||
|
algorithm: "Key Algorithms",
|
||||||
|
clientVer: "Client Version",
|
||||||
|
options: "SSH Options",
|
||||||
|
},
|
||||||
|
tor: {
|
||||||
|
execPath: "Executable File Path",
|
||||||
|
dataDir: "Data Directory",
|
||||||
|
extArgs: "Extra Args",
|
||||||
|
},
|
||||||
|
tuic: {
|
||||||
|
congControl: "Congestion Control",
|
||||||
|
authTimeout: "Authentication Timeout",
|
||||||
|
hb: "Heartbeat",
|
||||||
|
},
|
||||||
|
vless: {
|
||||||
|
flow: "Flow",
|
||||||
|
udpEnc: "UDP Packet Encoding",
|
||||||
|
},
|
||||||
|
vmess: {
|
||||||
|
security: "Security",
|
||||||
|
globalPadding: "Global Padding",
|
||||||
|
authLen: "Encryptrd Length",
|
||||||
|
},
|
||||||
|
wg: {
|
||||||
|
privKey: "Private Key",
|
||||||
|
pubKey: "Peer Public Key",
|
||||||
|
psk: "Pre-Shared Key",
|
||||||
|
localIp: "Local IPs",
|
||||||
|
worker: "Workers",
|
||||||
|
ifName: "Interface Name",
|
||||||
|
sysIf: "System Interface",
|
||||||
|
gso: "Segmentation Offload",
|
||||||
|
options: "Wireguard Options",
|
||||||
|
multiPeer: "Multi Peer",
|
||||||
|
allowedIp: "Allowed IPs",
|
||||||
|
peer: "Peer",
|
||||||
|
peers: "Peers",
|
||||||
|
},
|
||||||
|
lb: {
|
||||||
|
defaultOut: "Default Outbound",
|
||||||
|
interruptConn: "Interrupt exist connections",
|
||||||
|
testUrl: "Test URL",
|
||||||
|
interval: "Interval",
|
||||||
|
tolerance: "Tolerance",
|
||||||
|
urlTestOptions: "URLTest Options"
|
||||||
|
}
|
||||||
|
},
|
||||||
in: {
|
in: {
|
||||||
tag: "Tag",
|
|
||||||
addr: "Address",
|
addr: "Address",
|
||||||
port: "Port",
|
port: "Port",
|
||||||
sniffing: "Sniffing",
|
|
||||||
tls: "TLS",
|
|
||||||
clients: "Enable Clients",
|
clients: "Enable Clients",
|
||||||
multiplex: "Multiplex",
|
ssMethod: "Method",
|
||||||
transport: "Transport",
|
},
|
||||||
|
listen: {
|
||||||
|
sniffing: "Sniffing",
|
||||||
|
sniffingTimeout: "Sniffing Timeout",
|
||||||
|
sniffingOverride: "Override Destation",
|
||||||
|
options: "Listen Options",
|
||||||
|
tcpOptions: "TCP Options",
|
||||||
|
udpOptions: "UDP Options",
|
||||||
|
detour: "Detour",
|
||||||
|
detourText: "Forward to inbound",
|
||||||
|
domainStrategy: "Domain Strategy",
|
||||||
|
},
|
||||||
|
dial: {
|
||||||
|
bindIf: "Bind to Network Interface",
|
||||||
|
bindIp4: "Bind to IPv4",
|
||||||
|
bindIp6: "Bind to IPv6",
|
||||||
|
reuseAddr: "Reuse Listener Address",
|
||||||
|
connTimeout: "Connection Timeout",
|
||||||
|
fbTimeout: "Fallback Timeout",
|
||||||
|
options: "Dial Options",
|
||||||
},
|
},
|
||||||
transport: {
|
transport: {
|
||||||
enable: "Enable Transport",
|
enable: "Enable Transport",
|
||||||
host: "Host",
|
host: "Host",
|
||||||
hosts: "Hosts",
|
hosts: "Hosts",
|
||||||
path: "Path",
|
path: "Path",
|
||||||
|
httpMethod: "Request Method",
|
||||||
|
idleTimeout: "Idle Timeout",
|
||||||
|
pingTimeout: "Ping Timeout",
|
||||||
|
grpcServiceName: "Service Name",
|
||||||
|
grpcPws: "Permit Without Stream",
|
||||||
},
|
},
|
||||||
tls : {
|
mux: {
|
||||||
|
enable: "Enable Multiplex",
|
||||||
|
maxConn: "Max Connections",
|
||||||
|
minStr: "Min Streams",
|
||||||
|
maxStr: "Max Streams",
|
||||||
|
padding: "Only padding",
|
||||||
|
enableBrutal: "Enable Brutal",
|
||||||
|
},
|
||||||
|
out: {
|
||||||
|
addr: "Server Address",
|
||||||
|
port: "Server Port",
|
||||||
|
},
|
||||||
|
rule: {
|
||||||
|
add: "Add Rule",
|
||||||
|
simple: "Simple",
|
||||||
|
logical: "Logical",
|
||||||
|
mode: "Mode",
|
||||||
|
invert: "Invert",
|
||||||
|
ipVer: "IP Version",
|
||||||
|
domain: "Domains",
|
||||||
|
domainSufix: "Domain Suffixes",
|
||||||
|
domainKw: "Domain Keywords",
|
||||||
|
domainRgx: "Domain Regexes",
|
||||||
|
ip: "IP CIDRs",
|
||||||
|
privateIp: "Invalid IP Ranges",
|
||||||
|
port: "Ports",
|
||||||
|
portRange: "Port Ranges",
|
||||||
|
srcCidr: "Source IP CIDRs",
|
||||||
|
srcPrivateIp: "Invalid Source IPs",
|
||||||
|
srcPort: "Source Ports",
|
||||||
|
srcPortRange: "Source Port Ranges",
|
||||||
|
ruleset: "Rulesets",
|
||||||
|
rulesetMatchSrc: "Ruleset IPcidr Match Source",
|
||||||
|
options: "Rule Options",
|
||||||
|
domainRules: "Domain/IP",
|
||||||
|
srcIpRules: "Source IP",
|
||||||
|
srcPortRules: "Source Port",
|
||||||
|
},
|
||||||
|
ruleset: {
|
||||||
|
add: "Add Ruleset",
|
||||||
|
format: "Data Format",
|
||||||
|
interval: "Update Intervals",
|
||||||
|
remote: "Remote",
|
||||||
|
local: "Local",
|
||||||
|
},
|
||||||
|
basic: {
|
||||||
|
log: {
|
||||||
|
title: "Logs",
|
||||||
|
level: "Level",
|
||||||
|
output: "Output",
|
||||||
|
timestamp: "Enable Timestamp",
|
||||||
|
},
|
||||||
|
dns: {
|
||||||
|
final: "Final",
|
||||||
|
server: "Server",
|
||||||
|
firstServer: "First Server",
|
||||||
|
},
|
||||||
|
routing: {
|
||||||
|
title: "Routing",
|
||||||
|
defaultOut: "Default Outbound",
|
||||||
|
defaultIf: "Default NIC",
|
||||||
|
defaultRm: "Default Routing Mark",
|
||||||
|
autoBind: "Auto Bind NIC",
|
||||||
|
},
|
||||||
|
exp: {
|
||||||
|
storeFakeIp: "Store Fake IP",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
tls: {
|
||||||
enable: "Enable TLS",
|
enable: "Enable TLS",
|
||||||
usePath: "Use Path",
|
usePath: "Use Path",
|
||||||
useText: "Use Text",
|
useText: "Use Text",
|
||||||
@@ -144,6 +318,13 @@ export default {
|
|||||||
keyPath: "Key File Path",
|
keyPath: "Key File Path",
|
||||||
cert: "Certificate",
|
cert: "Certificate",
|
||||||
key: "Key",
|
key: "Key",
|
||||||
|
options: "TLS Options",
|
||||||
|
minVer: "Minimum Version",
|
||||||
|
maxVer: "Maximum Version",
|
||||||
|
cs: "Cipher suits",
|
||||||
|
pubKey: "Public Key",
|
||||||
|
disableSni: "Disable SNI",
|
||||||
|
insecure: "Allow Insecure",
|
||||||
},
|
},
|
||||||
stats: {
|
stats: {
|
||||||
upload: "Upload",
|
upload: "Upload",
|
||||||
@@ -162,6 +343,9 @@ export default {
|
|||||||
Kp: "Kp",
|
Kp: "Kp",
|
||||||
Mp: "Mp",
|
Mp: "Mp",
|
||||||
Gb: "Gb",
|
Gb: "Gb",
|
||||||
|
bps: "bps",
|
||||||
|
Kbps: "Kbps",
|
||||||
|
Mbps: "Mbps",
|
||||||
},
|
},
|
||||||
date: {
|
date: {
|
||||||
expiry: "Expiry",
|
expiry: "Expiry",
|
||||||
@@ -170,5 +354,6 @@ export default {
|
|||||||
h: "h",
|
h: "h",
|
||||||
m: "m",
|
m: "m",
|
||||||
s: "s",
|
s: "s",
|
||||||
}
|
ms: "ms",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
+190
-6
@@ -11,6 +11,7 @@ export default {
|
|||||||
unlimited: "نامحدود",
|
unlimited: "نامحدود",
|
||||||
remained: "باقیمانده",
|
remained: "باقیمانده",
|
||||||
type: "مدل",
|
type: "مدل",
|
||||||
|
protocol: "پروتکل",
|
||||||
submit: "تایید",
|
submit: "تایید",
|
||||||
reset: "ریست",
|
reset: "ریست",
|
||||||
now: "اکنون",
|
now: "اکنون",
|
||||||
@@ -19,6 +20,8 @@ export default {
|
|||||||
noData: "بدون داده!",
|
noData: "بدون داده!",
|
||||||
invalidLogin: "ورود نامعتبر!",
|
invalidLogin: "ورود نامعتبر!",
|
||||||
online: "آنلاین",
|
online: "آنلاین",
|
||||||
|
version: "نسخه",
|
||||||
|
commaSeparated: "(جداشده با کاما)",
|
||||||
pages: {
|
pages: {
|
||||||
login: "ورود",
|
login: "ورود",
|
||||||
home: "خانه",
|
home: "خانه",
|
||||||
@@ -63,6 +66,15 @@ export default {
|
|||||||
outbound: "خروجی",
|
outbound: "خروجی",
|
||||||
rule: "قانون",
|
rule: "قانون",
|
||||||
user: "کاربر",
|
user: "کاربر",
|
||||||
|
tag: "برچسب",
|
||||||
|
listen: "گوشدادن",
|
||||||
|
dial: "تماس",
|
||||||
|
tls: "رمزنگاری",
|
||||||
|
multiplex: "تسهیم",
|
||||||
|
transport: "انتقال",
|
||||||
|
headers: "سربرگها",
|
||||||
|
key: "نام",
|
||||||
|
value: "مقدار",
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
action: "فرمان",
|
action: "فرمان",
|
||||||
@@ -90,6 +102,9 @@ export default {
|
|||||||
oldPass: "رمز کنونی",
|
oldPass: "رمز کنونی",
|
||||||
newUname: "نام کاربری جدید",
|
newUname: "نام کاربری جدید",
|
||||||
newPass: "رمز جدید",
|
newPass: "رمز جدید",
|
||||||
|
lastLogin: "آخرین ورود",
|
||||||
|
date: "تاریخ",
|
||||||
|
time: "ساعت",
|
||||||
},
|
},
|
||||||
setting: {
|
setting: {
|
||||||
interface: "نما",
|
interface: "نما",
|
||||||
@@ -120,23 +135,181 @@ export default {
|
|||||||
external: "لینک خارجی",
|
external: "لینک خارجی",
|
||||||
sub: "سابسکریپشن خارجی",
|
sub: "سابسکریپشن خارجی",
|
||||||
},
|
},
|
||||||
|
types: {
|
||||||
|
un: "نام کاربری",
|
||||||
|
pw: "رمز",
|
||||||
|
direct: {
|
||||||
|
overrideAddr: "جایگزین آدرس",
|
||||||
|
overridePort: "جایگزین پورت",
|
||||||
|
proxyProtocol: "پروتکل پراکسی",
|
||||||
|
},
|
||||||
|
hy: {
|
||||||
|
obfs: "رمز مبهم کننده",
|
||||||
|
auth: "رمز احراز هویت",
|
||||||
|
hyOptions: "گزینههای Hysteria",
|
||||||
|
hy2Options: "گزینههای Hysteria2",
|
||||||
|
ignoreBw: "نادیدهگرفتن پهنایباند کاربر",
|
||||||
|
},
|
||||||
|
shdwTls: {
|
||||||
|
hs: "سرور دستتکانی",
|
||||||
|
addHS: "افزودن سرور دستتکانی",
|
||||||
|
},
|
||||||
|
ssh: {
|
||||||
|
passphrase: "عبارت عبور",
|
||||||
|
hostKey: "کلیدهای هاستها",
|
||||||
|
algorithm: "الگوریتمها",
|
||||||
|
clientVer: "نسخه کلاینت",
|
||||||
|
options: "گزینههای SSH",
|
||||||
|
},
|
||||||
|
tor: {
|
||||||
|
execPath: "مسیر فایل اجرایی",
|
||||||
|
dataDir: "پوشه دادهها",
|
||||||
|
extArgs: "آرگومانهای اضافی",
|
||||||
|
},
|
||||||
|
tuic: {
|
||||||
|
congControl: "کنترل ازدحام",
|
||||||
|
authTimeout: "مهلت احراز هویت",
|
||||||
|
hb: "ضربان قلب",
|
||||||
|
},
|
||||||
|
vless: {
|
||||||
|
flow: "جریان",
|
||||||
|
udpEnc: "کدگذاری بسته UDP",
|
||||||
|
},
|
||||||
|
vmess: {
|
||||||
|
security: "امنیت",
|
||||||
|
globalPadding: "لایه بندی کلی",
|
||||||
|
authLen: "رمزگذاری اندازه بسته",
|
||||||
|
},
|
||||||
|
wg: {
|
||||||
|
privKey: "کلید خصوصی",
|
||||||
|
pubKey: "کلید عمومی همتا",
|
||||||
|
psk: "کلید مشترک",
|
||||||
|
localIp: "آدرسهای محلی",
|
||||||
|
worker: "عملگرها",
|
||||||
|
ifName: "نام اینترفیس",
|
||||||
|
sysIf: "استفاده از اینترفیس سیستم",
|
||||||
|
gso: "بارگذاری تقسیمبندی عمومی",
|
||||||
|
options: "گزینههای Wireguard",
|
||||||
|
multiPeer: "چند همتایی",
|
||||||
|
allowedIp: "آدرسهای مجاز",
|
||||||
|
peer: "همتا",
|
||||||
|
peers: "همتاها",
|
||||||
|
},
|
||||||
|
lb: {
|
||||||
|
defaultOut: "خروجی پیشفرض",
|
||||||
|
interruptConn: "قطع ارتباط موجود",
|
||||||
|
testUrl: "URL تست",
|
||||||
|
interval: "فاصله زمانی",
|
||||||
|
tolerance: "تحمل",
|
||||||
|
urlTestOptions: "گزینههای URLTest"
|
||||||
|
}
|
||||||
|
},
|
||||||
in: {
|
in: {
|
||||||
tag: "برچسب",
|
|
||||||
addr: "آدرس",
|
addr: "آدرس",
|
||||||
port: "پورت",
|
port: "پورت",
|
||||||
sniffing: "مبدل آدرس",
|
|
||||||
tls: "رمزنگاری",
|
|
||||||
clients: "فعالسازی کاربران",
|
clients: "فعالسازی کاربران",
|
||||||
multiplex: "تسهیم",
|
ssMethod: "روش",
|
||||||
transport: "انتقال",
|
},
|
||||||
|
listen: {
|
||||||
|
sniffing: "شنود آدرس",
|
||||||
|
sniffingTimeout: "مهلت شنود آدرس",
|
||||||
|
sniffingOverride: "جایگزینی مقصد",
|
||||||
|
options: "گزینههای گوشدادن",
|
||||||
|
tcpOptions: "گزینههای TCP",
|
||||||
|
udpOptions: "گزینههای UDP",
|
||||||
|
detour: "انحراف مسیر",
|
||||||
|
detourText: "ارسال به ورودی دیگر",
|
||||||
|
domainStrategy: "استراتژی دامنه",
|
||||||
|
},
|
||||||
|
dial: {
|
||||||
|
bindIf: "اتصال به کارت شبکه",
|
||||||
|
bindIp4: "اتصال به IPv4",
|
||||||
|
bindIp6: "اتصال به IPv6",
|
||||||
|
reuseAddr: "استفاده مجدد از آدرس",
|
||||||
|
connTimeout: "مهلت ارتباط",
|
||||||
|
fbTimeout: "مهلت فالبک",
|
||||||
|
options: "گزینههای تماس",
|
||||||
},
|
},
|
||||||
transport: {
|
transport: {
|
||||||
enable: "فعالسازی انتقال",
|
enable: "فعالسازی انتقال",
|
||||||
host: "دامنه",
|
host: "دامنه",
|
||||||
hosts: "دامنهها",
|
hosts: "دامنهها",
|
||||||
path: "مسیر",
|
path: "مسیر",
|
||||||
|
httpMethod: "متد درخواست",
|
||||||
|
idleTimeout: "مهلت بیکاری",
|
||||||
|
pingTimeout: "مهلت پینگ",
|
||||||
|
grpcServiceName: "نام سرویس",
|
||||||
|
grpcPws: "حفظ ارتباط بدون دیتا",
|
||||||
},
|
},
|
||||||
tls : {
|
mux: {
|
||||||
|
enable: "فعالسازی تسهیم",
|
||||||
|
maxConn: "بیشینه ارتباطات",
|
||||||
|
minStr: "کمینه استریم",
|
||||||
|
maxStr: "بیشینه استریم",
|
||||||
|
padding: "فقط با پدینگ",
|
||||||
|
enableBrutal: "فعالسازی شدت",
|
||||||
|
},
|
||||||
|
out: {
|
||||||
|
addr: "آدرس سرور",
|
||||||
|
port: "پورت سرور",
|
||||||
|
},
|
||||||
|
rule: {
|
||||||
|
add: "ایجاد قانون",
|
||||||
|
simple: "ساده",
|
||||||
|
logical: "منطقی",
|
||||||
|
mode: "حالت",
|
||||||
|
invert: "برعکس",
|
||||||
|
ipVer: "نسخه IP",
|
||||||
|
domain: "دامنهها",
|
||||||
|
domainSufix: "پسوندهای دامنه",
|
||||||
|
domainKw: "کلمات کلیدی دامنه",
|
||||||
|
domainRgx: "رجکس دامنه",
|
||||||
|
ip: "محدودههای IP",
|
||||||
|
privateIp: "آدرس های IP نامعتبر",
|
||||||
|
port: "پورتها",
|
||||||
|
portRange: "محدودههای پورت",
|
||||||
|
srcIp: "محدودههای آدرس IP مبدا",
|
||||||
|
srcPrivateIp: "آدرسهای IP مبدا نامعتبر",
|
||||||
|
srcPort: "پورتهای مبدا",
|
||||||
|
srcPortRange: "محدوده پورتهای منبع",
|
||||||
|
ruleset: "مجموعهها",
|
||||||
|
rulesetMatchSrc: "تطابق آدرسهای مبدا با مجموعه قوانین",
|
||||||
|
options: "گزینههای قوانین",
|
||||||
|
domainRules: "دامنه/آدرس",
|
||||||
|
srcIpRules: "آدرس مبدا",
|
||||||
|
srcPortRules: "پورت مبدا",
|
||||||
|
},
|
||||||
|
ruleset: {
|
||||||
|
add: "ایجاد مجموعه",
|
||||||
|
format: "فرمت دادهها",
|
||||||
|
interval: "بازه بروزرسانیها",
|
||||||
|
remote: "راه دور",
|
||||||
|
local: "محلی",
|
||||||
|
},
|
||||||
|
basic: {
|
||||||
|
log: {
|
||||||
|
title: "گزارشها",
|
||||||
|
level: "سطح",
|
||||||
|
output: "خروجی",
|
||||||
|
timestamp: "فعالسازی ثبت زمان",
|
||||||
|
},
|
||||||
|
dns: {
|
||||||
|
final: "سرور نهایی",
|
||||||
|
server: "سرور",
|
||||||
|
firstServer: "سرور نخست",
|
||||||
|
},
|
||||||
|
routing: {
|
||||||
|
title: "مسیریابی",
|
||||||
|
defaultOut: "خروجی پیشفرض",
|
||||||
|
defaultIf: "کارت شبکه پیشفرض",
|
||||||
|
defaultRm: "Routing Mark پیشفرض",
|
||||||
|
autoBind: "انتخاب اتوماتیک کارت شبکه",
|
||||||
|
},
|
||||||
|
exp: {
|
||||||
|
storeFakeIp: "ذخیره آدرسهای نامعتبر",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
tls: {
|
||||||
enable: "فعالسازی رمزنگاری",
|
enable: "فعالسازی رمزنگاری",
|
||||||
usePath: "مسیر فایل",
|
usePath: "مسیر فایل",
|
||||||
useText: "متن گواهی",
|
useText: "متن گواهی",
|
||||||
@@ -144,6 +317,13 @@ export default {
|
|||||||
keyPath: "مسیر فایل کلید",
|
keyPath: "مسیر فایل کلید",
|
||||||
cert: "گواهی",
|
cert: "گواهی",
|
||||||
key: "کلید",
|
key: "کلید",
|
||||||
|
options: "گزینههای رمزنگاری",
|
||||||
|
minVer: "کمینه نسخه",
|
||||||
|
maxVer: "بیشینه نسخه",
|
||||||
|
cs: "مدلهای رمزنگاری",
|
||||||
|
pubKey: "کلید عمومی",
|
||||||
|
disableSni: "غیرفعالسازی SNI",
|
||||||
|
insecure: "تایید ارتباط ناامن",
|
||||||
},
|
},
|
||||||
stats: {
|
stats: {
|
||||||
upload: "آپلود",
|
upload: "آپلود",
|
||||||
@@ -162,6 +342,9 @@ export default {
|
|||||||
Kp: "کپ",
|
Kp: "کپ",
|
||||||
Mp: "مپ",
|
Mp: "مپ",
|
||||||
Gp: "گپ",
|
Gp: "گپ",
|
||||||
|
bps: "ب/ث",
|
||||||
|
Kbps: "کب/ث",
|
||||||
|
Mbps: "مب/ث",
|
||||||
},
|
},
|
||||||
date: {
|
date: {
|
||||||
expiry: "انقضا",
|
expiry: "انقضا",
|
||||||
@@ -170,5 +353,6 @@ export default {
|
|||||||
h: "س",
|
h: "س",
|
||||||
m: "د",
|
m: "د",
|
||||||
s: "ث",
|
s: "ث",
|
||||||
|
ms: "مث",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10,11 +10,11 @@ export const i18n = createI18n({
|
|||||||
locale: localStorage.getItem("locale") ?? 'en',
|
locale: localStorage.getItem("locale") ?? 'en',
|
||||||
fallbackLocale: 'en',
|
fallbackLocale: 'en',
|
||||||
messages: {
|
messages: {
|
||||||
en,
|
en: en,
|
||||||
fa,
|
fa: fa,
|
||||||
vi,
|
vi: vi,
|
||||||
zhcn,
|
zhcn: zhcn,
|
||||||
zhtw
|
zhtw: zhtw
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
+193
-7
@@ -11,6 +11,7 @@ export default {
|
|||||||
unlimited: "vô hạn",
|
unlimited: "vô hạn",
|
||||||
remained: "Còn lại",
|
remained: "Còn lại",
|
||||||
type: "Loại",
|
type: "Loại",
|
||||||
|
protocol: "Giao thức",
|
||||||
submit: "Gửi",
|
submit: "Gửi",
|
||||||
reset: "Đặt lại",
|
reset: "Đặt lại",
|
||||||
now: "Hiện tại",
|
now: "Hiện tại",
|
||||||
@@ -18,7 +19,9 @@ export default {
|
|||||||
copyToClipboard: "Sao chép vào clipboard",
|
copyToClipboard: "Sao chép vào clipboard",
|
||||||
noData: "Không có dữ liệu!",
|
noData: "Không có dữ liệu!",
|
||||||
invalidLogin: "Đăng nhập không hợp lệ!",
|
invalidLogin: "Đăng nhập không hợp lệ!",
|
||||||
online: "Online",
|
online: "Trực tuyến",
|
||||||
|
version: "Phiên bản",
|
||||||
|
commaSeparated: "(được phân tách bằng dấu phẩy)",
|
||||||
pages: {
|
pages: {
|
||||||
login: "Đăng nhập",
|
login: "Đăng nhập",
|
||||||
home: "Trang chủ",
|
home: "Trang chủ",
|
||||||
@@ -63,6 +66,16 @@ export default {
|
|||||||
outbound: "Đầu Ra",
|
outbound: "Đầu Ra",
|
||||||
rule: "Quy tắc",
|
rule: "Quy tắc",
|
||||||
user: "Người dùng",
|
user: "Người dùng",
|
||||||
|
tag: "Thẻ",
|
||||||
|
listen: "Nghe",
|
||||||
|
dial: "Quay số",
|
||||||
|
tls: "TLS",
|
||||||
|
multiplex: "Ghép đa truyền thông ",
|
||||||
|
transport: "Giao thông",
|
||||||
|
method: "Phương pháp",
|
||||||
|
headers: "Tiêu đề",
|
||||||
|
key: "Chìa khóa",
|
||||||
|
value: "Giá trị",
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
action: "Hành động",
|
action: "Hành động",
|
||||||
@@ -90,6 +103,9 @@ export default {
|
|||||||
oldPass: "Mật khẩu hiện tại",
|
oldPass: "Mật khẩu hiện tại",
|
||||||
newUname: "Tên người dùng mới",
|
newUname: "Tên người dùng mới",
|
||||||
newPass: "Mật khẩu mới",
|
newPass: "Mật khẩu mới",
|
||||||
|
lastLogin: "Lân đăng nhập cuôi",
|
||||||
|
date: "Ngày",
|
||||||
|
time: "Thời gian",
|
||||||
},
|
},
|
||||||
setting: {
|
setting: {
|
||||||
interface: "Giao diện",
|
interface: "Giao diện",
|
||||||
@@ -120,21 +136,180 @@ export default {
|
|||||||
external: "Liên kết bên ngoài",
|
external: "Liên kết bên ngoài",
|
||||||
sub: "Đăng ký bên ngoài",
|
sub: "Đăng ký bên ngoài",
|
||||||
},
|
},
|
||||||
|
types: {
|
||||||
|
un: "Tên người dùng",
|
||||||
|
pw: "Mật khẩu",
|
||||||
|
direct: {
|
||||||
|
overrideAddr: "Ghi đè Địa chỉ",
|
||||||
|
overridePort: "Ghi đè Cổng",
|
||||||
|
proxyProtocol: "Giao thức Proxy",
|
||||||
|
},
|
||||||
|
hy: {
|
||||||
|
obfs: "Mật khẩu đã được Ẩn",
|
||||||
|
auth: "Mật khẩu Xác thực",
|
||||||
|
hyOptions: "Tùy chọn Hysteria",
|
||||||
|
hy2Options: "Tùy chọn Hysteria2",
|
||||||
|
ignoreBw: "Bỏ qua Băng thông của Client",
|
||||||
|
},
|
||||||
|
shdwTls: {
|
||||||
|
hs: "Máy chủ Handshake",
|
||||||
|
addHS: "Thêm Máy chủ Handshake",
|
||||||
|
},
|
||||||
|
ssh: {
|
||||||
|
passphrase: "Cụm từ mật khẩu",
|
||||||
|
hostKey: "Khóa Máy chủ",
|
||||||
|
algorithm: "Thuật toán Khóa",
|
||||||
|
clientVer: "Phiên bản Client",
|
||||||
|
options: "Tùy chọn SSH",
|
||||||
|
},
|
||||||
|
tor: {
|
||||||
|
execPath: "Đường dẫn File thực thi",
|
||||||
|
dataDir: "Thư mục Dữ liệu",
|
||||||
|
extArgs: "Đối số Bổ sung",
|
||||||
|
},
|
||||||
|
tuic: {
|
||||||
|
congControl: "Kiểm soát Tắc nghẽn",
|
||||||
|
authTimeout: "Thời gian chờ Xác thực",
|
||||||
|
hb: "Nhịp tim",
|
||||||
|
},
|
||||||
|
vless: {
|
||||||
|
flow: "Luồng",
|
||||||
|
udpEnc: "Mã hóa Gói UDP",
|
||||||
|
},
|
||||||
|
vmess: {
|
||||||
|
security: "Bảo mật",
|
||||||
|
globalPadding: "Đệm Toàn cầu",
|
||||||
|
authLen: "Chiều dài Mã hóa",
|
||||||
|
},
|
||||||
|
wg: {
|
||||||
|
privKey: "Khóa Riêng tư",
|
||||||
|
pubKey: "Khóa Công khai của Đối tác",
|
||||||
|
psk: "Khóa được Chia sẻ trước",
|
||||||
|
localIp: "IPs Cục bộ",
|
||||||
|
worker: "Công nhân",
|
||||||
|
ifName: "Tên Giao diện",
|
||||||
|
sysIf: "Giao diện Hệ thống",
|
||||||
|
gso: "Giao Thức GSO",
|
||||||
|
options: "Tùy chọn Wireguard",
|
||||||
|
multiPeer: "Nhiều Đối tác",
|
||||||
|
allowedIp: "IPs được Phép",
|
||||||
|
peer: "Đối tác",
|
||||||
|
peers: "Đối tác",
|
||||||
|
},
|
||||||
|
lb: {
|
||||||
|
defaultOut: "Đầu ra Mặc định",
|
||||||
|
interruptConn: "Ngắt kết nối hiện tại",
|
||||||
|
testUrl: "URL Kiểm tra",
|
||||||
|
interval: "Khoảng thời gian",
|
||||||
|
tolerance: "Sự dung hòa",
|
||||||
|
urlTestOptions: "Tùy chọn Kiểm tra URL",
|
||||||
|
}
|
||||||
|
},
|
||||||
in: {
|
in: {
|
||||||
tag: "Thẻ",
|
|
||||||
addr: "Địa chỉ",
|
addr: "Địa chỉ",
|
||||||
port: "Cổng",
|
port: "Cổng",
|
||||||
sniffing: "Sniffing",
|
sniffing: "Đang Sniffing",
|
||||||
tls: "TLS",
|
|
||||||
clients: "Kích hoạt khách hàng",
|
clients: "Kích hoạt khách hàng",
|
||||||
multiplex: "Ghép đa truyền thông ",
|
ssMethod: "Phương thức",
|
||||||
transport: "Giao thông",
|
},
|
||||||
|
listen: {
|
||||||
|
sniffing: "Đang Sniffing",
|
||||||
|
sniffingTimeout: "Thời gian Chờ Sniffing",
|
||||||
|
sniffingOverride: "Ghi đè Đích",
|
||||||
|
options: "Tùy chọn Nghe",
|
||||||
|
tcpOptions: "Tùy chọn TCP",
|
||||||
|
udpOptions: "Tùy chọn UDP",
|
||||||
|
detour: "Lạc đạo",
|
||||||
|
detourText: "Chuyển tiếp tới đầu vào",
|
||||||
|
domainStrategy: "Chiến lược Domain",
|
||||||
|
},
|
||||||
|
dial: {
|
||||||
|
bindIf: "Ràng buộc tới Giao diện Mạng",
|
||||||
|
bindIp4: "Ràng buộc tới IPv4",
|
||||||
|
bindIp6: "Ràng buộc tới IPv6",
|
||||||
|
reuseAddr: "Sử dụng lại Địa chỉ Nghe",
|
||||||
|
connTimeout: "Thời gian Chờ Kết nối",
|
||||||
|
fbTimeout: "Thời gian Chờ Fallback",
|
||||||
|
options: "Tùy chọn Gọi",
|
||||||
},
|
},
|
||||||
transport: {
|
transport: {
|
||||||
enable: "Kích hoạt vận chuyển",
|
enable: "Kích hoạt vận chuyển",
|
||||||
host: "Máy chủ",
|
host: "Máy chủ",
|
||||||
hosts: "Máy chủ",
|
hosts: "Máy chủ",
|
||||||
path: "Đường dẫn",
|
path: "Đường dẫn",
|
||||||
|
httpMethod: "Phương thức Yêu cầu",
|
||||||
|
idleTimeout: "Thời gian Chờ Chờ đợi",
|
||||||
|
pingTimeout: "Thời gian Chờ Ping",
|
||||||
|
grpcServiceName: "Tên Dịch vụ",
|
||||||
|
grpcPws: "Cho phép mà không Có Luồng",
|
||||||
|
},
|
||||||
|
mux: {
|
||||||
|
enable: "Bật Multiplex",
|
||||||
|
maxConn: "Số kết nối Tối đa",
|
||||||
|
minStr: "Số Luồng Tối thiểu",
|
||||||
|
maxStr: "Số Luồng Tối đa",
|
||||||
|
padding: "Chỉ đệm",
|
||||||
|
enableBrutal: "Bật Brutal",
|
||||||
|
},
|
||||||
|
out: {
|
||||||
|
addr: "Địa chỉ Máy chủ",
|
||||||
|
port: "Cổng Máy chủ",
|
||||||
|
},
|
||||||
|
rule: {
|
||||||
|
add: "Thêm Quy tắc",
|
||||||
|
simple: "Đơn giản",
|
||||||
|
logical: "Logic",
|
||||||
|
mode: "Chế độ",
|
||||||
|
invert: "Nghịch đảo",
|
||||||
|
ipVer: "Phiên bản IP",
|
||||||
|
domain: "Tên miền",
|
||||||
|
domainSufix: "Hậu tố Miền",
|
||||||
|
domainKw: "Từ khóa Miền",
|
||||||
|
domainRgx: "Regex Miền",
|
||||||
|
ip: "CIDRs IP",
|
||||||
|
privateIp: "Dải IP Không hợp lệ",
|
||||||
|
port: "Cổng",
|
||||||
|
portRange: "Dải Cổng",
|
||||||
|
srcCidr: "CIDRs IP Nguồn",
|
||||||
|
srcPrivateIp: "IP Nguồn Không hợp lệ",
|
||||||
|
srcPort: "Cổng Nguồn",
|
||||||
|
srcPortRange: "Dải Cổng Nguồn",
|
||||||
|
ruleset: "Bộ quy tắc",
|
||||||
|
rulesetMatchSrc: "Bộ quy tắc IPcidr Phù hợp Nguồn",
|
||||||
|
options: "Tùy chọn Quy tắc",
|
||||||
|
domainRules: "Tên miền/IP",
|
||||||
|
srcIpRules: "IP Nguồn",
|
||||||
|
srcPortRules: "Cổng Nguồn",
|
||||||
|
},
|
||||||
|
ruleset: {
|
||||||
|
add: "Thêm Bộ quy tắc",
|
||||||
|
format: "Định dạng Dữ liệu",
|
||||||
|
interval: "Khoảng cách Cập nhật",
|
||||||
|
remote: "Xa",
|
||||||
|
local: "Cục bộ",
|
||||||
|
},
|
||||||
|
basic: {
|
||||||
|
log: {
|
||||||
|
title: "Nhật ký",
|
||||||
|
level: "Mức độ",
|
||||||
|
output: "Đầu ra",
|
||||||
|
timestamp: "Bật Dấu thời gian",
|
||||||
|
},
|
||||||
|
dns: {
|
||||||
|
final: "Cuối cùng",
|
||||||
|
server: "Máy chủ",
|
||||||
|
firstServer: "Máy chủ Đầu tiên",
|
||||||
|
},
|
||||||
|
routing: {
|
||||||
|
title: "Định tuyến",
|
||||||
|
defaultOut: "Ra ngoài Mặc định",
|
||||||
|
defaultIf: "NIC Mặc định",
|
||||||
|
defaultRm: "Đánh dấu Định tuyến Mặc định",
|
||||||
|
autoBind: "Tự động Ràng buộc NIC",
|
||||||
|
},
|
||||||
|
exp: {
|
||||||
|
storeFakeIp: "Lưu IP Giả mạo",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
tls : {
|
tls : {
|
||||||
enable: "Kích hoạt TLS",
|
enable: "Kích hoạt TLS",
|
||||||
@@ -144,6 +319,13 @@ export default {
|
|||||||
keyPath: "Đường dẫn tệp khóa",
|
keyPath: "Đường dẫn tệp khóa",
|
||||||
cert: "Chứng chỉ",
|
cert: "Chứng chỉ",
|
||||||
key: "Khóa",
|
key: "Khóa",
|
||||||
|
options: "Tùy chọn TLS",
|
||||||
|
minVer: "Phiên bản Tối thiểu",
|
||||||
|
maxVer: "Phiên bản Tối đa",
|
||||||
|
cs: "Các bộ mã hóa",
|
||||||
|
pubKey: "Khóa Công khai",
|
||||||
|
disableSni: "Tắt SNI",
|
||||||
|
insecure: "Cho phép Không an toàn",
|
||||||
},
|
},
|
||||||
stats: {
|
stats: {
|
||||||
upload: "Tải lên",
|
upload: "Tải lên",
|
||||||
@@ -162,6 +344,9 @@ export default {
|
|||||||
Kp: "Kph",
|
Kp: "Kph",
|
||||||
Mp: "Mph",
|
Mp: "Mph",
|
||||||
Gb: "Gb",
|
Gb: "Gb",
|
||||||
|
bps: "bps",
|
||||||
|
Kbps: "Kbps",
|
||||||
|
Mbps: "Mbps",
|
||||||
},
|
},
|
||||||
date: {
|
date: {
|
||||||
expiry: "Hết hạn",
|
expiry: "Hết hạn",
|
||||||
@@ -170,5 +355,6 @@ export default {
|
|||||||
h: "g",
|
h: "g",
|
||||||
m: "p",
|
m: "p",
|
||||||
s: "s",
|
s: "s",
|
||||||
}
|
ms: "ms",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ export default {
|
|||||||
unlimited: "无限",
|
unlimited: "无限",
|
||||||
remained: "剩余",
|
remained: "剩余",
|
||||||
type: "类型",
|
type: "类型",
|
||||||
|
protocol: "协议",
|
||||||
submit: "提交",
|
submit: "提交",
|
||||||
reset: "重置",
|
reset: "重置",
|
||||||
now: "当前",
|
now: "当前",
|
||||||
@@ -19,6 +20,8 @@ export default {
|
|||||||
noData: "无数据!",
|
noData: "无数据!",
|
||||||
invalidLogin: "登录无效!",
|
invalidLogin: "登录无效!",
|
||||||
online: "在线",
|
online: "在线",
|
||||||
|
version: "版本",
|
||||||
|
commaSeparated: "(逗号分隔)",
|
||||||
pages: {
|
pages: {
|
||||||
login: "登录",
|
login: "登录",
|
||||||
home: "主页",
|
home: "主页",
|
||||||
@@ -63,6 +66,16 @@ export default {
|
|||||||
outbound: "出站",
|
outbound: "出站",
|
||||||
rule: "规则",
|
rule: "规则",
|
||||||
user: "用户",
|
user: "用户",
|
||||||
|
tag: "标签",
|
||||||
|
listen: "听",
|
||||||
|
dial: "拨号",
|
||||||
|
tls: "TLS",
|
||||||
|
multiplex: "多路复用",
|
||||||
|
transport: "传输",
|
||||||
|
method: "方法",
|
||||||
|
headers: "标头",
|
||||||
|
key: "钥匙",
|
||||||
|
value: "价值",
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
action: "操作",
|
action: "操作",
|
||||||
@@ -90,6 +103,9 @@ export default {
|
|||||||
oldPass: "当前密码",
|
oldPass: "当前密码",
|
||||||
newUname: "新用户名",
|
newUname: "新用户名",
|
||||||
newPass: "新密码",
|
newPass: "新密码",
|
||||||
|
lastLogin: "上次登录",
|
||||||
|
date: "日期",
|
||||||
|
time: "时间",
|
||||||
},
|
},
|
||||||
setting: {
|
setting: {
|
||||||
interface: "界面",
|
interface: "界面",
|
||||||
@@ -120,21 +136,180 @@ export default {
|
|||||||
external: "外部链接",
|
external: "外部链接",
|
||||||
sub: "外部订阅",
|
sub: "外部订阅",
|
||||||
},
|
},
|
||||||
|
types: {
|
||||||
|
un: "用户名",
|
||||||
|
pw: "密码",
|
||||||
|
direct: {
|
||||||
|
overrideAddr: "覆盖地址",
|
||||||
|
overridePort: "覆盖端口",
|
||||||
|
proxyProtocol: "代理协议",
|
||||||
|
},
|
||||||
|
hy: {
|
||||||
|
obfs: "混淆密码",
|
||||||
|
auth: "认证密码",
|
||||||
|
hyOptions: "Hysteria 选项",
|
||||||
|
hy2Options: "Hysteria2 选项",
|
||||||
|
ignoreBw: "忽略客户端带宽",
|
||||||
|
},
|
||||||
|
shdwTls: {
|
||||||
|
hs: "握手服务器",
|
||||||
|
addHS: "添加握手服务器",
|
||||||
|
},
|
||||||
|
ssh: {
|
||||||
|
passphrase: "密码短语",
|
||||||
|
hostKey: "主机密钥",
|
||||||
|
algorithm: "密钥算法",
|
||||||
|
clientVer: "客户端版本",
|
||||||
|
options: "SSH 选项",
|
||||||
|
},
|
||||||
|
tor: {
|
||||||
|
execPath: "可执行文件路径",
|
||||||
|
dataDir: "数据目录",
|
||||||
|
extArgs: "额外参数",
|
||||||
|
},
|
||||||
|
tuic: {
|
||||||
|
congControl: "拥塞控制",
|
||||||
|
authTimeout: "认证超时",
|
||||||
|
hb: "心跳",
|
||||||
|
},
|
||||||
|
vless: {
|
||||||
|
flow: "流量",
|
||||||
|
udpEnc: "UDP 数据包编码",
|
||||||
|
},
|
||||||
|
vmess: {
|
||||||
|
security: "安全性",
|
||||||
|
globalPadding: "全局填充",
|
||||||
|
authLen: "加密长度",
|
||||||
|
},
|
||||||
|
wg: {
|
||||||
|
privKey: "私钥",
|
||||||
|
pubKey: "对等方公钥",
|
||||||
|
psk: "预共享密钥",
|
||||||
|
localIp: "本地 IP 地址",
|
||||||
|
worker: "工作线程",
|
||||||
|
ifName: "接口名称",
|
||||||
|
sysIf: "系统接口",
|
||||||
|
gso: "分段卸载",
|
||||||
|
options: "WireGuard 选项",
|
||||||
|
multiPeer: "多对等体",
|
||||||
|
allowedIp: "允许的 IP 地址",
|
||||||
|
peer: "对等体",
|
||||||
|
peers: "对等体",
|
||||||
|
},
|
||||||
|
lb: {
|
||||||
|
defaultOut: "默认出站",
|
||||||
|
interruptConn: "中断现有连接",
|
||||||
|
testUrl: "测试 URL",
|
||||||
|
interval: "间隔",
|
||||||
|
tolerance: "容错",
|
||||||
|
urlTestOptions: "URL 测试选项",
|
||||||
|
}
|
||||||
|
},
|
||||||
in: {
|
in: {
|
||||||
tag: "标签",
|
|
||||||
addr: "地址",
|
addr: "地址",
|
||||||
port: "端口",
|
port: "端口",
|
||||||
sniffing: "嗅探",
|
sniffing: "嗅探",
|
||||||
tls: "TLS",
|
|
||||||
clients: "启用客户端",
|
clients: "启用客户端",
|
||||||
multiplex: "多路复用",
|
ssMethod: "方法",
|
||||||
transport: "传输",
|
},
|
||||||
|
listen: {
|
||||||
|
sniffing: "嗅探",
|
||||||
|
sniffingTimeout: "嗅探超时",
|
||||||
|
sniffingOverride: "覆盖目的地",
|
||||||
|
options: "监听选项",
|
||||||
|
tcpOptions: "TCP选项",
|
||||||
|
udpOptions: "UDP选项",
|
||||||
|
detour: "绕道",
|
||||||
|
detourText: "转发到入站",
|
||||||
|
domainStrategy: "域名策略",
|
||||||
|
},
|
||||||
|
dial: {
|
||||||
|
bindIf: "绑定到网络接口",
|
||||||
|
bindIp4: "绑定到IPv4",
|
||||||
|
bindIp6: "绑定到IPv6",
|
||||||
|
reuseAddr: "重用监听地址",
|
||||||
|
connTimeout: "连接超时",
|
||||||
|
fbTimeout: "回退超时",
|
||||||
|
options: "拨号选项",
|
||||||
},
|
},
|
||||||
transport: {
|
transport: {
|
||||||
enable: "启用传输",
|
enable: "启用传输",
|
||||||
host: "主机",
|
host: "主机",
|
||||||
hosts: "主机列表",
|
hosts: "主机列表",
|
||||||
path: "路径",
|
path: "路径",
|
||||||
|
httpMethod: "请求方法",
|
||||||
|
idleTimeout: "空闲超时",
|
||||||
|
pingTimeout: "Ping超时",
|
||||||
|
grpcServiceName: "服务名称",
|
||||||
|
grpcPws: "允许无流",
|
||||||
|
},
|
||||||
|
mux: {
|
||||||
|
enable: "启用多路复用",
|
||||||
|
maxConn: "最大连接数",
|
||||||
|
minStr: "最小流数",
|
||||||
|
maxStr: "最大流数",
|
||||||
|
padding: "仅填充",
|
||||||
|
enableBrutal: "启用强力模式",
|
||||||
|
},
|
||||||
|
out: {
|
||||||
|
addr: "服务器地址",
|
||||||
|
port: "服务器端口",
|
||||||
|
},
|
||||||
|
rule: {
|
||||||
|
add: "添加规则",
|
||||||
|
simple: "简单",
|
||||||
|
logical: "逻辑",
|
||||||
|
mode: "模式",
|
||||||
|
invert: "反转",
|
||||||
|
ipVer: "IP 版本",
|
||||||
|
domain: "域名",
|
||||||
|
domainSufix: "域名后缀",
|
||||||
|
domainKw: "域名关键词",
|
||||||
|
domainRgx: "域名正则表达式",
|
||||||
|
ip: "IP CIDR",
|
||||||
|
privateIp: "无效 IP 范围",
|
||||||
|
port: "端口",
|
||||||
|
portRange: "端口范围",
|
||||||
|
srcCidr: "源 IP CIDR",
|
||||||
|
srcPrivateIp: "无效源 IP",
|
||||||
|
srcPort: "源端口",
|
||||||
|
srcPortRange: "源端口范围",
|
||||||
|
ruleset: "规则集",
|
||||||
|
rulesetMatchSrc: "规则集 IP CIDR 匹配源",
|
||||||
|
options: "规则选项",
|
||||||
|
domainRules: "域名/IP",
|
||||||
|
srcIpRules: "源 IP",
|
||||||
|
srcPortRules: "源端口",
|
||||||
|
},
|
||||||
|
ruleset: {
|
||||||
|
add: "添加规则集",
|
||||||
|
format: "数据格式",
|
||||||
|
interval: "更新间隔",
|
||||||
|
remote: "远程",
|
||||||
|
local: "本地",
|
||||||
|
},
|
||||||
|
basic: {
|
||||||
|
log: {
|
||||||
|
title: "日志",
|
||||||
|
level: "级别",
|
||||||
|
output: "输出",
|
||||||
|
timestamp: "启用时间戳",
|
||||||
|
},
|
||||||
|
dns: {
|
||||||
|
final: "最终",
|
||||||
|
server: "服务器",
|
||||||
|
firstServer: "首选服务器",
|
||||||
|
},
|
||||||
|
routing: {
|
||||||
|
title: "路由",
|
||||||
|
defaultOut: "默认出站",
|
||||||
|
defaultIf: "默认网卡",
|
||||||
|
defaultRm: "默认路由标记",
|
||||||
|
autoBind: "自动绑定网卡",
|
||||||
|
},
|
||||||
|
exp: {
|
||||||
|
storeFakeIp: "存储虚假 IP",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
tls : {
|
tls : {
|
||||||
enable: "启用 TLS",
|
enable: "启用 TLS",
|
||||||
@@ -144,6 +319,13 @@ export default {
|
|||||||
keyPath: "私钥文件路径",
|
keyPath: "私钥文件路径",
|
||||||
cert: "证书文件内容",
|
cert: "证书文件内容",
|
||||||
key: "私钥文件内容",
|
key: "私钥文件内容",
|
||||||
|
options: "TLS 选项",
|
||||||
|
minVer: "最低版本",
|
||||||
|
maxVer: "最高版本",
|
||||||
|
cs: "密码套件",
|
||||||
|
pubKey: "公钥",
|
||||||
|
disableSni: "禁用SNI",
|
||||||
|
insecure: "允许不安全",
|
||||||
},
|
},
|
||||||
stats: {
|
stats: {
|
||||||
upload: "上传",
|
upload: "上传",
|
||||||
@@ -162,6 +344,9 @@ export default {
|
|||||||
Kp: "Kp",
|
Kp: "Kp",
|
||||||
Mp: "Mp",
|
Mp: "Mp",
|
||||||
Gb: "Gb",
|
Gb: "Gb",
|
||||||
|
bps: "bps",
|
||||||
|
Kbps: "Kbps",
|
||||||
|
Mbps: "Mbps",
|
||||||
},
|
},
|
||||||
date: {
|
date: {
|
||||||
expiry: "到期",
|
expiry: "到期",
|
||||||
@@ -170,5 +355,6 @@ export default {
|
|||||||
h: "时",
|
h: "时",
|
||||||
m: "分",
|
m: "分",
|
||||||
s: "秒",
|
s: "秒",
|
||||||
}
|
ms: "毫秒",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
export default {
|
export default {
|
||||||
|
open: "打開",
|
||||||
message: "歡迎",
|
message: "歡迎",
|
||||||
success: "成功",
|
success: "成功",
|
||||||
failed: "失敗",
|
failed: "失敗",
|
||||||
@@ -11,6 +12,7 @@ export default {
|
|||||||
unlimited: "無限",
|
unlimited: "無限",
|
||||||
remained: "剩余",
|
remained: "剩余",
|
||||||
type: "類型",
|
type: "類型",
|
||||||
|
protocol: "協定",
|
||||||
submit: "提交",
|
submit: "提交",
|
||||||
reset: "重置",
|
reset: "重置",
|
||||||
now: "當前",
|
now: "當前",
|
||||||
@@ -19,6 +21,8 @@ export default {
|
|||||||
noData: "無數據!",
|
noData: "無數據!",
|
||||||
invalidLogin: "登錄無效!",
|
invalidLogin: "登錄無效!",
|
||||||
online: "在線",
|
online: "在線",
|
||||||
|
version: "版本",
|
||||||
|
commaSeparated: "(逗號分隔)",
|
||||||
pages: {
|
pages: {
|
||||||
login: "登錄",
|
login: "登錄",
|
||||||
home: "主頁",
|
home: "主頁",
|
||||||
@@ -63,6 +67,16 @@ export default {
|
|||||||
outbound: "出站",
|
outbound: "出站",
|
||||||
rule: "規則",
|
rule: "規則",
|
||||||
user: "用戶",
|
user: "用戶",
|
||||||
|
tag: "標簽",
|
||||||
|
listen: "聽",
|
||||||
|
dial: "撥號",
|
||||||
|
tls: "TLS",
|
||||||
|
multiplex: "多路復用",
|
||||||
|
transport: "傳輸",
|
||||||
|
method: "方法",
|
||||||
|
headers: "方法",
|
||||||
|
key: "鑰匙",
|
||||||
|
value: "價值",
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
action: "操作",
|
action: "操作",
|
||||||
@@ -90,6 +104,9 @@ export default {
|
|||||||
oldPass: "當前密碼",
|
oldPass: "當前密碼",
|
||||||
newUname: "新用戶名",
|
newUname: "新用戶名",
|
||||||
newPass: "新密碼",
|
newPass: "新密碼",
|
||||||
|
lastLogin: "上次登入",
|
||||||
|
date: "日期",
|
||||||
|
time: "時間",
|
||||||
},
|
},
|
||||||
setting: {
|
setting: {
|
||||||
interface: "界面",
|
interface: "界面",
|
||||||
@@ -120,21 +137,180 @@ export default {
|
|||||||
external: "外部鏈接",
|
external: "外部鏈接",
|
||||||
sub: "外部訂閱",
|
sub: "外部訂閱",
|
||||||
},
|
},
|
||||||
|
types: {
|
||||||
|
un: "用戶名",
|
||||||
|
pw: "密碼",
|
||||||
|
direct: {
|
||||||
|
overrideAddr: "覆蓋地址",
|
||||||
|
overridePort: "覆蓋端口",
|
||||||
|
proxyProtocol: "代理協議",
|
||||||
|
},
|
||||||
|
hy: {
|
||||||
|
obfs: "混淆密碼",
|
||||||
|
auth: "驗證密碼",
|
||||||
|
hyOptions: "Hysteria 選項",
|
||||||
|
hy2Options: "Hysteria2 選項",
|
||||||
|
ignoreBw: "忽略客戶端帶寬",
|
||||||
|
},
|
||||||
|
shdwTls: {
|
||||||
|
hs: "握手服務器",
|
||||||
|
addHS: "添加握手服務器",
|
||||||
|
},
|
||||||
|
ssh: {
|
||||||
|
passphrase: "密語",
|
||||||
|
hostKey: "主機密鑰",
|
||||||
|
algorithm: "密鑰算法",
|
||||||
|
clientVer: "客戶端版本",
|
||||||
|
options: "SSH 選項",
|
||||||
|
},
|
||||||
|
tor: {
|
||||||
|
execPath: "可執行文件路徑",
|
||||||
|
dataDir: "數據目錄",
|
||||||
|
extArgs: "額外參數",
|
||||||
|
},
|
||||||
|
tuic: {
|
||||||
|
congControl: "擁塞控制",
|
||||||
|
authTimeout: "身份驗證超時",
|
||||||
|
hb: "心跳",
|
||||||
|
},
|
||||||
|
vless: {
|
||||||
|
flow: "流量",
|
||||||
|
udpEnc: "UDP 封包編碼",
|
||||||
|
},
|
||||||
|
vmess: {
|
||||||
|
security: "安全性",
|
||||||
|
globalPadding: "全局填充",
|
||||||
|
authLen: "加密長度",
|
||||||
|
},
|
||||||
|
wg: {
|
||||||
|
privKey: "私鑰",
|
||||||
|
pubKey: "對等方公鑰",
|
||||||
|
psk: "預共享密鑰",
|
||||||
|
localIp: "本地 IP",
|
||||||
|
worker: "工作線程",
|
||||||
|
ifName: "介面名稱",
|
||||||
|
sysIf: "系統介面",
|
||||||
|
gso: "分段卸載",
|
||||||
|
options: "Wireguard 選項",
|
||||||
|
multiPeer: "多對等方",
|
||||||
|
allowedIp: "允許的 IP",
|
||||||
|
peer: "對等方",
|
||||||
|
peers: "對等方",
|
||||||
|
},
|
||||||
|
lb: {
|
||||||
|
defaultOut: "默認外部",
|
||||||
|
interruptConn: "中斷現有連接",
|
||||||
|
testUrl: "測試 URL",
|
||||||
|
interval: "間隔",
|
||||||
|
tolerance: "容忍度",
|
||||||
|
urlTestOptions: "URL 測試選項"
|
||||||
|
}
|
||||||
|
},
|
||||||
in: {
|
in: {
|
||||||
tag: "標簽",
|
|
||||||
addr: "地址",
|
addr: "地址",
|
||||||
port: "端口",
|
port: "端口",
|
||||||
sniffing: "嗅探",
|
sniffing: "嗅探",
|
||||||
tls: "TLS",
|
|
||||||
clients: "啟用客戶端",
|
clients: "啟用客戶端",
|
||||||
multiplex: "多路復用",
|
ssMethod: "方法",
|
||||||
transport: "傳輸",
|
},
|
||||||
|
listen: {
|
||||||
|
sniffing: "嗅探",
|
||||||
|
sniffingTimeout: "嗅探超時",
|
||||||
|
sniffingOverride: "覆蓋目的地",
|
||||||
|
options: "監聽選項",
|
||||||
|
tcpOptions: "TCP 選項",
|
||||||
|
udpOptions: "UDP 選項",
|
||||||
|
detour: "繞道",
|
||||||
|
detourText: "轉發到入站",
|
||||||
|
domainStrategy: "域名策略",
|
||||||
|
},
|
||||||
|
dial: {
|
||||||
|
bindIf: "綁定到網路接口",
|
||||||
|
bindIp4: "綁定到 IPv4",
|
||||||
|
bindIp6: "綁定到 IPv6",
|
||||||
|
reuseAddr: "重用監聽地址",
|
||||||
|
connTimeout: "連接超時",
|
||||||
|
fbTimeout: "回退超時",
|
||||||
|
options: "撥號選項",
|
||||||
},
|
},
|
||||||
transport: {
|
transport: {
|
||||||
enable: "啟用傳輸",
|
enable: "啟用傳輸",
|
||||||
host: "主機",
|
host: "主機",
|
||||||
hosts: "主機列表",
|
hosts: "主機列表",
|
||||||
path: "路徑",
|
path: "路徑",
|
||||||
|
httpMethod: "請求方法",
|
||||||
|
idleTimeout: "閒置超時",
|
||||||
|
pingTimeout: "Ping 超時",
|
||||||
|
grpcServiceName: "服務名稱",
|
||||||
|
grpcPws: "允許無流",
|
||||||
|
},
|
||||||
|
mux: {
|
||||||
|
enable: "啟用多路徑",
|
||||||
|
maxConn: "最大連接數",
|
||||||
|
minStr: "最小串流數",
|
||||||
|
maxStr: "最大串流數",
|
||||||
|
padding: "僅填充",
|
||||||
|
enableBrutal: "啟用暴力",
|
||||||
|
},
|
||||||
|
out: {
|
||||||
|
addr: "伺服器地址",
|
||||||
|
port: "伺服器端口",
|
||||||
|
},
|
||||||
|
rule: {
|
||||||
|
add: "添加規則",
|
||||||
|
simple: "簡單",
|
||||||
|
logical: "邏輯",
|
||||||
|
mode: "模式",
|
||||||
|
invert: "反轉",
|
||||||
|
ipVer: "IP 版本",
|
||||||
|
domain: "域名",
|
||||||
|
domainSufix: "域名後綴",
|
||||||
|
domainKw: "域名關鍵詞",
|
||||||
|
domainRgx: "域名正則表達式",
|
||||||
|
ip: "IP CIDR",
|
||||||
|
privateIp: "無效 IP 範圍",
|
||||||
|
port: "端口",
|
||||||
|
portRange: "端口範圍",
|
||||||
|
srcCidr: "源 IP CIDR",
|
||||||
|
srcPrivateIp: "無效源 IP",
|
||||||
|
srcPort: "源端口",
|
||||||
|
srcPortRange: "源端口範圍",
|
||||||
|
ruleset: "規則集",
|
||||||
|
rulesetMatchSrc: "規則集 IP 範圍匹配源",
|
||||||
|
options: "規則選項",
|
||||||
|
domainRules: "域名/IP",
|
||||||
|
srcIpRules: "源 IP",
|
||||||
|
srcPortRules: "源端口",
|
||||||
|
},
|
||||||
|
ruleset: {
|
||||||
|
add: "添加規則集",
|
||||||
|
format: "數據格式",
|
||||||
|
interval: "更新間隔",
|
||||||
|
remote: "遠端",
|
||||||
|
local: "本地",
|
||||||
|
},
|
||||||
|
basic: {
|
||||||
|
log: {
|
||||||
|
title: "日誌",
|
||||||
|
level: "級別",
|
||||||
|
output: "輸出",
|
||||||
|
timestamp: "啟用時間戳記",
|
||||||
|
},
|
||||||
|
dns: {
|
||||||
|
final: "最終",
|
||||||
|
server: "服務器",
|
||||||
|
firstServer: "首選服務器",
|
||||||
|
},
|
||||||
|
routing: {
|
||||||
|
title: "路由",
|
||||||
|
defaultOut: "默認外部",
|
||||||
|
defaultIf: "默認網卡",
|
||||||
|
defaultRm: "默認路由標記",
|
||||||
|
autoBind: "自動綁定網卡",
|
||||||
|
},
|
||||||
|
exp: {
|
||||||
|
storeFakeIp: "存儲假 IP",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
tls : {
|
tls : {
|
||||||
enable: "啟用 TLS",
|
enable: "啟用 TLS",
|
||||||
@@ -144,6 +320,13 @@ export default {
|
|||||||
keyPath: "私鑰文件路徑",
|
keyPath: "私鑰文件路徑",
|
||||||
cert: "證書文件內容",
|
cert: "證書文件內容",
|
||||||
key: "私鑰文件內容",
|
key: "私鑰文件內容",
|
||||||
|
options: "TLS 選項",
|
||||||
|
minVer: "最低版本",
|
||||||
|
maxVer: "最高版本",
|
||||||
|
cs: "加密套件",
|
||||||
|
pubKey: "公鑰",
|
||||||
|
disableSni: "停用 SNI",
|
||||||
|
insecure: "允許不安全連線",
|
||||||
},
|
},
|
||||||
stats: {
|
stats: {
|
||||||
upload: "上傳",
|
upload: "上傳",
|
||||||
@@ -162,6 +345,9 @@ export default {
|
|||||||
Kp: "Kp",
|
Kp: "Kp",
|
||||||
Mp: "Mp",
|
Mp: "Mp",
|
||||||
Gb: "Gb",
|
Gb: "Gb",
|
||||||
|
bps: "bps",
|
||||||
|
Kbps: "Kbps",
|
||||||
|
Mbps: "Mbps",
|
||||||
},
|
},
|
||||||
date: {
|
date: {
|
||||||
expiry: "到期",
|
expiry: "到期",
|
||||||
@@ -170,5 +356,6 @@ export default {
|
|||||||
h: "時",
|
h: "時",
|
||||||
m: "分",
|
m: "分",
|
||||||
s: "秒",
|
s: "秒",
|
||||||
}
|
ms: "毫秒",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,17 +10,17 @@
|
|||||||
<v-col cols="12" sm="4" md="3" lg="2" v-for="(item, index) in <any[]>users" :key="item.id">
|
<v-col cols="12" sm="4" md="3" lg="2" v-for="(item, index) in <any[]>users" :key="item.id">
|
||||||
<v-card rounded="xl" elevation="5" min-width="200" :title="item.username">
|
<v-card rounded="xl" elevation="5" min-width="200" :title="item.username">
|
||||||
<v-card-subtitle style="margin-top: -20px;">
|
<v-card-subtitle style="margin-top: -20px;">
|
||||||
Last Login
|
{{ $t('admin.lastLogin') }}
|
||||||
</v-card-subtitle>
|
</v-card-subtitle>
|
||||||
<v-card-text>
|
<v-card-text>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>Date</v-col>
|
<v-col>{{ $t('admin.date') }}</v-col>
|
||||||
<v-col dir="ltr">
|
<v-col dir="ltr">
|
||||||
{{ item.lastLogin.split(" ")[0]?? '-' }}
|
{{ item.lastLogin.split(" ")[0]?? '-' }}
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>Time</v-col>
|
<v-col>{{ $t('admin.time') }}</v-col>
|
||||||
<v-col dir="ltr">
|
<v-col dir="ltr">
|
||||||
{{ item.lastLogin.split(" ")[1]?? '-' }}
|
{{ item.lastLogin.split(" ")[1]?? '-' }}
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-expansion-panels>
|
<v-expansion-panels>
|
||||||
<v-expansion-panel title="Log">
|
<v-expansion-panel :title="$t('basic.log.title')">
|
||||||
<v-expansion-panel-text>
|
<v-expansion-panel-text>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="3">
|
<v-col cols="12" sm="6" md="3">
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
<v-col cols="12" sm="6" md="3">
|
<v-col cols="12" sm="6" md="3">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Level"
|
:label="$t('basic.log.level')"
|
||||||
:items="levels"
|
:items="levels"
|
||||||
v-model="appConfig.log.level">
|
v-model="appConfig.log.level">
|
||||||
</v-select>
|
</v-select>
|
||||||
@@ -18,11 +18,11 @@
|
|||||||
<v-text-field
|
<v-text-field
|
||||||
v-model="appConfig.log.output"
|
v-model="appConfig.log.output"
|
||||||
hide-details
|
hide-details
|
||||||
label="Output"
|
:label="$t('basic.log.output')"
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="3">
|
<v-col cols="12" sm="6" md="3">
|
||||||
<v-switch v-model="appConfig.log.timestamp" color="primary" label="Timestamp" hide-details></v-switch>
|
<v-switch v-model="appConfig.log.timestamp" color="primary" :label="$t('basic.log.timestamp')" hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-expansion-panel-text>
|
</v-expansion-panel-text>
|
||||||
@@ -33,15 +33,15 @@
|
|||||||
<v-col cols="12" sm="6" md="3">
|
<v-col cols="12" sm="6" md="3">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Final"
|
:label="$t('basic.dns.final')"
|
||||||
:items="[ {title: 'First Server', value: ''}, ...dnsServersTags]"
|
:items="[ {title: $t('basic.dns.firstServer'), value: ''}, ...dnsServersTags]"
|
||||||
v-model="finalDns">
|
v-model="finalDns">
|
||||||
</v-select>
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="3">
|
<v-col cols="12" sm="6" md="3">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Domain to IP Strategy"
|
:label="$t('listen.domainStrategy')"
|
||||||
clearable
|
clearable
|
||||||
@click:clear="delete appConfig.dns.strategy"
|
@click:clear="delete appConfig.dns.strategy"
|
||||||
:items="['prefer_ipv4','prefer_ipv6','ipv4_only','ipv6_only']"
|
:items="['prefer_ipv4','prefer_ipv6','ipv4_only','ipv6_only']"
|
||||||
@@ -50,12 +50,12 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="3" align-self="center">
|
<v-col cols="12" sm="6" md="3" align-self="center">
|
||||||
<v-btn @click="addDnsServer" rounded>
|
<v-btn @click="addDnsServer" rounded>
|
||||||
<v-icon icon="mdi-plus" />Server
|
<v-icon icon="mdi-plus" />{{ $t('basic.dns.server') }}
|
||||||
</v-btn>
|
</v-btn>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<template v-for="(s, index) in appConfig.dns.servers">
|
<template v-for="(s, index) in appConfig.dns.servers">
|
||||||
Server {{ index+1 }} <v-icon icon="mdi-delete" @click="appConfig.dns.servers.splice(index,1)" />
|
{{ $t('basic.dns.server') + ' ' + (index+1) }} <v-icon icon="mdi-delete" @click="appConfig.dns.servers.splice(index,1)" />
|
||||||
<v-divider></v-divider>
|
<v-divider></v-divider>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="3">
|
<v-col cols="12" sm="6" md="3">
|
||||||
@@ -64,20 +64,20 @@
|
|||||||
hide-details
|
hide-details
|
||||||
clearable
|
clearable
|
||||||
@click:clear="delete s.tag"
|
@click:clear="delete s.tag"
|
||||||
label="Tag"
|
:label="$t('objects.tag')"
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="3">
|
<v-col cols="12" sm="6" md="3">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
v-model="s.address"
|
v-model="s.address"
|
||||||
hide-details
|
hide-details
|
||||||
label="Address"
|
:label="$t('out.addr')"
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="3">
|
<v-col cols="12" sm="6" md="3">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Outbound"
|
:label="$t('objects.outbound')"
|
||||||
clearable
|
clearable
|
||||||
@click:clear="delete s.detour"
|
@click:clear="delete s.detour"
|
||||||
:items="outboundTags"
|
:items="outboundTags"
|
||||||
@@ -87,7 +87,7 @@
|
|||||||
<v-col cols="12" sm="6" md="3">
|
<v-col cols="12" sm="6" md="3">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Domain Strategy"
|
:label="$t('listen.domainStrategy')"
|
||||||
clearable
|
clearable
|
||||||
@click:clear="delete s.strategy"
|
@click:clear="delete s.strategy"
|
||||||
:items="['prefer_ipv4','prefer_ipv6','ipv4_only','ipv6_only']"
|
:items="['prefer_ipv4','prefer_ipv6','ipv4_only','ipv6_only']"
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
<v-text-field
|
<v-text-field
|
||||||
v-model="appConfig.ntp.server"
|
v-model="appConfig.ntp.server"
|
||||||
hide-details
|
hide-details
|
||||||
label="Server"
|
:label="$t('out.addr')"
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="3" v-if="appConfig.ntp?.enabled">
|
<v-col cols="12" sm="6" md="3" v-if="appConfig.ntp?.enabled">
|
||||||
@@ -118,30 +118,30 @@
|
|||||||
type="number"
|
type="number"
|
||||||
clearable
|
clearable
|
||||||
@click:clear="delete appConfig.ntp?.server_port"
|
@click:clear="delete appConfig.ntp?.server_port"
|
||||||
label="Server Port"
|
:label="$t('out.port')"
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="3" v-if="appConfig.ntp?.enabled">
|
<v-col cols="12" sm="6" md="3" v-if="appConfig.ntp?.enabled">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
v-model="ntpInterval"
|
v-model="ntpInterval"
|
||||||
hide-details
|
hide-details
|
||||||
suffix="m"
|
:suffix="$t('date.m')"
|
||||||
min="0"
|
min="0"
|
||||||
type="number"
|
type="number"
|
||||||
label="Interval"
|
:label="$t('ruleset.interval')"
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<Dial :dial="appConfig.ntp" :outTags="outboundTags" v-if="appConfig.ntp?.enabled" />
|
<Dial :dial="appConfig.ntp" :outTags="outboundTags" v-if="appConfig.ntp?.enabled" />
|
||||||
</v-expansion-panel-text>
|
</v-expansion-panel-text>
|
||||||
</v-expansion-panel>
|
</v-expansion-panel>
|
||||||
<v-expansion-panel title="Routing">
|
<v-expansion-panel :title="$t('basic.routing.title')">
|
||||||
<v-expansion-panel-text>
|
<v-expansion-panel-text>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" sm="6" md="3">
|
<v-col cols="12" sm="6" md="3">
|
||||||
<v-select
|
<v-select
|
||||||
hide-details
|
hide-details
|
||||||
label="Default outbound"
|
:label="$t('basic.routing.defaultOut')"
|
||||||
clearable
|
clearable
|
||||||
@click:clear="delete appConfig.route.final"
|
@click:clear="delete appConfig.route.final"
|
||||||
:items="outboundTags"
|
:items="outboundTags"
|
||||||
@@ -154,7 +154,7 @@
|
|||||||
hide-details
|
hide-details
|
||||||
clearable
|
clearable
|
||||||
@click:clear="delete appConfig.route.default_interface"
|
@click:clear="delete appConfig.route.default_interface"
|
||||||
label="Default NIC"
|
:label="$t('basic.routing.defaultIf')"
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="3">
|
<v-col cols="12" sm="6" md="3">
|
||||||
@@ -163,14 +163,14 @@
|
|||||||
hide-details
|
hide-details
|
||||||
type="number"
|
type="number"
|
||||||
min="0"
|
min="0"
|
||||||
label="Default routing mark"
|
:label="$t('basic.routing.defaultRm')"
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="3">
|
<v-col cols="12" sm="6" md="3">
|
||||||
<v-switch
|
<v-switch
|
||||||
v-model="appConfig.route.auto_detect_interface"
|
v-model="appConfig.route.auto_detect_interface"
|
||||||
color="primary"
|
color="primary"
|
||||||
label="Auto bind NIC"
|
:label="$t('basic.routing.autoBind')"
|
||||||
hide-details>
|
hide-details>
|
||||||
</v-switch>
|
</v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
@@ -189,7 +189,7 @@
|
|||||||
<v-text-field
|
<v-text-field
|
||||||
v-model="appConfig.experimental.cache_file.path"
|
v-model="appConfig.experimental.cache_file.path"
|
||||||
hide-details
|
hide-details
|
||||||
label="Path"
|
:label="$t('transport.path')"
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="3" v-if="appConfig.experimental.cache_file">
|
<v-col cols="12" sm="6" md="3" v-if="appConfig.experimental.cache_file">
|
||||||
@@ -202,7 +202,7 @@
|
|||||||
<v-col cols="12" sm="6" md="3" v-if="appConfig.experimental.cache_file">
|
<v-col cols="12" sm="6" md="3" v-if="appConfig.experimental.cache_file">
|
||||||
<v-switch v-model="appConfig.experimental.cache_file.store_fakeip"
|
<v-switch v-model="appConfig.experimental.cache_file.store_fakeip"
|
||||||
color="primary"
|
color="primary"
|
||||||
label="Store Fake IP"
|
:label="$t('basic.exp.storeFakeIp')"
|
||||||
hide-details></v-switch>
|
hide-details></v-switch>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
@@ -262,7 +262,7 @@
|
|||||||
<v-text-field
|
<v-text-field
|
||||||
v-model="appConfig.experimental.v2ray_api.listen"
|
v-model="appConfig.experimental.v2ray_api.listen"
|
||||||
hide-details
|
hide-details
|
||||||
label="Listen"
|
:label="$t('objects.listen')"
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="3">
|
<v-col cols="12" sm="6" md="3">
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>{{ $t('in.tls') }}</v-col>
|
<v-col>{{ $t('objects.tls') }}</v-col>
|
||||||
<v-col dir="ltr">
|
<v-col dir="ltr">
|
||||||
{{ Object.hasOwn(item,'tls') ? $t(item.tls?.enabled ? 'enable' : 'disable') : '-' }}
|
{{ Object.hasOwn(item,'tls') ? $t(item.tls?.enabled ? 'enable' : 'disable') : '-' }}
|
||||||
</v-col>
|
</v-col>
|
||||||
@@ -118,11 +118,11 @@ const inbounds = computed((): Inbound[] => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const inTags = computed((): string[] => {
|
const inTags = computed((): string[] => {
|
||||||
return appConfig.value.inbounds.map(i => i.tag)
|
return inbounds.value.map(i => i.tag)
|
||||||
})
|
})
|
||||||
|
|
||||||
const outTags = computed((): string[] => {
|
const outTags = computed((): string[] => {
|
||||||
return appConfig.value.outbounds.map(i => i.tag)
|
return appConfig.value.outbounds?.map(i => i.tag)
|
||||||
})
|
})
|
||||||
|
|
||||||
const clients = computed((): Client[] => {
|
const clients = computed((): Client[] => {
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>{{ $t('in.tls') }}</v-col>
|
<v-col>{{ $t('objects.tls') }}</v-col>
|
||||||
<v-col dir="ltr">
|
<v-col dir="ltr">
|
||||||
{{ Object.hasOwn(item,'tls') ? $t(item.tls?.enabled ? 'enable' : 'disable') : '-' }}
|
{{ Object.hasOwn(item,'tls') ? $t(item.tls?.enabled ? 'enable' : 'disable') : '-' }}
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|||||||
@@ -22,34 +22,34 @@
|
|||||||
/>
|
/>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12" justify="center" align="center">
|
<v-col cols="12" justify="center" align="center">
|
||||||
<v-btn color="primary" @click="showRuleModal(-1)" style="margin: 0 5px;">{{ $t('actions.add') + " " + $t('objects.rule') }}</v-btn>
|
<v-btn color="primary" @click="showRuleModal(-1)" style="margin: 0 5px;">{{ $t('rule.add') }}</v-btn>
|
||||||
<v-btn color="primary" @click="showRulesetModal(-1)" style="margin: 0 5px;">{{ $t('actions.add') + " Ruleset" }}</v-btn>
|
<v-btn color="primary" @click="showRulesetModal(-1)" style="margin: 0 5px;">{{ $t('ruleset.add') }}</v-btn>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12">Rulesets</v-col>
|
<v-col cols="12">{{ $t('rule.ruleset') }}</v-col>
|
||||||
<v-col cols="12" sm="4" md="3" lg="2" v-for="(item, index) in <any[]>rulesets" :key="item.tag">
|
<v-col cols="12" sm="4" md="3" lg="2" v-for="(item, index) in <any[]>rulesets" :key="item.tag">
|
||||||
<v-card rounded="xl" elevation="5" min-width="200" :title="index">
|
<v-card rounded="xl" elevation="5" min-width="200" :title="index">
|
||||||
<v-card-subtitle style="margin-top: -20px;">
|
<v-card-subtitle style="margin-top: -20px;">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>{{ item.type }}</v-col>
|
<v-col>{{ $t('ruleset.' + item.type) }}</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-card-subtitle>
|
</v-card-subtitle>
|
||||||
<v-card-text>
|
<v-card-text>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>{{ $t('in.tag') }}</v-col>
|
<v-col>{{ $t('objects.tag') }}</v-col>
|
||||||
<v-col dir="ltr">
|
<v-col dir="ltr">
|
||||||
{{ item.tag }}
|
{{ item.tag }}
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>Format</v-col>
|
<v-col>{{ $t('ruleset.format') }}</v-col>
|
||||||
<v-col dir="ltr">
|
<v-col dir="ltr">
|
||||||
{{ item.format }}
|
{{ item.format }}
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>Update</v-col>
|
<v-col>{{ $t('actions.update') }}</v-col>
|
||||||
<v-col dir="ltr">
|
<v-col dir="ltr">
|
||||||
{{ item.update_interval?? '-' }}
|
{{ item.update_interval?? '-' }}
|
||||||
</v-col>
|
</v-col>
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
<v-card rounded="xl" elevation="5" min-width="200" :title="index">
|
<v-card rounded="xl" elevation="5" min-width="200" :title="index">
|
||||||
<v-card-subtitle style="margin-top: -20px;">
|
<v-card-subtitle style="margin-top: -20px;">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>{{ item.type != undefined ? 'Logical (' + item.mode + ')' : 'Simple' }}</v-col>
|
<v-col>{{ item.type != undefined ? $t('rule.logical') + ' (' + item.mode + ')' : $t('rule.simple') }}</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-card-subtitle>
|
</v-card-subtitle>
|
||||||
<v-card-text>
|
<v-card-text>
|
||||||
@@ -106,7 +106,7 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>Invert</v-col>
|
<v-col>{{ $t('rule.invert') }}</v-col>
|
||||||
<v-col dir="ltr">
|
<v-col dir="ltr">
|
||||||
{{ $t( (item.invert?? false)? 'yes' : 'no') }}
|
{{ $t( (item.invert?? false)? 'yes' : 'no') }}
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|||||||
Reference in New Issue
Block a user