mirror of https://github.com/wg-easy/wg-easy
68 changed files with 5316 additions and 2639 deletions
|
Before Width: | Height: | Size: 185 KiB After Width: | Height: | Size: 167 KiB |
@ -0,0 +1,19 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
folder="src/i18n/locales" |
||||
|
base_file="$folder/en.json" |
||||
|
|
||||
|
# Get all leaf keys from the English base file |
||||
|
base_keys=$(jq -r 'paths(scalars) | map(tostring) | join(".")' "$base_file") |
||||
|
total=$(echo "$base_keys" | wc -l) |
||||
|
|
||||
|
# Loop through all JSON files in the folder |
||||
|
for file in "$folder"/*.json; do |
||||
|
name=$(basename "$file" .json) |
||||
|
translated_keys=$(jq -r 'paths(scalars) | map(tostring) | join(".")' "$file") |
||||
|
done=$(comm -12 <(echo "$base_keys" | sort) <(echo "$translated_keys" | sort) | wc -l) |
||||
|
percent=$((100 * done / total)) |
||||
|
check="[ ]" |
||||
|
[ "$percent" -eq 100 ] && check="[x]" |
||||
|
printf "%s %s (%d%%)\n" "- $check" "$name" "$percent" |
||||
|
done |
||||
@ -0,0 +1,29 @@ |
|||||
|
<template> |
||||
|
<div class="overflow-x-auto rounded border-2 border-red-800 py-2"> |
||||
|
<pre |
||||
|
class="mx-2 inline-block" |
||||
|
@click="selectCode" |
||||
|
><code ref="codeBlock">{{ code }}</code></pre> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
defineProps<{ |
||||
|
code: string; |
||||
|
}>(); |
||||
|
|
||||
|
const codeBlock = useTemplateRef('codeBlock'); |
||||
|
|
||||
|
function selectCode() { |
||||
|
// TODO: keyboard support? |
||||
|
if (codeBlock.value) { |
||||
|
const range = document.createRange(); |
||||
|
range.selectNodeContents(codeBlock.value); |
||||
|
const sel = window.getSelection(); |
||||
|
if (sel) { |
||||
|
sel.removeAllRanges(); |
||||
|
sel.addRange(range); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
@ -0,0 +1,74 @@ |
|||||
|
<template> |
||||
|
<BaseDialog :trigger-class="triggerClass"> |
||||
|
<template #trigger> |
||||
|
<slot /> |
||||
|
</template> |
||||
|
<template #title> |
||||
|
{{ $t('client.config') }} |
||||
|
</template> |
||||
|
<template #description> |
||||
|
<div v-if="status === 'success'"> |
||||
|
<BaseCodeBlock :code="config ?? ''" /> |
||||
|
</div> |
||||
|
<div v-else> |
||||
|
<span>{{ $t('general.loading') }}</span> |
||||
|
</div> |
||||
|
</template> |
||||
|
<template #actions> |
||||
|
<DialogClose as-child> |
||||
|
<BaseSecondaryButton>{{ $t('dialog.cancel') }}</BaseSecondaryButton> |
||||
|
</DialogClose> |
||||
|
<DialogClose as-child> |
||||
|
<BasePrimaryButton @click="copyCode"> |
||||
|
{{ $t('copy.copy') }} |
||||
|
</BasePrimaryButton> |
||||
|
</DialogClose> |
||||
|
</template> |
||||
|
</BaseDialog> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
const props = defineProps<{ triggerClass?: string; clientId: number }>(); |
||||
|
|
||||
|
const toast = useToast(); |
||||
|
const { copied, copy, isSupported } = useClipboard({ |
||||
|
// fallback does not work |
||||
|
legacy: false, |
||||
|
}); |
||||
|
|
||||
|
const { data: config, status } = useFetch( |
||||
|
`/api/client/${props.clientId}/configuration`, |
||||
|
{ |
||||
|
responseType: 'text', |
||||
|
server: false, |
||||
|
} |
||||
|
); |
||||
|
|
||||
|
async function copyCode() { |
||||
|
if (status.value !== 'success') { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
if (!isSupported.value) { |
||||
|
toast.showToast({ |
||||
|
type: 'error', |
||||
|
message: $t('copy.notSupported'), |
||||
|
}); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
await copy(config.value ?? ''); |
||||
|
|
||||
|
if (copied.value) { |
||||
|
toast.showToast({ |
||||
|
type: 'success', |
||||
|
message: $t('copy.copied'), |
||||
|
}); |
||||
|
} else { |
||||
|
toast.showToast({ |
||||
|
type: 'error', |
||||
|
message: $t('copy.failed'), |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
@ -0,0 +1,28 @@ |
|||||
|
<template> |
||||
|
<div class="flex items-center"> |
||||
|
<FormLabel :for="id"> |
||||
|
{{ label }} |
||||
|
</FormLabel> |
||||
|
<BaseTooltip v-if="description" :text="description"> |
||||
|
<IconsInfo class="size-4" /> |
||||
|
</BaseTooltip> |
||||
|
</div> |
||||
|
<BaseInput :id="id" v-model.number="data" :name="id" type="number" /> |
||||
|
</template> |
||||
|
|
||||
|
<script lang="ts" setup> |
||||
|
defineProps<{ id: string; label: string; description?: string }>(); |
||||
|
|
||||
|
const data = defineModel<number | null>({ |
||||
|
set(value) { |
||||
|
const temp = value ?? null; |
||||
|
if (temp === 0) { |
||||
|
return null; |
||||
|
} |
||||
|
if ((temp as string | null) === '') { |
||||
|
return null; |
||||
|
} |
||||
|
return temp; |
||||
|
}, |
||||
|
}); |
||||
|
</script> |
||||
@ -0,0 +1,7 @@ |
|||||
|
<template> |
||||
|
<MagnifyingGlassIcon /> |
||||
|
</template> |
||||
|
|
||||
|
<script lang="ts" setup> |
||||
|
import MagnifyingGlassIcon from '@heroicons/vue/24/outline/esm/MagnifyingGlassIcon'; |
||||
|
</script> |
||||
@ -1,18 +1,25 @@ |
|||||
|
import type { H3Event } from 'h3'; |
||||
|
import type { SharedPublicUser } from '~~/shared/utils/permissions'; |
||||
|
|
||||
export const useAuthStore = defineStore('Auth', () => { |
export const useAuthStore = defineStore('Auth', () => { |
||||
const { data: userData, refresh: update } = useFetch('/api/session', { |
const userData = useState<SharedPublicUser | null>('user-data', () => null); |
||||
method: 'get', |
|
||||
}); |
|
||||
|
|
||||
async function getSession() { |
async function getSession(event?: H3Event) { |
||||
|
const fetch = event?.$fetch || $fetch; |
||||
try { |
try { |
||||
const { data } = await useFetch('/api/session', { |
const data = await fetch('/api/session', { |
||||
method: 'get', |
method: 'get', |
||||
}); |
}); |
||||
return data.value; |
return data; |
||||
} catch { |
} catch { |
||||
return null; |
return null; |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
|
async function update() { |
||||
|
const data = await getSession(); |
||||
|
userData.value = data; |
||||
|
} |
||||
|
|
||||
return { userData, update, getSession }; |
return { userData, update, getSession }; |
||||
}); |
}); |
||||
|
|||||
@ -0,0 +1,286 @@ |
|||||
|
{ |
||||
|
"pages": { |
||||
|
"me": "帳戶", |
||||
|
"clients": "用戶端", |
||||
|
"admin": { |
||||
|
"panel": "管理面板", |
||||
|
"general": "一般設定", |
||||
|
"config": "組態設定", |
||||
|
"interface": "介面設定", |
||||
|
"hooks": "Hook 設定" |
||||
|
} |
||||
|
}, |
||||
|
"user": { |
||||
|
"email": "電子郵件" |
||||
|
}, |
||||
|
"me": { |
||||
|
"currentPassword": "目前密碼", |
||||
|
"enable2fa": "啟用兩步驟驗證", |
||||
|
"enable2faDesc": "請使用您的驗證碼應用程式掃描 QR Code,或手動輸入金鑰。", |
||||
|
"2faKey": "TOTP 金鑰", |
||||
|
"2faCodeDesc": "請輸入驗證碼應用程式提供的驗證碼。", |
||||
|
"disable2fa": "停用兩步驟驗證", |
||||
|
"disable2faDesc": "請輸入您的密碼以停用兩步驟驗證。" |
||||
|
}, |
||||
|
"general": { |
||||
|
"name": "名稱", |
||||
|
"username": "使用者名稱", |
||||
|
"password": "密碼", |
||||
|
"newPassword": "新密碼", |
||||
|
"updatePassword": "更新密碼", |
||||
|
"mtu": "MTU", |
||||
|
"allowedIps": "允許的 IP", |
||||
|
"dns": "DNS", |
||||
|
"persistentKeepalive": "保持連線", |
||||
|
"logout": "登出", |
||||
|
"continue": "繼續", |
||||
|
"host": "主機", |
||||
|
"port": "連接埠", |
||||
|
"yes": "是", |
||||
|
"no": "否", |
||||
|
"confirmPassword": "確認密碼", |
||||
|
"loading": "正在載入...", |
||||
|
"2fa": "兩步驟驗證", |
||||
|
"2faCode": "TOTP 驗證碼" |
||||
|
}, |
||||
|
"setup": { |
||||
|
"welcome": "歡迎首次設定您的 wg-easy", |
||||
|
"welcomeDesc": "這是您在任何 Linux 主機上安裝與管理 WireGuard 最簡單的方式", |
||||
|
"existingSetup": "您已有現存的設定了嗎?", |
||||
|
"createAdminDesc": "請先輸入管理員使用者名稱與高強度密碼。此資訊將用於登入管理面板。", |
||||
|
"setupConfigDesc": "請輸入主機與連接埠資訊。此資訊將用於設定用戶端的 WireGuard 連線。", |
||||
|
"setupMigrationDesc": "若要從先前的 wg-easy 版本移轉資料,請提供備份檔案。", |
||||
|
"upload": "上傳", |
||||
|
"migration": "還原備份:", |
||||
|
"createAccount": "建立帳戶", |
||||
|
"successful": "設定成功", |
||||
|
"hostDesc": "用戶端將連線的公開主機名稱", |
||||
|
"portDesc": "用戶端將連線的公開 UDP 連接埠,且 WireGuard 會在此監聽" |
||||
|
}, |
||||
|
"update": { |
||||
|
"updateAvailable": "已有更新可供使用!", |
||||
|
"update": "更新" |
||||
|
}, |
||||
|
"theme": { |
||||
|
"dark": "深色佈景主題", |
||||
|
"light": "淺色佈景主題", |
||||
|
"system": "系統佈景主題" |
||||
|
}, |
||||
|
"layout": { |
||||
|
"toggleCharts": "顯示/隱藏圖表", |
||||
|
"donate": "贊助" |
||||
|
}, |
||||
|
"login": { |
||||
|
"signIn": "登入", |
||||
|
"rememberMe": "記住我", |
||||
|
"rememberMeDesc": "關閉瀏覽器後仍保持登入狀態", |
||||
|
"insecure": "您無法在不安全的連線下登入。請使用 HTTPS。", |
||||
|
"2faRequired": "需要兩步驟驗證", |
||||
|
"2faWrong": "兩步驟驗證碼不正確" |
||||
|
}, |
||||
|
"client": { |
||||
|
"empty": "尚無用戶端。", |
||||
|
"newShort": "新增", |
||||
|
"sort": "排序", |
||||
|
"create": "建立用戶端", |
||||
|
"created": "已建立用戶端", |
||||
|
"new": "新增用戶端", |
||||
|
"name": "名稱", |
||||
|
"expireDate": "到期日", |
||||
|
"expireDateDesc": "用戶端將被停用的日期。留白表示永久有效", |
||||
|
"delete": "刪除", |
||||
|
"deleteClient": "刪除用戶端", |
||||
|
"deleteDialog1": "您確定要刪除", |
||||
|
"deleteDialog2": "此動作無法復原。", |
||||
|
"enabled": "啟用", |
||||
|
"address": "位址", |
||||
|
"serverAllowedIps": "伺服器允許的 IP", |
||||
|
"otlDesc": "產生暫時性單次連結", |
||||
|
"permanent": "永久", |
||||
|
"createdOn": "建立於 ", |
||||
|
"lastSeen": "上次連線於 ", |
||||
|
"totalDownload": "總下載量: ", |
||||
|
"totalUpload": "總上傳量: ", |
||||
|
"newClient": "新增用戶端", |
||||
|
"disableClient": "停用用戶端", |
||||
|
"enableClient": "啟用用戶端", |
||||
|
"noPrivKey": "此用戶端沒有已知的私密金鑰,無法建立設定。", |
||||
|
"showQR": "顯示 QR Code", |
||||
|
"downloadConfig": "下載組態設定檔", |
||||
|
"allowedIpsDesc": "將透過 VPN 路由的 IP (會覆寫全域設定)", |
||||
|
"serverAllowedIpsDesc": "伺服器將路由至用戶端的 IP", |
||||
|
"mtuDesc": "設定 VPN 通道的最大傳輸單位 (封包大小)", |
||||
|
"persistentKeepaliveDesc": "Keep-alive 封包的間隔秒數。0 表示停用", |
||||
|
"hooks": "Hook 設定", |
||||
|
"hooksDescription": "Hook 設定僅適用於 wg-quick", |
||||
|
"hooksLeaveEmpty": "僅適用於 wg-quick,否則請保持空白", |
||||
|
"dnsDesc": "用戶端使用的 DNS 伺服器 (會覆寫全域設定)", |
||||
|
"notConnected": "用戶端未連線", |
||||
|
"endpoint": "端點", |
||||
|
"endpointDesc": "用戶端建立 WireGuard 連線的來源 IP", |
||||
|
"search": "搜尋用戶端...", |
||||
|
"config": "組態設定", |
||||
|
"viewConfig": "檢視組態設定" |
||||
|
}, |
||||
|
"dialog": { |
||||
|
"change": "變更", |
||||
|
"cancel": "取消", |
||||
|
"create": "建立" |
||||
|
}, |
||||
|
"toast": { |
||||
|
"success": "成功", |
||||
|
"saved": "已儲存", |
||||
|
"error": "錯誤" |
||||
|
}, |
||||
|
"form": { |
||||
|
"actions": "操作", |
||||
|
"save": "儲存", |
||||
|
"revert": "還原", |
||||
|
"sectionGeneral": "一般設定", |
||||
|
"sectionAdvanced": "進階設定", |
||||
|
"noItems": "沒有項目", |
||||
|
"nullNoItems": "沒有項目。使用全域設定", |
||||
|
"add": "新增" |
||||
|
}, |
||||
|
"admin": { |
||||
|
"general": { |
||||
|
"sessionTimeout": "工作階段逾時", |
||||
|
"sessionTimeoutDesc": "「記住我」的工作階段持續時間 (秒)", |
||||
|
"metrics": "計量", |
||||
|
"metricsPassword": "密碼", |
||||
|
"metricsPasswordDesc": "計量端點的 Bearer 密碼 (密碼或 argon2 雜湊)", |
||||
|
"json": "JSON", |
||||
|
"jsonDesc": "提供 JSON 格式計量的路由", |
||||
|
"prometheus": "Prometheus", |
||||
|
"prometheusDesc": "提供 Prometheus 計量的路由" |
||||
|
}, |
||||
|
"config": { |
||||
|
"connection": "連線", |
||||
|
"hostDesc": "用戶端將連線的公開主機名稱 (變更後會使目前組態設定檔失效)", |
||||
|
"portDesc": "用戶端將連線的公開 UDP 連接埠 (變更後會使目前組態設定檔失效,您可能也需要變更介面連接埠)", |
||||
|
"allowedIpsDesc": "用戶端將使用的允許 IP (全域設定)", |
||||
|
"dnsDesc": "用戶端將使用的 DNS 伺服器 (全域設定)", |
||||
|
"mtuDesc": "用戶端使用的 MTU (僅適用於新用戶端)", |
||||
|
"persistentKeepaliveDesc": "傳送 keepalive 的間隔秒數。以 0 表示停用 (僅適用於新用戶端)", |
||||
|
"suggest": "建議", |
||||
|
"suggestDesc": "為主機欄位選擇 IP 位址或主機名稱" |
||||
|
}, |
||||
|
"interface": { |
||||
|
"cidrSuccess": "已變更 CIDR", |
||||
|
"device": "裝置", |
||||
|
"deviceDesc": "用於轉送 WireGuard 流量的乙太網路裝置", |
||||
|
"mtuDesc": "WireGuard 將使用的 MTU", |
||||
|
"portDesc": "WireGuard 監聽的 UDP 連接埠 (您可能也需要變更連接埠組態設定檔)", |
||||
|
"changeCidr": "變更 CIDR", |
||||
|
"restart": "重新啟動介面", |
||||
|
"restartDesc": "重新啟動 WireGuard 介面", |
||||
|
"restartWarn": "您確定要重新啟動介面嗎? 所有用戶端將被中斷連線。", |
||||
|
"restartSuccess": "介面已重新啟動" |
||||
|
}, |
||||
|
"introText": "歡迎使用管理面板。\n\n您可在此管理一般、組態、介面與 Hook 設定。\n\n請從側邊欄選擇任一項目開始。" |
||||
|
}, |
||||
|
"zod": { |
||||
|
"generic": { |
||||
|
"required": "{0} 為必填項目", |
||||
|
"validNumber": "{0} 必須為有效的數字", |
||||
|
"validString": "{0} 必須為有效的字串", |
||||
|
"validBoolean": "{0} 必須為有效的布林值", |
||||
|
"validArray": "{0} 必須為有效的陣列", |
||||
|
"stringMin": "{0} 至少需要 {1} 個字元", |
||||
|
"numberMin": "{0} 不能小於 {1}" |
||||
|
}, |
||||
|
"client": { |
||||
|
"id": "用戶端 ID", |
||||
|
"name": "名稱", |
||||
|
"expiresAt": "到期時間", |
||||
|
"address4": "IPv4 位址", |
||||
|
"address6": "IPv6 位址", |
||||
|
"serverAllowedIps": "伺服器允許的 IP" |
||||
|
}, |
||||
|
"user": { |
||||
|
"username": "使用者名稱", |
||||
|
"password": "密碼", |
||||
|
"remember": "記住我", |
||||
|
"name": "名稱", |
||||
|
"email": "電子郵件", |
||||
|
"emailInvalid": "電子郵件格式無效", |
||||
|
"passwordMatch": "密碼必須一致", |
||||
|
"totpEnable": "啟用 TOTP", |
||||
|
"totpEnableTrue": "必須啟用 TOTP", |
||||
|
"totpCode": "TOTP 驗證碼" |
||||
|
}, |
||||
|
"userConfig": { |
||||
|
"host": "主機" |
||||
|
}, |
||||
|
"general": { |
||||
|
"sessionTimeout": "工作階段逾時", |
||||
|
"metricsEnabled": "計量", |
||||
|
"metricsPassword": "計量密碼" |
||||
|
}, |
||||
|
"interface": { |
||||
|
"cidr": "CIDR", |
||||
|
"device": "裝置", |
||||
|
"cidrValid": "CIDR 格式無效" |
||||
|
}, |
||||
|
"otl": "單次連結", |
||||
|
"stringMalformed": "字串格式錯誤", |
||||
|
"body": "Body 必須為有效的物件", |
||||
|
"hook": "Hook", |
||||
|
"enabled": "啟用", |
||||
|
"mtu": "MTU", |
||||
|
"port": "連接埠", |
||||
|
"persistentKeepalive": "保持連線", |
||||
|
"address": "IP 位址", |
||||
|
"dns": "DNS", |
||||
|
"allowedIps": "允許的 IP", |
||||
|
"file": "檔案" |
||||
|
}, |
||||
|
"hooks": { |
||||
|
"preUp": "PreUp", |
||||
|
"postUp": "PostUp", |
||||
|
"preDown": "PreDown", |
||||
|
"postDown": "PostDown" |
||||
|
}, |
||||
|
"copy": { |
||||
|
"notSupported": "無法複製", |
||||
|
"copied": "已複製!", |
||||
|
"failed": "複製失敗", |
||||
|
"copy": "複製" |
||||
|
}, |
||||
|
"awg": { |
||||
|
"jCLabel": "填充封包數量 (Jc)", |
||||
|
"jCDescription": "要傳送的填充封包數量 (1-128,建議: 4-12)", |
||||
|
"jMinLabel": "填充封包最小大小 (Jmin)", |
||||
|
"jMinDescription": "填充封包的最小大小 (0-1279*,建議: 8,必須小於 Jmax)", |
||||
|
"jMaxLabel": "填充封包最大大小 (Jmax)", |
||||
|
"jMaxDescription": "填充封包的最大大小 (1-1280*,建議: 80,必須大於 Jmin)", |
||||
|
"s1Label": "初始封包填充大小 (S1)", |
||||
|
"s1Description": "初始封包填充大小 (0-1132 [1280* - 148 = 1132],建議: 15-150,S1+56 ≠ S2)", |
||||
|
"s2Label": "回應封包填充大小 (S2)", |
||||
|
"s2Description": "回應封包填充大小 (0-1188 [1280* - 92 = 1188],建議: 15-150)", |
||||
|
"s3Label": "Cookie 回覆封包填充大小 (S3)", |
||||
|
"s3Description": "Cookie 回覆封包填充大小", |
||||
|
"s4Label": "傳輸封包填充大小 (S4)", |
||||
|
"s4Description": "傳輸封包填充大小", |
||||
|
"i1Label": "特殊填充封包 1 (I1)", |
||||
|
"i1Description": "協定模仿封包 (16 進位格式): <b 0x...>", |
||||
|
"i2Label": "特殊填充封包 2 (I2)", |
||||
|
"i2Description": "協定模仿封包 (16 進位格式): <b 0x...>", |
||||
|
"i3Label": "特殊填充封包 3 (I3)", |
||||
|
"i3Description": "協定模仿封包 (16 進位格式): <b 0x...>", |
||||
|
"i4Label": "特殊填充封包 4 (I4)", |
||||
|
"i4Description": "協定模仿封包 (16 進位格式): <b 0x...>", |
||||
|
"i5Label": "特殊填充封包 5 (I5)", |
||||
|
"i5Description": "協定模仿封包 (16 進位格式): <b 0x...>", |
||||
|
"h1Label": "初始特徵標頭 (H1)", |
||||
|
"h1Description": "初始封包標頭值 (5-2147483647,必須與 H2-H4 不同)", |
||||
|
"h2Label": "回應特徵標頭 (H2)", |
||||
|
"h2Description": "回應封包標頭值 (5-2147483647,必須與 H1、H3、H4 不同)", |
||||
|
"h3Label": "Cookie 回覆特徵標頭 (H3)", |
||||
|
"h3Description": "Cookie 回覆封包標頭值 (5-2147483647,必須與 H1、H2、H4 不同)", |
||||
|
"h4Label": "傳輸特徵標頭 (H4)", |
||||
|
"h4Description": "傳輸封包標頭值 (5-2147483647,必須與 H1-H3 不同)", |
||||
|
"mtuNote": "數值取決於 MTU", |
||||
|
"obfuscationParameters": "AmneziaWG 混淆參數" |
||||
|
} |
||||
|
} |
||||
@ -1,6 +1,6 @@ |
|||||
{ |
{ |
||||
"name": "wg-easy", |
"name": "wg-easy", |
||||
"version": "15.1.0", |
"version": "15.2.1", |
||||
"description": "The easiest way to run WireGuard VPN + Web-based Admin UI.", |
"description": "The easiest way to run WireGuard VPN + Web-based Admin UI.", |
||||
"private": true, |
"private": true, |
||||
"type": "module", |
"type": "module", |
||||
@ -22,57 +22,52 @@ |
|||||
"dependencies": { |
"dependencies": { |
||||
"@eschricht/nuxt-color-mode": "^1.2.0", |
"@eschricht/nuxt-color-mode": "^1.2.0", |
||||
"@heroicons/vue": "^2.2.0", |
"@heroicons/vue": "^2.2.0", |
||||
"@libsql/client": "^0.15.15", |
"@libsql/client": "^0.17.0", |
||||
"@nuxtjs/i18n": "^10.1.1", |
"@nuxtjs/i18n": "^10.2.1", |
||||
"@nuxtjs/tailwindcss": "^6.14.0", |
"@nuxtjs/tailwindcss": "^6.14.0", |
||||
"@phc/format": "^1.0.0", |
"@phc/format": "^1.0.0", |
||||
"@pinia/nuxt": "^0.11.2", |
"@pinia/nuxt": "^0.11.3", |
||||
"@tailwindcss/forms": "^0.5.10", |
"@tailwindcss/forms": "^0.5.11", |
||||
"@vueuse/core": "^13.9.0", |
"@vueuse/core": "^14.1.0", |
||||
"@vueuse/nuxt": "^13.9.0", |
"@vueuse/nuxt": "^14.1.0", |
||||
"apexcharts": "^5.3.5", |
"apexcharts": "^5.3.6", |
||||
"argon2": "^0.44.0", |
"argon2": "^0.44.0", |
||||
"cidr-tools": "^11.0.3", |
"cidr-tools": "^11.0.3", |
||||
"citty": "^0.1.6", |
"citty": "^0.1.6", |
||||
"consola": "^3.4.2", |
"consola": "^3.4.2", |
||||
"crc-32": "^1.2.2", |
"crc-32": "^1.2.2", |
||||
"debug": "^4.4.3", |
"debug": "^4.4.3", |
||||
"drizzle-orm": "^0.44.6", |
"drizzle-orm": "^0.45.1", |
||||
"ip-bigint": "^8.2.2", |
"ip-bigint": "^8.2.2", |
||||
"is-cidr": "^6.0.1", |
"is-cidr": "^6.0.1", |
||||
"is-ip": "^5.0.1", |
"is-ip": "^5.0.1", |
||||
"js-sha256": "^0.11.1", |
"js-sha256": "^0.11.1", |
||||
"nuxt": "^3.19.3", |
"nuxt": "^3.20.2", |
||||
"otpauth": "^9.4.1", |
"otpauth": "^9.4.1", |
||||
"pinia": "^3.0.3", |
"pinia": "^3.0.4", |
||||
"qr": "^0.5.2", |
"qr": "^0.5.4", |
||||
"radix-vue": "^1.9.17", |
"radix-vue": "^1.9.17", |
||||
"semver": "^7.7.3", |
"semver": "^7.7.3", |
||||
"tailwindcss": "^3.4.18", |
"tailwindcss": "^3.4.19", |
||||
"timeago.js": "^4.0.2", |
"timeago.js": "^4.0.2", |
||||
"vue": "latest", |
"vue": "latest", |
||||
"vue3-apexcharts": "^1.10.0", |
"vue3-apexcharts": "^1.10.0", |
||||
"zod": "^4.1.12" |
"zod": "^4.3.5" |
||||
}, |
}, |
||||
"devDependencies": { |
"devDependencies": { |
||||
"@nuxt/eslint": "^1.9.0", |
"@nuxt/eslint": "^1.12.1", |
||||
"@types/debug": "^4.1.12", |
"@types/debug": "^4.1.12", |
||||
"@types/phc__format": "^1.0.1", |
"@types/phc__format": "^1.0.1", |
||||
"@types/semver": "^7.7.1", |
"@types/semver": "^7.7.1", |
||||
"drizzle-kit": "^0.31.5", |
"drizzle-kit": "^0.31.8", |
||||
"esbuild": "^0.25.11", |
"esbuild": "^0.27.2", |
||||
"eslint": "^9.38.0", |
"eslint": "^9.39.2", |
||||
"eslint-config-prettier": "^10.1.8", |
"eslint-config-prettier": "^10.1.8", |
||||
"prettier": "^3.6.2", |
"prettier": "^3.8.0", |
||||
"prettier-plugin-tailwindcss": "^0.7.1", |
"prettier-plugin-tailwindcss": "^0.7.2", |
||||
"tsx": "^4.20.6", |
"tsx": "^4.21.0", |
||||
"typescript": "^5.9.3", |
"typescript": "^5.9.3", |
||||
"vue-tsc": "^3.1.1" |
"vue-tsc": "^3.2.2" |
||||
}, |
}, |
||||
"packageManager": "[email protected]", |
"packageManager": "[email protected]" |
||||
"pnpm": { |
|
||||
"overrides": { |
|
||||
"rollup": "4.50.0" |
|
||||
} |
|
||||
} |
|
||||
} |
} |
||||
|
|||||
File diff suppressed because it is too large
@ -0,0 +1,32 @@ |
|||||
|
ALTER TABLE `clients_table` ADD `j_c` integer;--> statement-breakpoint |
||||
|
ALTER TABLE `clients_table` ADD `j_min` integer;--> statement-breakpoint |
||||
|
ALTER TABLE `clients_table` ADD `j_max` integer;--> statement-breakpoint |
||||
|
ALTER TABLE `clients_table` ADD `i1` text;--> statement-breakpoint |
||||
|
ALTER TABLE `clients_table` ADD `i2` text;--> statement-breakpoint |
||||
|
ALTER TABLE `clients_table` ADD `i3` text;--> statement-breakpoint |
||||
|
ALTER TABLE `clients_table` ADD `i4` text;--> statement-breakpoint |
||||
|
ALTER TABLE `clients_table` ADD `i5` text;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `j_c` integer DEFAULT 7;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `j_min` integer DEFAULT 10;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `j_max` integer DEFAULT 1000;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `s1` integer DEFAULT 128;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `s2` integer DEFAULT 56;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `s3` integer;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `s4` integer;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `i1` text;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `i2` text;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `i3` text;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `i4` text;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `i5` text;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `h1` integer DEFAULT 0;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `h2` integer DEFAULT 0;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `h3` integer DEFAULT 0;--> statement-breakpoint |
||||
|
ALTER TABLE `interfaces_table` ADD `h4` integer DEFAULT 0;--> statement-breakpoint |
||||
|
ALTER TABLE `user_configs_table` ADD `default_j_c` integer DEFAULT 7;--> statement-breakpoint |
||||
|
ALTER TABLE `user_configs_table` ADD `default_j_min` integer DEFAULT 10;--> statement-breakpoint |
||||
|
ALTER TABLE `user_configs_table` ADD `default_j_max` integer DEFAULT 1000;--> statement-breakpoint |
||||
|
ALTER TABLE `user_configs_table` ADD `default_i1` text;--> statement-breakpoint |
||||
|
ALTER TABLE `user_configs_table` ADD `default_i2` text;--> statement-breakpoint |
||||
|
ALTER TABLE `user_configs_table` ADD `default_i3` text;--> statement-breakpoint |
||||
|
ALTER TABLE `user_configs_table` ADD `default_i4` text;--> statement-breakpoint |
||||
|
ALTER TABLE `user_configs_table` ADD `default_i5` text; |
||||
@ -0,0 +1,976 @@ |
|||||
|
{ |
||||
|
"version": "6", |
||||
|
"dialect": "sqlite", |
||||
|
"id": "e09bc17a-dab6-45a3-a09c-57af222b08fb", |
||||
|
"prevId": "78de2e52-c4a8-4900-86c5-92f34739623a", |
||||
|
"tables": { |
||||
|
"clients_table": { |
||||
|
"name": "clients_table", |
||||
|
"columns": { |
||||
|
"id": { |
||||
|
"name": "id", |
||||
|
"type": "integer", |
||||
|
"primaryKey": true, |
||||
|
"notNull": true, |
||||
|
"autoincrement": true |
||||
|
}, |
||||
|
"user_id": { |
||||
|
"name": "user_id", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"interface_id": { |
||||
|
"name": "interface_id", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"name": { |
||||
|
"name": "name", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"ipv4_address": { |
||||
|
"name": "ipv4_address", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"ipv6_address": { |
||||
|
"name": "ipv6_address", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"pre_up": { |
||||
|
"name": "pre_up", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "''" |
||||
|
}, |
||||
|
"post_up": { |
||||
|
"name": "post_up", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "''" |
||||
|
}, |
||||
|
"pre_down": { |
||||
|
"name": "pre_down", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "''" |
||||
|
}, |
||||
|
"post_down": { |
||||
|
"name": "post_down", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "''" |
||||
|
}, |
||||
|
"private_key": { |
||||
|
"name": "private_key", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"public_key": { |
||||
|
"name": "public_key", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"pre_shared_key": { |
||||
|
"name": "pre_shared_key", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"expires_at": { |
||||
|
"name": "expires_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"allowed_ips": { |
||||
|
"name": "allowed_ips", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"server_allowed_ips": { |
||||
|
"name": "server_allowed_ips", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"persistent_keepalive": { |
||||
|
"name": "persistent_keepalive", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"mtu": { |
||||
|
"name": "mtu", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"j_c": { |
||||
|
"name": "j_c", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"j_min": { |
||||
|
"name": "j_min", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"j_max": { |
||||
|
"name": "j_max", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"i1": { |
||||
|
"name": "i1", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"i2": { |
||||
|
"name": "i2", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"i3": { |
||||
|
"name": "i3", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"i4": { |
||||
|
"name": "i4", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"i5": { |
||||
|
"name": "i5", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"dns": { |
||||
|
"name": "dns", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"server_endpoint": { |
||||
|
"name": "server_endpoint", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"enabled": { |
||||
|
"name": "enabled", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"created_at": { |
||||
|
"name": "created_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "(CURRENT_TIMESTAMP)" |
||||
|
}, |
||||
|
"updated_at": { |
||||
|
"name": "updated_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "(CURRENT_TIMESTAMP)" |
||||
|
} |
||||
|
}, |
||||
|
"indexes": { |
||||
|
"clients_table_ipv4_address_unique": { |
||||
|
"name": "clients_table_ipv4_address_unique", |
||||
|
"columns": [ |
||||
|
"ipv4_address" |
||||
|
], |
||||
|
"isUnique": true |
||||
|
}, |
||||
|
"clients_table_ipv6_address_unique": { |
||||
|
"name": "clients_table_ipv6_address_unique", |
||||
|
"columns": [ |
||||
|
"ipv6_address" |
||||
|
], |
||||
|
"isUnique": true |
||||
|
} |
||||
|
}, |
||||
|
"foreignKeys": { |
||||
|
"clients_table_user_id_users_table_id_fk": { |
||||
|
"name": "clients_table_user_id_users_table_id_fk", |
||||
|
"tableFrom": "clients_table", |
||||
|
"tableTo": "users_table", |
||||
|
"columnsFrom": [ |
||||
|
"user_id" |
||||
|
], |
||||
|
"columnsTo": [ |
||||
|
"id" |
||||
|
], |
||||
|
"onDelete": "restrict", |
||||
|
"onUpdate": "cascade" |
||||
|
}, |
||||
|
"clients_table_interface_id_interfaces_table_name_fk": { |
||||
|
"name": "clients_table_interface_id_interfaces_table_name_fk", |
||||
|
"tableFrom": "clients_table", |
||||
|
"tableTo": "interfaces_table", |
||||
|
"columnsFrom": [ |
||||
|
"interface_id" |
||||
|
], |
||||
|
"columnsTo": [ |
||||
|
"name" |
||||
|
], |
||||
|
"onDelete": "cascade", |
||||
|
"onUpdate": "cascade" |
||||
|
} |
||||
|
}, |
||||
|
"compositePrimaryKeys": {}, |
||||
|
"uniqueConstraints": {}, |
||||
|
"checkConstraints": {} |
||||
|
}, |
||||
|
"general_table": { |
||||
|
"name": "general_table", |
||||
|
"columns": { |
||||
|
"id": { |
||||
|
"name": "id", |
||||
|
"type": "integer", |
||||
|
"primaryKey": true, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": 1 |
||||
|
}, |
||||
|
"setup_step": { |
||||
|
"name": "setup_step", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"session_password": { |
||||
|
"name": "session_password", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"session_timeout": { |
||||
|
"name": "session_timeout", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"metrics_prometheus": { |
||||
|
"name": "metrics_prometheus", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"metrics_json": { |
||||
|
"name": "metrics_json", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"metrics_password": { |
||||
|
"name": "metrics_password", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"created_at": { |
||||
|
"name": "created_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "(CURRENT_TIMESTAMP)" |
||||
|
}, |
||||
|
"updated_at": { |
||||
|
"name": "updated_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "(CURRENT_TIMESTAMP)" |
||||
|
} |
||||
|
}, |
||||
|
"indexes": {}, |
||||
|
"foreignKeys": {}, |
||||
|
"compositePrimaryKeys": {}, |
||||
|
"uniqueConstraints": {}, |
||||
|
"checkConstraints": {} |
||||
|
}, |
||||
|
"hooks_table": { |
||||
|
"name": "hooks_table", |
||||
|
"columns": { |
||||
|
"id": { |
||||
|
"name": "id", |
||||
|
"type": "text", |
||||
|
"primaryKey": true, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"pre_up": { |
||||
|
"name": "pre_up", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"post_up": { |
||||
|
"name": "post_up", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"pre_down": { |
||||
|
"name": "pre_down", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"post_down": { |
||||
|
"name": "post_down", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"created_at": { |
||||
|
"name": "created_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "(CURRENT_TIMESTAMP)" |
||||
|
}, |
||||
|
"updated_at": { |
||||
|
"name": "updated_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "(CURRENT_TIMESTAMP)" |
||||
|
} |
||||
|
}, |
||||
|
"indexes": {}, |
||||
|
"foreignKeys": { |
||||
|
"hooks_table_id_interfaces_table_name_fk": { |
||||
|
"name": "hooks_table_id_interfaces_table_name_fk", |
||||
|
"tableFrom": "hooks_table", |
||||
|
"tableTo": "interfaces_table", |
||||
|
"columnsFrom": [ |
||||
|
"id" |
||||
|
], |
||||
|
"columnsTo": [ |
||||
|
"name" |
||||
|
], |
||||
|
"onDelete": "cascade", |
||||
|
"onUpdate": "cascade" |
||||
|
} |
||||
|
}, |
||||
|
"compositePrimaryKeys": {}, |
||||
|
"uniqueConstraints": {}, |
||||
|
"checkConstraints": {} |
||||
|
}, |
||||
|
"interfaces_table": { |
||||
|
"name": "interfaces_table", |
||||
|
"columns": { |
||||
|
"name": { |
||||
|
"name": "name", |
||||
|
"type": "text", |
||||
|
"primaryKey": true, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"device": { |
||||
|
"name": "device", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"port": { |
||||
|
"name": "port", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"private_key": { |
||||
|
"name": "private_key", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"public_key": { |
||||
|
"name": "public_key", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"ipv4_cidr": { |
||||
|
"name": "ipv4_cidr", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"ipv6_cidr": { |
||||
|
"name": "ipv6_cidr", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"mtu": { |
||||
|
"name": "mtu", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"j_c": { |
||||
|
"name": "j_c", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false, |
||||
|
"default": 7 |
||||
|
}, |
||||
|
"j_min": { |
||||
|
"name": "j_min", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false, |
||||
|
"default": 10 |
||||
|
}, |
||||
|
"j_max": { |
||||
|
"name": "j_max", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false, |
||||
|
"default": 1000 |
||||
|
}, |
||||
|
"s1": { |
||||
|
"name": "s1", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false, |
||||
|
"default": 128 |
||||
|
}, |
||||
|
"s2": { |
||||
|
"name": "s2", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false, |
||||
|
"default": 56 |
||||
|
}, |
||||
|
"s3": { |
||||
|
"name": "s3", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"s4": { |
||||
|
"name": "s4", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"i1": { |
||||
|
"name": "i1", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"i2": { |
||||
|
"name": "i2", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"i3": { |
||||
|
"name": "i3", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"i4": { |
||||
|
"name": "i4", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"i5": { |
||||
|
"name": "i5", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"h1": { |
||||
|
"name": "h1", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false, |
||||
|
"default": 0 |
||||
|
}, |
||||
|
"h2": { |
||||
|
"name": "h2", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false, |
||||
|
"default": 0 |
||||
|
}, |
||||
|
"h3": { |
||||
|
"name": "h3", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false, |
||||
|
"default": 0 |
||||
|
}, |
||||
|
"h4": { |
||||
|
"name": "h4", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false, |
||||
|
"default": 0 |
||||
|
}, |
||||
|
"enabled": { |
||||
|
"name": "enabled", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"created_at": { |
||||
|
"name": "created_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "(CURRENT_TIMESTAMP)" |
||||
|
}, |
||||
|
"updated_at": { |
||||
|
"name": "updated_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "(CURRENT_TIMESTAMP)" |
||||
|
} |
||||
|
}, |
||||
|
"indexes": { |
||||
|
"interfaces_table_port_unique": { |
||||
|
"name": "interfaces_table_port_unique", |
||||
|
"columns": [ |
||||
|
"port" |
||||
|
], |
||||
|
"isUnique": true |
||||
|
} |
||||
|
}, |
||||
|
"foreignKeys": {}, |
||||
|
"compositePrimaryKeys": {}, |
||||
|
"uniqueConstraints": {}, |
||||
|
"checkConstraints": {} |
||||
|
}, |
||||
|
"one_time_links_table": { |
||||
|
"name": "one_time_links_table", |
||||
|
"columns": { |
||||
|
"id": { |
||||
|
"name": "id", |
||||
|
"type": "integer", |
||||
|
"primaryKey": true, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"one_time_link": { |
||||
|
"name": "one_time_link", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"expires_at": { |
||||
|
"name": "expires_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"created_at": { |
||||
|
"name": "created_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "(CURRENT_TIMESTAMP)" |
||||
|
}, |
||||
|
"updated_at": { |
||||
|
"name": "updated_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "(CURRENT_TIMESTAMP)" |
||||
|
} |
||||
|
}, |
||||
|
"indexes": { |
||||
|
"one_time_links_table_one_time_link_unique": { |
||||
|
"name": "one_time_links_table_one_time_link_unique", |
||||
|
"columns": [ |
||||
|
"one_time_link" |
||||
|
], |
||||
|
"isUnique": true |
||||
|
} |
||||
|
}, |
||||
|
"foreignKeys": { |
||||
|
"one_time_links_table_id_clients_table_id_fk": { |
||||
|
"name": "one_time_links_table_id_clients_table_id_fk", |
||||
|
"tableFrom": "one_time_links_table", |
||||
|
"tableTo": "clients_table", |
||||
|
"columnsFrom": [ |
||||
|
"id" |
||||
|
], |
||||
|
"columnsTo": [ |
||||
|
"id" |
||||
|
], |
||||
|
"onDelete": "cascade", |
||||
|
"onUpdate": "cascade" |
||||
|
} |
||||
|
}, |
||||
|
"compositePrimaryKeys": {}, |
||||
|
"uniqueConstraints": {}, |
||||
|
"checkConstraints": {} |
||||
|
}, |
||||
|
"users_table": { |
||||
|
"name": "users_table", |
||||
|
"columns": { |
||||
|
"id": { |
||||
|
"name": "id", |
||||
|
"type": "integer", |
||||
|
"primaryKey": true, |
||||
|
"notNull": true, |
||||
|
"autoincrement": true |
||||
|
}, |
||||
|
"username": { |
||||
|
"name": "username", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"password": { |
||||
|
"name": "password", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"email": { |
||||
|
"name": "email", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"name": { |
||||
|
"name": "name", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"role": { |
||||
|
"name": "role", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"totp_key": { |
||||
|
"name": "totp_key", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"totp_verified": { |
||||
|
"name": "totp_verified", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"enabled": { |
||||
|
"name": "enabled", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"created_at": { |
||||
|
"name": "created_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "(CURRENT_TIMESTAMP)" |
||||
|
}, |
||||
|
"updated_at": { |
||||
|
"name": "updated_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "(CURRENT_TIMESTAMP)" |
||||
|
} |
||||
|
}, |
||||
|
"indexes": { |
||||
|
"users_table_username_unique": { |
||||
|
"name": "users_table_username_unique", |
||||
|
"columns": [ |
||||
|
"username" |
||||
|
], |
||||
|
"isUnique": true |
||||
|
} |
||||
|
}, |
||||
|
"foreignKeys": {}, |
||||
|
"compositePrimaryKeys": {}, |
||||
|
"uniqueConstraints": {}, |
||||
|
"checkConstraints": {} |
||||
|
}, |
||||
|
"user_configs_table": { |
||||
|
"name": "user_configs_table", |
||||
|
"columns": { |
||||
|
"id": { |
||||
|
"name": "id", |
||||
|
"type": "text", |
||||
|
"primaryKey": true, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"default_mtu": { |
||||
|
"name": "default_mtu", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"default_persistent_keepalive": { |
||||
|
"name": "default_persistent_keepalive", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"default_dns": { |
||||
|
"name": "default_dns", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"default_allowed_ips": { |
||||
|
"name": "default_allowed_ips", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"default_j_c": { |
||||
|
"name": "default_j_c", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false, |
||||
|
"default": 7 |
||||
|
}, |
||||
|
"default_j_min": { |
||||
|
"name": "default_j_min", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false, |
||||
|
"default": 10 |
||||
|
}, |
||||
|
"default_j_max": { |
||||
|
"name": "default_j_max", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false, |
||||
|
"default": 1000 |
||||
|
}, |
||||
|
"default_i1": { |
||||
|
"name": "default_i1", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"default_i2": { |
||||
|
"name": "default_i2", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"default_i3": { |
||||
|
"name": "default_i3", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"default_i4": { |
||||
|
"name": "default_i4", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"default_i5": { |
||||
|
"name": "default_i5", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": false, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"host": { |
||||
|
"name": "host", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"port": { |
||||
|
"name": "port", |
||||
|
"type": "integer", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false |
||||
|
}, |
||||
|
"created_at": { |
||||
|
"name": "created_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "(CURRENT_TIMESTAMP)" |
||||
|
}, |
||||
|
"updated_at": { |
||||
|
"name": "updated_at", |
||||
|
"type": "text", |
||||
|
"primaryKey": false, |
||||
|
"notNull": true, |
||||
|
"autoincrement": false, |
||||
|
"default": "(CURRENT_TIMESTAMP)" |
||||
|
} |
||||
|
}, |
||||
|
"indexes": {}, |
||||
|
"foreignKeys": { |
||||
|
"user_configs_table_id_interfaces_table_name_fk": { |
||||
|
"name": "user_configs_table_id_interfaces_table_name_fk", |
||||
|
"tableFrom": "user_configs_table", |
||||
|
"tableTo": "interfaces_table", |
||||
|
"columnsFrom": [ |
||||
|
"id" |
||||
|
], |
||||
|
"columnsTo": [ |
||||
|
"name" |
||||
|
], |
||||
|
"onDelete": "cascade", |
||||
|
"onUpdate": "cascade" |
||||
|
} |
||||
|
}, |
||||
|
"compositePrimaryKeys": {}, |
||||
|
"uniqueConstraints": {}, |
||||
|
"checkConstraints": {} |
||||
|
} |
||||
|
}, |
||||
|
"views": {}, |
||||
|
"enums": {}, |
||||
|
"_meta": { |
||||
|
"schemas": {}, |
||||
|
"tables": {}, |
||||
|
"columns": {} |
||||
|
}, |
||||
|
"internal": { |
||||
|
"indexes": {} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue