diff --git a/src/app/pages/admin/interface.vue b/src/app/pages/admin/interface.vue index fd4d7eeb..f14ad60d 100644 --- a/src/app/pages/admin/interface.vue +++ b/src/app/pages/admin/interface.vue @@ -69,6 +69,30 @@ :label="$t('awg.s4Label')" :description="$t('awg.s4Description')" /> + + + + - - - - {{ $t('form.actions') }} diff --git a/src/i18n/locales/bg.json b/src/i18n/locales/bg.json index bc1dc518..a79b2bef 100644 --- a/src/i18n/locales/bg.json +++ b/src/i18n/locales/bg.json @@ -262,6 +262,14 @@ "s3Description": "Размер на junk в cookie reply пакета", "s4Label": "Размер на junk в транспортния пакет (S4)", "s4Description": "Размер на junk в транспортния пакет", + "h1Label": "Init magic header (H1)", + "h1Description": "Стойност на хедера в init пакета (5–2147483647, уникална спрямо H2–H4)", + "h2Label": "Response magic header (H2)", + "h2Description": "Стойност на хедера в response пакета (5–2147483647, уникална спрямо H1, H3, H4)", + "h3Label": "Cookie reply magic header (H3)", + "h3Description": "Стойност на хедера в cookie reply пакета (5–2147483647, уникална спрямо H1, H2, H4)", + "h4Label": "Transport magic header (H4)", + "h4Description": "Стойност на хедера в транспортния пакет (5–2147483647, уникална спрямо H1–H3)", "i1Label": "Специален junk пакет 1 (I1)", "i1Description": "Пакет за имитация на протокол в hex формат: ", "i2Label": "Специален junk пакет 2 (I2)", @@ -272,14 +280,6 @@ "i4Description": "Пакет за имитация на протокол в hex формат: ", "i5Label": "Специален junk пакет 5 (I5)", "i5Description": "Пакет за имитация на протокол в hex формат: ", - "h1Label": "Init magic header (H1)", - "h1Description": "Стойност на хедера в init пакета (5–2147483647, уникална спрямо H2–H4)", - "h2Label": "Response magic header (H2)", - "h2Description": "Стойност на хедера в response пакета (5–2147483647, уникална спрямо H1, H3, H4)", - "h3Label": "Cookie reply magic header (H3)", - "h3Description": "Стойност на хедера в cookie reply пакета (5–2147483647, уникална спрямо H1, H2, H4)", - "h4Label": "Transport magic header (H4)", - "h4Description": "Стойност на хедера в транспортния пакет (5–2147483647, уникална спрямо H1–H3)", "mtuNote": "Стойностите зависят от MTU", "obfuscationParameters": "Параметри за обфускация на AmneziaWG" } diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index 47adc8a2..57bd01fa 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -262,6 +262,14 @@ "s3Description": "Junk-Paketgröße des Cookie-Antwort-Pakets", "s4Label": "Junk-Paketgröße des Transport-Pakets (S4)", "s4Description": "Junk-Paketgröße des Transport-Pakets", + "h1Label": "Init-Magic-Header (H1)", + "h1Description": "Wert des Init-Paket-Headers (5-2147483647, muss eindeutig zu H2-H4 sein)", + "h2Label": "Antwort-Magic-Header (H2)", + "h2Description": "Wert des Antwort-Paket-Headers (5-2147483647, muss eindeutig zu H1, H3, H4 sein)", + "h3Label": "Cookie-Antwort-Magic-Header (H3)", + "h3Description": "Wert des Cookie-Antwort-Paket-Headers (5-2147483647, muss eindeutig zu H1, H2, H4 sein)", + "h4Label": "Transport-Magic-Header (H4)", + "h4Description": "Wert des Transport-Paket-Headers (5-2147483647, muss eindeutig zu H1-H3 sein)", "i1Label": "Spezial-Junk-Paket 1 (I1)", "i1Description": "Protokoll-Nachahmungspaket im Hex-Format: ", "i2Label": "Spezial-Junk-Paket 2 (I2)", @@ -272,14 +280,6 @@ "i4Description": "Protokoll-Nachahmungspaket im Hex-Format: ", "i5Label": "Spezial-Junk-Paket 5 (I5)", "i5Description": "Protokoll-Nachahmungspaket im Hex-Format: ", - "h1Label": "Init-Magic-Header (H1)", - "h1Description": "Wert des Init-Paket-Headers (5-2147483647, muss eindeutig zu H2-H4 sein)", - "h2Label": "Antwort-Magic-Header (H2)", - "h2Description": "Wert des Antwort-Paket-Headers (5-2147483647, muss eindeutig zu H1, H3, H4 sein)", - "h3Label": "Cookie-Antwort-Magic-Header (H3)", - "h3Description": "Wert des Cookie-Antwort-Paket-Headers (5-2147483647, muss eindeutig zu H1, H2, H4 sein)", - "h4Label": "Transport-Magic-Header (H4)", - "h4Description": "Wert des Transport-Paket-Headers (5-2147483647, muss eindeutig zu H1-H3 sein)", "mtuNote": "Werte hängen von der MTU ab", "obfuscationParameters": "AmneziaWG Verschleierungsparameter" } diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 17fc3f7f..dbed156d 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -183,6 +183,7 @@ "generic": { "required": "{0} is required", "validNumber": "{0} must be a valid number", + "validNumberRange": "{0} must be a valid number or number range", "validString": "{0} must be a valid string", "validBoolean": "{0} must be a valid boolean", "validArray": "{0} must be a valid array", @@ -262,6 +263,14 @@ "s3Description": "Cookie reply packet junk size", "s4Label": "Transport packet junk size (S4)", "s4Description": "Transport packet junk size", + "h1Label": "Init magic header (H1)", + "h1Description": "Init packet header value or range (X or X-Y, where X", "i2Label": "Special junk packet 2 (I2)", @@ -272,14 +281,6 @@ "i4Description": "Protocol mimic packet in hex format: ", "i5Label": "Special junk packet 5 (I5)", "i5Description": "Protocol mimic packet in hex format: ", - "h1Label": "Init magic header (H1)", - "h1Description": "Init packet header value (5-2147483647, must be unique from H2-H4)", - "h2Label": "Response magic header (H2)", - "h2Description": "Response packet header value (5-2147483647, must be unique from H1, H3, H4)", - "h3Label": "Cookie reply magic header (H3)", - "h3Description": "Cookie reply packet header value (5-2147483647, must be unique from H1, H2, H4)", - "h4Label": "Transport magic header (H4)", - "h4Description": "Transport packet header value (5-2147483647, must be unique from H1-H3)", "mtuNote": "Values depend on the MTU", "obfuscationParameters": "AmneziaWG Obfuscation Parameters" } diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index 18a0310c..bf275352 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -262,6 +262,14 @@ "s3Description": "Taille parasite du paquet de réponse cookie", "s4Label": "Taille parasite du paquet transport (S4)", "s4Description": "Taille parasite du paquet de transport", + "h1Label": "En-tête magique init (H1)", + "h1Description": "Valeur d'en-tête du paquet init (5-2147483647, doit être unique par rapport à H2-H4)", + "h2Label": "En-tête magique réponse (H2)", + "h2Description": "Valeur d'en-tête du paquet réponse (5-2147483647, doit être unique par rapport à H1, H3, H4)", + "h3Label": "En-tête magique cookie reply (H3)", + "h3Description": "Valeur d'en-tête du paquet cookie reply (5-2147483647, doit être unique par rapport à H1, H2, H4)", + "h4Label": "En-tête magique transport (H4)", + "h4Description": "Valeur d'en-tête du paquet transport (5-2147483647, doit être unique par rapport à H1-H3)", "i1Label": "Paquet parasite spécial 1 (I1)", "i1Description": "Paquet de simulation de protocole en format hexadécimal : ", "i2Label": "Paquet parasite spécial 2 (I2)", @@ -272,14 +280,6 @@ "i4Description": "Paquet de simulation de protocole en format hexadécimal : ", "i5Label": "Paquet parasite spécial 5 (I5)", "i5Description": "Paquet de simulation de protocole en format hexadécimal : ", - "h1Label": "En-tête magique init (H1)", - "h1Description": "Valeur d'en-tête du paquet init (5-2147483647, doit être unique par rapport à H2-H4)", - "h2Label": "En-tête magique réponse (H2)", - "h2Description": "Valeur d'en-tête du paquet réponse (5-2147483647, doit être unique par rapport à H1, H3, H4)", - "h3Label": "En-tête magique cookie reply (H3)", - "h3Description": "Valeur d'en-tête du paquet cookie reply (5-2147483647, doit être unique par rapport à H1, H2, H4)", - "h4Label": "En-tête magique transport (H4)", - "h4Description": "Valeur d'en-tête du paquet transport (5-2147483647, doit être unique par rapport à H1-H3)", "mtuNote": "Les valeurs dépendent du MTU", "obfuscationParameters": "Paramètres d'obfuscation AmneziaWG" } diff --git a/src/i18n/locales/nb.json b/src/i18n/locales/nb.json index 0172e0e8..001ef65f 100644 --- a/src/i18n/locales/nb.json +++ b/src/i18n/locales/nb.json @@ -262,6 +262,14 @@ "s3Description": "Cookie-svarpakke junk-størrelse", "s4Label": "Transportpakke junk-størrelse (S4)", "s4Description": "Transportpakke junk-størrelse", + "h1Label": "Init magisk header (H1)", + "h1Description": "Init-pakke header-verdi (5-2147483647, må være unik fra H2-H4)", + "h2Label": "Svar magisk header (H2)", + "h2Description": "Svarpakke header-verdi (5-2147483647, må være unik fra H1, H3, H4)", + "h3Label": "Cookie-svar magisk header (H3)", + "h3Description": "Cookie-svarpakke header-verdi (5-2147483647, må være unik fra H1, H2, H4)", + "h4Label": "Transport magisk header (H4)", + "h4Description": "Transportpakke header-verdi (5-2147483647, må være unik fra H1-H3)", "i1Label": "Spesiell junk-pakke 1 (I1)", "i1Description": "Protokolllignende pakke i heksformat: ", "i2Label": "Spesiell junk-pakke 2 (I2)", @@ -272,14 +280,6 @@ "i4Description": "Protokolllignende pakke i heksformat: ", "i5Label": "Spesiell junk-pakke 5 (I5)", "i5Description": "Protokolllignende pakke i heksformat: ", - "h1Label": "Init magisk header (H1)", - "h1Description": "Init-pakke header-verdi (5-2147483647, må være unik fra H2-H4)", - "h2Label": "Svar magisk header (H2)", - "h2Description": "Svarpakke header-verdi (5-2147483647, må være unik fra H1, H3, H4)", - "h3Label": "Cookie-svar magisk header (H3)", - "h3Description": "Cookie-svarpakke header-verdi (5-2147483647, må være unik fra H1, H2, H4)", - "h4Label": "Transport magisk header (H4)", - "h4Description": "Transportpakke header-verdi (5-2147483647, må være unik fra H1-H3)", "mtuNote": "Verdier avhenger av MTU", "obfuscationParameters": "AmneziaWG obfuskasjonsparametere" } diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json index a1e591d4..977628b2 100644 --- a/src/i18n/locales/nl.json +++ b/src/i18n/locales/nl.json @@ -262,6 +262,14 @@ "s3Description": "Grootte Cookie reply packet junk", "s4Label": "Transport packet junk size (S4)", "s4Description": "Grootte Transport packet junk", + "h1Label": "Init magic header (H1)", + "h1Description": "Waarde Init packet header (5-2147483647, moet uniek zijn t.o.v. H2-H4)", + "h2Label": "Response magic header (H2)", + "h2Description": "Waarde Response packet header (5-2147483647, moet uniek zijn t.o.v. H1, H3, H4)", + "h3Label": "Cookie reply magic header (H3)", + "h3Description": "Waarde Cookie reply packet header (5-2147483647, moet uniek zijn t.o.v. H1, H2, H4)", + "h4Label": "Transport magic header (H4)", + "h4Description": "Waarde Transport packet header (5-2147483647, moet uniek zijn t.o.v. H1-H3)", "i1Label": "Special junk packet 1 (I1)", "i1Description": "Protocol mimic packet in hex formaat: ", "i2Label": "Special junk packet 2 (I2)", @@ -272,14 +280,6 @@ "i4Description": "Protocol mimic packet in hex formaat: ", "i5Label": "Special junk packet 5 (I5)", "i5Description": "Protocol mimic packet in hex formaat: ", - "h1Label": "Init magic header (H1)", - "h1Description": "Waarde Init packet header (5-2147483647, moet uniek zijn t.o.v. H2-H4)", - "h2Label": "Response magic header (H2)", - "h2Description": "Waarde Response packet header (5-2147483647, moet uniek zijn t.o.v. H1, H3, H4)", - "h3Label": "Cookie reply magic header (H3)", - "h3Description": "Waarde Cookie reply packet header (5-2147483647, moet uniek zijn t.o.v. H1, H2, H4)", - "h4Label": "Transport magic header (H4)", - "h4Description": "Waarde Transport packet header (5-2147483647, moet uniek zijn t.o.v. H1-H3)", "mtuNote": "Waarden zijn afhankelijk van de MTU", "obfuscationParameters": "AmneziaWG Obfuscation Parameters" } diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index be94543d..5e2e4278 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -262,6 +262,14 @@ "s3Description": "Размер мусорных данных в cookie-reply пакете", "s4Label": "Размер мусорных данных в транспортном пакете (S4)", "s4Description": "Размер мусорных данных в транспортном пакете", + "h1Label": "Init magic заголовок (H1)", + "h1Description": "Значение заголовка init-пакета (5-2147483647, должно отличаться от H2-H4)", + "h2Label": "Response magic заголовок (H2)", + "h2Description": "Значение заголовка ответного пакета (5-2147483647, должно отличаться от H1, H3, H4)", + "h3Label": "Cookie reply magic заголовок (H3)", + "h3Description": "Значение заголовка cookie-reply пакета (5-2147483647, должно отличаться от H1, H2, H4)", + "h4Label": "Transport magic заголовок (H4)", + "h4Description": "Значение заголовка транспортного пакета (5-2147483647, должно отличаться от H1-H3)", "i1Label": "Специальный мусорный пакет 1 (I1)", "i1Description": "Пакет имитации протокола в hex формате: ", "i2Label": "Специальный мусорный пакет 2 (I2)", @@ -272,14 +280,6 @@ "i4Description": "Пакет имитации протокола в hex формате: ", "i5Label": "Специальный мусорный пакет 5 (I5)", "i5Description": "Пакет имитации протокола в hex формате: ", - "h1Label": "Init magic заголовок (H1)", - "h1Description": "Значение заголовка init-пакета (5-2147483647, должно отличаться от H2-H4)", - "h2Label": "Response magic заголовок (H2)", - "h2Description": "Значение заголовка ответного пакета (5-2147483647, должно отличаться от H1, H3, H4)", - "h3Label": "Cookie reply magic заголовок (H3)", - "h3Description": "Значение заголовка cookie-reply пакета (5-2147483647, должно отличаться от H1, H2, H4)", - "h4Label": "Transport magic заголовок (H4)", - "h4Description": "Значение заголовка транспортного пакета (5-2147483647, должно отличаться от H1-H3)", "mtuNote": "Значения зависят от MTU", "obfuscationParameters": "Параметры обфускации AmneziaWG" } diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json index d47c645b..dff4440f 100644 --- a/src/i18n/locales/uk.json +++ b/src/i18n/locales/uk.json @@ -262,6 +262,14 @@ "s3Description": "Розмір сміттєвих даних у пакеті «cookie reply»", "s4Label": "Розмір сміттєвих даних у транспортному пакеті (S4)", "s4Description": "Розмір сміттєвих даних у транспортному пакеті", + "h1Label": "Початковий магічний заголовок (H1)", + "h1Description": "Значення заголовка початкового пакета (5–2147483647, має бути унікальним від H2–H4)", + "h2Label": "Магічний заголовок відповіді (H2)", + "h2Description": "Значення заголовка пакета відповіді (5–2147483647, має бути унікальним від H1, H3, H4)", + "h3Label": "Магічний заголовок «cookie reply» (H3)", + "h3Description": "Значення заголовка пакета «cookie reply» (5–2147483647, має бути унікальним від H1, H2, H4)", + "h4Label": "Магічний заголовок транспортного пакета (H4)", + "h4Description": "Значення заголовка транспортного пакета (5–2147483647, має бути унікальним від H1–H3)", "i1Label": "Спеціальний сміттєвий пакет 1 (I1)", "i1Description": "Пакет-імітація протоколу у hex-форматі: ", "i2Label": "Спеціальний сміттєвий пакет 2 (I2)", @@ -272,14 +280,6 @@ "i4Description": "Пакет-імітація протоколу у hex-форматі: ", "i5Label": "Спеціальний сміттєвий пакет 5 (I5)", "i5Description": "Пакет-імітація протоколу у hex-форматі: ", - "h1Label": "Початковий магічний заголовок (H1)", - "h1Description": "Значення заголовка початкового пакета (5–2147483647, має бути унікальним від H2–H4)", - "h2Label": "Магічний заголовок відповіді (H2)", - "h2Description": "Значення заголовка пакета відповіді (5–2147483647, має бути унікальним від H1, H3, H4)", - "h3Label": "Магічний заголовок «cookie reply» (H3)", - "h3Description": "Значення заголовка пакета «cookie reply» (5–2147483647, має бути унікальним від H1, H2, H4)", - "h4Label": "Магічний заголовок транспортного пакета (H4)", - "h4Description": "Значення заголовка транспортного пакета (5–2147483647, має бути унікальним від H1–H3)", "mtuNote": "Значення залежать від MTU", "obfuscationParameters": "Параметри обфускації AmneziaWG" } diff --git a/src/i18n/locales/zh-CN.json b/src/i18n/locales/zh-CN.json index b602284f..46e63abe 100644 --- a/src/i18n/locales/zh-CN.json +++ b/src/i18n/locales/zh-CN.json @@ -262,6 +262,14 @@ "s3Description": "Cookie 回复数据包中垃圾数据的大小", "s4Label": "传输数据包垃圾数据大小(S4)", "s4Description": "传输数据包中垃圾数据的大小", + "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 不同)", "i1Label": "特殊垃圾数据包 1(I1)", "i1Description": "协议模拟数据包(十六进制格式):", "i2Label": "特殊垃圾数据包 2(I2)", @@ -272,14 +280,6 @@ "i4Description": "协议模拟数据包(十六进制格式):", "i5Label": "特殊垃圾数据包 5(I5)", "i5Description": "协议模拟数据包(十六进制格式):", - "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 混淆参数" } diff --git a/src/i18n/locales/zh-TW.json b/src/i18n/locales/zh-TW.json index 6253473c..08682694 100644 --- a/src/i18n/locales/zh-TW.json +++ b/src/i18n/locales/zh-TW.json @@ -262,6 +262,14 @@ "s3Description": "Cookie 回覆封包填充大小", "s4Label": "傳輸封包填充大小 (S4)", "s4Description": "傳輸封包填充大小", + "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 不同)", "i1Label": "特殊填充封包 1 (I1)", "i1Description": "協定模仿封包 (16 進位格式): ", "i2Label": "特殊填充封包 2 (I2)", @@ -272,14 +280,6 @@ "i4Description": "協定模仿封包 (16 進位格式): ", "i5Label": "特殊填充封包 5 (I5)", "i5Description": "協定模仿封包 (16 進位格式): ", - "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 混淆參數" } diff --git a/src/server/database/migrations/0003_breezy_colossus.sql b/src/server/database/migrations/0003_breezy_colossus.sql new file mode 100644 index 00000000..b5987a13 --- /dev/null +++ b/src/server/database/migrations/0003_breezy_colossus.sql @@ -0,0 +1,36 @@ +PRAGMA foreign_keys=OFF;--> statement-breakpoint +CREATE TABLE `__new_interfaces_table` ( + `name` text PRIMARY KEY NOT NULL, + `device` text NOT NULL, + `port` integer NOT NULL, + `private_key` text NOT NULL, + `public_key` text NOT NULL, + `ipv4_cidr` text NOT NULL, + `ipv6_cidr` text NOT NULL, + `mtu` integer NOT NULL, + `j_c` integer DEFAULT 7, + `j_min` integer DEFAULT 10, + `j_max` integer DEFAULT 1000, + `s1` integer DEFAULT 128, + `s2` integer DEFAULT 56, + `s3` integer, + `s4` integer, + `h1` text, + `h2` text, + `h3` text, + `h4` text, + `i1` text, + `i2` text, + `i3` text, + `i4` text, + `i5` text, + `enabled` integer NOT NULL, + `created_at` text DEFAULT (CURRENT_TIMESTAMP) NOT NULL, + `updated_at` text DEFAULT (CURRENT_TIMESTAMP) NOT NULL +); +--> statement-breakpoint +INSERT INTO `__new_interfaces_table`("name", "device", "port", "private_key", "public_key", "ipv4_cidr", "ipv6_cidr", "mtu", "j_c", "j_min", "j_max", "s1", "s2", "s3", "s4", "h1", "h2", "h3", "h4", "i1", "i2", "i3", "i4", "i5", "enabled", "created_at", "updated_at") SELECT "name", "device", "port", "private_key", "public_key", "ipv4_cidr", "ipv6_cidr", "mtu", "j_c", "j_min", "j_max", "s1", "s2", "s3", "s4", "h1", "h2", "h3", "h4", "i1", "i2", "i3", "i4", "i5", "enabled", "created_at", "updated_at" FROM `interfaces_table`;--> statement-breakpoint +DROP TABLE `interfaces_table`;--> statement-breakpoint +ALTER TABLE `__new_interfaces_table` RENAME TO `interfaces_table`;--> statement-breakpoint +PRAGMA foreign_keys=ON;--> statement-breakpoint +CREATE UNIQUE INDEX `interfaces_table_port_unique` ON `interfaces_table` (`port`); \ No newline at end of file diff --git a/src/server/database/migrations/meta/0003_snapshot.json b/src/server/database/migrations/meta/0003_snapshot.json new file mode 100644 index 00000000..708657e8 --- /dev/null +++ b/src/server/database/migrations/meta/0003_snapshot.json @@ -0,0 +1,972 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "68c43b7a-772d-4c34-8278-e9fce5b53df1", + "prevId": "e09bc17a-dab6-45a3-a09c-57af222b08fb", + "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 + }, + "h1": { + "name": "h1", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "h2": { + "name": "h2", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "h3": { + "name": "h3", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "h4": { + "name": "h4", + "type": "text", + "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 + }, + "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": {} + } +} \ No newline at end of file diff --git a/src/server/database/migrations/meta/_journal.json b/src/server/database/migrations/meta/_journal.json index 9e4a5f4c..8a95d1af 100644 --- a/src/server/database/migrations/meta/_journal.json +++ b/src/server/database/migrations/meta/_journal.json @@ -22,6 +22,13 @@ "when": 1761298328460, "tag": "0002_keen_sleepwalker", "breakpoints": true + }, + { + "idx": 3, + "version": "6", + "when": 1770902426367, + "tag": "0003_breezy_colossus", + "breakpoints": true } ] } \ No newline at end of file diff --git a/src/server/database/repositories/interface/schema.ts b/src/server/database/repositories/interface/schema.ts index c0ee71c0..d465ebf3 100644 --- a/src/server/database/repositories/interface/schema.ts +++ b/src/server/database/repositories/interface/schema.ts @@ -20,15 +20,15 @@ export const wgInterface = sqliteTable('interfaces_table', { s2: int().default(56), s3: int(), s4: int(), + h1: text(), + h2: text(), + h3: text(), + h4: text(), i1: text(), i2: text(), i3: text(), i4: text(), i5: text(), - h1: int().default(0), - h2: int().default(0), - h3: int().default(0), - h4: int().default(0), // does nothing yet enabled: int({ mode: 'boolean' }).notNull(), createdAt: text('created_at') diff --git a/src/server/database/repositories/interface/types.ts b/src/server/database/repositories/interface/types.ts index 3051d3b3..306f6546 100644 --- a/src/server/database/repositories/interface/types.ts +++ b/src/server/database/repositories/interface/types.ts @@ -38,15 +38,15 @@ export const InterfaceUpdateSchema = schemaForType()( s2: SSchema, s3: SSchema, s4: SSchema, + h1: HSchema, + h2: HSchema, + h3: HSchema, + h4: HSchema, i1: ISchema, i2: ISchema, i3: ISchema, i4: ISchema, i5: ISchema, - h1: HSchema, - h2: HSchema, - h3: HSchema, - h4: HSchema, port: PortSchema, device: device, enabled: EnabledSchema, diff --git a/src/server/utils/WireGuard.ts b/src/server/utils/WireGuard.ts index 8b4ade14..1fc56bfe 100644 --- a/src/server/utils/WireGuard.ts +++ b/src/server/utils/WireGuard.ts @@ -213,7 +213,7 @@ class WireGuard { WG_DEBUG('New Wireguard Keys generated successfully.'); } - if (wgInterface.h1 === 0) { + if (wgInterface.h1 === '0') { WG_DEBUG('Generating random AmneziaWG obfuscation parameters...'); const headers = new Set(); @@ -222,10 +222,10 @@ class WireGuard { } const [h1, h2, h3, h4] = Array.from(headers); - wgInterface.h1 = h1!; - wgInterface.h2 = h2!; - wgInterface.h3 = h3!; - wgInterface.h4 = h4!; + wgInterface.h1 = String(h1)!; + wgInterface.h2 = String(h2)!; + wgInterface.h3 = String(h3)!; + wgInterface.h4 = String(h4)!; Database.interfaces.update(wgInterface); } diff --git a/src/server/utils/types.ts b/src/server/utils/types.ts index 46eb80e2..6fed3d1f 100644 --- a/src/server/utils/types.ts +++ b/src/server/utils/types.ts @@ -34,7 +34,39 @@ export const JmaxSchema = z.number().max(1280).nullable(); export const SSchema = z.number().max(1132).nullable(); -export const HSchema = z.number().min(5).max(2147483647).nullable(); +const H_MIN = 5; +const H_MAX = 2 ** 31 - 1; + +export const HSchema = z + .string() + .transform((v) => v.replace(/\s+/g, '')) + .refine( + (v) => { + if (!v) return false; + + if (!/^\d+(-\d+)?$/.test(v)) return false; + + if (!v.includes('-')) { + const num = Number(v); + return num >= H_MIN && num <= H_MAX; + } + + const [min, max] = v.split('-').map(Number); + return min && max && min >= H_MIN && max <= H_MAX && min <= max; + + return false; + }, + { + message: t('zod.generic.validNumberRange'), + } + ) + .transform((v) => { + if (!v.includes('-')) return `${Number(v)}`; + + const [min, max] = v.split('-').map(Number); + return min === max ? `${min}` : `${min}-${max}`; + }) + .nullable(); export const ISchema = z.string().nullable(); diff --git a/src/server/utils/wgHelper.ts b/src/server/utils/wgHelper.ts index 607a0c51..7f69d6c5 100644 --- a/src/server/utils/wgHelper.ts +++ b/src/server/utils/wgHelper.ts @@ -63,15 +63,15 @@ AllowedIPs = ${allowedIps.join(', ')}${extraLines.length ? `\n${extraLines.join( S2: wgInterface.s2, S3: wgInterface.s3, S4: wgInterface.s4, + H1: wgInterface.h1, + H2: wgInterface.h2, + H3: wgInterface.h3, + H4: wgInterface.h4, I1: wgInterface.i1, I2: wgInterface.i2, I3: wgInterface.i3, I4: wgInterface.i4, I5: wgInterface.i5, - H1: wgInterface.h1, - H2: wgInterface.h2, - H3: wgInterface.h3, - H4: wgInterface.h4, } as const; awgLines = Object.entries(parameters) @@ -131,15 +131,15 @@ PostDown = ${iptablesTemplate(hooks.postDown, wgInterface)}`; S2: wgInterface.s2, S3: wgInterface.s3, S4: wgInterface.s4, + H1: wgInterface.h1, + H2: wgInterface.h2, + H3: wgInterface.h3, + H4: wgInterface.h4, I1: client.i1, I2: client.i2, I3: client.i3, I4: client.i4, I5: client.i5, - H1: wgInterface.h1, - H2: wgInterface.h2, - H3: wgInterface.h3, - H4: wgInterface.h4, } as const; awgLines = Object.entries(parameters)