Skip to content

Commit 379f5e2

Browse files
committed
add wireguard and trojan support
1 parent daf0449 commit 379f5e2

File tree

2 files changed

+36
-13
lines changed

2 files changed

+36
-13
lines changed

assets/js/script.js

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -101,15 +101,26 @@ function incrementIP(ip) {
101101
}
102102

103103
function isValidConfigFormat(inputConfig) {
104-
if (inputConfig.startsWith('vmess://')) {
104+
if (inputConfig.startsWith('vmess://') || inputConfig.startsWith('vless://') ||
105+
inputConfig.startsWith('wireguard://') || inputConfig.startsWith('trojan://')) {
105106
return true;
106-
} else if (inputConfig.startsWith('vless://')) {
107-
const regex = /vless:\/\/[^@]+@[^:]+:.+/;
108-
return regex.test(inputConfig);
109107
}
110108
return false;
111109
}
112110

111+
function detectConfigType(inputConfig) {
112+
if (inputConfig.startsWith('vmess://')) {
113+
return 'vmess';
114+
} else if (inputConfig.startsWith('vless://')) {
115+
return 'vless';
116+
} else if (inputConfig.startsWith('wireguard://')) {
117+
return 'wireguard';
118+
} else if (inputConfig.startsWith('trojan://')) {
119+
return 'trojan';
120+
}
121+
return null;
122+
}
123+
113124
function generateConfigs() {
114125
const inputType = document.getElementById('inputType').value;
115126
const inputConfig = document.getElementById('inputConfig').value;
@@ -223,39 +234,51 @@ function modifyConfigsFromConfigsList() {
223234
}
224235

225236
function extractAddressFromConfig(config) {
226-
let isVmess = config.startsWith('vmess://');
227-
let isVless = config.startsWith('vless://');
237+
let configType = detectConfigType(config);
228238

229-
if (isVmess) {
239+
if (configType === 'vmess') {
230240
const base64Str = config.substring(8);
231241
const decodedStr = Base64.decode(base64Str);
232242
const vmessConfig = JSON.parse(decodedStr);
233243
return vmessConfig.add;
234-
} else if (isVless) {
244+
} else if (configType === 'vless') {
235245
const regex = /vless:\/\/([^@]+)@([^:]+):(\d+)(\?[^#]*)?(#.*)?/;
236246
const match = config.match(regex);
237247
const address = match[2];
238248
return address;
249+
} else if (configType === 'wireguard') {
250+
const regex = /wireguard:\/\/[^@]+@([^:]+):.+/;
251+
const match = config.match(regex);
252+
return match[1];
253+
} else if (configType === 'trojan') {
254+
const regex = /trojan:\/\/[^@]+@([^:]+):.+/;
255+
const match = config.match(regex);
256+
return match[1];
239257
}
240258

241259
return null;
242260
}
243261

244262
function replaceIPInConfig(inputConfig, ipOrAddress) {
245-
let isVmess = inputConfig.startsWith('vmess://');
246-
let isVless = inputConfig.startsWith('vless://');
263+
let configType = detectConfigType(inputConfig);
247264
let addressStr = typeof ipOrAddress === 'string' ? ipOrAddress : ipOrAddress.toString();
248265
let result = '';
249266

250-
if (isVmess) {
267+
if (configType === 'vmess') {
251268
let vmessConfig = JSON.parse(Base64.decode(inputConfig.replace('vmess://', '')));
252269
vmessConfig.add = addressStr;
253270
result = `vmess://${Base64.encode(JSON.stringify(vmessConfig))}\n\n`;
254-
} else if (isVless) {
271+
} else if (configType === 'vless') {
255272
addressStr = addressStr.includes(':') && !addressStr.startsWith('[') ? `[${addressStr}]` : addressStr;
256273
const match = inputConfig.match(/^(vless:\/\/[^@]+)@([^:]+)(:.+)$/);
257274
const [_, start, domain, end] = match;
258275
result = `${start}@${addressStr}${end}\n\n`;
276+
} else if (configType === 'wireguard') {
277+
const regex = /^(wireguard:\/\/[^@]+@)[^:]+(:.+)$/;
278+
result = inputConfig.replace(regex, `$1${addressStr}$2\n\n`);
279+
} else if (configType === 'trojan') {
280+
const regex = /^(trojan:\/\/[^@]+@)[^:]+(:.+)$/;
281+
result = inputConfig.replace(regex, `$1${addressStr}$2\n\n`);
259282
}
260283

261284
return result;

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,6 @@
7575
</div>
7676
<script src="https://cdnjs.cloudflare.com/ajax/libs/ipaddr.js/2.0.1/ipaddr.min.js"></script>
7777
<script src="https://cdn.jsdelivr.net/npm/[email protected]/base64.min.js"></script>
78-
<script src="assets/js/script.js?v=1.0.5"></script>
78+
<script src="assets/js/script.js?v=1.0.6"></script>
7979
</body>
8080
</html>

0 commit comments

Comments
 (0)