fix: correct vless/trojan validation on some browsers

This commit is contained in:
divocat
2025-10-09 17:31:10 +03:00
parent 52d1c5d95f
commit 9d89258c0c
3 changed files with 46 additions and 42 deletions

View File

@@ -2,22 +2,23 @@ import { ValidationResult } from './types';
// TODO refactor current validation and add tests // TODO refactor current validation and add tests
export function validateTrojanUrl(url: string): ValidationResult { export function validateTrojanUrl(url: string): ValidationResult {
if (!url.startsWith('trojan://')) {
return {
valid: false,
message: _('Invalid Trojan URL: must start with trojan://'),
};
}
if (!url || /\s/.test(url)) {
return {
valid: false,
message: _('Invalid Trojan URL: must not contain spaces'),
};
}
try { try {
const parsedUrl = new URL(url); if (!url.startsWith('trojan://')) {
return {
valid: false,
message: _('Invalid Trojan URL: must start with trojan://'),
};
}
if (!url || /\s/.test(url)) {
return {
valid: false,
message: _('Invalid Trojan URL: must not contain spaces'),
};
}
const refinedURL = url.replace('trojan://', 'https://');
const parsedUrl = new URL(refinedURL);
if (!parsedUrl.username || !parsedUrl.hostname || !parsedUrl.port) { if (!parsedUrl.username || !parsedUrl.hostname || !parsedUrl.port) {
return { return {

View File

@@ -2,7 +2,12 @@ import { ValidationResult } from './types';
export function validateVlessUrl(url: string): ValidationResult { export function validateVlessUrl(url: string): ValidationResult {
try { try {
const parsedUrl = new URL(url); if (!url.startsWith('vless://')) {
return {
valid: false,
message: _('Invalid VLESS URL: must start with vless://'),
};
}
if (!url || /\s/.test(url)) { if (!url || /\s/.test(url)) {
return { return {
@@ -11,12 +16,8 @@ export function validateVlessUrl(url: string): ValidationResult {
}; };
} }
if (parsedUrl.protocol !== 'vless:') { const refinedURL = url.replace('vless://', 'https://');
return { const parsedUrl = new URL(refinedURL);
valid: false,
message: _('Invalid VLESS URL: must start with vless://'),
};
}
if (!parsedUrl.username) { if (!parsedUrl.username) {
return { valid: false, message: _('Invalid VLESS URL: missing UUID') }; return { valid: false, message: _('Invalid VLESS URL: missing UUID') };

View File

@@ -213,19 +213,20 @@ function validateShadowsocksUrl(url) {
// src/validators/validateVlessUrl.ts // src/validators/validateVlessUrl.ts
function validateVlessUrl(url) { function validateVlessUrl(url) {
try { try {
const parsedUrl = new URL(url); if (!url.startsWith("vless://")) {
return {
valid: false,
message: _("Invalid VLESS URL: must start with vless://")
};
}
if (!url || /\s/.test(url)) { if (!url || /\s/.test(url)) {
return { return {
valid: false, valid: false,
message: _("Invalid VLESS URL: must not contain spaces") message: _("Invalid VLESS URL: must not contain spaces")
}; };
} }
if (parsedUrl.protocol !== "vless:") { const refinedURL = url.replace("vless://", "https://");
return { const parsedUrl = new URL(refinedURL);
valid: false,
message: _("Invalid VLESS URL: must start with vless://")
};
}
if (!parsedUrl.username) { if (!parsedUrl.username) {
return { valid: false, message: _("Invalid VLESS URL: missing UUID") }; return { valid: false, message: _("Invalid VLESS URL: missing UUID") };
} }
@@ -324,20 +325,21 @@ function validateOutboundJson(value) {
// src/validators/validateTrojanUrl.ts // src/validators/validateTrojanUrl.ts
function validateTrojanUrl(url) { function validateTrojanUrl(url) {
if (!url.startsWith("trojan://")) {
return {
valid: false,
message: _("Invalid Trojan URL: must start with trojan://")
};
}
if (!url || /\s/.test(url)) {
return {
valid: false,
message: _("Invalid Trojan URL: must not contain spaces")
};
}
try { try {
const parsedUrl = new URL(url); if (!url.startsWith("trojan://")) {
return {
valid: false,
message: _("Invalid Trojan URL: must start with trojan://")
};
}
if (!url || /\s/.test(url)) {
return {
valid: false,
message: _("Invalid Trojan URL: must not contain spaces")
};
}
const refinedURL = url.replace("trojan://", "https://");
const parsedUrl = new URL(refinedURL);
if (!parsedUrl.username || !parsedUrl.hostname || !parsedUrl.port) { if (!parsedUrl.username || !parsedUrl.hostname || !parsedUrl.port) {
return { return {
valid: false, valid: false,