mirror of
https://github.com/donaldzou/WGDashboard.git
synced 2025-06-28 09:16:55 +00:00
Merge branch 'donaldzou:main' into main
This commit is contained in:
commit
e4c08896f4
28
.github/workflows/qodana_code_quality.yml
vendored
28
.github/workflows/qodana_code_quality.yml
vendored
@ -1,28 +0,0 @@
|
|||||||
name: Qodana
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
branches: # Specify your branches here
|
|
||||||
- main # The 'main' branch
|
|
||||||
- v4.2-dev
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
qodana:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
pull-requests: write
|
|
||||||
checks: write
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
ref: ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit
|
|
||||||
fetch-depth: 0 # a full history is required for pull request analysis
|
|
||||||
- name: 'Qodana Scan'
|
|
||||||
uses: JetBrains/qodana-action@v2024.3
|
|
||||||
with:
|
|
||||||
pr-mode: false
|
|
||||||
env:
|
|
||||||
QODANA_TOKEN: ${{ secrets.QODANA_TOKEN_2090978292 }}
|
|
||||||
QODANA_ENDPOINT: 'https://qodana.cloud'
|
|
30
README.md
30
README.md
@ -12,12 +12,9 @@
|
|||||||
</p>
|
</p>
|
||||||
<h1 align="center">WGDashboard</h1>
|
<h1 align="center">WGDashboard</h1>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://forthebadge.com/images/badges/made-with-python.svg">
|
<img src="https://img.shields.io/badge/Made_With-Python-blue?style=for-the-badge&logo=python&logoColor=ffffff">
|
||||||
<img src="https://forthebadge.com/images/badges/made-with-javascript.svg">
|
<img src="https://img.shields.io/badge/Made_With-Vue.js-42b883?style=for-the-badge&logo=vuedotjs&logoColor=ffffff">
|
||||||
<img src="https://forthebadge.com/images/badges/license-mit.svg">
|
<img src="https://img.shields.io/badge/License-Apache_License_2.0-D22128?style=for-the-badge&logo=apache&logoColor=ffffff">
|
||||||
</p>
|
|
||||||
<p align="center">
|
|
||||||
<img src="https://forthebadge.com/images/badges/built-with-love.svg">
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@ -37,20 +34,35 @@
|
|||||||
|
|
||||||
<p align="center"><b><i>This project is not affiliate to the official WireGuard Project</i></b></p>
|
<p align="center"><b><i>This project is not affiliate to the official WireGuard Project</i></b></p>
|
||||||
|
|
||||||
|
<h3 align="center">Looking for help?</h4>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
Join our Discord Server for quick help, or you wanna chat about this project!
|
Join our Discord Server for quick help, or you wanna chat about this project!
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a align="center" href="https://discord.gg/72TwzjeuWm"><img src="https://img.shields.io/discord/1276818723637956628?labelColor=ffffff&style=for-the-badge&logo=discord&label=Discord"></a>
|
<a align="center" href="https://discord.gg/72TwzjeuWm" target="_blank"><img src="https://img.shields.io/discord/1276818723637956628?labelColor=ffffff&style=for-the-badge&logo=discord&label=Discord"></a>
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
Alternatively, you can also reach out at our Matrix.org Chatroom :)
|
Alternatively, you can also reach out at our Matrix.org Chatroom :)
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://app.element.io/#/room/#wgd:matrix.org">Matrix.org Chatroom</a>
|
<a href="https://app.element.io/#/room/#wgd:matrix.org" target="_blank">Matrix.org Chatroom</a>
|
||||||
|
</p>
|
||||||
|
<h3 align="center">Want to support this project?</h4>
|
||||||
|
<p align="center">
|
||||||
|
You can support via <br>
|
||||||
|
</p>
|
||||||
|
<p align="center">
|
||||||
|
<a align="center" href="https://github.com/sponsors/donaldzou" target="_blank"><img src="https://img.shields.io/badge/GitHub%20Sponsor-2e9a40?style=for-the-badge&logo=github"></a>
|
||||||
|
<a align="center" href="https://buymeacoffee.com/donaldzou" target="_blank"><img src="https://img.shields.io/badge/Buy%20me%20a%20coffee-ffdd00?style=for-the-badge&logo=buymeacoffee&logoColor=000000"></a>
|
||||||
|
<a align="center" href="https://patreon.com/c/DonaldDonnyZou/membership" target="_blank"><img src="https://img.shields.io/badge/Patreon-000000?style=for-the-badge&logo=patreon&logoColor=ffffff"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<b>or, visit our merch store and support us by purchasing a merch</b>
|
||||||
|
</p>
|
||||||
|
<p align="center">
|
||||||
|
<a align="center" href="https://merch.wgdashboard.dev" target="_blank"><img src="https://img.shields.io/badge/Merch%20from%20WGDashboard-926183?style=for-the-badge"></a>
|
||||||
|
</p>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ trap 'stop_service' SIGTERM
|
|||||||
|
|
||||||
stop_service() {
|
stop_service() {
|
||||||
echo "[WGDashboard] Stopping WGDashboard..."
|
echo "[WGDashboard] Stopping WGDashboard..."
|
||||||
bash ./wgd.sh stop
|
/bin/bash ./wgd.sh stop
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18,51 +18,68 @@ ensure_installation() {
|
|||||||
# When using a custom directory to store the files, this part moves over and makes sure the installation continues.
|
# When using a custom directory to store the files, this part moves over and makes sure the installation continues.
|
||||||
echo "Quick-installing..."
|
echo "Quick-installing..."
|
||||||
|
|
||||||
|
# Make the wgd.sh script executable.
|
||||||
chmod +x "${WGDASH}"/src/wgd.sh
|
chmod +x "${WGDASH}"/src/wgd.sh
|
||||||
cd "${WGDASH}"/src || exit
|
cd "${WGDASH}"/src || exit
|
||||||
|
|
||||||
|
# Github issue: https://github.com/donaldzou/WGDashboard/issues/723
|
||||||
|
echo "Checking for stale pids..."
|
||||||
|
if [[ -f ${WGDASH}/src/gunicorn.pid ]]; then
|
||||||
|
echo "Found stale pid, removing..."
|
||||||
|
rm ${WGDASH}/src/gunicorn.pid
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Removing clear shell command from the wgd.sh script to enhance docker logging.
|
||||||
echo "Removing clear command from wgd.sh for better Docker logging."
|
echo "Removing clear command from wgd.sh for better Docker logging."
|
||||||
sed -i '/clear/d' ./wgd.sh
|
sed -i '/clear/d' ./wgd.sh
|
||||||
|
|
||||||
|
# Create the databases directory if it does not exist yet.
|
||||||
if [ ! -d "/data/db" ]; then
|
if [ ! -d "/data/db" ]; then
|
||||||
echo "Creating database dir"
|
echo "Creating database dir"
|
||||||
mkdir /data/db
|
mkdir /data/db
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Linking the database on the persistent directory location to where WGDashboard expects.
|
||||||
if [ ! -d "${WGDASH}/src/db" ]; then
|
if [ ! -d "${WGDASH}/src/db" ]; then
|
||||||
ln -s /data/db "${WGDASH}/src/db"
|
ln -s /data/db "${WGDASH}/src/db"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Create the wg-dashboard.ini file if it does not exist yet.
|
||||||
if [ ! -f "${config_file}" ]; then
|
if [ ! -f "${config_file}" ]; then
|
||||||
echo "Creating wg-dashboard.ini file"
|
echo "Creating wg-dashboard.ini file"
|
||||||
touch "${config_file}"
|
touch "${config_file}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Link the wg-dashboard.ini file from the persistent directory to where WGDashboard expects it.
|
||||||
if [ ! -f "${WGDASH}/src/wg-dashboard.ini" ]; then
|
if [ ! -f "${WGDASH}/src/wg-dashboard.ini" ]; then
|
||||||
ln -s "${config_file}" "${WGDASH}/src/wg-dashboard.ini"
|
ln -s "${config_file}" "${WGDASH}/src/wg-dashboard.ini"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Create the Python virtual environment.
|
||||||
python3 -m venv "${WGDASH}"/src/venv
|
python3 -m venv "${WGDASH}"/src/venv
|
||||||
. "${WGDASH}/src/venv/bin/activate"
|
. "${WGDASH}/src/venv/bin/activate"
|
||||||
|
|
||||||
|
# Due to this pip dependency being available as a system package we can just move it to the venv.
|
||||||
echo "Moving PIP dependency from ephemerality to runtime environment: psutil"
|
echo "Moving PIP dependency from ephemerality to runtime environment: psutil"
|
||||||
mv /usr/lib/python3.12/site-packages/psutil* "${WGDASH}"/src/venv/lib/python3.12/site-packages
|
mv /usr/lib/python3.12/site-packages/psutil* "${WGDASH}"/src/venv/lib/python3.12/site-packages
|
||||||
|
|
||||||
|
# Due to this pip dependency being available as a system package we can just move it to the venv.
|
||||||
echo "Moving PIP dependency from ephemerality to runtime environment: bcrypt"
|
echo "Moving PIP dependency from ephemerality to runtime environment: bcrypt"
|
||||||
mv /usr/lib/python3.12/site-packages/bcrypt* "${WGDASH}"/src/venv/lib/python3.12/site-packages
|
mv /usr/lib/python3.12/site-packages/bcrypt* "${WGDASH}"/src/venv/lib/python3.12/site-packages
|
||||||
|
|
||||||
./wgd.sh install
|
# Use the bash interpreter to install WGDashboard according to the wgd.sh script.
|
||||||
|
/bin/bash ./wgd.sh install
|
||||||
|
|
||||||
echo "Looks like the installation succeeded. Moving on."
|
echo "Looks like the installation succeeded. Moving on."
|
||||||
|
|
||||||
# This first step is to ensure the wg0.conf file exists, and if not, then its copied over from the ephemeral container storage.
|
# This first step is to ensure the wg0.conf file exists, and if not, then its copied over from the ephemeral container storage.
|
||||||
# This is done so WGDashboard it works out of the box
|
# This is done so WGDashboard it works out of the box, it also sets a randomly generated private key.
|
||||||
|
|
||||||
if [ ! -f "/etc/wireguard/wg0.conf" ]; then
|
if [ ! -f "/etc/wireguard/wg0.conf" ]; then
|
||||||
echo "Standard wg0 Configuration file not found, grabbing template."
|
echo "Standard wg0 Configuration file not found, grabbing template."
|
||||||
cp -a "/configs/wg0.conf.template" "/etc/wireguard/wg0.conf"
|
cp -a "/configs/wg0.conf.template" "/etc/wireguard/wg0.conf"
|
||||||
|
|
||||||
echo "Setting a secure private key." # SORRY 4 BE4 - Daan
|
echo "Setting a secure private key."
|
||||||
|
|
||||||
local privateKey
|
local privateKey
|
||||||
privateKey=$(wg genkey)
|
privateKey=$(wg genkey)
|
||||||
@ -106,6 +123,7 @@ set_envvars() {
|
|||||||
sed -i "s/^peer_global_dns = .*/peer_global_dns = ${global_dns}/" "${config_file}"
|
sed -i "s/^peer_global_dns = .*/peer_global_dns = ${global_dns}/" "${config_file}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Checking the current set public IP and changing it if it has changed.
|
||||||
current_public_ip=$(grep "remote_endpoint = " "${config_file}" | awk '{print $NF}')
|
current_public_ip=$(grep "remote_endpoint = " "${config_file}" | awk '{print $NF}')
|
||||||
if [ "${public_ip}" == "" ]; then
|
if [ "${public_ip}" == "" ]; then
|
||||||
default_ip=$(curl -s ifconfig.me)
|
default_ip=$(curl -s ifconfig.me)
|
||||||
@ -118,6 +136,7 @@ set_envvars() {
|
|||||||
echo "Public-IP is correct, moving on."
|
echo "Public-IP is correct, moving on."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Checking the current WGDashboard web port and changing if needed.
|
||||||
current_wgd_port=$(grep "app_port = " "${config_file}" | awk '{print $NF}')
|
current_wgd_port=$(grep "app_port = " "${config_file}" | awk '{print $NF}')
|
||||||
if [ "${current_wgd_port}" == "${wgd_port}" ]; then
|
if [ "${current_wgd_port}" == "${wgd_port}" ]; then
|
||||||
echo "Current WGD port is set correctly, moving on."
|
echo "Current WGD port is set correctly, moving on."
|
||||||
@ -131,15 +150,18 @@ set_envvars() {
|
|||||||
start_core() {
|
start_core() {
|
||||||
printf "\n---------------------- STARTING CORE -----------------------\n"
|
printf "\n---------------------- STARTING CORE -----------------------\n"
|
||||||
|
|
||||||
|
# Due to some instances complaining about this, making sure its there every time.
|
||||||
mkdir -p /dev/net
|
mkdir -p /dev/net
|
||||||
mknod /dev/net/tun c 10 200
|
mknod /dev/net/tun c 10 200
|
||||||
chmod 600 /dev/net/tun
|
chmod 600 /dev/net/tun
|
||||||
|
|
||||||
|
# Actually starting WGDashboard
|
||||||
echo "Activating Python venv and executing the WireGuard Dashboard service."
|
echo "Activating Python venv and executing the WireGuard Dashboard service."
|
||||||
bash ./wgd.sh start
|
/bin/bash ./wgd.sh start
|
||||||
}
|
}
|
||||||
|
|
||||||
ensure_blocking() {
|
ensure_blocking() {
|
||||||
|
# Wait a second before continuing, to give the python program some time to get ready.
|
||||||
sleep 1s
|
sleep 1s
|
||||||
echo -e "\nEnsuring container continuation."
|
echo -e "\nEnsuring container continuation."
|
||||||
|
|
||||||
@ -151,9 +173,12 @@ ensure_blocking() {
|
|||||||
# Only tail the logs if they are found
|
# Only tail the logs if they are found
|
||||||
if [ -n "$latestErrLog" ]; then
|
if [ -n "$latestErrLog" ]; then
|
||||||
tail -f "$latestErrLog" &
|
tail -f "$latestErrLog" &
|
||||||
|
|
||||||
|
# Wait for the tail process to end.
|
||||||
wait $!
|
wait $!
|
||||||
else
|
else
|
||||||
echo "No log files found to tail. Something went wrong, exiting..."
|
echo "No log files found to tail. Something went wrong, exiting..."
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ from modules.PeerJob import PeerJob
|
|||||||
from modules.SystemStatus import SystemStatus
|
from modules.SystemStatus import SystemStatus
|
||||||
SystemStatus = SystemStatus()
|
SystemStatus = SystemStatus()
|
||||||
|
|
||||||
DASHBOARD_VERSION = 'v4.2.2'
|
DASHBOARD_VERSION = 'v4.2.3'
|
||||||
|
|
||||||
CONFIGURATION_PATH = os.getenv('CONFIGURATION_PATH', '.')
|
CONFIGURATION_PATH = os.getenv('CONFIGURATION_PATH', '.')
|
||||||
DB_PATH = os.path.join(CONFIGURATION_PATH, 'db')
|
DB_PATH = os.path.join(CONFIGURATION_PATH, 'db')
|
||||||
@ -180,6 +180,7 @@ class PeerJobs:
|
|||||||
|
|
||||||
def runJob(self):
|
def runJob(self):
|
||||||
needToDelete = []
|
needToDelete = []
|
||||||
|
self.__getJobs()
|
||||||
for job in self.Jobs:
|
for job in self.Jobs:
|
||||||
c = WireguardConfigurations.get(job.Configuration)
|
c = WireguardConfigurations.get(job.Configuration)
|
||||||
if c is not None:
|
if c is not None:
|
||||||
@ -432,7 +433,6 @@ class WireguardConfiguration:
|
|||||||
original = [l.rstrip("\n") for l in f.readlines()]
|
original = [l.rstrip("\n") for l in f.readlines()]
|
||||||
try:
|
try:
|
||||||
start = original.index("[Interface]")
|
start = original.index("[Interface]")
|
||||||
|
|
||||||
# Clean
|
# Clean
|
||||||
for i in range(start, len(original)):
|
for i in range(start, len(original)):
|
||||||
if original[i] == "[Peer]":
|
if original[i] == "[Peer]":
|
||||||
@ -459,7 +459,10 @@ class WireguardConfiguration:
|
|||||||
setattr(self, key, StringToBoolean(value))
|
setattr(self, key, StringToBoolean(value))
|
||||||
else:
|
else:
|
||||||
if len(getattr(self, key)) > 0:
|
if len(getattr(self, key)) > 0:
|
||||||
|
if key not in ["PostUp", "PostDown", "PreUp", "PreDown"]:
|
||||||
setattr(self, key, f"{getattr(self, key)}, {value}")
|
setattr(self, key, f"{getattr(self, key)}, {value}")
|
||||||
|
else:
|
||||||
|
setattr(self, key, f"{getattr(self, key)}; {value}")
|
||||||
else:
|
else:
|
||||||
setattr(self, key, value)
|
setattr(self, key, value)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
@ -470,11 +473,12 @@ class WireguardConfiguration:
|
|||||||
self.Status = self.getStatus()
|
self.Status = self.getStatus()
|
||||||
|
|
||||||
def __dropDatabase(self):
|
def __dropDatabase(self):
|
||||||
existingTables = sqlSelect(f"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '{self.Name}%'").fetchall()
|
existingTables = [self.Name, f'{self.Name}_restrict_access', f'{self.Name}_transfer', f'{self.Name}_deleted']
|
||||||
|
# existingTables = sqlSelect(f"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '{self.Name}%'").fetchall()
|
||||||
for t in existingTables:
|
for t in existingTables:
|
||||||
sqlUpdate("DROP TABLE '%s'" % t['name'])
|
sqlUpdate("DROP TABLE '%s'" % t)
|
||||||
|
|
||||||
existingTables = sqlSelect(f"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '{self.Name}%'").fetchall()
|
# existingTables = sqlSelect(f"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '{self.Name}%'").fetchall()
|
||||||
|
|
||||||
def createDatabase(self, dbName = None):
|
def createDatabase(self, dbName = None):
|
||||||
if dbName is None:
|
if dbName is None:
|
||||||
@ -805,6 +809,9 @@ class WireguardConfiguration:
|
|||||||
|
|
||||||
self.getPeers()
|
self.getPeers()
|
||||||
|
|
||||||
|
if numOfDeletedPeers == 0 and numOfFailedToDeletePeers == 0:
|
||||||
|
return ResponseObject(False, "No peer(s) to delete found", responseCode=404)
|
||||||
|
|
||||||
if numOfDeletedPeers == len(listOfPublicKeys):
|
if numOfDeletedPeers == len(listOfPublicKeys):
|
||||||
return ResponseObject(True, f"Deleted {numOfDeletedPeers} peer(s)")
|
return ResponseObject(True, f"Deleted {numOfDeletedPeers} peer(s)")
|
||||||
return ResponseObject(False,
|
return ResponseObject(False,
|
||||||
@ -945,7 +952,8 @@ class WireguardConfiguration:
|
|||||||
},
|
},
|
||||||
"ConnectedPeers": len(list(filter(lambda x: x.status == "running", self.Peers))),
|
"ConnectedPeers": len(list(filter(lambda x: x.status == "running", self.Peers))),
|
||||||
"TotalPeers": len(self.Peers),
|
"TotalPeers": len(self.Peers),
|
||||||
"Protocol": self.Protocol
|
"Protocol": self.Protocol,
|
||||||
|
"Table": self.Table,
|
||||||
}
|
}
|
||||||
|
|
||||||
def backupConfigurationFile(self) -> tuple[bool, dict[str, str]]:
|
def backupConfigurationFile(self) -> tuple[bool, dict[str, str]]:
|
||||||
@ -1047,7 +1055,7 @@ class WireguardConfiguration:
|
|||||||
dataChanged = False
|
dataChanged = False
|
||||||
with open(self.configPath, 'r') as f:
|
with open(self.configPath, 'r') as f:
|
||||||
original = [l.rstrip("\n") for l in f.readlines()]
|
original = [l.rstrip("\n") for l in f.readlines()]
|
||||||
allowEdit = ["Address", "PreUp", "PostUp", "PreDown", "PostDown", "ListenPort"]
|
allowEdit = ["Address", "PreUp", "PostUp", "PreDown", "PostDown", "ListenPort", "Table"]
|
||||||
if self.Protocol == 'awg':
|
if self.Protocol == 'awg':
|
||||||
allowEdit += ["Jc", "Jmin", "Jmax", "S1", "S2", "H1", "H2", "H3", "H4"]
|
allowEdit += ["Jc", "Jmin", "Jmax", "S1", "S2", "H1", "H2", "H3", "H4"]
|
||||||
start = original.index("[Interface]")
|
start = original.index("[Interface]")
|
||||||
@ -1204,15 +1212,15 @@ AmneziaWG Configuration
|
|||||||
"""
|
"""
|
||||||
class AmneziaWireguardConfiguration(WireguardConfiguration):
|
class AmneziaWireguardConfiguration(WireguardConfiguration):
|
||||||
def __init__(self, name: str = None, data: dict = None, backup: dict = None, startup: bool = False):
|
def __init__(self, name: str = None, data: dict = None, backup: dict = None, startup: bool = False):
|
||||||
self.Jc = 0
|
self.Jc = ""
|
||||||
self.Jmin = 0
|
self.Jmin = ""
|
||||||
self.Jmax = 0
|
self.Jmax = ""
|
||||||
self.S1 = 0
|
self.S1 = ""
|
||||||
self.S2 = 0
|
self.S2 = ""
|
||||||
self.H1 = 1
|
self.H1 = ""
|
||||||
self.H2 = 2
|
self.H2 = ""
|
||||||
self.H3 = 3
|
self.H3 = ""
|
||||||
self.H4 = 4
|
self.H4 = ""
|
||||||
|
|
||||||
super().__init__(name, data, backup, startup, wg=False)
|
super().__init__(name, data, backup, startup, wg=False)
|
||||||
|
|
||||||
@ -1237,6 +1245,7 @@ class AmneziaWireguardConfiguration(WireguardConfiguration):
|
|||||||
},
|
},
|
||||||
"ConnectedPeers": len(list(filter(lambda x: x.status == "running", self.Peers))),
|
"ConnectedPeers": len(list(filter(lambda x: x.status == "running", self.Peers))),
|
||||||
"TotalPeers": len(self.Peers),
|
"TotalPeers": len(self.Peers),
|
||||||
|
"Table": self.Table,
|
||||||
"Protocol": self.Protocol,
|
"Protocol": self.Protocol,
|
||||||
"Jc": self.Jc,
|
"Jc": self.Jc,
|
||||||
"Jmin": self.Jmin,
|
"Jmin": self.Jmin,
|
||||||
@ -2463,11 +2472,11 @@ def API_deletePeers(configName: str) -> ResponseObject:
|
|||||||
peers = data['peers']
|
peers = data['peers']
|
||||||
if configName in WireguardConfigurations.keys():
|
if configName in WireguardConfigurations.keys():
|
||||||
if len(peers) == 0:
|
if len(peers) == 0:
|
||||||
return ResponseObject(False, "Please specify one or more peers")
|
return ResponseObject(False, "Please specify one or more peers", status_code=400)
|
||||||
configuration = WireguardConfigurations.get(configName)
|
configuration = WireguardConfigurations.get(configName)
|
||||||
return configuration.deletePeers(peers)
|
return configuration.deletePeers(peers)
|
||||||
|
|
||||||
return ResponseObject(False, "Configuration does not exist")
|
return ResponseObject(False, "Configuration does not exist", status_code=404)
|
||||||
|
|
||||||
@app.post(f'{APP_PREFIX}/api/restrictPeers/<configName>')
|
@app.post(f'{APP_PREFIX}/api/restrictPeers/<configName>')
|
||||||
def API_restrictPeers(configName: str) -> ResponseObject:
|
def API_restrictPeers(configName: str) -> ResponseObject:
|
||||||
@ -2952,7 +2961,7 @@ def API_isTotpEnabled():
|
|||||||
@app.get(f'{APP_PREFIX}/api/Welcome_GetTotpLink')
|
@app.get(f'{APP_PREFIX}/api/Welcome_GetTotpLink')
|
||||||
def API_Welcome_GetTotpLink():
|
def API_Welcome_GetTotpLink():
|
||||||
if not DashboardConfig.GetConfig("Account", "totp_verified")[1]:
|
if not DashboardConfig.GetConfig("Account", "totp_verified")[1]:
|
||||||
DashboardConfig.SetConfig("Account", "totp_key", pyotp.random_base32())
|
DashboardConfig.SetConfig("Account", "totp_key", pyotp.random_base32(), True)
|
||||||
return ResponseObject(
|
return ResponseObject(
|
||||||
data=pyotp.totp.TOTP(DashboardConfig.GetConfig("Account", "totp_key")[1]).provisioning_uri(
|
data=pyotp.totp.TOTP(DashboardConfig.GetConfig("Account", "totp_key")[1]).provisioning_uri(
|
||||||
issuer_name="WGDashboard"))
|
issuer_name="WGDashboard"))
|
||||||
|
@ -1 +1 @@
|
|||||||
import{_ as r,c as i,d as o,w as e,k as l,a as t,j as _,i as a,l as d,S as u}from"./index-C00IVglr.js";const m={name:"configuration"},p={class:"mt-md-5 mt-3 text-body"};function f(k,x,h,w,$,v){const n=l("RouterView");return t(),i("div",p,[o(n,null,{default:e(({Component:s,route:c})=>[o(_,{name:"fade2",mode:"out-in"},{default:e(()=>[(t(),a(u,null,{default:e(()=>[(t(),a(d(s),{key:c.path}))]),_:2},1024))]),_:2},1024)]),_:1})])}const B=r(m,[["render",f]]);export{B as default};
|
import{_ as r,c as i,d as o,w as e,k as l,a as t,j as _,i as a,l as d,S as u}from"./index-DZliHkQD.js";const m={name:"configuration"},p={class:"mt-md-5 mt-3 text-body"};function f(k,x,h,w,$,v){const n=l("RouterView");return t(),i("div",p,[o(n,null,{default:e(({Component:s,route:c})=>[o(_,{name:"fade2",mode:"out-in"},{default:e(()=>[(t(),a(u,null,{default:e(()=>[(t(),a(d(s),{key:c.path}))]),_:2},1024))]),_:2},1024)]),_:1})])}const B=r(m,[["render",f]]);export{B as default};
|
File diff suppressed because one or more lines are too long
1
src/static/app/dist/assets/configurationList-Cznk60kB.js
vendored
Normal file
1
src/static/app/dist/assets/configurationList-Cznk60kB.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
7
src/static/app/dist/assets/editConfiguration-gjtFMIrx.js
vendored
Normal file
7
src/static/app/dist/assets/editConfiguration-gjtFMIrx.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
.agentMessage[data-v-8635cf47]{white-space:break-spaces;max-width:80%;display:flex;flex-direction:column;word-wrap:break-word}.text-bg-secondary[data-v-8635cf47]{background-color:RGBA(var(--bs-secondary-rgb),.7)!important}.text-bg-primary[data-v-8635cf47]{background-color:RGBA(var(--bs-primary-rgb),.7)!important}.agentContainer[data-v-694cfad1]{--agentHeight: 100vh;position:absolute;z-index:9999;top:0;left:100%;width:450px;box-shadow:0 10px 30px #0000004d;backdrop-filter:blur(8px);background:linear-gradient(var(--degree),#009dff52 var(--distance2),#ff4a0052 100%)}.agentContainer.enabled[data-v-694cfad1]{height:calc(var(--agentHeight) - 1rem)}@media screen and (max-width: 768px){.agentContainer[data-v-694cfad1]{--agentHeight: 100vh !important;top:0;left:0;max-height:calc(var(--agentHeight) - 58px - 1rem);width:calc(100% - 1rem)}}.agentChatroomBody[data-v-694cfad1]{flex:1 1 auto;overflow-y:auto;max-height:calc(var(--agentHeight) - 70px - 244px)}@media screen and (max-width: 768px){.navbar-container[data-v-58e71749]{position:absolute!important;z-index:1000;animation-duration:.4s;animation-fill-mode:both;display:none;animation-timing-function:cubic-bezier(.82,.58,.17,.9)}.navbar-container.active[data-v-58e71749]{animation-direction:normal;display:block!important;animation-name:zoomInFade-58e71749}}.navbar-container[data-v-58e71749]{height:100vh;position:relative}@supports (height: 100dvh){@media screen and (max-width: 768px){.navbar-container[data-v-58e71749]{height:calc(100dvh - 58px)}}}@keyframes zoomInFade-58e71749{0%{opacity:0;transform:translateY(60px);filter:blur(3px)}to{opacity:1;transform:translateY(0);filter:blur(0px)}}.slideIn-enter-active[data-v-58e71749],.slideIn-leave-active[data-v-58e71749]{transition:all .3s cubic-bezier(.82,.58,.17,1)}.slideIn-enter-from[data-v-58e71749],.slideIn-leave-to[data-v-58e71749]{transform:translateY(30px);filter:blur(3px);opacity:0}main[data-v-0c6a5068]{height:100vh}@supports (height: 100dvh){@media screen and (max-width: 768px){main[data-v-0c6a5068]{height:calc(100dvh - 58px)}}}
|
.agentMessage[data-v-8635cf47]{white-space:break-spaces;max-width:80%;display:flex;flex-direction:column;word-wrap:break-word}.text-bg-secondary[data-v-8635cf47]{background-color:RGBA(var(--bs-secondary-rgb),.7)!important}.text-bg-primary[data-v-8635cf47]{background-color:RGBA(var(--bs-primary-rgb),.7)!important}.agentContainer[data-v-a76f42bd]{--agentHeight: 100vh;position:absolute;z-index:9999;top:0;left:100%;width:450px;box-shadow:0 10px 30px #0000004d;backdrop-filter:blur(8px);background:linear-gradient(var(--degree),#009dff52 var(--distance2),#F9464752 100%)}.agentContainer.enabled[data-v-a76f42bd]{height:calc(var(--agentHeight) - 1rem)}@media screen and (max-width: 768px){.agentContainer[data-v-a76f42bd]{--agentHeight: 100vh !important;top:0;left:0;max-height:calc(var(--agentHeight) - 58px - 1rem);width:calc(100% - 1rem)}}.agentChatroomBody[data-v-a76f42bd]{flex:1 1 auto;overflow-y:auto;max-height:calc(var(--agentHeight) - 70px - 244px)}@media screen and (max-width: 768px){.navbar-container[data-v-58e71749]{position:absolute!important;z-index:1000;animation-duration:.4s;animation-fill-mode:both;display:none;animation-timing-function:cubic-bezier(.82,.58,.17,.9)}.navbar-container.active[data-v-58e71749]{animation-direction:normal;display:block!important;animation-name:zoomInFade-58e71749}}.navbar-container[data-v-58e71749]{height:100vh;position:relative}@supports (height: 100dvh){@media screen and (max-width: 768px){.navbar-container[data-v-58e71749]{height:calc(100dvh - 58px)}}}@keyframes zoomInFade-58e71749{0%{opacity:0;transform:translateY(60px);filter:blur(3px)}to{opacity:1;transform:translateY(0);filter:blur(0px)}}.slideIn-enter-active[data-v-58e71749],.slideIn-leave-active[data-v-58e71749]{transition:all .3s cubic-bezier(.82,.58,.17,1)}.slideIn-enter-from[data-v-58e71749],.slideIn-leave-to[data-v-58e71749]{transform:translateY(30px);filter:blur(3px);opacity:0}main[data-v-0c6a5068]{height:100vh}@supports (height: 100dvh){@media screen and (max-width: 768px){main[data-v-0c6a5068]{height:calc(100dvh - 58px)}}}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,4 +1,4 @@
|
|||||||
import{P as Ws,Q as Vs,R as Ue,U as Hn,r as Wn,o as Vn,V as Nn,H as jn,X as Xe,Y as $n,Z as Ns}from"./index-C00IVglr.js";/*!
|
import{P as Ws,Q as Vs,R as Ue,U as Hn,r as Wn,o as Vn,V as Nn,H as jn,X as Xe,Y as $n,Z as Ns}from"./index-DZliHkQD.js";/*!
|
||||||
* @kurkle/color v0.3.2
|
* @kurkle/color v0.3.2
|
||||||
* https://github.com/kurkle/color#readme
|
* https://github.com/kurkle/color#readme
|
||||||
* (c) 2023 Jukka Kurkela
|
* (c) 2023 Jukka Kurkela
|
@ -1 +1 @@
|
|||||||
import{_ as e,G as t,a as o,c as a,t as c}from"./index-C00IVglr.js";const s={name:"localeText",props:{t:""},computed:{getLocaleText(){return t(this.t)}}};function n(r,p,l,_,i,x){return o(),a("span",null,c(this.getLocaleText),1)}const u=e(s,[["render",n]]);export{u as L};
|
import{_ as e,G as t,a as o,c as a,t as c}from"./index-DZliHkQD.js";const s={name:"localeText",props:{t:""},computed:{getLocaleText(){return t(this.t)}}};function n(r,p,l,_,i,x){return o(),a("span",null,c(this.getLocaleText),1)}const u=e(s,[["render",n]]);export{u as L};
|
@ -1 +1 @@
|
|||||||
import{L as l}from"./localeText-BUK20hPB.js";import{d as c}from"./dayjs.min-ChFfjVGD.js";import{_ as h,a as o,c as a,b as e,d as i,w as u,f as p,t as n,j as g,n as f,k as _}from"./index-C00IVglr.js";const x={name:"message",methods:{dayjs:c,hide(){this.ct(),this.message.show=!1},show(){this.timeout=setTimeout(()=>{this.message.show=!1},5e3)},ct(){clearTimeout(this.timeout)}},components:{LocaleText:l},props:{message:Object},mounted(){this.show()},data(){return{dismiss:!1,timeout:null}}},v=["id"],b={key:0,class:"d-flex"},w={class:"fw-bold d-block",style:{"text-transform":"uppercase"}},y={class:"ms-auto"},k={key:1},T={class:"card-body d-flex align-items-center gap-3"};function M(j,s,C,L,t,m){const d=_("LocaleText");return o(),a("div",{onMouseenter:s[1]||(s[1]=r=>{t.dismiss=!0,this.ct()}),onMouseleave:s[2]||(s[2]=r=>{t.dismiss=!1,this.show()}),class:"card shadow rounded-3 position-relative message ms-auto",id:this.message.id},[e("div",{class:f([{"text-bg-danger":this.message.type==="danger","text-bg-success":this.message.type==="success","text-bg-warning":this.message.type==="warning"},"card-header pos"])},[i(g,{name:"zoom",mode:"out-in"},{default:u(()=>[t.dismiss?(o(),a("div",k,[e("small",{onClick:s[0]||(s[0]=r=>m.hide()),class:"d-block mx-auto w-100 text-center",style:{cursor:"pointer"}},[s[3]||(s[3]=e("i",{class:"bi bi-x-lg me-2"},null,-1)),i(d,{t:"Dismiss"})])])):(o(),a("div",b,[e("small",w,[i(d,{t:"FROM "}),p(" "+n(this.message.from),1)]),e("small",y,n(m.dayjs().format("hh:mm A")),1)]))]),_:1})],2),e("div",T,[e("div",null,n(this.message.content),1)])],40,v)}const z=h(x,[["render",M],["__scopeId","data-v-94c76b54"]]);export{z as M};
|
import{L as l}from"./localeText-DG9SnJT8.js";import{d as c}from"./dayjs.min-PaIL06iQ.js";import{_ as h,a as o,c as a,b as e,d as i,w as u,f as p,t as n,j as g,n as f,k as _}from"./index-DZliHkQD.js";const x={name:"message",methods:{dayjs:c,hide(){this.ct(),this.message.show=!1},show(){this.timeout=setTimeout(()=>{this.message.show=!1},5e3)},ct(){clearTimeout(this.timeout)}},components:{LocaleText:l},props:{message:Object},mounted(){this.show()},data(){return{dismiss:!1,timeout:null}}},v=["id"],b={key:0,class:"d-flex"},w={class:"fw-bold d-block",style:{"text-transform":"uppercase"}},y={class:"ms-auto"},k={key:1},T={class:"card-body d-flex align-items-center gap-3"};function M(j,s,C,L,t,m){const d=_("LocaleText");return o(),a("div",{onMouseenter:s[1]||(s[1]=r=>{t.dismiss=!0,this.ct()}),onMouseleave:s[2]||(s[2]=r=>{t.dismiss=!1,this.show()}),class:"card shadow rounded-3 position-relative message ms-auto",id:this.message.id},[e("div",{class:f([{"text-bg-danger":this.message.type==="danger","text-bg-success":this.message.type==="success","text-bg-warning":this.message.type==="warning"},"card-header pos"])},[i(g,{name:"zoom",mode:"out-in"},{default:u(()=>[t.dismiss?(o(),a("div",k,[e("small",{onClick:s[0]||(s[0]=r=>m.hide()),class:"d-block mx-auto w-100 text-center",style:{cursor:"pointer"}},[s[3]||(s[3]=e("i",{class:"bi bi-x-lg me-2"},null,-1)),i(d,{t:"Dismiss"})])])):(o(),a("div",b,[e("small",w,[i(d,{t:"FROM "}),p(" "+n(this.message.from),1)]),e("small",y,n(m.dayjs().format("hh:mm A")),1)]))]),_:1})],2),e("div",T,[e("div",null,n(this.message.content),1)])],40,v)}const z=h(x,[["render",M],["__scopeId","data-v-94c76b54"]]);export{z as M};
|
1
src/static/app/dist/assets/newConfiguration-CAFzjDsW.css
vendored
Normal file
1
src/static/app/dist/assets/newConfiguration-CAFzjDsW.css
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.protocolBtnGroup a[data-v-b97242f3]{transition:all .2s ease-in-out}
|
3
src/static/app/dist/assets/newConfiguration-CPAMxqV6.js
vendored
Normal file
3
src/static/app/dist/assets/newConfiguration-CPAMxqV6.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
|||||||
.protocolBtnGroup a[data-v-b4bbbc2b]{transition:all .2s ease-in-out}
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
import{_ as v,D as g,r as o,o as h,J as x,g as y,a as i,c as n,b as s,d as c,n as w,e as C,w as k,j as F}from"./index-C00IVglr.js";import{L as T}from"./localeText-BUK20hPB.js";import"./browser-CjSdxGTc.js";const M={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0"},S={class:"container d-flex h-100 w-100"},D={class:"m-auto modal-dialog-centered dashboardModal justify-content-center"},P={class:"card rounded-3 shadow w-100"},j={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},B={class:"mb-0"},G={class:"card-body p-4 d-flex flex-column gap-3"},L={style:{height:"300px"},class:"d-flex"},N=["value"],V={key:0,class:"spinner-border m-auto",role:"status"},I={class:"d-flex"},W=["disabled"],$={key:0,class:"d-block"},q={key:1,class:"d-block",id:"check"},z={__name:"peerConfigurationFile",props:{selectedPeer:Object},emits:["close"],setup(u,{emit:p}){const m=p,f=u,r=g(),t=o(!1),l=o(""),a=o(!0);o({error:!1,message:void 0}),h(()=>{const d=x();y("/api/downloadPeer/"+d.params.id,{id:f.selectedPeer.id},e=>{e.status?(l.value=e.data.file,a.value=!1):this.dashboardStore.newMessage("Server",e.message,"danger")})});const b=async()=>{navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(l.value).then(()=>{t.value=!0,setTimeout(()=>{t.value=!1},3e3)}).catch(()=>{r.newMessage("WGDashboard","Failed to copy","danger")}):(document.querySelector("#peerConfigurationFile").select(),document.execCommand("copy")?(t.value=!0,setTimeout(()=>{t.value=!1},3e3)):r.newMessage("WGDashboard","Failed to copy","danger"))};return(d,e)=>(i(),n("div",M,[s("div",S,[s("div",D,[s("div",P,[s("div",j,[s("h4",B,[c(T,{t:"Peer Configuration File"})]),s("button",{type:"button",class:"btn-close ms-auto",onClick:e[0]||(e[0]=_=>m("close"))})]),s("div",G,[s("div",L,[s("textarea",{style:{height:"300px"},class:w(["form-control w-100 rounded-3 animate__fadeIn animate__faster animate__animated",{"d-none":a.value}]),id:"peerConfigurationFile",value:l.value},null,10,N),a.value?(i(),n("div",V,e[2]||(e[2]=[s("span",{class:"visually-hidden"},"Loading...",-1)]))):C("",!0)]),s("div",I,[s("button",{onClick:e[1]||(e[1]=_=>b()),disabled:t.value||a.value,class:"ms-auto btn bg-primary-subtle border-primary-subtle text-primary-emphasis rounded-3 position-relative"},[c(F,{name:"slide-up",mode:"out-in"},{default:k(()=>[t.value?(i(),n("span",q,e[4]||(e[4]=[s("i",{class:"bi bi-check-circle-fill"},null,-1)]))):(i(),n("span",$,e[3]||(e[3]=[s("i",{class:"bi bi-clipboard-fill"},null,-1)])))]),_:1})],8,W)])])])])])]))}},R=v(z,[["__scopeId","data-v-b0ea2d46"]]);export{R as default};
|
import{_ as v,D as g,r as o,o as h,J as x,g as y,a as i,c as n,b as s,d as c,n as w,e as C,w as k,j as F}from"./index-DZliHkQD.js";import{L as T}from"./localeText-DG9SnJT8.js";import"./browser-CjSdxGTc.js";const M={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0"},S={class:"container d-flex h-100 w-100"},D={class:"m-auto modal-dialog-centered dashboardModal justify-content-center"},P={class:"card rounded-3 shadow w-100"},j={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},B={class:"mb-0"},G={class:"card-body p-4 d-flex flex-column gap-3"},L={style:{height:"300px"},class:"d-flex"},N=["value"],V={key:0,class:"spinner-border m-auto",role:"status"},I={class:"d-flex"},W=["disabled"],$={key:0,class:"d-block"},q={key:1,class:"d-block",id:"check"},z={__name:"peerConfigurationFile",props:{selectedPeer:Object},emits:["close"],setup(u,{emit:p}){const m=p,f=u,r=g(),t=o(!1),l=o(""),a=o(!0);o({error:!1,message:void 0}),h(()=>{const d=x();y("/api/downloadPeer/"+d.params.id,{id:f.selectedPeer.id},e=>{e.status?(l.value=e.data.file,a.value=!1):this.dashboardStore.newMessage("Server",e.message,"danger")})});const b=async()=>{navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(l.value).then(()=>{t.value=!0,setTimeout(()=>{t.value=!1},3e3)}).catch(()=>{r.newMessage("WGDashboard","Failed to copy","danger")}):(document.querySelector("#peerConfigurationFile").select(),document.execCommand("copy")?(t.value=!0,setTimeout(()=>{t.value=!1},3e3)):r.newMessage("WGDashboard","Failed to copy","danger"))};return(d,e)=>(i(),n("div",M,[s("div",S,[s("div",D,[s("div",P,[s("div",j,[s("h4",B,[c(T,{t:"Peer Configuration File"})]),s("button",{type:"button",class:"btn-close ms-auto",onClick:e[0]||(e[0]=_=>m("close"))})]),s("div",G,[s("div",L,[s("textarea",{style:{height:"300px"},class:w(["form-control w-100 rounded-3 animate__fadeIn animate__faster animate__animated",{"d-none":a.value}]),id:"peerConfigurationFile",value:l.value},null,10,N),a.value?(i(),n("div",V,e[2]||(e[2]=[s("span",{class:"visually-hidden"},"Loading...",-1)]))):C("",!0)]),s("div",I,[s("button",{onClick:e[1]||(e[1]=_=>b()),disabled:t.value||a.value,class:"ms-auto btn bg-primary-subtle border-primary-subtle text-primary-emphasis rounded-3 position-relative"},[c(F,{name:"slide-up",mode:"out-in"},{default:k(()=>[t.value?(i(),n("span",q,e[4]||(e[4]=[s("i",{class:"bi bi-check-circle-fill"},null,-1)]))):(i(),n("span",$,e[3]||(e[3]=[s("i",{class:"bi bi-clipboard-fill"},null,-1)])))]),_:1})],8,W)])])])])])]))}},R=v(z,[["__scopeId","data-v-b0ea2d46"]]);export{R as default};
|
@ -1 +1 @@
|
|||||||
import{S as p,a as b}from"./schedulePeerJob-BL2wgI9t.js";import{_ as h,W as u,z as m,k as i,a as o,c as a,b as e,d as r,w as _,F as v,h as f,i as J,e as x,T as g}from"./index-C00IVglr.js";import{L as w}from"./localeText-BUK20hPB.js";import"./vue-datepicker-DdPq8VBM.js";import"./dayjs.min-ChFfjVGD.js";const P={name:"peerJobs",setup(){return{store:u()}},props:{selectedPeer:Object},components:{LocaleText:w,SchedulePeerJob:p,ScheduleDropdown:b},data(){return{}},methods:{deleteJob(d){this.selectedPeer.jobs=this.selectedPeer.jobs.filter(t=>t.JobID!==d.JobID)},addJob(){this.selectedPeer.jobs.unshift(JSON.parse(JSON.stringify({JobID:m().toString(),Configuration:this.selectedPeer.configuration.Name,Peer:this.selectedPeer.id,Field:this.store.PeerScheduleJobs.dropdowns.Field[0].value,Operator:this.store.PeerScheduleJobs.dropdowns.Operator[0].value,Value:"",CreationDate:"",ExpireDate:"",Action:this.store.PeerScheduleJobs.dropdowns.Action[0].value})))}}},S={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},y={class:"container d-flex h-100 w-100"},$={class:"m-auto modal-dialog-centered dashboardModal"},C={class:"card rounded-3 shadow",style:{width:"700px"}},D={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-2"},k={class:"mb-0 fw-normal"},j={class:"card-body px-4 pb-4 pt-2 position-relative"},T={class:"d-flex align-items-center mb-3"},N={class:"card shadow-sm",key:"none",style:{height:"153px"}},I={class:"card-body text-muted text-center d-flex"},L={class:"m-auto"};function O(d,t,B,F,V,A){const n=i("LocaleText"),l=i("SchedulePeerJob");return o(),a("div",S,[e("div",y,[e("div",$,[e("div",C,[e("div",D,[e("h4",k,[r(n,{t:"Schedule Jobs"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:t[0]||(t[0]=s=>this.$emit("close"))})]),e("div",j,[e("div",T,[e("button",{class:"btn bg-primary-subtle border-1 border-primary-subtle text-primary-emphasis rounded-3 shadow",onClick:t[1]||(t[1]=s=>this.addJob())},[t[3]||(t[3]=e("i",{class:"bi bi-plus-lg me-2"},null,-1)),r(n,{t:"Job"})])]),r(g,{name:"schedulePeerJobTransition",tag:"div",class:"position-relative"},{default:_(()=>[(o(!0),a(v,null,f(this.selectedPeer.jobs,(s,E)=>(o(),J(l,{onRefresh:t[2]||(t[2]=c=>this.$emit("refresh")),onDelete:c=>this.deleteJob(s),dropdowns:this.store.PeerScheduleJobs.dropdowns,key:s.JobID,pjob:s},null,8,["onDelete","dropdowns","pjob"]))),128)),this.selectedPeer.jobs.length===0?(o(),a("div",N,[e("div",I,[e("h6",L,[r(n,{t:"This peer does not have any job yet."})])])])):x("",!0)]),_:1})])])])])])}const q=h(P,[["render",O],["__scopeId","data-v-5bbdd42b"]]);export{q as default};
|
import{S as p,a as b}from"./schedulePeerJob-Ci8HK7bA.js";import{_ as h,W as u,z as m,k as i,a as o,c as a,b as e,d as r,w as _,F as v,h as f,i as J,e as x,T as g}from"./index-DZliHkQD.js";import{L as w}from"./localeText-DG9SnJT8.js";import"./vue-datepicker-4ltJE5cT.js";import"./dayjs.min-PaIL06iQ.js";const P={name:"peerJobs",setup(){return{store:u()}},props:{selectedPeer:Object},components:{LocaleText:w,SchedulePeerJob:p,ScheduleDropdown:b},data(){return{}},methods:{deleteJob(d){this.selectedPeer.jobs=this.selectedPeer.jobs.filter(t=>t.JobID!==d.JobID)},addJob(){this.selectedPeer.jobs.unshift(JSON.parse(JSON.stringify({JobID:m().toString(),Configuration:this.selectedPeer.configuration.Name,Peer:this.selectedPeer.id,Field:this.store.PeerScheduleJobs.dropdowns.Field[0].value,Operator:this.store.PeerScheduleJobs.dropdowns.Operator[0].value,Value:"",CreationDate:"",ExpireDate:"",Action:this.store.PeerScheduleJobs.dropdowns.Action[0].value})))}}},S={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},y={class:"container d-flex h-100 w-100"},$={class:"m-auto modal-dialog-centered dashboardModal"},C={class:"card rounded-3 shadow",style:{width:"700px"}},D={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-2"},k={class:"mb-0 fw-normal"},j={class:"card-body px-4 pb-4 pt-2 position-relative"},T={class:"d-flex align-items-center mb-3"},N={class:"card shadow-sm",key:"none",style:{height:"153px"}},I={class:"card-body text-muted text-center d-flex"},L={class:"m-auto"};function O(d,t,B,F,V,A){const n=i("LocaleText"),l=i("SchedulePeerJob");return o(),a("div",S,[e("div",y,[e("div",$,[e("div",C,[e("div",D,[e("h4",k,[r(n,{t:"Schedule Jobs"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:t[0]||(t[0]=s=>this.$emit("close"))})]),e("div",j,[e("div",T,[e("button",{class:"btn bg-primary-subtle border-1 border-primary-subtle text-primary-emphasis rounded-3 shadow",onClick:t[1]||(t[1]=s=>this.addJob())},[t[3]||(t[3]=e("i",{class:"bi bi-plus-lg me-2"},null,-1)),r(n,{t:"Job"})])]),r(g,{name:"schedulePeerJobTransition",tag:"div",class:"position-relative"},{default:_(()=>[(o(!0),a(v,null,f(this.selectedPeer.jobs,(s,E)=>(o(),J(l,{onRefresh:t[2]||(t[2]=c=>this.$emit("refresh")),onDelete:c=>this.deleteJob(s),dropdowns:this.store.PeerScheduleJobs.dropdowns,key:s.JobID,pjob:s},null,8,["onDelete","dropdowns","pjob"]))),128)),this.selectedPeer.jobs.length===0?(o(),a("div",N,[e("div",I,[e("h6",L,[r(n,{t:"This peer does not have any job yet."})])])])):x("",!0)]),_:1})])])])])])}const q=h(P,[["render",O],["__scopeId","data-v-5bbdd42b"]]);export{q as default};
|
@ -1 +1 @@
|
|||||||
import{S as _}from"./schedulePeerJob-BL2wgI9t.js";import{_ as g,W as v,k as c,a as t,c as r,b as e,d as l,F as p,h as b,t as m,e as f,i as y}from"./index-C00IVglr.js";import{L as x}from"./localeText-BUK20hPB.js";import"./vue-datepicker-DdPq8VBM.js";import"./dayjs.min-ChFfjVGD.js";const J={name:"peerJobsAllModal",setup(){return{store:v()}},components:{LocaleText:x,SchedulePeerJob:_},props:{configurationPeers:Array[Object]},computed:{getAllJobs(){return this.configurationPeers.filter(a=>a.jobs.length>0)}}},k={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},w={class:"container d-flex h-100 w-100"},$={class:"m-auto modal-dialog-centered dashboardModal"},A={class:"card rounded-3 shadow",style:{width:"900px"}},L={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-2"},S={class:"mb-0 fw-normal"},C={class:"card-body px-4 pb-4 pt-2"},P={key:0,class:"accordion",id:"peerJobsLogsModalAccordion"},j={class:"accordion-header"},M=["data-bs-target"],B={key:0},N={class:"text-muted"},D=["id"],T={class:"accordion-body"},V={key:1,class:"card shadow-sm",style:{height:"153px"}},F={class:"card-body text-muted text-center d-flex"},O={class:"m-auto"};function W(a,o,E,I,R,q){const n=c("LocaleText"),u=c("SchedulePeerJob");return t(),r("div",k,[e("div",w,[e("div",$,[e("div",A,[e("div",L,[e("h4",S,[l(n,{t:"All Active Jobs"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:o[0]||(o[0]=s=>this.$emit("close"))})]),e("div",C,[e("button",{class:"btn bg-primary-subtle border-1 border-primary-subtle text-primary-emphasis rounded-3 shadow mb-2",onClick:o[1]||(o[1]=s=>this.$emit("allLogs"))},[o[4]||(o[4]=e("i",{class:"bi bi-clock me-2"},null,-1)),l(n,{t:"Logs"})]),this.getAllJobs.length>0?(t(),r("div",P,[(t(!0),r(p,null,b(this.getAllJobs,(s,d)=>(t(),r("div",{class:"accordion-item",key:s.id},[e("h2",j,[e("button",{class:"accordion-button collapsed",type:"button","data-bs-toggle":"collapse","data-bs-target":"#collapse_"+d},[e("small",null,[e("strong",null,[s.name?(t(),r("span",B,m(s.name)+" • ",1)):f("",!0),e("samp",N,m(s.id),1)])])],8,M)]),e("div",{id:"collapse_"+d,class:"accordion-collapse collapse","data-bs-parent":"#peerJobsLogsModalAccordion"},[e("div",T,[(t(!0),r(p,null,b(s.jobs,i=>(t(),y(u,{onDelete:o[2]||(o[2]=h=>this.$emit("refresh")),onRefresh:o[3]||(o[3]=h=>this.$emit("refresh")),dropdowns:this.store.PeerScheduleJobs.dropdowns,viewOnly:!0,key:i.JobID,pjob:i},null,8,["dropdowns","pjob"]))),128))])],8,D)]))),128))])):(t(),r("div",V,[e("div",F,[e("span",O,[l(n,{t:"No active job at the moment."})])])]))])])])])])}const U=g(J,[["render",W]]);export{U as default};
|
import{S as _}from"./schedulePeerJob-Ci8HK7bA.js";import{_ as g,W as v,k as c,a as t,c as r,b as e,d as l,F as p,h as b,t as m,e as f,i as y}from"./index-DZliHkQD.js";import{L as x}from"./localeText-DG9SnJT8.js";import"./vue-datepicker-4ltJE5cT.js";import"./dayjs.min-PaIL06iQ.js";const J={name:"peerJobsAllModal",setup(){return{store:v()}},components:{LocaleText:x,SchedulePeerJob:_},props:{configurationPeers:Array[Object]},computed:{getAllJobs(){return this.configurationPeers.filter(a=>a.jobs.length>0)}}},k={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},w={class:"container d-flex h-100 w-100"},$={class:"m-auto modal-dialog-centered dashboardModal"},A={class:"card rounded-3 shadow",style:{width:"900px"}},L={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-2"},S={class:"mb-0 fw-normal"},C={class:"card-body px-4 pb-4 pt-2"},P={key:0,class:"accordion",id:"peerJobsLogsModalAccordion"},j={class:"accordion-header"},M=["data-bs-target"],B={key:0},N={class:"text-muted"},D=["id"],T={class:"accordion-body"},V={key:1,class:"card shadow-sm",style:{height:"153px"}},F={class:"card-body text-muted text-center d-flex"},O={class:"m-auto"};function W(a,o,E,I,R,q){const n=c("LocaleText"),u=c("SchedulePeerJob");return t(),r("div",k,[e("div",w,[e("div",$,[e("div",A,[e("div",L,[e("h4",S,[l(n,{t:"All Active Jobs"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:o[0]||(o[0]=s=>this.$emit("close"))})]),e("div",C,[e("button",{class:"btn bg-primary-subtle border-1 border-primary-subtle text-primary-emphasis rounded-3 shadow mb-2",onClick:o[1]||(o[1]=s=>this.$emit("allLogs"))},[o[4]||(o[4]=e("i",{class:"bi bi-clock me-2"},null,-1)),l(n,{t:"Logs"})]),this.getAllJobs.length>0?(t(),r("div",P,[(t(!0),r(p,null,b(this.getAllJobs,(s,d)=>(t(),r("div",{class:"accordion-item",key:s.id},[e("h2",j,[e("button",{class:"accordion-button collapsed",type:"button","data-bs-toggle":"collapse","data-bs-target":"#collapse_"+d},[e("small",null,[e("strong",null,[s.name?(t(),r("span",B,m(s.name)+" • ",1)):f("",!0),e("samp",N,m(s.id),1)])])],8,M)]),e("div",{id:"collapse_"+d,class:"accordion-collapse collapse","data-bs-parent":"#peerJobsLogsModalAccordion"},[e("div",T,[(t(!0),r(p,null,b(s.jobs,i=>(t(),y(u,{onDelete:o[2]||(o[2]=h=>this.$emit("refresh")),onRefresh:o[3]||(o[3]=h=>this.$emit("refresh")),dropdowns:this.store.PeerScheduleJobs.dropdowns,viewOnly:!0,key:i.JobID,pjob:i},null,8,["dropdowns","pjob"]))),128))])],8,D)]))),128))])):(t(),r("div",V,[e("div",F,[e("span",O,[l(n,{t:"No active job at the moment."})])])]))])])])])])}const U=g(J,[["render",W]]);export{U as default};
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
src/static/app/dist/assets/peerQRCode-B62rUhHV.css
vendored
Normal file
1
src/static/app/dist/assets/peerQRCode-B62rUhHV.css
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
@media screen and (max-width: 768px){#qrcode[data-v-7c287bf3]{width:100%!important;height:auto!important;aspect-ratio:1/1}}
|
@ -1 +0,0 @@
|
|||||||
import{b as r}from"./browser-CjSdxGTc.js";import{L as i}from"./localeText-BUK20hPB.js";import{_ as c,D as l,g as p,k as _,a,c as n,b as e,d as m,n as h,e as u}from"./index-C00IVglr.js";const f={name:"peerQRCode",components:{LocaleText:i},props:{selectedPeer:Object},setup(){return{dashboardStore:l()}},data(){return{loading:!0}},mounted(){p("/api/downloadPeer/"+this.$route.params.id,{id:this.selectedPeer.id},t=>{this.loading=!1,t.status?r.toCanvas(document.querySelector("#qrcode"),t.data.file,s=>{s&&console.error(s)}):this.dashboardStore.newMessage("Server",t.message,"danger")})}},b={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0"},g={class:"container d-flex h-100 w-100"},v={class:"m-auto modal-dialog-centered dashboardModal justify-content-center"},x={class:"card rounded-3 shadow"},C={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},w={class:"mb-0"},y={class:"card-body p-4"},S={style:{width:"292px",height:"292px"},class:"d-flex"},k={key:0,class:"spinner-border m-auto",role:"status"};function L(t,s,$,q,o,B){const d=_("LocaleText");return a(),n("div",b,[e("div",g,[e("div",v,[e("div",x,[e("div",C,[e("h4",w,[m(d,{t:"QR Code"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:s[0]||(s[0]=N=>this.$emit("close"))})]),e("div",y,[e("div",S,[e("canvas",{id:"qrcode",class:h(["rounded-3 shadow animate__animated animate__fadeIn animate__faster",{"d-none":o.loading}])},null,2),o.loading?(a(),n("div",k,s[1]||(s[1]=[e("span",{class:"visually-hidden"},"Loading...",-1)]))):u("",!0)])])])])])])}const T=c(f,[["render",L]]);export{T as default};
|
|
1
src/static/app/dist/assets/peerQRCode-Dxvodnam.js
vendored
Normal file
1
src/static/app/dist/assets/peerQRCode-Dxvodnam.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
import{b as i}from"./browser-CjSdxGTc.js";import{L as c}from"./localeText-DG9SnJT8.js";import{_ as l,D as p,g as _,k as m,a as n,c as r,b as e,d as u,n as h,e as f}from"./index-DZliHkQD.js";const g={name:"peerQRCode",components:{LocaleText:c},props:{selectedPeer:Object},setup(){return{dashboardStore:p()}},data(){return{loading:!0}},mounted(){_("/api/downloadPeer/"+this.$route.params.id,{id:this.selectedPeer.id},o=>{if(this.loading=!1,o.status){let t="";if(this.selectedPeer.configuration.Protocol==="awg"){let a={containers:[{awg:{isThirdPartyConfig:!0,last_config:o.data.file,port:this.selectedPeer.configuration.ListenPort,transport_proto:"udp"},container:"amnezia-awg"}],defaultContainer:"amnezia-awg",description:this.selectedPeer.name,hostName:this.dashboardStore.Configuration.Peers.remote_endpoint};t=btoa(JSON.stringify(a))}else t=o.data.file;i.toCanvas(document.querySelector("#qrcode"),t,a=>{a&&console.error(a)})}else this.dashboardStore.newMessage("Server",o.message,"danger")})}},b={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0"},v={class:"container d-flex h-100 w-100"},C={class:"m-auto modal-dialog-centered dashboardModal justify-content-center"},w={class:"card rounded-3 shadow"},P={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},x={class:"mb-0"},S={class:"card-body p-4"},y={class:"d-flex"},L={key:0,class:"spinner-border m-auto",role:"status"};function k(o,t,a,N,s,$){const d=m("LocaleText");return n(),r("div",b,[e("div",v,[e("div",C,[e("div",w,[e("div",P,[e("h4",x,[u(d,{t:"QR Code"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:t[0]||(t[0]=Q=>this.$emit("close"))})]),e("div",S,[e("div",y,[e("canvas",{id:"qrcode",class:h(["rounded-3 shadow animate__animated animate__fadeIn animate__faster",{"d-none":s.loading}])},null,2),s.loading?(n(),r("div",L,t[1]||(t[1]=[e("span",{class:"visually-hidden"},"Loading...",-1)]))):f("",!0)])])])])])])}const q=l(g,[["render",k],["__scopeId","data-v-7c287bf3"]]);export{q as default};
|
@ -1 +1 @@
|
|||||||
import{_ as u,q as m,G as p,r as b,W as f,a2 as h,o as g,a as v,i as y,w as _,b as e,m as x,y as w,d as S,j as B}from"./index-C00IVglr.js";import{L as T}from"./localeText-BUK20hPB.js";const C={class:"fixed-bottom w-100 bottom-0 z-2",style:{"z-index":"1"}},P={class:"container-fluid"},k={class:"row g-0"},L={class:"col-md-9 col-lg-10 d-flex justify-content-center py-2"},V={class:"rounded-3 p-2 border shadow searchPeersContainer bg-body-tertiary"},j={class:"d-flex gap-1 align-items-center px-2"},z=["placeholder"],D={__name:"peerSearchBar",emits:["close"],setup(G,{emit:n}){const l=m(()=>p("Search Peers..."));let t;const o=b(""),r=f(),i=()=>{t?(clearTimeout(t),t=setTimeout(()=>{r.searchString=o.value},300)):t=setTimeout(()=>{r.searchString=o.value},300)},d=n,c=h("searchBar");return g(()=>{c.value.focus()}),(M,s)=>(v(),y(B,{name:"slideUp",appear:"",type:"animation",style:{"animation-delay":"1s"}},{default:_(()=>[e("div",C,[e("div",P,[e("div",k,[s[5]||(s[5]=e("div",{class:"col-md-3 col-lg-2"},null,-1)),e("div",L,[e("div",V,[e("div",j,[s[4]||(s[4]=e("h6",{class:"mb-0 me-2"},[e("label",{for:"searchPeers"},[e("i",{class:"bi bi-search"})])],-1)),x(e("input",{ref:"searchBar",class:"flex-grow-1 form-control rounded-3 bg-secondary-subtle border-1 border-secondary-subtle",placeholder:l.value,id:"searchPeers",onKeyup:s[0]||(s[0]=a=>i()),"onUpdate:modelValue":s[1]||(s[1]=a=>o.value=a)},null,40,z),[[w,o.value]]),e("button",{onClick:s[2]||(s[2]=a=>d("close")),style:{"white-space":"nowrap"},class:"btn bg-secondary-subtle text-secondary-emphasis border-secondary-subtle rounded-3 d-flex align-items-center"},[e("span",null,[s[3]||(s[3]=e("i",{class:"bi bi-x-circle-fill me-2"},null,-1)),S(T,{t:"Done"})])])])])])])])])]),_:1}))}},W=u(D,[["__scopeId","data-v-b741afe7"]]);export{W as default};
|
import{_ as u,q as m,G as p,r as b,W as f,a2 as h,o as g,a as v,i as y,w as _,b as e,m as x,y as w,d as S,j as B}from"./index-DZliHkQD.js";import{L as T}from"./localeText-DG9SnJT8.js";const C={class:"fixed-bottom w-100 bottom-0 z-2",style:{"z-index":"1"}},P={class:"container-fluid"},k={class:"row g-0"},L={class:"col-md-9 col-lg-10 d-flex justify-content-center py-2"},V={class:"rounded-3 p-2 border shadow searchPeersContainer bg-body-tertiary"},j={class:"d-flex gap-1 align-items-center px-2"},z=["placeholder"],D={__name:"peerSearchBar",emits:["close"],setup(G,{emit:n}){const l=m(()=>p("Search Peers..."));let t;const o=b(""),r=f(),i=()=>{t?(clearTimeout(t),t=setTimeout(()=>{r.searchString=o.value},300)):t=setTimeout(()=>{r.searchString=o.value},300)},d=n,c=h("searchBar");return g(()=>{c.value.focus()}),(M,s)=>(v(),y(B,{name:"slideUp",appear:"",type:"animation",style:{"animation-delay":"1s"}},{default:_(()=>[e("div",C,[e("div",P,[e("div",k,[s[5]||(s[5]=e("div",{class:"col-md-3 col-lg-2"},null,-1)),e("div",L,[e("div",V,[e("div",j,[s[4]||(s[4]=e("h6",{class:"mb-0 me-2"},[e("label",{for:"searchPeers"},[e("i",{class:"bi bi-search"})])],-1)),x(e("input",{ref:"searchBar",class:"flex-grow-1 form-control rounded-3 bg-secondary-subtle border-1 border-secondary-subtle",placeholder:l.value,id:"searchPeers",onKeyup:s[0]||(s[0]=a=>i()),"onUpdate:modelValue":s[1]||(s[1]=a=>o.value=a)},null,40,z),[[w,o.value]]),e("button",{onClick:s[2]||(s[2]=a=>d("close")),style:{"white-space":"nowrap"},class:"btn bg-secondary-subtle text-secondary-emphasis border-secondary-subtle rounded-3 d-flex align-items-center"},[e("span",null,[s[3]||(s[3]=e("i",{class:"bi bi-x-circle-fill me-2"},null,-1)),S(T,{t:"Done"})])])])])])])])])]),_:1}))}},W=u(D,[["__scopeId","data-v-b741afe7"]]);export{W as default};
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
import{L as r}from"./localeText-BUK20hPB.js";import{a as t,c as n,f as i,i as s,e as a}from"./index-C00IVglr.js";const d={key:0,class:"badge wireguardBg rounded-3 shadow"},c={key:1,class:"badge amneziawgBg rounded-3 shadow"},u={__name:"protocolBadge",props:{protocol:String,mini:!1},setup(e){return(m,o)=>e.protocol==="wg"?(t(),n("span",d,[o[0]||(o[0]=i(" WireGuard ")),e.mini?a("",!0):(t(),s(r,{key:0,t:"Configuration"}))])):e.protocol==="awg"?(t(),n("span",c,[o[1]||(o[1]=i(" AmneziaWG ")),e.mini?a("",!0):(t(),s(r,{key:0,t:"Configuration"}))])):a("",!0)}};export{u as _};
|
import{L as r}from"./localeText-DG9SnJT8.js";import{a as t,c as n,f as i,i as s,e as a}from"./index-DZliHkQD.js";const d={key:0,class:"badge wireguardBg rounded-3 shadow"},c={key:1,class:"badge amneziawgBg rounded-3 shadow"},u={__name:"protocolBadge",props:{protocol:String,mini:!1},setup(e){return(m,o)=>e.protocol==="wg"?(t(),n("span",d,[o[0]||(o[0]=i(" WireGuard ")),e.mini?a("",!0):(t(),s(r,{key:0,t:"Configuration"}))])):e.protocol==="awg"?(t(),n("span",c,[o[1]||(o[1]=i(" AmneziaWG ")),e.mini?a("",!0):(t(),s(r,{key:0,t:"Configuration"}))])):a("",!0)}};export{u as _};
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
import{_ as u,D as m,A as p,c as r,b as e,d as o,f as c,t as h,e as f,m as l,y as d,a as i,k as w}from"./index-C00IVglr.js";import{L as g}from"./localeText-BUK20hPB.js";const b={name:"setup",components:{LocaleText:g},setup(){return{store:m()}},data(){return{setup:{username:"",newPassword:"",repeatNewPassword:"",enable_totp:!0},loading:!1,errorMessage:"",done:!1}},computed:{goodToSubmit(){return this.setup.username&&this.setup.newPassword.length>=8&&this.setup.repeatNewPassword.length>=8&&this.setup.newPassword===this.setup.repeatNewPassword}},methods:{submit(){this.loading=!0,p("/api/Welcome_Finish",this.setup,n=>{n.status?(this.done=!0,this.$router.push("/2FASetup")):(document.querySelectorAll("#createAccount input").forEach(s=>s.classList.add("is-invalid")),this.errorMessage=n.message,document.querySelector(".login-container-fluid").scrollTo({top:0,left:0,behavior:"smooth"})),this.loading=!1})}}},_=["data-bs-theme"],x={class:"m-auto text-body",style:{width:"500px"}},v={class:"dashboardLogo display-4"},y={class:"mb-5"},P={key:0,class:"alert alert-danger"},N={class:"d-flex flex-column gap-3"},k={id:"createAccount",class:"d-flex flex-column gap-2"},S={class:"form-group text-body"},T={for:"username",class:"mb-1 text-muted"},C={class:"form-group text-body"},L={for:"password",class:"mb-1 text-muted"},V={class:"form-group text-body"},A={for:"confirmPassword",class:"mb-1 text-muted"},$=["disabled"],q={key:0,class:"d-flex align-items-center w-100"},M={key:1,class:"d-flex align-items-center w-100"};function B(n,s,D,E,U,F){const t=w("LocaleText");return i(),r("div",{class:"container-fluid login-container-fluid d-flex main pt-5 overflow-scroll","data-bs-theme":this.store.Configuration.Server.dashboard_theme},[e("div",x,[e("span",v,[o(t,{t:"Nice to meet you!"})]),e("p",y,[o(t,{t:"Please fill in the following fields to finish setup"}),s[4]||(s[4]=c(" 😊"))]),e("div",null,[e("h3",null,[o(t,{t:"Create an account"})]),this.errorMessage?(i(),r("div",P,h(this.errorMessage),1)):f("",!0),e("div",N,[e("form",k,[e("div",S,[e("label",T,[e("small",null,[o(t,{t:"Enter an username you like"})])]),l(e("input",{type:"text",autocomplete:"username","onUpdate:modelValue":s[0]||(s[0]=a=>this.setup.username=a),class:"form-control",id:"username",name:"username",required:""},null,512),[[d,this.setup.username]])]),e("div",C,[e("label",L,[e("small",null,[o(t,{t:"Enter a password"}),e("code",null,[o(t,{t:"(At least 8 characters and make sure is strong enough!)"})])])]),l(e("input",{type:"password",autocomplete:"new-password","onUpdate:modelValue":s[1]||(s[1]=a=>this.setup.newPassword=a),class:"form-control",id:"password",name:"password",required:""},null,512),[[d,this.setup.newPassword]])]),e("div",V,[e("label",A,[e("small",null,[o(t,{t:"Confirm password"})])]),l(e("input",{type:"password",autocomplete:"confirm-new-password","onUpdate:modelValue":s[2]||(s[2]=a=>this.setup.repeatNewPassword=a),class:"form-control",id:"confirmPassword",name:"confirmPassword",required:""},null,512),[[d,this.setup.repeatNewPassword]])])]),e("button",{class:"btn btn-dark btn-lg mb-5 d-flex btn-brand shadow align-items-center",ref:"signInBtn",disabled:!this.goodToSubmit||this.loading||this.done,onClick:s[3]||(s[3]=a=>this.submit())},[!this.loading&&!this.done?(i(),r("span",q,[o(t,{t:"Next"}),s[5]||(s[5]=e("i",{class:"bi bi-chevron-right ms-auto"},null,-1))])):(i(),r("span",M,[o(t,{t:"Saving..."}),s[6]||(s[6]=e("span",{class:"spinner-border ms-auto spinner-border-sm",role:"status"},[e("span",{class:"visually-hidden"},"Loading...")],-1))]))],8,$)])])])],8,_)}const j=u(b,[["render",B]]);export{j as default};
|
import{_ as u,D as m,A as p,c as r,b as e,d as o,f as c,t as h,e as f,m as l,y as d,a as i,k as w}from"./index-DZliHkQD.js";import{L as g}from"./localeText-DG9SnJT8.js";const b={name:"setup",components:{LocaleText:g},setup(){return{store:m()}},data(){return{setup:{username:"",newPassword:"",repeatNewPassword:"",enable_totp:!0},loading:!1,errorMessage:"",done:!1}},computed:{goodToSubmit(){return this.setup.username&&this.setup.newPassword.length>=8&&this.setup.repeatNewPassword.length>=8&&this.setup.newPassword===this.setup.repeatNewPassword}},methods:{submit(){this.loading=!0,p("/api/Welcome_Finish",this.setup,n=>{n.status?(this.done=!0,this.$router.push("/2FASetup")):(document.querySelectorAll("#createAccount input").forEach(s=>s.classList.add("is-invalid")),this.errorMessage=n.message,document.querySelector(".login-container-fluid").scrollTo({top:0,left:0,behavior:"smooth"})),this.loading=!1})}}},_=["data-bs-theme"],x={class:"m-auto text-body",style:{width:"500px"}},v={class:"dashboardLogo display-4"},y={class:"mb-5"},P={key:0,class:"alert alert-danger"},N={class:"d-flex flex-column gap-3"},k={id:"createAccount",class:"d-flex flex-column gap-2"},S={class:"form-group text-body"},T={for:"username",class:"mb-1 text-muted"},C={class:"form-group text-body"},L={for:"password",class:"mb-1 text-muted"},V={class:"form-group text-body"},A={for:"confirmPassword",class:"mb-1 text-muted"},$=["disabled"],q={key:0,class:"d-flex align-items-center w-100"},M={key:1,class:"d-flex align-items-center w-100"};function B(n,s,D,E,U,F){const t=w("LocaleText");return i(),r("div",{class:"container-fluid login-container-fluid d-flex main pt-5 overflow-scroll","data-bs-theme":this.store.Configuration.Server.dashboard_theme},[e("div",x,[e("span",v,[o(t,{t:"Nice to meet you!"})]),e("p",y,[o(t,{t:"Please fill in the following fields to finish setup"}),s[4]||(s[4]=c(" 😊"))]),e("div",null,[e("h3",null,[o(t,{t:"Create an account"})]),this.errorMessage?(i(),r("div",P,h(this.errorMessage),1)):f("",!0),e("div",N,[e("form",k,[e("div",S,[e("label",T,[e("small",null,[o(t,{t:"Enter an username you like"})])]),l(e("input",{type:"text",autocomplete:"username","onUpdate:modelValue":s[0]||(s[0]=a=>this.setup.username=a),class:"form-control",id:"username",name:"username",required:""},null,512),[[d,this.setup.username]])]),e("div",C,[e("label",L,[e("small",null,[o(t,{t:"Enter a password"}),e("code",null,[o(t,{t:"(At least 8 characters and make sure is strong enough!)"})])])]),l(e("input",{type:"password",autocomplete:"new-password","onUpdate:modelValue":s[1]||(s[1]=a=>this.setup.newPassword=a),class:"form-control",id:"password",name:"password",required:""},null,512),[[d,this.setup.newPassword]])]),e("div",V,[e("label",A,[e("small",null,[o(t,{t:"Confirm password"})])]),l(e("input",{type:"password",autocomplete:"confirm-new-password","onUpdate:modelValue":s[2]||(s[2]=a=>this.setup.repeatNewPassword=a),class:"form-control",id:"confirmPassword",name:"confirmPassword",required:""},null,512),[[d,this.setup.repeatNewPassword]])])]),e("button",{class:"btn btn-dark btn-lg mb-5 d-flex btn-brand shadow align-items-center",ref:"signInBtn",disabled:!this.goodToSubmit||this.loading||this.done,onClick:s[3]||(s[3]=a=>this.submit())},[!this.loading&&!this.done?(i(),r("span",q,[o(t,{t:"Next"}),s[5]||(s[5]=e("i",{class:"bi bi-chevron-right ms-auto"},null,-1))])):(i(),r("span",M,[o(t,{t:"Saving..."}),s[6]||(s[6]=e("span",{class:"spinner-border ms-auto spinner-border-sm",role:"status"},[e("span",{class:"visually-hidden"},"Loading...")],-1))]))],8,$)])])])],8,_)}const j=u(b,[["render",B]]);export{j as default};
|
@ -1 +1 @@
|
|||||||
import{_,r,D as p,g as u,c as m,b as t,d as c,J as h,a as f,k as b}from"./index-C00IVglr.js";import{b as v}from"./browser-CjSdxGTc.js";import{L as y}from"./localeText-BUK20hPB.js";const g={name:"share",components:{LocaleText:y},async setup(){const o=h(),e=r(!1),i=p(),n=r(""),s=r(void 0),l=r(new Blob);await u("/api/getDashboardTheme",{},d=>{n.value=d.data});const a=o.query.ShareID;return a===void 0||a.length===0?(s.value=void 0,e.value=!0):await u("/api/sharePeer/get",{ShareID:a},d=>{d.status?(s.value=d.data,l.value=new Blob([s.value.file],{type:"text/plain"})):s.value=void 0,e.value=!0}),{store:i,theme:n,peerConfiguration:s,blob:l}},mounted(){this.peerConfiguration&&v.toCanvas(document.querySelector("#qrcode"),this.peerConfiguration.file,o=>{o&&console.error(o)})},methods:{download(){const o=new Blob([this.peerConfiguration.file],{type:"text/plain"}),e=URL.createObjectURL(o),i=`${this.peerConfiguration.fileName}.conf`,n=document.createElement("a");n.href=e,n.download=i,n.click()}},computed:{getBlob(){return URL.createObjectURL(this.blob)}}},w=["data-bs-theme"],x={class:"m-auto text-body",style:{width:"500px"}},C={key:0,class:"text-center position-relative",style:{}},U={class:"position-absolute w-100 h-100 top-0 start-0 d-flex animate__animated animate__fadeInUp",style:{"animation-delay":"0.1s"}},I={class:"m-auto"},L={key:1,class:"d-flex align-items-center flex-column gap-3"},k={class:"h1 dashboardLogo text-center animate__animated animate__fadeInUp"},B={id:"qrcode",class:"rounded-3 shadow animate__animated animate__fadeInUp mb-3",ref:"qrcode"},D={class:"text-muted animate__animated animate__fadeInUp mb-1",style:{"animation-delay":"0.2s"}},R=["download","href"];function q(o,e,i,n,s,l){const a=b("LocaleText");return f(),m("div",{class:"container-fluid login-container-fluid d-flex main pt-5 overflow-scroll","data-bs-theme":this.theme},[t("div",x,[this.peerConfiguration?(f(),m("div",L,[t("div",k,[e[1]||(e[1]=t("h6",null,"WGDashboard",-1)),c(a,{t:"Scan QR Code with the WireGuard App to add peer"})]),t("canvas",B,null,512),t("p",D,[c(a,{t:"or click the button below to download the "}),e[2]||(e[2]=t("samp",null,".conf",-1)),c(a,{t:" file"})]),t("a",{download:this.peerConfiguration.fileName+".conf",href:l.getBlob,class:"btn btn-lg bg-primary-subtle text-primary-emphasis border-1 border-primary-subtle animate__animated animate__fadeInUp shadow-sm",style:{"animation-delay":"0.25s"}},e[3]||(e[3]=[t("i",{class:"bi bi-download"},null,-1)]),8,R)])):(f(),m("div",C,[e[0]||(e[0]=t("div",{class:"animate__animated animate__fadeInUp"},[t("h1",{style:{"font-size":"20rem",filter:"blur(1rem)","animation-duration":"7s"},class:"animate__animated animate__flash animate__infinite"},[t("i",{class:"bi bi-file-binary"})])],-1)),t("div",U,[t("h3",I,[c(a,{t:"Oh no... This link is either expired or invalid."})])])]))])],8,w)}const N=_(g,[["render",q],["__scopeId","data-v-1b44aacd"]]);export{N as default};
|
import{_,r,D as p,g as u,c as m,b as t,d as c,J as h,a as f,k as b}from"./index-DZliHkQD.js";import{b as v}from"./browser-CjSdxGTc.js";import{L as y}from"./localeText-DG9SnJT8.js";const g={name:"share",components:{LocaleText:y},async setup(){const o=h(),e=r(!1),i=p(),n=r(""),s=r(void 0),l=r(new Blob);await u("/api/getDashboardTheme",{},d=>{n.value=d.data});const a=o.query.ShareID;return a===void 0||a.length===0?(s.value=void 0,e.value=!0):await u("/api/sharePeer/get",{ShareID:a},d=>{d.status?(s.value=d.data,l.value=new Blob([s.value.file],{type:"text/plain"})):s.value=void 0,e.value=!0}),{store:i,theme:n,peerConfiguration:s,blob:l}},mounted(){this.peerConfiguration&&v.toCanvas(document.querySelector("#qrcode"),this.peerConfiguration.file,o=>{o&&console.error(o)})},methods:{download(){const o=new Blob([this.peerConfiguration.file],{type:"text/plain"}),e=URL.createObjectURL(o),i=`${this.peerConfiguration.fileName}.conf`,n=document.createElement("a");n.href=e,n.download=i,n.click()}},computed:{getBlob(){return URL.createObjectURL(this.blob)}}},w=["data-bs-theme"],x={class:"m-auto text-body",style:{width:"500px"}},C={key:0,class:"text-center position-relative",style:{}},U={class:"position-absolute w-100 h-100 top-0 start-0 d-flex animate__animated animate__fadeInUp",style:{"animation-delay":"0.1s"}},I={class:"m-auto"},L={key:1,class:"d-flex align-items-center flex-column gap-3"},k={class:"h1 dashboardLogo text-center animate__animated animate__fadeInUp"},B={id:"qrcode",class:"rounded-3 shadow animate__animated animate__fadeInUp mb-3",ref:"qrcode"},D={class:"text-muted animate__animated animate__fadeInUp mb-1",style:{"animation-delay":"0.2s"}},R=["download","href"];function q(o,e,i,n,s,l){const a=b("LocaleText");return f(),m("div",{class:"container-fluid login-container-fluid d-flex main pt-5 overflow-scroll","data-bs-theme":this.theme},[t("div",x,[this.peerConfiguration?(f(),m("div",L,[t("div",k,[e[1]||(e[1]=t("h6",null,"WGDashboard",-1)),c(a,{t:"Scan QR Code with the WireGuard App to add peer"})]),t("canvas",B,null,512),t("p",D,[c(a,{t:"or click the button below to download the "}),e[2]||(e[2]=t("samp",null,".conf",-1)),c(a,{t:" file"})]),t("a",{download:this.peerConfiguration.fileName+".conf",href:l.getBlob,class:"btn btn-lg bg-primary-subtle text-primary-emphasis border-1 border-primary-subtle animate__animated animate__fadeInUp shadow-sm",style:{"animation-delay":"0.25s"}},e[3]||(e[3]=[t("i",{class:"bi bi-download"},null,-1)]),8,R)])):(f(),m("div",C,[e[0]||(e[0]=t("div",{class:"animate__animated animate__fadeInUp"},[t("h1",{style:{"font-size":"20rem",filter:"blur(1rem)","animation-duration":"7s"},class:"animate__animated animate__flash animate__infinite"},[t("i",{class:"bi bi-file-binary"})])],-1)),t("div",U,[t("h3",I,[c(a,{t:"Oh no... This link is either expired or invalid."})])])]))])],8,w)}const N=_(g,[["render",q],["__scopeId","data-v-1b44aacd"]]);export{N as default};
|
File diff suppressed because one or more lines are too long
1
src/static/app/dist/assets/storageMount-Bl6vLa1N.css
vendored
Normal file
1
src/static/app/dist/assets/storageMount-Bl6vLa1N.css
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.square[data-v-2ad535bb]{height:var(--2ec4d3bc);transition:background-color .5s cubic-bezier(.42,0,.22,1)}.square[data-v-9509d7a0]{height:var(--2dc8ab7e);transition:background-color .5s cubic-bezier(.42,0,.22,1)}
|
@ -1 +0,0 @@
|
|||||||
.square[data-v-70102637]{height:var(--e901480c);transition:background-color .5s cubic-bezier(.42,0,.22,1)}.floatingLabel[data-v-70102637]{top:40px}.square[data-v-a382214a]{height:var(--38705f32);transition:background-color .5s cubic-bezier(.42,0,.22,1)}.floatingLabel[data-v-a382214a]{top:var(--38705f32)}
|
|
@ -0,0 +1 @@
|
|||||||
|
import{_ as b,p as m,r as p,q as v,a as t,c as r,d as g,w as x,s as n,n as f,b as l,t as d,e as C,j as w}from"./index-DZliHkQD.js";const y={class:"text-muted me-2"},_={class:"fw-bold"},k={__name:"cpuCore",props:{core_number:Number,percentage:Number,align:Boolean,square:Boolean},setup(e){m(c=>({"2ec4d3bc":o.value}));const u=e,s=p(!1),o=v(()=>u.square?"40px":"25px");return(c,a)=>(t(),r("div",{class:"flex-grow-1 square rounded-3 border position-relative p-2",onMouseenter:a[0]||(a[0]=i=>s.value=!0),onMouseleave:a[1]||(a[1]=i=>s.value=!1),style:n({"background-color":`rgb(13 110 253 / ${e.percentage*10}%)`})},[g(w,{name:"zoomReversed"},{default:x(()=>[s.value?(t(),r("div",{key:0,style:n([{"white-space":"nowrap"},{top:o.value}]),class:f(["floatingLabel z-3 border position-absolute d-block p-1 px-2 bg-body text-body rounded-3 border shadow d-flex",[e.align?"end-0":"start-0"]])},[l("small",y," Core #"+d(e.core_number+1),1),l("small",_,d(e.percentage)+"% ",1)],6)):C("",!0)]),_:1})],36))}},B=b(k,[["__scopeId","data-v-2ad535bb"]]);export{B as C};
|
@ -1 +0,0 @@
|
|||||||
import{_ as i,p as m,r as p,q as b,a as o,c as t,d as g,w as v,n as x,b as r,t as n,e as f,j as C,s as w}from"./index-C00IVglr.js";const y={class:"text-muted me-2"},_={class:"fw-bold"},k={__name:"cpuCore",props:{core_number:Number,percentage:Number,align:Boolean,square:Boolean},setup(e){m(c=>({e901480c:u.value}));const l=e,a=p(!1),u=b(()=>l.square?"40px":"25px");return(c,s)=>(o(),t("div",{class:"flex-grow-1 square rounded-3 border position-relative p-2",onMouseenter:s[0]||(s[0]=d=>a.value=!0),onMouseleave:s[1]||(s[1]=d=>a.value=!1),style:w({"background-color":`rgb(13 110 253 / ${e.percentage*10}%)`})},[g(C,{name:"zoomReversed"},{default:v(()=>[a.value?(o(),t("div",{key:0,style:{"white-space":"nowrap"},class:x(["floatingLabel z-3 border position-absolute d-block p-1 px-2 bg-body text-body rounded-3 border shadow d-flex",[e.align?"end-0":"start-0"]])},[r("small",y," Core #"+n(e.core_number+1),1),r("small",_,n(e.percentage)+"% ",1)],2)):f("",!0)]),_:1})],36))}},B=i(k,[["__scopeId","data-v-70102637"]]);export{B as C};
|
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
import{_ as h,D as m,g as p,A as f,c as b,b as t,d as i,t as _,m as v,y as g,i as d,w as r,k as c,a as n}from"./index-C00IVglr.js";import{b as x}from"./browser-CjSdxGTc.js";import{L as y}from"./localeText-BUK20hPB.js";const T={name:"totp",components:{LocaleText:y},async setup(){const s=m();let e="";return await p("/api/Welcome_GetTotpLink",{},a=>{a.status&&(e=a.data)}),{l:e,store:s}},mounted(){this.l&&x.toCanvas(document.getElementById("qrcode"),this.l,function(s){})},data(){return{totp:"",totpInvalidMessage:"",verified:!1}},methods:{validateTotp(){}},watch:{totp(s){const e=document.querySelector("#totp");e.classList.remove("is-invalid","is-valid"),s.length===6&&(console.log(s),/[0-9]{6}/.test(s)?f("/api/Welcome_VerifyTotpLink",{totp:s},a=>{a.status?(this.verified=!0,e.classList.add("is-valid"),this.$emit("verified")):(e.classList.add("is-invalid"),this.totpInvalidMessage="TOTP does not match.")}):(e.classList.add("is-invalid"),this.totpInvalidMessage="TOTP can only contain numbers"))}}},k=["data-bs-theme"],w={class:"m-auto text-body",style:{width:"500px"}},L={class:"d-flex flex-column"},M={class:"dashboardLogo display-4"},C={class:"mb-2"},P={class:"text-muted"},I={class:"p-3 bg-body-secondary rounded-3 border mb-3"},O={class:"text-muted mb-0"},B=["href"],$={style:{"line-break":"anywhere"}},A={for:"totp",class:"mb-2"},D={class:"text-muted"},S={class:"form-group mb-2"},q=["disabled"],E={class:"invalid-feedback"},F={class:"valid-feedback"},R={class:"d-flex gap-3 mt-5 flex-column"};function G(s,e,a,N,W,Q){const o=c("LocaleText"),l=c("RouterLink");return n(),b("div",{class:"container-fluid login-container-fluid d-flex main pt-5 overflow-scroll","data-bs-theme":this.store.Configuration.Server.dashboard_theme},[t("div",w,[t("div",L,[t("div",null,[t("h1",M,[i(o,{t:"Multi-Factor Authentication (MFA)"})]),t("p",C,[t("small",P,[i(o,{t:"1. Please scan the following QR Code to generate TOTP with your choice of authenticator"})])]),e[1]||(e[1]=t("canvas",{id:"qrcode",class:"rounded-3 mb-2"},null,-1)),t("div",I,[t("p",O,[t("small",null,[i(o,{t:"Or you can click the link below:"})])]),t("a",{href:this.l},[t("code",$,_(this.l),1)],8,B)]),t("label",A,[t("small",D,[i(o,{t:"2. Enter the TOTP generated by your authenticator to verify"})])]),t("div",S,[v(t("input",{class:"form-control text-center totp",id:"totp",maxlength:"6",type:"text",inputmode:"numeric",autocomplete:"one-time-code","onUpdate:modelValue":e[0]||(e[0]=u=>this.totp=u),disabled:this.verified},null,8,q),[[g,this.totp]]),t("div",E,[i(o,{t:this.totpInvalidMessage},null,8,["t"])]),t("div",F,[i(o,{t:"TOTP verified!"})])])]),e[4]||(e[4]=t("hr",null,null,-1)),t("div",R,[this.verified?(n(),d(l,{key:1,to:"/",class:"btn btn-dark btn-lg d-flex btn-brand shadow align-items-center flex-grow-1 rounded-3"},{default:r(()=>[i(o,{t:"Complete"}),e[3]||(e[3]=t("i",{class:"bi bi-chevron-right ms-auto"},null,-1))]),_:1})):(n(),d(l,{key:0,to:"/",class:"btn bg-secondary-subtle text-secondary-emphasis rounded-3 flex-grow-1 btn-lg border-1 border-secondary-subtle shadow d-flex"},{default:r(()=>[i(o,{t:"I don't need MFA"}),e[2]||(e[2]=t("i",{class:"bi bi-chevron-right ms-auto"},null,-1))]),_:1}))])])])],8,k)}const z=h(T,[["render",G]]);export{z as default};
|
import{_ as h,D as m,g as p,A as f,c as b,b as t,d as i,t as _,m as v,y as g,i as d,w as r,k as c,a as n}from"./index-DZliHkQD.js";import{b as x}from"./browser-CjSdxGTc.js";import{L as y}from"./localeText-DG9SnJT8.js";const T={name:"totp",components:{LocaleText:y},async setup(){const s=m();let e="";return await p("/api/Welcome_GetTotpLink",{},a=>{a.status&&(e=a.data)}),{l:e,store:s}},mounted(){this.l&&x.toCanvas(document.getElementById("qrcode"),this.l,function(s){})},data(){return{totp:"",totpInvalidMessage:"",verified:!1}},methods:{validateTotp(){}},watch:{totp(s){const e=document.querySelector("#totp");e.classList.remove("is-invalid","is-valid"),s.length===6&&(console.log(s),/[0-9]{6}/.test(s)?f("/api/Welcome_VerifyTotpLink",{totp:s},a=>{a.status?(this.verified=!0,e.classList.add("is-valid"),this.$emit("verified")):(e.classList.add("is-invalid"),this.totpInvalidMessage="TOTP does not match.")}):(e.classList.add("is-invalid"),this.totpInvalidMessage="TOTP can only contain numbers"))}}},k=["data-bs-theme"],w={class:"m-auto text-body",style:{width:"500px"}},L={class:"d-flex flex-column"},M={class:"dashboardLogo display-4"},C={class:"mb-2"},P={class:"text-muted"},I={class:"p-3 bg-body-secondary rounded-3 border mb-3"},O={class:"text-muted mb-0"},B=["href"],$={style:{"line-break":"anywhere"}},A={for:"totp",class:"mb-2"},D={class:"text-muted"},S={class:"form-group mb-2"},q=["disabled"],E={class:"invalid-feedback"},F={class:"valid-feedback"},R={class:"d-flex gap-3 mt-5 flex-column"};function G(s,e,a,N,W,Q){const o=c("LocaleText"),l=c("RouterLink");return n(),b("div",{class:"container-fluid login-container-fluid d-flex main pt-5 overflow-scroll","data-bs-theme":this.store.Configuration.Server.dashboard_theme},[t("div",w,[t("div",L,[t("div",null,[t("h1",M,[i(o,{t:"Multi-Factor Authentication (MFA)"})]),t("p",C,[t("small",P,[i(o,{t:"1. Please scan the following QR Code to generate TOTP with your choice of authenticator"})])]),e[1]||(e[1]=t("canvas",{id:"qrcode",class:"rounded-3 mb-2"},null,-1)),t("div",I,[t("p",O,[t("small",null,[i(o,{t:"Or you can click the link below:"})])]),t("a",{href:this.l},[t("code",$,_(this.l),1)],8,B)]),t("label",A,[t("small",D,[i(o,{t:"2. Enter the TOTP generated by your authenticator to verify"})])]),t("div",S,[v(t("input",{class:"form-control text-center totp",id:"totp",maxlength:"6",type:"text",inputmode:"numeric",autocomplete:"one-time-code","onUpdate:modelValue":e[0]||(e[0]=u=>this.totp=u),disabled:this.verified},null,8,q),[[g,this.totp]]),t("div",E,[i(o,{t:this.totpInvalidMessage},null,8,["t"])]),t("div",F,[i(o,{t:"TOTP verified!"})])])]),e[4]||(e[4]=t("hr",null,null,-1)),t("div",R,[this.verified?(n(),d(l,{key:1,to:"/",class:"btn btn-dark btn-lg d-flex btn-brand shadow align-items-center flex-grow-1 rounded-3"},{default:r(()=>[i(o,{t:"Complete"}),e[3]||(e[3]=t("i",{class:"bi bi-chevron-right ms-auto"},null,-1))]),_:1})):(n(),d(l,{key:0,to:"/",class:"btn bg-secondary-subtle text-secondary-emphasis rounded-3 flex-grow-1 btn-lg border-1 border-secondary-subtle shadow d-flex"},{default:r(()=>[i(o,{t:"I don't need MFA"}),e[2]||(e[2]=t("i",{class:"bi bi-chevron-right ms-auto"},null,-1))]),_:1}))])])])],8,k)}const z=h(T,[["render",G]]);export{z as default};
|
@ -1 +1 @@
|
|||||||
import{_ as h,W as g,g as b,c as o,b as t,d as n,m as y,y as f,C as x,w as r,j as c,a as l,f as v,F as u,h as m,n as k,s as T,t as i,k as _}from"./index-C00IVglr.js";import{O as A}from"./osmap-D5IAznDz.js";import{L as w}from"./localeText-BUK20hPB.js";const R={name:"traceroute",components:{LocaleText:w,OSMap:A},data(){return{tracing:!1,ipAddress:void 0,tracerouteResult:void 0}},setup(){return{store:g()}},methods:{execute(){this.ipAddress&&(this.tracing=!0,this.tracerouteResult=void 0,b("/api/traceroute/execute",{ipAddress:this.ipAddress},d=>{d.status?this.tracerouteResult=d.data:this.store.newMessage("Server",d.message,"danger"),this.tracing=!1}))}}},M={class:"mt-md-5 mt-3 text-body"},S={class:"container-md"},$={class:"mb-3 text-body"},C={class:"d-flex gap-2 mb-3 flex-column"},L={class:"flex-grow-1"},P={class:"mb-1 text-muted",for:"ipAddress"},O=["disabled"],V=["disabled"],B={key:0,class:"d-block"},I={key:1,class:"d-block"},N={class:"position-relative"},z={key:"pingPlaceholder"},D={key:1},E={key:"table",class:"w-100 mt-2"},F={class:"table table-sm rounded-3 w-100"},G={scope:"col"},H={scope:"col"},K={scope:"col"},W={scope:"col"},j={scope:"col"},U={scope:"col"},q={key:0},J={key:1};function Q(d,s,X,Y,Z,tt){const a=_("LocaleText"),p=_("OSMap");return l(),o("div",M,[t("div",S,[t("h3",$,[n(a,{t:"Traceroute"})]),t("div",C,[t("div",L,[t("label",P,[t("small",null,[n(a,{t:"Enter IP Address / Hostname"})])]),y(t("input",{disabled:this.tracing,id:"ipAddress",class:"form-control rounded-3","onUpdate:modelValue":s[0]||(s[0]=e=>this.ipAddress=e),onKeyup:s[1]||(s[1]=x(e=>this.execute(),["enter"])),type:"text"},null,40,O),[[f,this.ipAddress]])]),t("button",{class:"btn btn-primary rounded-3 position-relative flex-grow-1",disabled:this.tracing||!this.ipAddress,onClick:s[2]||(s[2]=e=>this.execute())},[n(c,{name:"slide"},{default:r(()=>[this.tracing?(l(),o("span",I,s[4]||(s[4]=[t("span",{class:"spinner-border spinner-border-sm","aria-hidden":"true"},null,-1),t("span",{class:"visually-hidden",role:"status"},"Loading...",-1)]))):(l(),o("span",B,s[3]||(s[3]=[t("i",{class:"bi bi-person-walking me-2"},null,-1),v("Trace! ")])))]),_:1})],8,V)]),t("div",N,[n(c,{name:"ping"},{default:r(()=>[this.tracerouteResult?(l(),o("div",D,[n(p,{d:this.tracerouteResult,type:"traceroute"},null,8,["d"]),t("div",E,[t("table",F,[t("thead",null,[t("tr",null,[t("th",G,[n(a,{t:"Hop"})]),t("th",H,[n(a,{t:"IP Address"})]),t("th",K,[n(a,{t:"Average RTT (ms)"})]),t("th",W,[n(a,{t:"Min RTT (ms)"})]),t("th",j,[n(a,{t:"Max RTT (ms)"})]),t("th",U,[n(a,{t:"Geolocation"})])])]),t("tbody",null,[(l(!0),o(u,null,m(this.tracerouteResult,(e,et)=>(l(),o("tr",null,[t("td",null,[t("small",null,i(e.hop),1)]),t("td",null,[t("small",null,[t("samp",null,i(e.ip),1)])]),t("td",null,[t("small",null,[t("samp",null,i(e.avg_rtt),1)])]),t("td",null,[t("small",null,[t("samp",null,i(e.min_rtt),1)])]),t("td",null,[t("small",null,[t("samp",null,i(e.max_rtt),1)])]),t("td",null,[e.geo.city&&e.geo.country?(l(),o("span",q,[t("small",null,i(e.geo.city)+", "+i(e.geo.country),1)])):(l(),o("span",J," - "))])]))),256))])])])])):(l(),o("div",z,[s[5]||(s[5]=t("div",{class:"pingPlaceholder bg-body-secondary rounded-3 mb-3",style:{height:"300px !important"}},null,-1)),(l(),o(u,null,m(5,e=>t("div",{class:k(["pingPlaceholder bg-body-secondary rounded-3 mb-3",{"animate__animated animate__flash animate__slower animate__infinite":this.tracing}]),style:T({"animation-delay":`${e*.05}s`})},null,6)),64))]))]),_:1})])])])}const lt=h(R,[["render",Q],["__scopeId","data-v-3e75b4d4"]]);export{lt as default};
|
import{_ as h,W as g,g as b,c as o,b as t,d as n,m as y,y as f,C as x,w as r,j as c,a as l,f as v,F as u,h as m,n as k,s as T,t as i,k as _}from"./index-DZliHkQD.js";import{O as A}from"./osmap-CmjRjQ0N.js";import{L as w}from"./localeText-DG9SnJT8.js";const R={name:"traceroute",components:{LocaleText:w,OSMap:A},data(){return{tracing:!1,ipAddress:void 0,tracerouteResult:void 0}},setup(){return{store:g()}},methods:{execute(){this.ipAddress&&(this.tracing=!0,this.tracerouteResult=void 0,b("/api/traceroute/execute",{ipAddress:this.ipAddress},d=>{d.status?this.tracerouteResult=d.data:this.store.newMessage("Server",d.message,"danger"),this.tracing=!1}))}}},M={class:"mt-md-5 mt-3 text-body"},S={class:"container-md"},$={class:"mb-3 text-body"},C={class:"d-flex gap-2 mb-3 flex-column"},L={class:"flex-grow-1"},P={class:"mb-1 text-muted",for:"ipAddress"},O=["disabled"],V=["disabled"],B={key:0,class:"d-block"},I={key:1,class:"d-block"},N={class:"position-relative"},z={key:"pingPlaceholder"},D={key:1},E={key:"table",class:"w-100 mt-2"},F={class:"table table-sm rounded-3 w-100"},G={scope:"col"},H={scope:"col"},K={scope:"col"},W={scope:"col"},j={scope:"col"},U={scope:"col"},q={key:0},J={key:1};function Q(d,s,X,Y,Z,tt){const a=_("LocaleText"),p=_("OSMap");return l(),o("div",M,[t("div",S,[t("h3",$,[n(a,{t:"Traceroute"})]),t("div",C,[t("div",L,[t("label",P,[t("small",null,[n(a,{t:"Enter IP Address / Hostname"})])]),y(t("input",{disabled:this.tracing,id:"ipAddress",class:"form-control rounded-3","onUpdate:modelValue":s[0]||(s[0]=e=>this.ipAddress=e),onKeyup:s[1]||(s[1]=x(e=>this.execute(),["enter"])),type:"text"},null,40,O),[[f,this.ipAddress]])]),t("button",{class:"btn btn-primary rounded-3 position-relative flex-grow-1",disabled:this.tracing||!this.ipAddress,onClick:s[2]||(s[2]=e=>this.execute())},[n(c,{name:"slide"},{default:r(()=>[this.tracing?(l(),o("span",I,s[4]||(s[4]=[t("span",{class:"spinner-border spinner-border-sm","aria-hidden":"true"},null,-1),t("span",{class:"visually-hidden",role:"status"},"Loading...",-1)]))):(l(),o("span",B,s[3]||(s[3]=[t("i",{class:"bi bi-person-walking me-2"},null,-1),v("Trace! ")])))]),_:1})],8,V)]),t("div",N,[n(c,{name:"ping"},{default:r(()=>[this.tracerouteResult?(l(),o("div",D,[n(p,{d:this.tracerouteResult,type:"traceroute"},null,8,["d"]),t("div",E,[t("table",F,[t("thead",null,[t("tr",null,[t("th",G,[n(a,{t:"Hop"})]),t("th",H,[n(a,{t:"IP Address"})]),t("th",K,[n(a,{t:"Average RTT (ms)"})]),t("th",W,[n(a,{t:"Min RTT (ms)"})]),t("th",j,[n(a,{t:"Max RTT (ms)"})]),t("th",U,[n(a,{t:"Geolocation"})])])]),t("tbody",null,[(l(!0),o(u,null,m(this.tracerouteResult,(e,et)=>(l(),o("tr",null,[t("td",null,[t("small",null,i(e.hop),1)]),t("td",null,[t("small",null,[t("samp",null,i(e.ip),1)])]),t("td",null,[t("small",null,[t("samp",null,i(e.avg_rtt),1)])]),t("td",null,[t("small",null,[t("samp",null,i(e.min_rtt),1)])]),t("td",null,[t("small",null,[t("samp",null,i(e.max_rtt),1)])]),t("td",null,[e.geo.city&&e.geo.country?(l(),o("span",q,[t("small",null,i(e.geo.city)+", "+i(e.geo.country),1)])):(l(),o("span",J," - "))])]))),256))])])])])):(l(),o("div",z,[s[5]||(s[5]=t("div",{class:"pingPlaceholder bg-body-secondary rounded-3 mb-3",style:{height:"300px !important"}},null,-1)),(l(),o(u,null,m(5,e=>t("div",{class:k(["pingPlaceholder bg-body-secondary rounded-3 mb-3",{"animate__animated animate__flash animate__slower animate__infinite":this.tracing}]),style:T({"animation-delay":`${e*.05}s`})},null,6)),64))]))]),_:1})])])])}const lt=h(R,[["render",Q],["__scopeId","data-v-3e75b4d4"]]);export{lt as default};
|
File diff suppressed because one or more lines are too long
2
src/static/app/dist/index.html
vendored
2
src/static/app/dist/index.html
vendored
@ -10,7 +10,7 @@
|
|||||||
<link rel="icon" href="/static/app/dist/img/Logo-2-512x512.png">
|
<link rel="icon" href="/static/app/dist/img/Logo-2-512x512.png">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>WGDashboard</title>
|
<title>WGDashboard</title>
|
||||||
<script type="module" crossorigin src="/static/app/dist/assets/index-C00IVglr.js"></script>
|
<script type="module" crossorigin src="/static/app/dist/assets/index-DZliHkQD.js"></script>
|
||||||
<link rel="stylesheet" crossorigin href="/static/app/dist/assets/index-DFl-XeJT.css">
|
<link rel="stylesheet" crossorigin href="/static/app/dist/assets/index-DFl-XeJT.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "app",
|
"name": "app",
|
||||||
"version": "4.2.2",
|
"version": "4.2.3",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -36,7 +36,7 @@ const resetForm = () => {
|
|||||||
dataChanged.value = false;
|
dataChanged.value = false;
|
||||||
Object.assign(data, JSON.parse(JSON.stringify(props.configurationInfo)))
|
Object.assign(data, JSON.parse(JSON.stringify(props.configurationInfo)))
|
||||||
}
|
}
|
||||||
const emit = defineEmits(["changed", "close", "refresh"])
|
const emit = defineEmits(["changed", "close", "refresh", "dataChanged"])
|
||||||
const saveForm = () => {
|
const saveForm = () => {
|
||||||
saving.value = true
|
saving.value = true
|
||||||
fetchPost("/api/updateWireguardConfiguration", data, (res) => {
|
fetchPost("/api/updateWireguardConfiguration", data, (res) => {
|
||||||
@ -63,10 +63,12 @@ const editRawConfigurationFileModal = ref(false)
|
|||||||
const backupRestoreModal = ref(false)
|
const backupRestoreModal = ref(false)
|
||||||
const deleteConfigurationModal = ref(false)
|
const deleteConfigurationModal = ref(false)
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll" ref="editConfigurationContainer">
|
<div class="peerSettingContainer w-100 h-100 position-absolute top-0 start-0" ref="editConfigurationContainer">
|
||||||
|
<div class="w-100 h-100 overflow-y-scroll">
|
||||||
<TransitionGroup name="zoom">
|
<TransitionGroup name="zoom">
|
||||||
<EditRawConfigurationFile
|
<EditRawConfigurationFile
|
||||||
name="EditRawConfigurationFile"
|
name="EditRawConfigurationFile"
|
||||||
@ -171,7 +173,19 @@ const deleteConfigurationModal = ref(false)
|
|||||||
id="configuration_listen_port">
|
id="configuration_listen_port">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div v-for="key in ['PreUp', 'PreDown', 'PostUp', 'PostDown']">
|
<div class="accordion mt-2" id="editConfigurationOptionalAccordion">
|
||||||
|
<div class="accordion-item">
|
||||||
|
<h2 class="accordion-header">
|
||||||
|
<button class="accordion-button collapsed px-3 py-2" type="button" data-bs-toggle="collapse" data-bs-target="#editOptionalAccordionCollapse">
|
||||||
|
<small class="text-muted">
|
||||||
|
<LocaleText t="Optional Settings"></LocaleText>
|
||||||
|
</small>
|
||||||
|
</button>
|
||||||
|
</h2>
|
||||||
|
<div id="editOptionalAccordionCollapse"
|
||||||
|
class="accordion-collapse collapse" data-bs-parent="#editConfigurationOptionalAccordion">
|
||||||
|
<div class="accordion-body d-flex flex-column gap-3">
|
||||||
|
<div v-for="key in ['Table', 'PreUp', 'PreDown', 'PostUp', 'PostDown']">
|
||||||
<label :for="'configuration_' + key" class="form-label">
|
<label :for="'configuration_' + key" class="form-label">
|
||||||
<small class="text-muted">
|
<small class="text-muted">
|
||||||
<LocaleText :t="key"></LocaleText>
|
<LocaleText :t="key"></LocaleText>
|
||||||
@ -194,6 +208,13 @@ const deleteConfigurationModal = ref(false)
|
|||||||
v-model="data[key]"
|
v-model="data[key]"
|
||||||
:id="'configuration_' + key">
|
:id="'configuration_' + key">
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="d-flex align-items-center gap-2 mt-4">
|
<div class="d-flex align-items-center gap-2 mt-4">
|
||||||
<button class="btn bg-secondary-subtle border-secondary-subtle text-secondary-emphasis rounded-3 shadow ms-auto"
|
<button class="btn bg-secondary-subtle border-secondary-subtle text-secondary-emphasis rounded-3 shadow ms-auto"
|
||||||
@click="resetForm()"
|
@click="resetForm()"
|
||||||
@ -242,6 +263,7 @@ const deleteConfigurationModal = ref(false)
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
@ -24,7 +24,29 @@ export default {
|
|||||||
}, (res) => {
|
}, (res) => {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
if (res.status){
|
if (res.status){
|
||||||
QRCode.toCanvas(document.querySelector("#qrcode"), res.data.file, (error) => {
|
let data = ""
|
||||||
|
if (this.selectedPeer.configuration.Protocol === "awg"){
|
||||||
|
let awgQRCodeObject = {
|
||||||
|
containers: [
|
||||||
|
{
|
||||||
|
awg: {
|
||||||
|
isThirdPartyConfig: true,
|
||||||
|
last_config: res.data.file,
|
||||||
|
port: this.selectedPeer.configuration.ListenPort,
|
||||||
|
transport_proto: "udp"
|
||||||
|
},
|
||||||
|
container: "amnezia-awg",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
defaultContainer: "amnezia-awg",
|
||||||
|
description: this.selectedPeer.name,
|
||||||
|
hostName: this.dashboardStore.Configuration.Peers.remote_endpoint
|
||||||
|
}
|
||||||
|
data = btoa(JSON.stringify(awgQRCodeObject))
|
||||||
|
}else{
|
||||||
|
data = res.data.file
|
||||||
|
}
|
||||||
|
QRCode.toCanvas(document.querySelector("#qrcode"), data, (error) => {
|
||||||
if (error) console.error(error)
|
if (error) console.error(error)
|
||||||
})
|
})
|
||||||
}else{
|
}else{
|
||||||
@ -47,8 +69,10 @@ export default {
|
|||||||
<button type="button" class="btn-close ms-auto" @click="this.$emit('close')"></button>
|
<button type="button" class="btn-close ms-auto" @click="this.$emit('close')"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body p-4">
|
<div class="card-body p-4">
|
||||||
<div style="width: 292px; height: 292px;" class="d-flex">
|
<div class="d-flex">
|
||||||
<canvas id="qrcode" class="rounded-3 shadow animate__animated animate__fadeIn animate__faster" :class="{'d-none': loading}"></canvas>
|
<canvas id="qrcode" class="rounded-3 shadow animate__animated animate__fadeIn animate__faster"
|
||||||
|
|
||||||
|
:class="{'d-none': loading}"></canvas>
|
||||||
<div class="spinner-border m-auto" role="status" v-if="loading">
|
<div class="spinner-border m-auto" role="status" v-if="loading">
|
||||||
<span class="visually-hidden">Loading...</span>
|
<span class="visually-hidden">Loading...</span>
|
||||||
</div>
|
</div>
|
||||||
@ -61,4 +85,11 @@ export default {
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
@media screen and (max-width: 768px) {
|
||||||
|
#qrcode{
|
||||||
|
width: 100% !important;
|
||||||
|
height: auto !important;
|
||||||
|
aspect-ratio: 1/1;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
@ -75,7 +75,7 @@ const store = DashboardConfigurationStore()
|
|||||||
width: 450px;
|
width: 450px;
|
||||||
box-shadow: 0px 10px 30px rgba(0, 0, 0, 0.3);
|
box-shadow: 0px 10px 30px rgba(0, 0, 0, 0.3);
|
||||||
backdrop-filter: blur(8px);
|
backdrop-filter: blur(8px);
|
||||||
background: linear-gradient(var(--degree), #009dff52 var(--distance2), #ff4a0052 100%);
|
background: linear-gradient(var(--degree), #009dff52 var(--distance2), #F9464752 100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.agentContainer.enabled{
|
.agentContainer.enabled{
|
||||||
|
@ -27,6 +27,7 @@ const squareHeight = computed(() => {
|
|||||||
<div
|
<div
|
||||||
v-if="show"
|
v-if="show"
|
||||||
style="white-space: nowrap;"
|
style="white-space: nowrap;"
|
||||||
|
:style="{'top': squareHeight}"
|
||||||
class="floatingLabel z-3 border position-absolute d-block p-1 px-2
|
class="floatingLabel z-3 border position-absolute d-block p-1 px-2
|
||||||
bg-body text-body rounded-3 border shadow d-flex"
|
bg-body text-body rounded-3 border shadow d-flex"
|
||||||
:class="[align ? 'end-0':'start-0']"
|
:class="[align ? 'end-0':'start-0']"
|
||||||
@ -48,7 +49,4 @@ const squareHeight = computed(() => {
|
|||||||
transition: background-color 0.5s cubic-bezier(0.42, 0, 0.22, 1.0);
|
transition: background-color 0.5s cubic-bezier(0.42, 0, 0.22, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
.floatingLabel{
|
|
||||||
top: 40px;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
@ -23,6 +23,7 @@ const squareHeight = computed(() => {
|
|||||||
<div
|
<div
|
||||||
v-if="show"
|
v-if="show"
|
||||||
style="white-space: nowrap;"
|
style="white-space: nowrap;"
|
||||||
|
:style="{'top': squareHeight}"
|
||||||
class="floatingLabel z-3 border position-absolute d-block p-1 px-2
|
class="floatingLabel z-3 border position-absolute d-block p-1 px-2
|
||||||
bg-body text-body rounded-3 border shadow d-flex"
|
bg-body text-body rounded-3 border shadow d-flex"
|
||||||
:class="[align ? 'end-0':'start-0']"
|
:class="[align ? 'end-0':'start-0']"
|
||||||
@ -43,8 +44,4 @@ const squareHeight = computed(() => {
|
|||||||
height: v-bind(squareHeight);
|
height: v-bind(squareHeight);
|
||||||
transition: background-color 0.5s cubic-bezier(0.42, 0, 0.22, 1.0);
|
transition: background-color 0.5s cubic-bezier(0.42, 0, 0.22, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
.floatingLabel{
|
|
||||||
top: v-bind(squareHeight);
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
@ -35,39 +35,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Sidebar
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*.sidebar {*/
|
|
||||||
/* position: fixed;*/
|
|
||||||
/* top: 0;*/
|
|
||||||
/* bottom: 0;*/
|
|
||||||
/* left: 0;*/
|
|
||||||
/* z-index: 100;*/
|
|
||||||
/* !* Behind the navbar *!*/
|
|
||||||
/* padding: 48px 0 0;*/
|
|
||||||
/* !* Height of navbar *!*/
|
|
||||||
/* box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1);*/
|
|
||||||
/*}*/
|
|
||||||
|
|
||||||
/*.sidebar-sticky {*/
|
|
||||||
/* position: relative;*/
|
|
||||||
/* top: 0;*/
|
|
||||||
/* height: calc(100vh - 48px);*/
|
|
||||||
/* padding-top: .5rem;*/
|
|
||||||
/* overflow-x: hidden;*/
|
|
||||||
/* overflow-y: auto;*/
|
|
||||||
/* !* Scrollable contents if viewport is shorter than content. *!*/
|
|
||||||
/*}*/
|
|
||||||
|
|
||||||
/*@supports ((position: -webkit-sticky) or (position: sticky)) {*/
|
|
||||||
/* .sidebar-sticky {*/
|
|
||||||
/* position: -webkit-sticky;*/
|
|
||||||
/* position: sticky;*/
|
|
||||||
/* }*/
|
|
||||||
/*}*/
|
|
||||||
|
|
||||||
@property --brandColor1 {
|
@property --brandColor1 {
|
||||||
syntax: '<color>';
|
syntax: '<color>';
|
||||||
initial-value: #009dff;
|
initial-value: #009dff;
|
||||||
@ -1273,7 +1240,6 @@ samp{
|
|||||||
}
|
}
|
||||||
|
|
||||||
.wireguardBg{
|
.wireguardBg{
|
||||||
|
|
||||||
background: rgb(125,32,32);
|
background: rgb(125,32,32);
|
||||||
background: linear-gradient(90deg, rgba(125,32,32,1) 0%, rgba(255,56,56,1) 100%);
|
background: linear-gradient(90deg, rgba(125,32,32,1) 0%, rgba(255,56,56,1) 100%);
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@ export default {
|
|||||||
PreDown: "",
|
PreDown: "",
|
||||||
PostUp: "",
|
PostUp: "",
|
||||||
PostDown: "",
|
PostDown: "",
|
||||||
|
Table: "",
|
||||||
Protocol: "wg",
|
Protocol: "wg",
|
||||||
Jc: 5,
|
Jc: 5,
|
||||||
Jmin: 49,
|
Jmin: 49,
|
||||||
@ -342,6 +343,7 @@ export default {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
<div class="accordion" id="newConfigurationOptionalAccordion">
|
<div class="accordion" id="newConfigurationOptionalAccordion">
|
||||||
<div class="accordion-item">
|
<div class="accordion-item">
|
||||||
@ -353,7 +355,7 @@ export default {
|
|||||||
<div id="newConfigurationOptionalAccordionCollapse"
|
<div id="newConfigurationOptionalAccordionCollapse"
|
||||||
class="accordion-collapse collapse" data-bs-parent="#newConfigurationOptionalAccordion">
|
class="accordion-collapse collapse" data-bs-parent="#newConfigurationOptionalAccordion">
|
||||||
<div class="accordion-body d-flex flex-column gap-3">
|
<div class="accordion-body d-flex flex-column gap-3">
|
||||||
<div class="card rounded-3" v-for="key in ['PreUp', 'PreDown', 'PostUp', 'PostDown']">
|
<div class="card rounded-3" v-for="key in ['Table', 'PreUp', 'PreDown', 'PostUp', 'PostDown']">
|
||||||
<div class="card-header">{{ key }}</div>
|
<div class="card-header">{{ key }}</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<input type="text"
|
<input type="text"
|
||||||
|
@ -14,6 +14,11 @@
|
|||||||
"lang_name": "Belarusian",
|
"lang_name": "Belarusian",
|
||||||
"lang_name_localized": "Беларуская"
|
"lang_name_localized": "Беларуская"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"lang_id": "ca",
|
||||||
|
"lang_name": "Catalan",
|
||||||
|
"lang_name_localized": "Català"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"lang_id": "zh-hk",
|
"lang_id": "zh-hk",
|
||||||
"lang_name": "Chinese (Traditional)",
|
"lang_name": "Chinese (Traditional)",
|
||||||
|
@ -278,7 +278,6 @@
|
|||||||
"Create Backup": "إنشاء نسخة احتياطية",
|
"Create Backup": "إنشاء نسخة احتياطية",
|
||||||
"No backup yet, click the button above to create backup\\.": "لا توجد نسخة احتياطية حتى الآن، انقر على الزر أعلاه لإنشاء نسخة احتياطية",
|
"No backup yet, click the button above to create backup\\.": "لا توجد نسخة احتياطية حتى الآن، انقر على الزر أعلاه لإنشاء نسخة احتياطية",
|
||||||
"Are you sure to delete this backup\\?": "هل أنت متأكد من حذف هذه النسخة الاحتياطية؟",
|
"Are you sure to delete this backup\\?": "هل أنت متأكد من حذف هذه النسخة الاحتياطية؟",
|
||||||
"Are you sure to restore this backup?\\": "هل أنت متأكد من استعادة هذه النسخة الاحتياطية؟",
|
|
||||||
"Backup Date": "تاريخ النسخة الاحتياطية",
|
"Backup Date": "تاريخ النسخة الاحتياطية",
|
||||||
"File": "الملف",
|
"File": "الملف",
|
||||||
"Are you sure to delete this configuration\\?": "هل أنت متأكد من حذف هذا الإعداد؟",
|
"Are you sure to delete this configuration\\?": "هل أنت متأكد من حذف هذا الإعداد؟",
|
||||||
@ -308,5 +307,63 @@
|
|||||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "تم حذف $1 قرين(قرين)",
|
"Deleted ([0-9]{1,}) peer\\(s\\)": "تم حذف $1 قرين(قرين)",
|
||||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "تم حذف $1 قرين(قرين) بنجاح. فشل في حذف $2 قرين(قرين)",
|
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "تم حذف $1 قرين(قرين) بنجاح. فشل في حذف $2 قرين(قرين)",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "تم تقييد $1 قرين(قرين).",
|
"Restricted ([0-9]{1,}) peer\\(s\\)": "تم تقييد $1 قرين(قرين).",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "تم تقييد $1 قرين(قرين) بنجاح. فشل في تقييد $2 قرين(قرين)."
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "تم تقييد $1 قرين(قرين) بنجاح. فشل في تقييد $2 قرين(قرين).",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -278,7 +278,6 @@
|
|||||||
"Create Backup": "Стварыць рэзервовую копію",
|
"Create Backup": "Стварыць рэзервовую копію",
|
||||||
"No backup yet, click the button above to create backup\\.": "Рэзервовых копій яшчэ няма, націсніце кнопку вышэй, каб стварыць рэзервовую копію.",
|
"No backup yet, click the button above to create backup\\.": "Рэзервовых копій яшчэ няма, націсніце кнопку вышэй, каб стварыць рэзервовую копію.",
|
||||||
"Are you sure to delete this backup\\?": "Вы ўпэўнены, што хочаце выдаліць гэтую рэзервовую копію?",
|
"Are you sure to delete this backup\\?": "Вы ўпэўнены, што хочаце выдаліць гэтую рэзервовую копію?",
|
||||||
"Are you sure to restore this backup?\\": "Вы ўпэўнены, што хочаце аднавіць гэтую рэзервовую копію?",
|
|
||||||
"Backup Date": "Дата рэзервовай копіі",
|
"Backup Date": "Дата рэзервовай копіі",
|
||||||
"File": "Файл",
|
"File": "Файл",
|
||||||
"Are you sure to delete this configuration\\?": "Вы ўпэўнены, што хочаце выдаліць гэтую канфігурацыю?",
|
"Are you sure to delete this configuration\\?": "Вы ўпэўнены, што хочаце выдаліць гэтую канфігурацыю?",
|
||||||
@ -308,5 +307,63 @@
|
|||||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "Выдалена $1 кліент(аў)",
|
"Deleted ([0-9]{1,}) peer\\(s\\)": "Выдалена $1 кліент(аў)",
|
||||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Выдалена $1 кліент(аў) паспяхова. Не ўдалося выдаліць $2 кліент(аў)",
|
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Выдалена $1 кліент(аў) паспяхова. Не ўдалося выдаліць $2 кліент(аў)",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "Абмежавана $1 кліент(аў)",
|
"Restricted ([0-9]{1,}) peer\\(s\\)": "Абмежавана $1 кліент(аў)",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Абмежавана $1 кліент(аў) паспяхова. Не ўдалося абмежаваць $2 кліент(аў)"
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Абмежавана $1 кліент(аў) паспяхова. Не ўдалося абмежаваць $2 кліент(аў)",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
369
src/static/locale/ca.json
Normal file
369
src/static/locale/ca.json
Normal file
@ -0,0 +1,369 @@
|
|||||||
|
{
|
||||||
|
"Welcome to": "Benvingut",
|
||||||
|
"Username": "Usuari",
|
||||||
|
"Password": "Contrasenya",
|
||||||
|
"OTP from your authenticator": "OTP del seu autenticador",
|
||||||
|
"Sign In": "Iniciar sessió",
|
||||||
|
"Signing In\\.\\.\\.": "Iniciant sessió\\.\\.\\.",
|
||||||
|
"Access Remote Server": "Accedir al servidor remot",
|
||||||
|
"Server": "Servidor",
|
||||||
|
"Click": "Clic",
|
||||||
|
"Pinging...": "S'està fent ping...",
|
||||||
|
"to add your server": "per afegir el vostre servidor",
|
||||||
|
"Server List": "Llista de servidors:",
|
||||||
|
"Sorry, your username or password is incorrect.": "Ho sentim, el seu nom d'usuari o contrasenya són incorrectes",
|
||||||
|
"Home": "Inici",
|
||||||
|
"Settings": "Paràmetres",
|
||||||
|
"Tools": "Eines",
|
||||||
|
"Sign Out": "Tancar sessió",
|
||||||
|
"Checking for update...": "Comprovant actualitzacions...",
|
||||||
|
"You're on the latest version": "Està a l'última versió",
|
||||||
|
"WireGuard Configurations": "Configuració de WireGuard",
|
||||||
|
"You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Encara no teniu cap configuració de WireGuard. Si us plau, comproveu la carpeta de configuració o canvieu-la a Configuració. Per defecte, la carpeta és /etc/wireguard.",
|
||||||
|
"Configuration": "Configuració",
|
||||||
|
"Configurations": "Configuracions",
|
||||||
|
"Peers Default Settings": "Paràmetres per defecte de Peers",
|
||||||
|
"Dashboard Theme": "Tema del tauler",
|
||||||
|
"Light": "Clar",
|
||||||
|
"Dark": "Fosc",
|
||||||
|
"This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Això es canviarà globalment i s'aplicarà a tots els codis QR i fitxers de configuració dels peer.",
|
||||||
|
"WireGuard Configurations Settings": "Paràmetres de Configuració del WireGuard",
|
||||||
|
"Configurations Directory": "Carpeta de configuracions",
|
||||||
|
"Remember to remove / at the end of your path. e.g /etc/wireguard": "Recordi eliminar / al final de la vostra ruta. p. ex. /etc/wireguard",
|
||||||
|
"WGDashboard Account Settings": "Paràmetres el Compte WGDashboard",
|
||||||
|
"Current Password": "Contrasenya Actual",
|
||||||
|
"New Password": "Nova Contrasenya",
|
||||||
|
"Repeat New Password": "Repeteixi la Nova Contrasenya",
|
||||||
|
"Update Password": "Actualitzar Contrasenya",
|
||||||
|
"Multi-Factor Authentication \\(MFA\\)": "Autenticació Multifactor \\(MFA\\)",
|
||||||
|
"Reset": "Restablir",
|
||||||
|
"Setup": "Configuració",
|
||||||
|
"API Keys": "Claus API",
|
||||||
|
"API Key": "Clau API",
|
||||||
|
"Key": "Clau",
|
||||||
|
"Enabled": "Habilitat",
|
||||||
|
"Disabled": "Deshabilitat",
|
||||||
|
"No WGDashboard API Key": "No hi ha clau API de WGDashboard",
|
||||||
|
"Expire At": "Caduca al",
|
||||||
|
"Are you sure to delete this API key\\?": "Està segur que vol eliminar aquesta clau API\\?",
|
||||||
|
"Create API Key": "Crear clau d'API",
|
||||||
|
"When should this API Key expire\\?": "Quan hauria de caducar aquesta clau API\\?",
|
||||||
|
"Never Expire": "Mai Expira",
|
||||||
|
"Don't think that's a good idea": "No crec que sigui una bona idea",
|
||||||
|
"Creating\\.\\.\\.": "Creant\\.\\.\\.",
|
||||||
|
"Create": "Crear",
|
||||||
|
"Status": "Estatus",
|
||||||
|
"On": "Iniciar",
|
||||||
|
"Off": "Parar",
|
||||||
|
"Turning On\\.\\.\\.": "S'està encenent\\.\\.\\.",
|
||||||
|
"Turning Off\\.\\.\\.": "S'estat apagant\\.\\.\\.",
|
||||||
|
"Address": "Adreça",
|
||||||
|
"Listen Port": "Port d'escolta",
|
||||||
|
"Public Key": "Clau Pública",
|
||||||
|
"Connected Peers": "Peers Connectats",
|
||||||
|
"Total Usage": "Total usat",
|
||||||
|
"Total Received": "Total Rebut",
|
||||||
|
"Total Sent": "Total Enviat",
|
||||||
|
"Peers Data Usage": "Ús de dades dels Peers",
|
||||||
|
"Real Time Received Data Usage": "Ús de Dades Rebudes en Temps Real",
|
||||||
|
"Real Time Sent Data Usage": "Úsde Dades Eviades en Temps Real",
|
||||||
|
"Peer": "Peer",
|
||||||
|
"Peers": "Peers",
|
||||||
|
"Peer Settings": "Paràmetres del Peer",
|
||||||
|
"Download All": "Descarregar Tot",
|
||||||
|
"Search": "Cercar",
|
||||||
|
"Search Peers\\.\\.\\.": "Cercar Peers\\.\\.\\.",
|
||||||
|
"Display": "Mostrar",
|
||||||
|
"Sort By": "Ordenar Per",
|
||||||
|
"Refresh Interval": "Interval de Refresc",
|
||||||
|
"Name": "Nom",
|
||||||
|
"Allowed IPs": "IPs Permeses",
|
||||||
|
"Restricted": "Restringit",
|
||||||
|
"(.*) Seconds": "(.*) Segons",
|
||||||
|
"(.*) Minutes": "(.*) Minuts",
|
||||||
|
"Configuration Settings": "Paràmetres de Configuracio",
|
||||||
|
"Peer Jobs": "Feines Peer",
|
||||||
|
"Active Jobs": "Feines Actives",
|
||||||
|
"All Active Jobs": "Totes les Feines Actives",
|
||||||
|
"Logs": "Registres",
|
||||||
|
"Private Key": "Clau Privada",
|
||||||
|
"\\(Required for QR Code and Download\\)": "\\(Obligatori pel Codi QR i la Descàrrega\\)",
|
||||||
|
"\\(Required\\)": "\\(Obligatori\\)",
|
||||||
|
"Endpoint Allowed IPs": "IPs Permeses del Punt Final",
|
||||||
|
"DNS": "DNS",
|
||||||
|
"Optional Settings": "Paràmetres Opcionals",
|
||||||
|
"Pre-Shared Key": "Clau Precompartida",
|
||||||
|
"MTU": "MTU",
|
||||||
|
"Persistent Keepalive": "Keepalive Persistent",
|
||||||
|
"Reset Data Usage": "Restablir l'Ús de Dades",
|
||||||
|
"Total": "Total",
|
||||||
|
"Sent": "Enviat",
|
||||||
|
"Received": "Rebut",
|
||||||
|
"Revert": "Desfer",
|
||||||
|
"Save Peer": "Desar Peer",
|
||||||
|
"QR Code": "Codi QR",
|
||||||
|
"Schedule Jobs": "Feines Programades",
|
||||||
|
"Job": "Feina",
|
||||||
|
"Job ID": "Feina ID",
|
||||||
|
"Unsaved Job": "Feina no desada",
|
||||||
|
"This peer does not have any job yet\\.": "Aquest peer encara no te cap feina\\.",
|
||||||
|
"if": "si",
|
||||||
|
"is": "és",
|
||||||
|
"then": "aleshores",
|
||||||
|
"larger than": "més llarg que",
|
||||||
|
"Date": "Data",
|
||||||
|
"Restrict Peer": "Restringir Peer",
|
||||||
|
"Delete Peer": "Eliminar Peer",
|
||||||
|
"Edit": "Editar",
|
||||||
|
"Delete": "Eliminar",
|
||||||
|
"Deleting...": "Eliminant...",
|
||||||
|
"Cancel": "Cancel·lar",
|
||||||
|
"Save": "Desar",
|
||||||
|
"No active job at the moment\\.": "No hi ha cap feina activa ara mateix\\.",
|
||||||
|
"Jobs Logs": "Registres de Feines",
|
||||||
|
"Updated at": "Actualitzat a",
|
||||||
|
"Refresh": "Refrescar",
|
||||||
|
"Filter": "Filtrar",
|
||||||
|
"Success": "Èxit",
|
||||||
|
"Failed": "Fallat",
|
||||||
|
"Log ID": "ID Registre",
|
||||||
|
"Message": "Missatge",
|
||||||
|
"Share Peer": "Compartir Peer",
|
||||||
|
"Currently the peer is not sharing": "Actualment el peer no s'està compartint",
|
||||||
|
"Sharing\\.\\.\\.": "Compartint\\.\\.\\.",
|
||||||
|
"Start Sharing": "Començar a Compartir",
|
||||||
|
"Stop Sharing\\.\\.\\.": "Parar de Compartir\\.\\.\\.",
|
||||||
|
"Stop Sharing": "Para de Compartir",
|
||||||
|
"Access Restricted": "Accés Restringit",
|
||||||
|
"Restrict Access": "Àrea Restringida",
|
||||||
|
"Restricting\\.\\.\\.": "Restringint\\.\\.\\.",
|
||||||
|
"Allow Access": "Permetre Accés",
|
||||||
|
"Allowing Access\\.\\.\\.": "Permetent Accés\\.\\.\\.",
|
||||||
|
"Download \\& QR Code is not available due to no private key set for this peer": "La descàrrega del codi QR \\& no està disponible perquè no s'ha establert cap clau privada per a aquest peer",
|
||||||
|
"Add Peers": "Afegir Peers",
|
||||||
|
"Bulk Add": "Afegir en Massa",
|
||||||
|
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "En afegir peers en massa, el nom de cada peer es generarà automàticament i la IP permesa s'assignarà a la següent IP disponible\\.",
|
||||||
|
"How many peers you want to add\\?": "Quants peers voleu afegir\\?",
|
||||||
|
"You can add up to (.*) peers": "Pot afegir fins a (.*) peers",
|
||||||
|
"Use your own Private and Public Key": "Utilitzi la seva pròpia Clau Privada i Pública",
|
||||||
|
"Enter IP Address/CIDR": "Introdueixi l'adreça IP/CIDR",
|
||||||
|
"IP Address/CIDR": "Adreça IP/CDIR",
|
||||||
|
"or": "o",
|
||||||
|
"Pick Available IP": "Seleccioni una IP disponible",
|
||||||
|
"No available IP containing": "No conté cap IP disponible",
|
||||||
|
"Add": "Afegir",
|
||||||
|
"Adding\\.\\.\\.": "Afegint\\.\\.\\.",
|
||||||
|
"Failed to check available update": "No s'ha pogut comprovar l'actualització disponible",
|
||||||
|
"Nice to meet you!": "Encantat de conèixer-lo",
|
||||||
|
"Please fill in the following fields to finish setup": "Si us plau, ompli els següets camps per finalitzar la configuració",
|
||||||
|
"Create an account": "Crear un compte",
|
||||||
|
"Enter an username you like": "Introdueixi un nom d'usuari que li agradi",
|
||||||
|
"Enter a password": "Introduir una contrasenya",
|
||||||
|
"\\(At least 8 characters and make sure is strong enough!\\)": "\\(Com a mínim 8 caràcters i asseguri's que és suficietment forta!\\)",
|
||||||
|
"Confirm password": "Confirmar contrasenya",
|
||||||
|
"Next": "Seguent",
|
||||||
|
"Saving\\.\\.\\.": "Desant\\.\\.\\.",
|
||||||
|
"1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1\\. Si us plau, escanegi el següent codi QR per generar TOTP amb l'autenticador que triï",
|
||||||
|
"Or you can click the link below:": "O bé pot clicar l'enllaç següent:",
|
||||||
|
"2\\. Enter the TOTP generated by your authenticator to verify": "2\\. Introdueixi el TOTP generat pel seu autentitador per feriricar",
|
||||||
|
"TOTP verified!": "TOTP verificat!",
|
||||||
|
"I don't need MFA": "No necessito MFA",
|
||||||
|
"Complete": "Completat",
|
||||||
|
"(v[0-9.]{1,}) is now available for update!": "(v[0-9.]{1,}) ara està disponible per actualitzar!",
|
||||||
|
"Current Version:": "Versió Actual",
|
||||||
|
"Oh no\\.\\.\\. This link is either expired or invalid\\.": "Oh no\\.\\.\\. Aquest enllaç ha caducat o no és vàlid",
|
||||||
|
"Scan QR Code with the WireGuard App to add peer": "Escanegi el codi QR amb l'aplicació WireGuard per afegir el peer",
|
||||||
|
"or click the button below to download the ": "o faci clic al botó següent per descarrer el ",
|
||||||
|
" file": " fitxer",
|
||||||
|
"FROM ": "DE",
|
||||||
|
"(.*) is on": "(.*) està encès",
|
||||||
|
"(.*) is off": "(.*) està parat",
|
||||||
|
"Allowed IPs is invalid": "Les IPs Permeses no són vàlides",
|
||||||
|
"Peer created successfully": "Pere creat satisfactoriament",
|
||||||
|
"Please fill in all required box": "Si us plau, empleni tots els espais necessaris",
|
||||||
|
"Please specify amount of peers you want to add": "Si us plau, especifiqueu la quantitat de persones del mateix nivell que vol afegir",
|
||||||
|
"No more available IP can assign": "No hi ha cap més IP disponible per assignar",
|
||||||
|
"The maximum number of peers can add is (.*)": "El màxim nombre de peers que es poden afegir és (.*)",
|
||||||
|
"Generating key pairs by bulk failed": "No s'ha pogut generar parells de claus de manera massiva",
|
||||||
|
"Failed to add peers in bulk": "No s'ha pogut afegir peers de manera massiva",
|
||||||
|
"This peer already exist": "Aquest peer ja existeix",
|
||||||
|
"This IP is not available: (.*)": "Aquesta IP no està disponible: (.*)",
|
||||||
|
"Configuration does not exist": "La configuració no existeix",
|
||||||
|
"Peer does not exist": "El Pere no existeix",
|
||||||
|
"Please provide a valid configuration name": "Si us plau, proporcioneu un nom de configuració vàlid",
|
||||||
|
"Peer saved": "Peter desat",
|
||||||
|
"Allowed IPs already taken by another peer": "Les IPs permeses ja estan ocupades per un altre peer",
|
||||||
|
"Endpoint Allowed IPs format is incorrect": "El format de les IPs permeses del punt final és incorrecte",
|
||||||
|
"DNS format is incorrect": "El DNS és incorrecte",
|
||||||
|
"MTU format is not correct": "El format MTU no és correcte",
|
||||||
|
"Persistent Keepalive format is not correct": "El format de Keepalive persistent no és correcte",
|
||||||
|
"Private key does not match with the public key": "La clau privada no coincideix amb la clau pública",
|
||||||
|
"Update peer failed when updating Pre-Shared Key": "L'actualització del peer ha fallat en actualitzar la clau precompartida",
|
||||||
|
"Update peer failed when updating Allowed IPs": "L'actualització del peer ha fallat en actualitzar les IP permeses",
|
||||||
|
"Update peer failed when saving the configuration": "L'actualització del peer ha fallat en desar la configuració",
|
||||||
|
"Peer data usage reset successfully": "L'ús de dades del peer s'ha reiniciat correctament",
|
||||||
|
"Peer download started": "La descàrrega del peer s'ha iniciat",
|
||||||
|
"Please specify one or more peers": "Si us plau, especifiqueu un o més peers",
|
||||||
|
"Share link failed to create. Reason: (.*)": "No s'ha pogut crear l'enllaç de compartició. Motiu: (.*)",
|
||||||
|
"Link expire date updated": "La data de caducitat de l'enllaç s'ha actualitzat",
|
||||||
|
"Link expire date failed to update. Reason: (.*)": "No s'ha pogut actualitzar la data de caducitat de l'enllaç. Mtoiu: (.*)",
|
||||||
|
"Peer job saved": "Feina del peer desat",
|
||||||
|
"Please specify job": "Si us plau, especifiqui la tasca",
|
||||||
|
"Please specify peer and configuration": "Si us plau, esficiqui el peer i la configuració",
|
||||||
|
"Peer job deleted": "Feina del peer suprimida",
|
||||||
|
"API Keys function is successfully enabled": "La funció de claus API s'ha activat correctament",
|
||||||
|
"API Keys function is successfully disabled": "La funció de claus API s'ha descativat correctament",
|
||||||
|
"API Keys function is failed to enable": "No s'ha pogut habilitar la funció de claus API",
|
||||||
|
"API Keys function is failed to disable": "No s'ha pogut desactivar la funció de claus API",
|
||||||
|
"WGDashboard API Keys function is disabled": "La funció de claus API de WGDashboard està desactivada",
|
||||||
|
"WireGuard configuration path saved": "Ruta de configuracio del WireGuard desada",
|
||||||
|
"API Key deleted": "Clau API eliminada",
|
||||||
|
"API Key created": "Clau API creada",
|
||||||
|
"Sign in session ended, please sign in again": "La sessió d'inici ha finalitzat. Si us plau, torni a iniciar",
|
||||||
|
"Please specify an IP Address (v4/v6)": "Si us plau, espqcifiqui una adreça IP (v4/v6)",
|
||||||
|
"Please provide ipAddress and count": "Si us plau, proporcioni l'adreça IP i el recompte",
|
||||||
|
"Please provide ipAddress": "Si us plau, proporcioni l'adreça IP",
|
||||||
|
"Dashboard Language": "Idioma del tauler de control",
|
||||||
|
"Dashboard language update failed": "Error d'actualització de l'idioma del tauler de control",
|
||||||
|
"Peer Remote Endpoint": "Punt Final Remot del Peer",
|
||||||
|
"New Configuration": "Nova Configuració",
|
||||||
|
"Configuration Name": "Nom de Configuració",
|
||||||
|
"Configuration name is invalid. Possible reasons:": "Nom de configuració no vàlid. Possibles raons:",
|
||||||
|
"Configuration name already exist\\.": "El nom de configuració ja existeix\\.",
|
||||||
|
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "El nom de configuració només pot contenir 15 caràcters en majúsucules/minúscules, números, subratllat, signe igual, signe més, punt i guionet\\.",
|
||||||
|
"Invalid Port": "Port Invàlid",
|
||||||
|
"Save Configuration": "Desar Configuració",
|
||||||
|
"IP Address/CIDR is invalid": "L'adreça IP/CIDR no és vàlida",
|
||||||
|
"IP Address": "Adreça IP",
|
||||||
|
"Enter IP Address / Hostname": "Introdueixi l'adreça IP / nom de l'amfitrió",
|
||||||
|
"IP Address / Hostname": "Adreça IP / Hostname",
|
||||||
|
"Dashboard IP Address \\& Listen Port": "L'adreça IP del tauler de control\\& Port d'Escolta",
|
||||||
|
"Count": "Comptar",
|
||||||
|
"Geolocation": "Geolocalització",
|
||||||
|
"Is Alive": "Estpa Viu",
|
||||||
|
"Average / Min / Max Round Trip Time": "Temps mitjà / Min / Max d'anada i tornada",
|
||||||
|
"Sent / Received / Lost Package": "Enviat / Rebut / Paquets Perduts",
|
||||||
|
"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Cal reiniciar manualment WGDashboard per aplicar els canvis a l'adreça IP i al Port d'Escolta",
|
||||||
|
"Restore Configuration": "Restaurar Configuració",
|
||||||
|
"Step (.*)": "Pas (.*)",
|
||||||
|
"Select a backup you want to restore": "Seleccioni una còpia de seguretat que vulgui restaurar",
|
||||||
|
"Click to change a backup": "Faci clic per canviar una còpia de seguretat",
|
||||||
|
"Selected Backup": "Còpia de seguretat seleccionada",
|
||||||
|
"You don't have any configuration to restore": "No té cap configuració per restaurar",
|
||||||
|
"Help": "Ajuda",
|
||||||
|
"Backup": "Còpia de Seguretat",
|
||||||
|
"([0-9].*) Backups?": "([0-9].*) Còpia de Seguretat?",
|
||||||
|
"Yes": "Sí",
|
||||||
|
"No": "No",
|
||||||
|
"Backup not selected": "Còpia de seguretat no seleccionada",
|
||||||
|
"Confirm \\& edit restore information": "Confirmar \\& editar restaurar informació?",
|
||||||
|
"(.*) Available IP Address": "(.*) Adreces IP Disponibles",
|
||||||
|
"Database File": "Fitxer de Base de Dades",
|
||||||
|
"Contain": "Conté",
|
||||||
|
"Restricted Peers?": "Peers restringuits?",
|
||||||
|
"Restore": "Restaurar",
|
||||||
|
"Restoring": "Restaurant",
|
||||||
|
"WGDashboard Settings": "Paràmetres del WGDashboard",
|
||||||
|
"Peers Settings": "Paràmetres de Peers",
|
||||||
|
"WireGuard Configuration Settings": "Paràmetres de Configuració de WireGuard",
|
||||||
|
"Appearance": "Aparença",
|
||||||
|
"Theme": "Tema",
|
||||||
|
"Language": "Idioma",
|
||||||
|
"Account Settings": "Paràmetres del Compte",
|
||||||
|
"Peer Default Settings": "Paràmetres per Defecte del Peer",
|
||||||
|
"Toggle When Start Up": "Canviar Quan s'Iniciï",
|
||||||
|
"Other Settings": "Altres Paràmetres",
|
||||||
|
"Select Peers": "Seleccioni Peers",
|
||||||
|
"Backup & Restore": "Còpia de seguretat & Restaurar",
|
||||||
|
"Delete Configuration": "Eliminar Configuració",
|
||||||
|
"Create Backup": "Crear Còpia de Seguretat",
|
||||||
|
"No backup yet, click the button above to create backup\\.": "Encara no hi ha cap còpia de seguretat, faci clic al botó de dalt per crear una còpia de seguretat\\.",
|
||||||
|
"Are you sure to delete this backup\\?": "Està segur que vol suprimir aquesta còpia de seguretat\\?",
|
||||||
|
"Backup Date": "Data de la Còpia de Seguretat",
|
||||||
|
"File": "Fitxer",
|
||||||
|
"Are you sure to delete this configuration\\?": "Segur que vol suprimir aquesta configuració?",
|
||||||
|
"Once you deleted this configuration\\:": "Un cop hagi suprimit aquesta configuració\\:",
|
||||||
|
"All connected peers will get disconnected": "Tots els Peers connectats es desconnectaran",
|
||||||
|
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Tant el fitxer de configuració \\(\\.conf\\) com la taula de la base de dades relacionada amb aquesta configuració s'eliminarà",
|
||||||
|
"Checking backups...": "Comprovant còpies de seguretat",
|
||||||
|
"This configuration have ([0-9].*) backups": "Aquesta configuració té ([0-9].*) còpies de seguretat",
|
||||||
|
"This configuration have no backup": "Aquesta configuració no té cap còpia de seguretat",
|
||||||
|
"If you're sure, please type in the configuration name below and click Delete": "Si està segur, escrigui el nom de la configuració qa continuació i faci clic a Eliminar",
|
||||||
|
"Select All": "Seleccionar Tot",
|
||||||
|
"Clear Selection": "Netejar Selecció",
|
||||||
|
"([0-9].*) Peers?": "([0-9].*) Peers?",
|
||||||
|
"Download": "Descarregar",
|
||||||
|
"Downloading": "Descarregant",
|
||||||
|
"Download Finished": "Descàrrega Finalitzada",
|
||||||
|
"Done": "Fet",
|
||||||
|
"Are you sure to delete": "Està segur que vol eliminar",
|
||||||
|
"Are you sure to delete this peer\\?": "Està segur que vol eliminar aquest peer\\?",
|
||||||
|
"Configuration deleted": "Configuració eliminada",
|
||||||
|
"Configuration saved": "Configuració desada",
|
||||||
|
"WGDashboard language update failed": "L'actualització de l'idioma de WGDashboard ha fallat",
|
||||||
|
"Configuration restored": "Configuració restaurada",
|
||||||
|
"Allowed IP already taken by another peer": "IP permesa ja ocupada per un altre peer",
|
||||||
|
"Failed to allow access of peer (.*)": "No s'ha pogut permetre l'accés al peer (.*)",
|
||||||
|
"Failed to save configuration through WireGuard": "No s'ha pogut desar la configuració mitjançant WireGuard",
|
||||||
|
"Allow access successfully": "Accés permès correctament",
|
||||||
|
"Deleted ([0-9]{1,}) peer\\(s\\)": "Els ([0-9]{1,}) peer\\(s\\) s'han suprimit",
|
||||||
|
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Els ([0-9]{1,}) peer\\(s\\) s'han suprimit correctament. No s'ha pgout suprimir els ([0-9]{1,}) peer\\(s\\)",
|
||||||
|
"Restricted ([0-9]{1,}) peer\\(s\\)": "Els ([0-9]{1,}) peer\\(s\\) s'han restringit",
|
||||||
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Els ([0-9]{1,}) peer\\(s\\) s'han restringit correctament. No s'ha pogut restringuir els ([0-9]{1,}) peer\\(s\\)",
|
||||||
|
"Display As": "Mostrar com a",
|
||||||
|
"List": "Llista",
|
||||||
|
"Grid": "Graella",
|
||||||
|
"Protocol": "Protocol",
|
||||||
|
"Open File": "Obrir Fitxer",
|
||||||
|
"Advanced Options": "Opcions Avançades",
|
||||||
|
"Allowed IPs Validation": "Validació d'IPs permeses",
|
||||||
|
"Update Name": "Actualitzar Nom",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "Per actualitzar el nom d'aquesta configuració, WGDashboard executarà les operacions següents:",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "Duplicar la taula de base de dades i el fitxer \\.conf amb el nou nom",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "Eliminarla taula de base de dades i el fitxer \\.conf de la configuració actual",
|
||||||
|
"Danger Zone": "Zona de Perill",
|
||||||
|
"Configuration File": "Fitxer de Configuració",
|
||||||
|
"Edit Raw Configuration File": "Editar el fitxer de configuració en brut",
|
||||||
|
"Peer Configuration File": "Fitxer de Configuració del Peer",
|
||||||
|
"Share with Email": "Compartir per correu electrònic",
|
||||||
|
"Email Account": "Compte de correu electrònic",
|
||||||
|
"Ready": "Preparat",
|
||||||
|
"Port": "Port",
|
||||||
|
"Encryption": "Encriptació",
|
||||||
|
"No Encryption": "No encriptació",
|
||||||
|
"Send From": "Enviar des de",
|
||||||
|
"Send Test Email": "Enviar correu electrònic de prova",
|
||||||
|
"Email Body Template": "Plantilla del cos del correu electrònic",
|
||||||
|
"Live Preview": "Vista prèvia en directe",
|
||||||
|
"Include configuration file as an attachment": "Inclogui el fitxer de configuració com a fitxer adjunt",
|
||||||
|
"Send": "Enviar",
|
||||||
|
"Sending\\.\\.\\.": "Enviant\\.\\.\\.",
|
||||||
|
"Email sent successfully!": "Correu elctrònic enviat correctament!",
|
||||||
|
"AmneziaWG Peer Setting": "Paràmetre del Peer d'AmneziaQG",
|
||||||
|
"System Status": "Estat del sistema",
|
||||||
|
"CPU": "CPU",
|
||||||
|
"Memory": "Memòria",
|
||||||
|
"Swap Memory": "Memòria Swap",
|
||||||
|
"Processes": "Processos",
|
||||||
|
"CPU Usage": "Ús de CPU",
|
||||||
|
"Memory Usage": "Memòria Utilitzada",
|
||||||
|
"Swap Memory Usage": "Ús de Memoria Swap",
|
||||||
|
"Network": "Xarxa",
|
||||||
|
"([0-9]{1,}) Interfaces": "([0-9]{1,}) Interfícies",
|
||||||
|
"Storage": "Emmagatzematge",
|
||||||
|
"([0-9]{1,}) Partitions": "([0-9]{1,}) Particions",
|
||||||
|
"(.*) Used": "(.*) Utilitzat",
|
||||||
|
"Untitled Peer": "Peer sense títol",
|
||||||
|
"Table": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
|
}
|
@ -257,7 +257,6 @@
|
|||||||
"Create Backup": "Vytvořit zálohu",
|
"Create Backup": "Vytvořit zálohu",
|
||||||
"No backup yet, click the button above to create backup\\.": "Žádná dostupná záloha, klikněte na tlačítko výše pro vytvoření",
|
"No backup yet, click the button above to create backup\\.": "Žádná dostupná záloha, klikněte na tlačítko výše pro vytvoření",
|
||||||
"Are you sure to delete this backup\\?": "Určitě chcete smazat tuto zálohu?",
|
"Are you sure to delete this backup\\?": "Určitě chcete smazat tuto zálohu?",
|
||||||
"Are you sure to restore this backup?\\": "Určitě chcete obnovit tuto zálohu?",
|
|
||||||
"Backup Date": "Datum zálohy",
|
"Backup Date": "Datum zálohy",
|
||||||
"File": "Soubor",
|
"File": "Soubor",
|
||||||
"Are you sure to delete this configuration\\?": "Určitě chcete smazat tuto konfiguraci?",
|
"Are you sure to delete this configuration\\?": "Určitě chcete smazat tuto konfiguraci?",
|
||||||
@ -308,5 +307,63 @@
|
|||||||
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Při hromadném importu bude jméno každého peera vygenerované automaticky, a povolená IP adresa bude nastavena na další v pořadí",
|
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Při hromadném importu bude jméno každého peera vygenerované automaticky, a povolená IP adresa bude nastavena na další v pořadí",
|
||||||
"How many peers you want to add\\?": "Kolik peerů chcete přidat?",
|
"How many peers you want to add\\?": "Kolik peerů chcete přidat?",
|
||||||
"Adding\\.\\.\\.": "Přidávám...",
|
"Adding\\.\\.\\.": "Přidávám...",
|
||||||
"Dashboard IP Address \\& Listen Port": "Dashboard IP adresa a otevřený port"
|
"Dashboard IP Address \\& Listen Port": "Dashboard IP adresa a otevřený port",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -308,5 +308,62 @@
|
|||||||
"How many peers you want to add\\?": "Wie viele Peers möchtest du hinzufügen?",
|
"How many peers you want to add\\?": "Wie viele Peers möchtest du hinzufügen?",
|
||||||
"Adding\\.\\.\\.": "Füge hinzu...",
|
"Adding\\.\\.\\.": "Füge hinzu...",
|
||||||
"Dashboard IP Address \\& Listen Port": "",
|
"Dashboard IP Address \\& Listen Port": "",
|
||||||
"Are you sure to restore this backup?\\": "Sind Sie sicher, dass Sie dieses Backup wiederherstellen möchten?"
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -31,10 +31,6 @@
|
|||||||
"Configurations Directory": "پوشه پیکربندیها",
|
"Configurations Directory": "پوشه پیکربندیها",
|
||||||
"Remember to remove / at the end of your path. e.g /etc/wireguard": "به یاد داشته باشید که / را در انتهای مسیر خود حذف کنید. به عنوان مثال: /etc/wireguard",
|
"Remember to remove / at the end of your path. e.g /etc/wireguard": "به یاد داشته باشید که / را در انتهای مسیر خود حذف کنید. به عنوان مثال: /etc/wireguard",
|
||||||
"WGDashboard Account Settings": "تنظیمات حساب WGDashboard",
|
"WGDashboard Account Settings": "تنظیمات حساب WGDashboard",
|
||||||
"رمز عبور فعلی": "",
|
|
||||||
"رمز عبور جدید": "",
|
|
||||||
"تکرار رمز عبور جدید": "",
|
|
||||||
"بروزرسانی رمز عبور": "",
|
|
||||||
"Multi-Factor Authentication \\(MFA\\)": "احراز هویت چند عاملی (MFA)",
|
"Multi-Factor Authentication \\(MFA\\)": "احراز هویت چند عاملی (MFA)",
|
||||||
"Reset": "بازنشانی",
|
"Reset": "بازنشانی",
|
||||||
"Setup": "نصب",
|
"Setup": "نصب",
|
||||||
@ -228,15 +224,12 @@
|
|||||||
"New Configuration": "پیکربندی جدید",
|
"New Configuration": "پیکربندی جدید",
|
||||||
"Configuration Name": "نام پیکربندی",
|
"Configuration Name": "نام پیکربندی",
|
||||||
"Configuration name is invalid. Possible reasons:": "نام پیکربندی نامعتبر است. دلایل احتمالی:",
|
"Configuration name is invalid. Possible reasons:": "نام پیکربندی نامعتبر است. دلایل احتمالی:",
|
||||||
"Configuration name already exist.": "این نام پیکربندی از قبل وجود دارد.",
|
|
||||||
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen.": "نام پیکربندی فقط میتواند حداکثر شامل ۱۵ حرف کوچک/بزرگ، عدد، زیرخط، مساوی، علامت مثبت، نقطه و خط تیره باشد.",
|
|
||||||
"Invalid Port": "پورت نامعتبر است.",
|
"Invalid Port": "پورت نامعتبر است.",
|
||||||
"Save Configuration": "ذخیره پیکربندی",
|
"Save Configuration": "ذخیره پیکربندی",
|
||||||
"IP Address/CIDR is invalid": "آدرس IP یا CIDR نامعتبر است.",
|
"IP Address/CIDR is invalid": "آدرس IP یا CIDR نامعتبر است.",
|
||||||
"IP Address": "آدرس IP",
|
"IP Address": "آدرس IP",
|
||||||
"Enter IP Address / Hostname": "آدرس IP یا نام میزبان را وارد کنید",
|
"Enter IP Address / Hostname": "آدرس IP یا نام میزبان را وارد کنید",
|
||||||
"IP Address / Hostname": "آدرس IP / نام میزبان",
|
"IP Address / Hostname": "آدرس IP / نام میزبان",
|
||||||
"Dashboard IP Address & Listen Port": "آدرس IP و پورت شنود داشبورد",
|
|
||||||
"Count": "تعداد",
|
"Count": "تعداد",
|
||||||
"Geolocation": "موقعیت جغرافیایی",
|
"Geolocation": "موقعیت جغرافیایی",
|
||||||
"Is Alive": "در دسترس است",
|
"Is Alive": "در دسترس است",
|
||||||
@ -255,7 +248,6 @@
|
|||||||
"Yes": "بله",
|
"Yes": "بله",
|
||||||
"No": "خیر",
|
"No": "خیر",
|
||||||
"Backup not selected": "نسخه پشتیبان انتخاب نشده است.",
|
"Backup not selected": "نسخه پشتیبان انتخاب نشده است.",
|
||||||
"Confirm & edit restore information": "تأیید و ویرایش اطلاعات بازیابی",
|
|
||||||
"(.*) Available IP Address": "$1 آدرس IP در دسترس",
|
"(.*) Available IP Address": "$1 آدرس IP در دسترس",
|
||||||
"Database File": "فایل پایگاه داده",
|
"Database File": "فایل پایگاه داده",
|
||||||
"Contain": "شامل",
|
"Contain": "شامل",
|
||||||
@ -276,15 +268,9 @@
|
|||||||
"Backup & Restore": "پشتیبانگیری و بازیابی",
|
"Backup & Restore": "پشتیبانگیری و بازیابی",
|
||||||
"Delete Configuration": "حذف پیکربندی",
|
"Delete Configuration": "حذف پیکربندی",
|
||||||
"Create Backup": "ایجاد نسخه پشتیبان",
|
"Create Backup": "ایجاد نسخه پشتیبان",
|
||||||
"No backup yet, click the button above to create backup.": "هنوز نسخه پشتیبانی وجود ندارد، برای ایجاد نسخه پشتیبان روی دکمه بالا کلیک کنید.",
|
|
||||||
"Are you sure to delete this backup?": "آیا از حذف این نسخه پشتیبان مطمئن هستید؟",
|
|
||||||
"Are you sure to restore this backup?": "آیا از بازیابی این نسخه پشتیبان مطمئن هستید؟",
|
|
||||||
"Backup Date": "تاریخ پشتیبانگیری",
|
"Backup Date": "تاریخ پشتیبانگیری",
|
||||||
"File": "فایل",
|
"File": "فایل",
|
||||||
"Are you sure to delete this configuration?": "آیا از حذف این پیکربندی مطمئن هستید؟",
|
|
||||||
"Once you deleted this configuration:": "پس از حذف این پیکربندی:",
|
|
||||||
"All connected peers will get disconnected": "تمام peerهای متصل قطع خواهند شد.",
|
"All connected peers will get disconnected": "تمام peerهای متصل قطع خواهند شد.",
|
||||||
"Both configuration file (.conf) and database table related to this configuration will get deleted": "هم فایل پیکربندی (.conf) و هم جدول پایگاه داده مرتبط با این پیکربندی حذف خواهند شد.",
|
|
||||||
"Checking backups...": "در حال بررسی نسخههای پشتیبان...",
|
"Checking backups...": "در حال بررسی نسخههای پشتیبان...",
|
||||||
"This configuration have ([0-9].*) backups": "این پیکربندی $1 نسخه پشتیبان دارد.",
|
"This configuration have ([0-9].*) backups": "این پیکربندی $1 نسخه پشتیبان دارد.",
|
||||||
"This configuration have no backup": "این پیکربندی هیچ نسخه پشتیبانی ندارد.",
|
"This configuration have no backup": "این پیکربندی هیچ نسخه پشتیبانی ندارد.",
|
||||||
@ -296,7 +282,6 @@
|
|||||||
"Download Finished": "دانلود به پایان رسید",
|
"Download Finished": "دانلود به پایان رسید",
|
||||||
"Done": "انجام شد",
|
"Done": "انجام شد",
|
||||||
"Are you sure to delete": "آیا از حذف مطمئن هستید؟",
|
"Are you sure to delete": "آیا از حذف مطمئن هستید؟",
|
||||||
"Are you sure to delete this peer?": "آیا از حذف این peer مطمئن هستید؟",
|
|
||||||
"Configuration deleted": "پیکربندی حذف شد.",
|
"Configuration deleted": "پیکربندی حذف شد.",
|
||||||
"Configuration saved": "پیکربندی ذخیره شد.",
|
"Configuration saved": "پیکربندی ذخیره شد.",
|
||||||
"WGDashboard language update failed": "بهروزرسانی زبان WGDashboard با شکست مواجه شد.",
|
"WGDashboard language update failed": "بهروزرسانی زبان WGDashboard با شکست مواجه شد.",
|
||||||
@ -305,8 +290,80 @@
|
|||||||
"Failed to allow access of peer (.*)": "اجازه دسترسی به peer ($1) با شکست مواجه شد.",
|
"Failed to allow access of peer (.*)": "اجازه دسترسی به peer ($1) با شکست مواجه شد.",
|
||||||
"Failed to save configuration through WireGuard": "ذخیره پیکربندی از طریق WireGuard با شکست مواجه شد.",
|
"Failed to save configuration through WireGuard": "ذخیره پیکربندی از طریق WireGuard با شکست مواجه شد.",
|
||||||
"Allow access successfully": "دسترسی با موفقیت فعال شد.",
|
"Allow access successfully": "دسترسی با موفقیت فعال شد.",
|
||||||
"Deleted ([0-9]{1,}) peer(s)": "$1 peer حذف شد.",
|
"Current Password": "",
|
||||||
"Deleted ([0-9]{1,}) peer(s) successfully. Failed to delete ([0-9]{1,}) peer(s)": "$1 peer با موفقیت حذف شد. حذف $2 peer با شکست مواجه شد.",
|
"New Password": "",
|
||||||
"Restricted ([0-9]{1,}) peer(s)": "$1 peer محدود شد.",
|
"Repeat New Password": "",
|
||||||
"Restricted ([0-9]{1,}) peer(s) successfully. Failed to restrict ([0-9]{1,}) peer(s)": "$1 peer با موفقیت محدود شد. محدودسازی $2 peer با شکست مواجه شد."
|
"Update Password": "",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Configuration name already exist\\.": "",
|
||||||
|
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "",
|
||||||
|
"Dashboard IP Address \\& Listen Port": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Confirm \\& edit restore information": "",
|
||||||
|
"No backup yet, click the button above to create backup\\.": "",
|
||||||
|
"Are you sure to delete this backup\\?": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Are you sure to delete this configuration\\?": "",
|
||||||
|
"Once you deleted this configuration\\:": "",
|
||||||
|
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "",
|
||||||
|
"Download": "",
|
||||||
|
"Are you sure to delete this peer\\?": "",
|
||||||
|
"Deleted ([0-9]{1,}) peer\\(s\\)": "",
|
||||||
|
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "",
|
||||||
|
"Restricted ([0-9]{1,}) peer\\(s\\)": "",
|
||||||
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -278,7 +278,6 @@
|
|||||||
"Create Backup": "Créer une sauvegarde",
|
"Create Backup": "Créer une sauvegarde",
|
||||||
"No backup yet, click the button above to create backup\\.": "Aucune sauvegarde, appuyez sur le bouton ci-dessus pour en créer une.",
|
"No backup yet, click the button above to create backup\\.": "Aucune sauvegarde, appuyez sur le bouton ci-dessus pour en créer une.",
|
||||||
"Are you sure to delete this backup\\?": "Êtes-vous certains de supprimer cette sauvegarde?",
|
"Are you sure to delete this backup\\?": "Êtes-vous certains de supprimer cette sauvegarde?",
|
||||||
"Are you sure to restore this backup?\\": "Êtes-vous certains de rétablir cette sauvegarde?",
|
|
||||||
"Backup Date": "Date de la sauvegarde",
|
"Backup Date": "Date de la sauvegarde",
|
||||||
"File": "Fichier",
|
"File": "Fichier",
|
||||||
"Are you sure to delete this configuration\\?": "Êtes-vous certains de supprimer cette configuration",
|
"Are you sure to delete this configuration\\?": "Êtes-vous certains de supprimer cette configuration",
|
||||||
@ -308,5 +307,63 @@
|
|||||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 supprimé(s)",
|
"Deleted ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 supprimé(s)",
|
||||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 supprimé(s). Échec de la suppression du(des) pair(s) $2",
|
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 supprimé(s). Échec de la suppression du(des) pair(s) $2",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 limités",
|
"Restricted ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 limités",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 limité(s). Échec de la limitation du(des) pair(s) $2"
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 limité(s). Échec de la limitation du(des) pair(s) $2",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -278,7 +278,6 @@
|
|||||||
"Create Backup": "Créer une sauvegarde",
|
"Create Backup": "Créer une sauvegarde",
|
||||||
"No backup yet, click the button above to create backup\\.": "Aucune sauvegarde, appuyez sur le bouton ci-dessus pour en créer une.",
|
"No backup yet, click the button above to create backup\\.": "Aucune sauvegarde, appuyez sur le bouton ci-dessus pour en créer une.",
|
||||||
"Are you sure to delete this backup\\?": "Êtes-vous certains de supprimer cette sauvegarde ?",
|
"Are you sure to delete this backup\\?": "Êtes-vous certains de supprimer cette sauvegarde ?",
|
||||||
"Are you sure to restore this backup?\\": "Êtes-vous certains de rétablir cette sauvegarde ?",
|
|
||||||
"Backup Date": "Date de la sauvegarde",
|
"Backup Date": "Date de la sauvegarde",
|
||||||
"File": "Fichier",
|
"File": "Fichier",
|
||||||
"Are you sure to delete this configuration\\?": "Êtes-vous certains de supprimer cette configuration ?",
|
"Are you sure to delete this configuration\\?": "Êtes-vous certains de supprimer cette configuration ?",
|
||||||
@ -308,5 +307,63 @@
|
|||||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 supprimé(s)",
|
"Deleted ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 supprimé(s)",
|
||||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 supprimé(s). Échec de la suppression du(des) pair(s) $2",
|
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 supprimé(s). Échec de la suppression du(des) pair(s) $2",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 limités",
|
"Restricted ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 limités",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 limité(s). Échec de la limitation du(des) pair(s) $2"
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 limité(s). Échec de la limitation du(des) pair(s) $2",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -278,7 +278,6 @@
|
|||||||
"Create Backup": "",
|
"Create Backup": "",
|
||||||
"No backup yet, click the button above to create backup\\.": "",
|
"No backup yet, click the button above to create backup\\.": "",
|
||||||
"Are you sure to delete this backup\\?": "",
|
"Are you sure to delete this backup\\?": "",
|
||||||
"Are you sure to restore this backup?\\": "",
|
|
||||||
"Backup Date": "",
|
"Backup Date": "",
|
||||||
"File": "",
|
"File": "",
|
||||||
"Are you sure to delete this configuration\\?": "",
|
"Are you sure to delete this configuration\\?": "",
|
||||||
@ -308,5 +307,63 @@
|
|||||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "",
|
"Deleted ([0-9]{1,}) peer\\(s\\)": "",
|
||||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "",
|
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "",
|
"Restricted ([0-9]{1,}) peer\\(s\\)": "",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": ""
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -71,6 +71,7 @@
|
|||||||
"Peers": "ピア",
|
"Peers": "ピア",
|
||||||
"Peer Settings": "ピア設定",
|
"Peer Settings": "ピア設定",
|
||||||
"Download All": "全てダウンロード",
|
"Download All": "全てダウンロード",
|
||||||
|
"Search": "検索",
|
||||||
"Search Peers\\.\\.\\.": "ピアを検索",
|
"Search Peers\\.\\.\\.": "ピアを検索",
|
||||||
"Display": "表示設定",
|
"Display": "表示設定",
|
||||||
"Sort By": "並び替え",
|
"Sort By": "並び替え",
|
||||||
@ -238,6 +239,10 @@
|
|||||||
"IP Address / Hostname": "IPアドレス / ホスト名",
|
"IP Address / Hostname": "IPアドレス / ホスト名",
|
||||||
"Dashboard IP Address \\& Listen Port": "ダッシュボードIPアドレス & 待ち受けポート",
|
"Dashboard IP Address \\& Listen Port": "ダッシュボードIPアドレス & 待ち受けポート",
|
||||||
"Count": "回数",
|
"Count": "回数",
|
||||||
|
"Hop": "ホップ数",
|
||||||
|
"Average RTT \\(ms\\)": "平均RTT (ms)",
|
||||||
|
"Min RTT \\(ms\\)": "最低RTT (ms)",
|
||||||
|
"Max RTT \\(ms\\)": "最高RTT (ms)",
|
||||||
"Geolocation": "場所",
|
"Geolocation": "場所",
|
||||||
"Is Alive": "ステータス",
|
"Is Alive": "ステータス",
|
||||||
"Average / Min / Max Round Trip Time": "平均 / 最小 / 最大 往復時間",
|
"Average / Min / Max Round Trip Time": "平均 / 最小 / 最大 往復時間",
|
||||||
@ -250,6 +255,9 @@
|
|||||||
"Selected Backup": "選択したバックアップ",
|
"Selected Backup": "選択したバックアップ",
|
||||||
"You don't have any configuration to restore": "復元可能な構成がありません",
|
"You don't have any configuration to restore": "復元可能な構成がありません",
|
||||||
"Help": "ヘルプ",
|
"Help": "ヘルプ",
|
||||||
|
"You can visit our: ": "次の場所でサポートや様々な情報を入手出来ます:",
|
||||||
|
"Official Documentation": "公式ドキュメント",
|
||||||
|
"Discord Server": "Discordサーバー",
|
||||||
"Backup": "バックアップ",
|
"Backup": "バックアップ",
|
||||||
"([0-9].*) Backups?": "$1 バックアップ?",
|
"([0-9].*) Backups?": "$1 バックアップ?",
|
||||||
"Yes": "はい",
|
"Yes": "はい",
|
||||||
@ -278,7 +286,7 @@
|
|||||||
"Create Backup": "バックアップを作成",
|
"Create Backup": "バックアップを作成",
|
||||||
"No backup yet, click the button above to create backup\\.": "バックアップがありません ボタンをクリックしてバックアップを作成",
|
"No backup yet, click the button above to create backup\\.": "バックアップがありません ボタンをクリックしてバックアップを作成",
|
||||||
"Are you sure to delete this backup\\?": "バックアップを削除しますか?",
|
"Are you sure to delete this backup\\?": "バックアップを削除しますか?",
|
||||||
"Are you sure to restore this backup?\\": "バックアップから復元しますか?",
|
"Are you sure to restore this backup\\?": "バックアップから復元しますか?",
|
||||||
"Backup Date": "バックアップ日時",
|
"Backup Date": "バックアップ日時",
|
||||||
"File": "ファイル",
|
"File": "ファイル",
|
||||||
"Are you sure to delete this configuration\\?": "この構成を本当に削除しますか?",
|
"Are you sure to delete this configuration\\?": "この構成を本当に削除しますか?",
|
||||||
@ -292,6 +300,7 @@
|
|||||||
"Select All": "全て選択",
|
"Select All": "全て選択",
|
||||||
"Clear Selection": "選択を解除",
|
"Clear Selection": "選択を解除",
|
||||||
"([0-9].*) Peers?": "$1 ピア?",
|
"([0-9].*) Peers?": "$1 ピア?",
|
||||||
|
"Download": "ダウンロード",
|
||||||
"Downloading": "ダウンロード中...",
|
"Downloading": "ダウンロード中...",
|
||||||
"Download Finished": "ダウンロード完了",
|
"Download Finished": "ダウンロード完了",
|
||||||
"Done": "完了",
|
"Done": "完了",
|
||||||
@ -308,5 +317,53 @@
|
|||||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "$1 個のピアを削除しました ",
|
"Deleted ([0-9]{1,}) peer\\(s\\)": "$1 個のピアを削除しました ",
|
||||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 個のピアの削除に成功し、 $2 個のピアの削除に失敗しました",
|
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 個のピアの削除に成功し、 $2 個のピアの削除に失敗しました",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "$1 個のピアを制限しました",
|
"Restricted ([0-9]{1,}) peer\\(s\\)": "$1 個のピアを制限しました",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 個のピアの制限に成功し、 $2 個のピアの制限に失敗しました"
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 個のピアの制限に成功し、 $2 個のピアの制限に失敗しました",
|
||||||
|
"Display As": "表示方法",
|
||||||
|
"List": "リスト",
|
||||||
|
"Grid": "グリッド",
|
||||||
|
"Protocol": "プロトコル",
|
||||||
|
"Open File": "ファイルを開く",
|
||||||
|
"Advanced Options": "追加設定",
|
||||||
|
"Allowed IPs Validation": "Allowed IPs 検証",
|
||||||
|
"Update Name": "名前を変更",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "この構成の名称を変更するために、WGDashboardは以下の操作を実行します:",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "現在の構成のデータベーステーブルと.confファイルを変更された名前で複製する",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "現在の構成のデータベーステーブルと.confファイルを削除する",
|
||||||
|
"Danger Zone": "危険な設定",
|
||||||
|
"Configuration File": "構成ファイル",
|
||||||
|
"Edit Raw Configuration File": "構成ファイルを直接編集",
|
||||||
|
"Peer Configuration File": "ピア構成ファイル",
|
||||||
|
"Share with Email": "Eメールで共有",
|
||||||
|
"Who are you sending to\\?": "送信先",
|
||||||
|
"What\\'s the subject\\?": "件名",
|
||||||
|
"What\\'s the body\\?": "本文",
|
||||||
|
"Email Account": "Eメールアカウント",
|
||||||
|
"Ready": "利用可能",
|
||||||
|
"Port": "ポート",
|
||||||
|
"Encryption": "暗号化方式",
|
||||||
|
"No Encryption": "暗号化しない",
|
||||||
|
"Send From": "送信元",
|
||||||
|
"Send Test Email": "テストメールを送信",
|
||||||
|
"Email Body Template": "Eメール本文テンプレート",
|
||||||
|
"Live Preview": "ライブプレビュー",
|
||||||
|
"Include configuration file as an attachment": "コンフィグファイルを添付する",
|
||||||
|
"Send": "送信",
|
||||||
|
"Sending\\.\\.\\.": "送信中...",
|
||||||
|
"Email sent successfully!": "Eメールの送信に成功しました!",
|
||||||
|
"AmneziaWG Peer Setting": "AmneziaWGピア設定",
|
||||||
|
"System Status": "システムステータス",
|
||||||
|
"CPU": "CPU",
|
||||||
|
"Memory": "メモリ",
|
||||||
|
"Swap Memory": "Swapメモリ",
|
||||||
|
"Processes": "プロセス",
|
||||||
|
"CPU Usage": "CPU使用率",
|
||||||
|
"Memory Usage": "メモリ使用量",
|
||||||
|
"Swap Memory Usage": "Swapメモリ使用量",
|
||||||
|
"Network": "ネットワーク",
|
||||||
|
"([0-9]{1,}) Interfaces": "$1 個のインターフェース",
|
||||||
|
"Storage": "ストレージ",
|
||||||
|
"([0-9]{1,}) Partitions": "$1 個のパーティション",
|
||||||
|
"(.*) Used": "$1 使用中",
|
||||||
|
"Untitled Peer": "無名のピア",
|
||||||
|
"Table": ""
|
||||||
}
|
}
|
@ -278,7 +278,6 @@
|
|||||||
"Create Backup": "백업 생성",
|
"Create Backup": "백업 생성",
|
||||||
"No backup yet, click the button above to create backup\\.": "아직 백업이 없습니다. 위의 버튼을 클릭하여 백업을 생성하세요.",
|
"No backup yet, click the button above to create backup\\.": "아직 백업이 없습니다. 위의 버튼을 클릭하여 백업을 생성하세요.",
|
||||||
"Are you sure to delete this backup\\?": "이 백업을 삭제하시겠습니까?",
|
"Are you sure to delete this backup\\?": "이 백업을 삭제하시겠습니까?",
|
||||||
"Are you sure to restore this backup?\\": "이 백업을 복원하시겠습니까?",
|
|
||||||
"Backup Date": "백업 날짜",
|
"Backup Date": "백업 날짜",
|
||||||
"File": "파일",
|
"File": "파일",
|
||||||
"Are you sure to delete this configuration\\?": "이 구성을 삭제하시겠습니까?",
|
"Are you sure to delete this configuration\\?": "이 구성을 삭제하시겠습니까?",
|
||||||
@ -308,5 +307,63 @@
|
|||||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "$1 피어가 삭제되었습니다",
|
"Deleted ([0-9]{1,}) peer\\(s\\)": "$1 피어가 삭제되었습니다",
|
||||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 피어가 성공적으로 삭제되었습니다. $2 피어 삭제에 실패했습니다",
|
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 피어가 성공적으로 삭제되었습니다. $2 피어 삭제에 실패했습니다",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "$1 피어가 제한되었습니다",
|
"Restricted ([0-9]{1,}) peer\\(s\\)": "$1 피어가 제한되었습니다",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 피어가 성공적으로 제한되었습니다. $2 피어 제한에 실패했습니다"
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 피어가 성공적으로 제한되었습니다. $2 피어 제한에 실패했습니다",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -59,6 +59,7 @@
|
|||||||
"Turning Off\\.\\.\\.": "",
|
"Turning Off\\.\\.\\.": "",
|
||||||
"Address": "",
|
"Address": "",
|
||||||
"Listen Port": "",
|
"Listen Port": "",
|
||||||
|
"Table": "",
|
||||||
"Public Key": "",
|
"Public Key": "",
|
||||||
"Connected Peers": "",
|
"Connected Peers": "",
|
||||||
"Total Usage": "",
|
"Total Usage": "",
|
||||||
@ -239,6 +240,10 @@
|
|||||||
"IP Address / Hostname": "",
|
"IP Address / Hostname": "",
|
||||||
"Dashboard IP Address \\& Listen Port": "",
|
"Dashboard IP Address \\& Listen Port": "",
|
||||||
"Count": "",
|
"Count": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
"Geolocation": "",
|
"Geolocation": "",
|
||||||
"Is Alive": "",
|
"Is Alive": "",
|
||||||
"Average / Min / Max Round Trip Time": "",
|
"Average / Min / Max Round Trip Time": "",
|
||||||
@ -251,6 +256,9 @@
|
|||||||
"Selected Backup": "",
|
"Selected Backup": "",
|
||||||
"You don't have any configuration to restore": "",
|
"You don't have any configuration to restore": "",
|
||||||
"Help": "",
|
"Help": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
"Backup": "",
|
"Backup": "",
|
||||||
"([0-9].*) Backups?": "",
|
"([0-9].*) Backups?": "",
|
||||||
"Yes": "",
|
"Yes": "",
|
||||||
@ -279,7 +287,7 @@
|
|||||||
"Create Backup": "",
|
"Create Backup": "",
|
||||||
"No backup yet, click the button above to create backup\\.": "",
|
"No backup yet, click the button above to create backup\\.": "",
|
||||||
"Are you sure to delete this backup\\?": "",
|
"Are you sure to delete this backup\\?": "",
|
||||||
"Are you sure to restore this backup?\\": "",
|
"Are you sure to restore this backup\\?": "",
|
||||||
"Backup Date": "",
|
"Backup Date": "",
|
||||||
"File": "",
|
"File": "",
|
||||||
"Are you sure to delete this configuration\\?": "",
|
"Are you sure to delete this configuration\\?": "",
|
||||||
@ -327,9 +335,6 @@
|
|||||||
"Edit Raw Configuration File": "",
|
"Edit Raw Configuration File": "",
|
||||||
"Peer Configuration File": "",
|
"Peer Configuration File": "",
|
||||||
"Share with Email": "",
|
"Share with Email": "",
|
||||||
"Who are you sending to?": "",
|
|
||||||
"What's the subject?": "",
|
|
||||||
"What's the body?": "",
|
|
||||||
"Email Account": "",
|
"Email Account": "",
|
||||||
"Ready": "",
|
"Ready": "",
|
||||||
"Port": "",
|
"Port": "",
|
||||||
@ -357,5 +362,8 @@
|
|||||||
"Storage": "",
|
"Storage": "",
|
||||||
"([0-9]{1,}) Partitions": "",
|
"([0-9]{1,}) Partitions": "",
|
||||||
"(.*) Used": "",
|
"(.*) Used": "",
|
||||||
"Untitled Peer": ""
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -300,7 +300,6 @@
|
|||||||
"Confirm \\& edit restore information": "Bevestigen & herstelinformatie bewerken",
|
"Confirm \\& edit restore information": "Bevestigen & herstelinformatie bewerken",
|
||||||
"No backup yet, click the button above to create backup\\.": "Nog geen back-up, klik op de knop hierboven om een back-up te maken.",
|
"No backup yet, click the button above to create backup\\.": "Nog geen back-up, klik op de knop hierboven om een back-up te maken.",
|
||||||
"Are you sure to delete this backup\\?": "Weet je zeker dat je deze back-up wilt verwijderen?",
|
"Are you sure to delete this backup\\?": "Weet je zeker dat je deze back-up wilt verwijderen?",
|
||||||
"Are you sure to restore this backup?\\": "Weet je zeker dat je deze back-up wilt herstellen?",
|
|
||||||
"Are you sure to delete this configuration\\?": "Weet je zeker dat je deze configuratie wilt verwijderen?",
|
"Are you sure to delete this configuration\\?": "Weet je zeker dat je deze configuratie wilt verwijderen?",
|
||||||
"Once you deleted this configuration\\:": "Zodra je deze configuratie hebt verwijderd:",
|
"Once you deleted this configuration\\:": "Zodra je deze configuratie hebt verwijderd:",
|
||||||
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Zowel het configuratiebestand (.conf) als de databasetabel die aan deze configuratie is gekoppeld, worden verwijderd",
|
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Zowel het configuratiebestand (.conf) als de databasetabel die aan deze configuratie is gekoppeld, worden verwijderd",
|
||||||
@ -308,5 +307,63 @@
|
|||||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) verwijderd",
|
"Deleted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) verwijderd",
|
||||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) succesvol verwijderd. Het verwijderen van $2 peer(s) is mislukt",
|
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) succesvol verwijderd. Het verwijderen van $2 peer(s) is mislukt",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) beperkt",
|
"Restricted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) beperkt",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) succesvol beperkt. Het beperken van $2 peer(s) is mislukt"
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) succesvol beperkt. Het beperken van $2 peer(s) is mislukt",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -278,7 +278,6 @@
|
|||||||
"Create Backup": "Stwórz Kopię Zapasową",
|
"Create Backup": "Stwórz Kopię Zapasową",
|
||||||
"No backup yet, click the button above to create backup\\.": "Brak kopii Zapasowych, kliknij przycisk powyżej aby utworzyć nową kopię",
|
"No backup yet, click the button above to create backup\\.": "Brak kopii Zapasowych, kliknij przycisk powyżej aby utworzyć nową kopię",
|
||||||
"Are you sure to delete this backup\\?": "Czy na pewno chcesz usunąć tą kopię zapasową?",
|
"Are you sure to delete this backup\\?": "Czy na pewno chcesz usunąć tą kopię zapasową?",
|
||||||
"Are you sure to restore this backup?\\": "Czy na pewno chcesz przywrócić tą kopię zapasową?",
|
|
||||||
"Backup Date": "Data Utworzenia",
|
"Backup Date": "Data Utworzenia",
|
||||||
"File": "Plik",
|
"File": "Plik",
|
||||||
"Are you sure to delete this configuration\\?": "Czy na pewno chcesz usunąć tą konfigurację?",
|
"Are you sure to delete this configuration\\?": "Czy na pewno chcesz usunąć tą konfigurację?",
|
||||||
@ -308,5 +307,63 @@
|
|||||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Usunięto $1 klienta/ów pomyślnie. Nie udało się usunąć $2 klienta/ów",
|
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Usunięto $1 klienta/ów pomyślnie. Nie udało się usunąć $2 klienta/ów",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "Ograniczono $1 klienta/ów ",
|
"Restricted ([0-9]{1,}) peer\\(s\\)": "Ograniczono $1 klienta/ów ",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Ograniczono $1 klienta/ów pomyślnie. Nie udało się ograniczyć $2 klienta/ów",
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Ograniczono $1 klienta/ów pomyślnie. Nie udało się ograniczyć $2 klienta/ów",
|
||||||
"Allow access successfully": "Pomyślnie udostępniono dostęp"
|
"Allow access successfully": "Pomyślnie udostępniono dostęp",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -277,7 +277,6 @@
|
|||||||
"Create Backup": "Содать архив",
|
"Create Backup": "Содать архив",
|
||||||
"No backup yet, click the button above to create backup\\.": "Архивов не обнаружено, нажмите на кнопку выше, чтобы создать",
|
"No backup yet, click the button above to create backup\\.": "Архивов не обнаружено, нажмите на кнопку выше, чтобы создать",
|
||||||
"Are you sure to delete this backup\\?": "Вы уверены, что нужно удалить этот архив?",
|
"Are you sure to delete this backup\\?": "Вы уверены, что нужно удалить этот архив?",
|
||||||
"Are you sure to restore this backup?\\": "Вы уверены, что нужно восстановить этот архив?",
|
|
||||||
"Backup Date": "Дата архива",
|
"Backup Date": "Дата архива",
|
||||||
"File": "Файл",
|
"File": "Файл",
|
||||||
"Are you sure to delete this configuration\\?": "Вы уверены, что нужно удалить эту конфигурацию?",
|
"Are you sure to delete this configuration\\?": "Вы уверены, что нужно удалить эту конфигурацию?",
|
||||||
@ -308,5 +307,63 @@
|
|||||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "Заблокировано $1 клиентов ",
|
"Restricted ([0-9]{1,}) peer\\(s\\)": "Заблокировано $1 клиентов ",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Успешно аблокировано $1 клиентов. Не удалось заблокировать $2 ",
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Успешно аблокировано $1 клиентов. Не удалось заблокировать $2 ",
|
||||||
"Dashboard IP Address \\& Listen Port": "IP-адрес и порт панели мониторинга",
|
"Dashboard IP Address \\& Listen Port": "IP-адрес и порт панели мониторинга",
|
||||||
"Allow access successfully": "Доступ разрешён"
|
"Allow access successfully": "Доступ разрешён",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -253,7 +253,6 @@
|
|||||||
"Create Backup": "Skapa säkerhetskopia",
|
"Create Backup": "Skapa säkerhetskopia",
|
||||||
"No backup yet, click the button above to create backup\\.": "Ingen säkerhetskopia än, klicka på knappen ovan för att skapa en.",
|
"No backup yet, click the button above to create backup\\.": "Ingen säkerhetskopia än, klicka på knappen ovan för att skapa en.",
|
||||||
"Are you sure to delete this backup\\?": "Är du säker på att du vill radera denna säkerhetskopia?",
|
"Are you sure to delete this backup\\?": "Är du säker på att du vill radera denna säkerhetskopia?",
|
||||||
"Are you sure to restore this backup?\\": "Är du säker på att du vill återställa denna säkerhetskopia?",
|
|
||||||
"Backup Date": "Säkerhetskopieringsdatum",
|
"Backup Date": "Säkerhetskopieringsdatum",
|
||||||
"File": "Fil",
|
"File": "Fil",
|
||||||
"Are you sure to delete this configuration\\?": "Är du säker på att du vill radera denna konfiguration?",
|
"Are you sure to delete this configuration\\?": "Är du säker på att du vill radera denna konfiguration?",
|
||||||
@ -308,5 +307,63 @@
|
|||||||
"Saving\\.\\.\\.": "Sparar...",
|
"Saving\\.\\.\\.": "Sparar...",
|
||||||
"1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Vänligen skanna följande QR-kod för att generera TOTP med din valda autentiserare",
|
"1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Vänligen skanna följande QR-kod för att generera TOTP med din valda autentiserare",
|
||||||
"2\\. Enter the TOTP generated by your authenticator to verify": "2. Ange den TOTP som din autentiserare genererade för att verifiera",
|
"2\\. Enter the TOTP generated by your authenticator to verify": "2. Ange den TOTP som din autentiserare genererade för att verifiera",
|
||||||
"Oh no\\.\\.\\. This link is either expired or invalid\\.": "Åh nej... Den här länken är antingen utgången eller ogiltig."
|
"Oh no\\.\\.\\. This link is either expired or invalid\\.": "Åh nej... Den här länken är antingen utgången eller ogiltig.",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -278,7 +278,6 @@
|
|||||||
"Create Backup": "สร้างการสำรองข้อมูล",
|
"Create Backup": "สร้างการสำรองข้อมูล",
|
||||||
"No backup yet, click the button above to create backup\\.": "ยังไม่มีการสำรองข้อมูล คลิกปุ่มด้านบนเพื่อสร้างการสำรองข้อมูล",
|
"No backup yet, click the button above to create backup\\.": "ยังไม่มีการสำรองข้อมูล คลิกปุ่มด้านบนเพื่อสร้างการสำรองข้อมูล",
|
||||||
"Are you sure to delete this backup\\?": "คุณแน่ใจหรือไม่ที่จะลบการสำรองข้อมูลนี้\\?",
|
"Are you sure to delete this backup\\?": "คุณแน่ใจหรือไม่ที่จะลบการสำรองข้อมูลนี้\\?",
|
||||||
"Are you sure to restore this backup?\\": "คุณแน่ใจหรือไม่ที่จะคืนค่าการสำรองข้อมูลนี้\\?",
|
|
||||||
"Backup Date": "วันที่สำรองข้อมูล",
|
"Backup Date": "วันที่สำรองข้อมูล",
|
||||||
"File": "ไฟล์",
|
"File": "ไฟล์",
|
||||||
"Are you sure to delete this configuration\\?": "คุณแน่ใจหรือไม่ที่จะลบการกำหนดค่านี้\\?",
|
"Are you sure to delete this configuration\\?": "คุณแน่ใจหรือไม่ที่จะลบการกำหนดค่านี้\\?",
|
||||||
@ -308,5 +307,63 @@
|
|||||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "ลบ Peer ([0-9]{1,}) คน",
|
"Deleted ([0-9]{1,}) peer\\(s\\)": "ลบ Peer ([0-9]{1,}) คน",
|
||||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "ลบ Peer ([0-9]{1,}) คนสำเร็จ ล้มเหลวในการลบ Peer ([0-9]{1,}) คน",
|
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "ลบ Peer ([0-9]{1,}) คนสำเร็จ ล้มเหลวในการลบ Peer ([0-9]{1,}) คน",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\)": " Peer ที่ถูกจำกัด ([0-9]{1,}) คน",
|
"Restricted ([0-9]{1,}) peer\\(s\\)": " Peer ที่ถูกจำกัด ([0-9]{1,}) คน",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "จำกัด Peer ([0-9]{1,}) คน สำเร็จ ล้มเหลวในการจำกัด Peer ([0-9]{1,}) คน"
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "จำกัด Peer ([0-9]{1,}) คน สำเร็จ ล้มเหลวในการจำกัด Peer ([0-9]{1,}) คน",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -299,7 +299,6 @@
|
|||||||
"Confirm \\& edit restore information": "Geri yükleme bilgisini doğrula ve düzelt",
|
"Confirm \\& edit restore information": "Geri yükleme bilgisini doğrula ve düzelt",
|
||||||
"No backup yet, click the button above to create backup\\.": "Henüz herhangi bir yedek bulunmuyor, oluşturmak için üstteki butona tıklayın.",
|
"No backup yet, click the button above to create backup\\.": "Henüz herhangi bir yedek bulunmuyor, oluşturmak için üstteki butona tıklayın.",
|
||||||
"Are you sure to delete this backup\\?": "Bu yedeği silmek istediğinize emin misiniz?",
|
"Are you sure to delete this backup\\?": "Bu yedeği silmek istediğinize emin misiniz?",
|
||||||
"Are you sure to restore this backup?\\": "Bu yedeği geri yüklemek istediğinize emin misiniz?",
|
|
||||||
"Are you sure to delete this configuration\\?": "Bu yapılandırmayı silmek istediğinize emin misiniz?",
|
"Are you sure to delete this configuration\\?": "Bu yapılandırmayı silmek istediğinize emin misiniz?",
|
||||||
"Once you deleted this configuration\\:": "Bu yapılandırmayı sildiğiniz an:",
|
"Once you deleted this configuration\\:": "Bu yapılandırmayı sildiğiniz an:",
|
||||||
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Hem yapılandırma dosyası (.conf) hem de bu yapılandırmanın veritabanı tablosu silinecek",
|
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Hem yapılandırma dosyası (.conf) hem de bu yapılandırmanın veritabanı tablosu silinecek",
|
||||||
@ -308,5 +307,63 @@
|
|||||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "$1 eş silindi",
|
"Deleted ([0-9]{1,}) peer\\(s\\)": "$1 eş silindi",
|
||||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 eş başarıyla silindi. $2 eş silinemedi",
|
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 eş başarıyla silindi. $2 eş silinemedi",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "$1 eşin erişimi kısıtlandı",
|
"Restricted ([0-9]{1,}) peer\\(s\\)": "$1 eşin erişimi kısıtlandı",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 eşin erişimi kısıtlandı. $2 eşin erişimi kısıtlanamadı"
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 eşin erişimi kısıtlandı. $2 eşin erişimi kısıtlanamadı",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -278,7 +278,6 @@
|
|||||||
"Create Backup": "",
|
"Create Backup": "",
|
||||||
"No backup yet, click the button above to create backup\\.": "",
|
"No backup yet, click the button above to create backup\\.": "",
|
||||||
"Are you sure to delete this backup\\?": "",
|
"Are you sure to delete this backup\\?": "",
|
||||||
"Are you sure to restore this backup?\\": "",
|
|
||||||
"Backup Date": "",
|
"Backup Date": "",
|
||||||
"File": "",
|
"File": "",
|
||||||
"Are you sure to delete this configuration\\?": "",
|
"Are you sure to delete this configuration\\?": "",
|
||||||
@ -308,5 +307,63 @@
|
|||||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "",
|
"Deleted ([0-9]{1,}) peer\\(s\\)": "",
|
||||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "",
|
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "",
|
"Restricted ([0-9]{1,}) peer\\(s\\)": "",
|
||||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": ""
|
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "",
|
||||||
|
"Table": "",
|
||||||
|
"Search": "",
|
||||||
|
"Hop": "",
|
||||||
|
"Average RTT \\(ms\\)": "",
|
||||||
|
"Min RTT \\(ms\\)": "",
|
||||||
|
"Max RTT \\(ms\\)": "",
|
||||||
|
"You can visit our: ": "",
|
||||||
|
"Official Documentation": "",
|
||||||
|
"Discord Server": "",
|
||||||
|
"Are you sure to restore this backup\\?": "",
|
||||||
|
"Download": "",
|
||||||
|
"Display As": "",
|
||||||
|
"List": "",
|
||||||
|
"Grid": "",
|
||||||
|
"Protocol": "",
|
||||||
|
"Open File": "",
|
||||||
|
"Advanced Options": "",
|
||||||
|
"Allowed IPs Validation": "",
|
||||||
|
"Update Name": "",
|
||||||
|
"To update this configuration's name, WGDashboard will execute the following operations:": "",
|
||||||
|
"Duplicate current configuration's database table and \\.conf file with the new name": "",
|
||||||
|
"Delete current configuration's database table and \\.conf file": "",
|
||||||
|
"Danger Zone": "",
|
||||||
|
"Configuration File": "",
|
||||||
|
"Edit Raw Configuration File": "",
|
||||||
|
"Peer Configuration File": "",
|
||||||
|
"Share with Email": "",
|
||||||
|
"Email Account": "",
|
||||||
|
"Ready": "",
|
||||||
|
"Port": "",
|
||||||
|
"Encryption": "",
|
||||||
|
"No Encryption": "",
|
||||||
|
"Send From": "",
|
||||||
|
"Send Test Email": "",
|
||||||
|
"Email Body Template": "",
|
||||||
|
"Live Preview": "",
|
||||||
|
"Include configuration file as an attachment": "",
|
||||||
|
"Send": "",
|
||||||
|
"Sending\\.\\.\\.": "",
|
||||||
|
"Email sent successfully!": "",
|
||||||
|
"AmneziaWG Peer Setting": "",
|
||||||
|
"System Status": "",
|
||||||
|
"CPU": "",
|
||||||
|
"Memory": "",
|
||||||
|
"Swap Memory": "",
|
||||||
|
"Processes": "",
|
||||||
|
"CPU Usage": "",
|
||||||
|
"Memory Usage": "",
|
||||||
|
"Swap Memory Usage": "",
|
||||||
|
"Network": "",
|
||||||
|
"([0-9]{1,}) Interfaces": "",
|
||||||
|
"Storage": "",
|
||||||
|
"([0-9]{1,}) Partitions": "",
|
||||||
|
"(.*) Used": "",
|
||||||
|
"Untitled Peer": "",
|
||||||
|
"Who are you sending to\\?": "",
|
||||||
|
"What\\'s the subject\\?": "",
|
||||||
|
"What\\'s the body\\?": ""
|
||||||
}
|
}
|
@ -278,7 +278,6 @@
|
|||||||
"Create Backup": "创建备份",
|
"Create Backup": "创建备份",
|
||||||
"No backup yet, click the button above to create backup\\.": "还没有任何备份,点击上方按钮创建",
|
"No backup yet, click the button above to create backup\\.": "还没有任何备份,点击上方按钮创建",
|
||||||
"Are you sure to delete this backup\\?": "您确定要删除此备份吗?",
|
"Are you sure to delete this backup\\?": "您确定要删除此备份吗?",
|
||||||
"Are you sure to restore this backup?\\": "您确定要恢复此备份吗?",
|
|
||||||
"Backup Date": "备份日期",
|
"Backup Date": "备份日期",
|
||||||
"File": "文件",
|
"File": "文件",
|
||||||
"Are you sure to delete this configuration\\?": "您确定要删除此配置吗?",
|
"Are you sure to delete this configuration\\?": "您确定要删除此配置吗?",
|
||||||
@ -328,9 +327,6 @@
|
|||||||
"Edit Raw Configuration File": "编辑配置源文件",
|
"Edit Raw Configuration File": "编辑配置源文件",
|
||||||
"Peer Configuration File": "端点配置文件",
|
"Peer Configuration File": "端点配置文件",
|
||||||
"Share with Email": "使用邮件分享",
|
"Share with Email": "使用邮件分享",
|
||||||
"Who are you sending to\\?": "您想发送给谁?",
|
|
||||||
"What\\'s the subject\\?": "主题是什么?",
|
|
||||||
"What\\'s the body\\?": "正文是什么?",
|
|
||||||
"Email Account": "邮箱账号",
|
"Email Account": "邮箱账号",
|
||||||
"Ready": "准备就绪",
|
"Ready": "准备就绪",
|
||||||
"Port": "端口",
|
"Port": "端口",
|
||||||
@ -357,5 +353,17 @@
|
|||||||
"Storage": "储存",
|
"Storage": "储存",
|
||||||
"([0-9]{1,}) Partitions": "$1 个分区",
|
"([0-9]{1,}) Partitions": "$1 个分区",
|
||||||
"(.*) Used": "已使用 $1",
|
"(.*) Used": "已使用 $1",
|
||||||
"Untitled Peer": "未命名端点"
|
"Untitled Peer": "未命名端点",
|
||||||
|
"Table": "路由表",
|
||||||
|
"Hop": "跳数",
|
||||||
|
"Average RTT \\(ms\\)": "平均来回时间(微秒)",
|
||||||
|
"Min RTT \\(ms\\)": "最低来回时间(微秒)",
|
||||||
|
"Max RTT \\(ms\\)": "最高来回时间(微秒)",
|
||||||
|
"You can visit our: ": "您可以访问我们的:",
|
||||||
|
"Official Documentation": "官方文档",
|
||||||
|
"Discord Server": "Discord 服务器",
|
||||||
|
"Are you sure to restore this backup\\?": "您确定要恢复此备份吗?",
|
||||||
|
"Who are you sending to\\?": "您想发送给谁?",
|
||||||
|
"What\\'s the subject\\?": "主题是什么?",
|
||||||
|
"What\\'s the body\\?": "正文是什么?"
|
||||||
}
|
}
|
@ -278,7 +278,6 @@
|
|||||||
"Create Backup": "建立備份",
|
"Create Backup": "建立備份",
|
||||||
"No backup yet, click the button above to create backup\\.": "還沒有任何備份,點擊上方按鈕建立",
|
"No backup yet, click the button above to create backup\\.": "還沒有任何備份,點擊上方按鈕建立",
|
||||||
"Are you sure to delete this backup\\?": "您確定要刪除此備份嗎?",
|
"Are you sure to delete this backup\\?": "您確定要刪除此備份嗎?",
|
||||||
"Are you sure to restore this backup?\\": "您確定要恢復此備份嗎?",
|
|
||||||
"Backup Date": "備份日期",
|
"Backup Date": "備份日期",
|
||||||
"File": "檔案",
|
"File": "檔案",
|
||||||
"Are you sure to delete this configuration\\?": "您確定要刪除此配置嗎?",
|
"Are you sure to delete this configuration\\?": "您確定要刪除此配置嗎?",
|
||||||
@ -357,5 +356,14 @@
|
|||||||
"Storage": "儲存",
|
"Storage": "儲存",
|
||||||
"([0-9]{1,}) Partitions": "$1 個分割區",
|
"([0-9]{1,}) Partitions": "$1 個分割區",
|
||||||
"(.*) Used": "已使用 $1",
|
"(.*) Used": "已使用 $1",
|
||||||
"Untitled Peer": "未命名端點"
|
"Untitled Peer": "未命名端點",
|
||||||
|
"Table": "路由表",
|
||||||
|
"Hop": "跳數",
|
||||||
|
"Average RTT \\(ms\\)": "平均來回時間(毫秒)",
|
||||||
|
"Min RTT \\(ms\\)": "最低來回時間(毫秒)",
|
||||||
|
"Max RTT \\(ms\\)": "最高來回時間(毫秒)",
|
||||||
|
"You can visit our: ": "您可以訪問我們的:",
|
||||||
|
"Official Documentation": "官方文檔",
|
||||||
|
"Discord Server": "Discord 伺服器",
|
||||||
|
"Are you sure to restore this backup\\?": "您確定要恢復到此備份嗎?"
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user