From f2ebe128cc8d842dfed4e7a7b054fa19a414ea27 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Mon, 2 Sep 2024 10:23:10 +0200 Subject: [PATCH 01/53] freedom redirect Co-Authored-By: Alireza Ahmadi --- web/assets/js/model/outbound.js | 4 ++++ web/html/xui/form/outbound.html | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/web/assets/js/model/outbound.js b/web/assets/js/model/outbound.js index 5c019a3c..1ff271f2 100644 --- a/web/assets/js/model/outbound.js +++ b/web/assets/js/model/outbound.js @@ -864,12 +864,14 @@ Outbound.FreedomSettings = class extends CommonClass { constructor( domainStrategy = '', timeout = '', + redirect = '', fragment = {}, noise = {} ) { super(); this.domainStrategy = domainStrategy; this.timeout = timeout; + this.redirect = redirect; this.fragment = fragment; this.noise = noise; } @@ -878,6 +880,7 @@ Outbound.FreedomSettings = class extends CommonClass { return new Outbound.FreedomSettings( json.domainStrategy, json.timeout, + json.redirect, json.fragment ? Outbound.FreedomSettings.Fragment.fromJson(json.fragment) : undefined, json.noise ? Outbound.FreedomSettings.Noise.fromJson(json.noise) : undefined, ); @@ -887,6 +890,7 @@ Outbound.FreedomSettings = class extends CommonClass { return { domainStrategy: ObjectUtil.isEmpty(this.domainStrategy) ? undefined : this.domainStrategy, timeout: this.timeout, + redirect: this.redirect, fragment: Object.keys(this.fragment).length === 0 ? undefined : this.fragment, noise: Object.keys(this.noise).length === 0 ? undefined : this.noise, }; diff --git a/web/html/xui/form/outbound.html b/web/html/xui/form/outbound.html index 1f79671f..7dbd0313 100644 --- a/web/html/xui/form/outbound.html +++ b/web/html/xui/form/outbound.html @@ -25,8 +25,13 @@ + + + - + + Short IDs From f53630791450a537b933cba9085146acd176c98f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Sep 2024 12:02:32 +0200 Subject: [PATCH 05/53] Bump github.com/shirou/gopsutil/v4 from 4.24.7 to 4.24.8 (#2508) Bumps [github.com/shirou/gopsutil/v4](https://github.com/shirou/gopsutil) from 4.24.7 to 4.24.8. - [Release notes](https://github.com/shirou/gopsutil/releases) - [Commits](https://github.com/shirou/gopsutil/compare/v4.24.7...v4.24.8) --- updated-dependencies: - dependency-name: github.com/shirou/gopsutil/v4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index a0071abf..ccea00ee 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 github.com/pelletier/go-toml/v2 v2.2.3 github.com/robfig/cron/v3 v3.0.1 - github.com/shirou/gopsutil/v4 v4.24.7 + github.com/shirou/gopsutil/v4 v4.24.8 github.com/valyala/fasthttp v1.55.0 github.com/xtls/xray-core v1.8.24 go.uber.org/atomic v1.11.0 diff --git a/go.sum b/go.sum index e5169795..ac8dcc65 100644 --- a/go.sum +++ b/go.sum @@ -208,8 +208,8 @@ github.com/savsgio/gotils v0.0.0-20240704082632-aef3928b8a38/go.mod h1:sM7Mt7uEo github.com/seiflotfy/cuckoofilter v0.0.0-20240715131351-a2f2c23f1771 h1:emzAzMZ1L9iaKCTxdy3Em8Wv4ChIAGnfiz18Cda70g4= github.com/seiflotfy/cuckoofilter v0.0.0-20240715131351-a2f2c23f1771/go.mod h1:bR6DqgcAl1zTcOX8/pE2Qkj9XO00eCNqmKb7lXP8EAg= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shirou/gopsutil/v4 v4.24.7 h1:V9UGTK4gQ8HvcnPKf6Zt3XHyQq/peaekfxpJ2HSocJk= -github.com/shirou/gopsutil/v4 v4.24.7/go.mod h1:0uW/073rP7FYLOkvxolUQM5rMOLTNmRXnFKafpb71rw= +github.com/shirou/gopsutil/v4 v4.24.8 h1:pVQjIenQkIhqO81mwTaXjTzOMT7d3TZkf43PlVFHENI= +github.com/shirou/gopsutil/v4 v4.24.8/go.mod h1:wE0OrJtj4dG+hYkxqDH3QiBICdKSf04/npcvLLc/oRg= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= From a55645584b242cdb2547b1392a21f5d457a5a8e3 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Thu, 5 Sep 2024 10:02:32 +0200 Subject: [PATCH 06/53] =?UTF-8?q?new=20-=20Portugu=C3=AAs=20(Brazil)=20lan?= =?UTF-8?q?gs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/assets/js/langs.js | 5 + web/translation/translate.pt_BR.toml | 646 +++++++++++++++++++++++++++ 2 files changed, 651 insertions(+) create mode 100644 web/translation/translate.pt_BR.toml diff --git a/web/assets/js/langs.js b/web/assets/js/langs.js index 218c02b0..5f2577b7 100644 --- a/web/assets/js/langs.js +++ b/web/assets/js/langs.js @@ -44,6 +44,11 @@ const supportLangs = [ value: 'tr-TR', icon: '🇹🇷', }, + { + name: "Português", + value: "pt-BR", + icon: "🇧🇷", + }, ]; function getLang() { diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml new file mode 100644 index 00000000..411dde76 --- /dev/null +++ b/web/translation/translate.pt_BR.toml @@ -0,0 +1,646 @@ +"username" = "Nome de Usuário" +"password" = "Senha" +"login" = "Entrar" +"confirm" = "Confirmar" +"cancel" = "Cancelar" +"close" = "Fechar" +"copy" = "Copiar" +"copied" = "Copiado" +"download" = "Baixar" +"remark" = "Observação" +"enable" = "Ativado" +"protocol" = "Protocolo" +"search" = "Pesquisar" +"filter" = "Filtrar" +"loading" = "Carregando..." +"second" = "Segundo" +"minute" = "Minuto" +"hour" = "Hora" +"day" = "Dia" +"check" = "Verificar" +"indefinite" = "Indeterminado" +"unlimited" = "Ilimitado" +"none" = "Nada" +"qrCode" = "Código QR" +"info" = "Mais Informações" +"edit" = "Editar" +"delete" = "Excluir" +"reset" = "Redefinir" +"copySuccess" = "Copiado com Sucesso" +"sure" = "Certo" +"encryption" = "Criptografia" +"transmission" = "Transmissão" +"host" = "Servidor" +"path" = "Caminho" +"camouflage" = "Ofuscação" +"status" = "Status" +"enabled" = "Ativado" +"disabled" = "Desativado" +"depleted" = "Encerrado" +"depletingSoon" = "Esgotando" +"offline" = "Offline" +"online" = "Online" +"domainName" = "Nome de Domínio" +"monitor" = "IP de Escuta" +"certificate" = "Certificado Digital" +"fail" = " Falhou" +"success" = " Com Sucesso" +"getVersion" = "Obter Versão" +"install" = "Instalar" +"clients" = "Clientes" +"usage" = "Uso" +"secretToken" = "Token Secreto" +"remained" = "Restante" +"security" = "Segurança" +"secAlertTitle" = "Alerta de Segurança" +"secAlertSsl" = "Esta conexão não é segura. Evite inserir informações confidenciais até que o TLS seja ativado para proteção de dados." +"secAlertConf" = "Algumas configurações estão vulneráveis a ataques. Recomenda-se reforçar os protocolos de segurança para evitar possíveis violações." +"secAlertSSL" = "O painel não possui uma conexão segura. Instale o certificado TLS para proteção de dados." +"secAlertPanelPort" = "A porta padrão do painel é vulnerável. Configure uma porta aleatória ou específica." +"secAlertPanelURI" = "O caminho URI padrão do painel não é seguro. Configure um caminho URI complexo." +"secAlertSubURI" = "O caminho URI padrão de inscrição não é seguro. Configure um caminho URI complexo." +"secAlertSubJsonURI" = "O caminho URI JSON de inscrição padrão não é seguro. Configure um caminho URI complexo." + +[menu] +"dashboard" = "Visão Geral" +"inbounds" = "Inbounds" +"settings" = "Panel Settings" +"xray" = "Xray Configs" +"logout" = "Sair" +"link" = "Gerenciar" + +[pages.login] +"hello" = "Olá" +"title" = "Bem-vindo" +"loginAgain" = "Sua sessão expirou, faça login novamente" + +[pages.login.toasts] +"invalidFormData" = "O formato dos dados de entrada é inválido." +"emptyUsername" = "Nome de usuário é obrigatório" +"emptyPassword" = "Senha é obrigatória" +"wrongUsernameOrPassword" = "Nome de usuário, senha ou segredo inválidos." +"successLogin" = "Login realizado com sucesso" + +[pages.index] +"title" = "Visão Geral" +"memory" = "Memória RAM" +"hard" = "Disco" +"xrayStatus" = "Xray" +"stopXray" = "Parar" +"restartXray" = "Reiniciar" +"xraySwitch" = "Versão" +"xraySwitchClick" = "Escolha a versão para a qual deseja alternar." +"xraySwitchClickDesk" = "Escolha com cuidado, pois versões mais antigas podem não ser compatíveis com as configurações atuais." +"operationHours" = "Tempo de Atividade" +"systemLoad" = "Carga do Sistema" +"systemLoadDesc" = "Média de carga do sistema nos últimos 1, 5 e 15 minutos" +"connectionTcpCountDesc" = "Total de conexões TCP no sistema" +"connectionUdpCountDesc" = "Total de conexões UDP no sistema" +"connectionCount" = "Estatísticas de Conexão" +"upSpeed" = "Velocidade total de upload no sistema" +"downSpeed" = "Velocidade total de download no sistema" +"totalSent" = "Dados totais enviados desde a inicialização do sistema" +"totalReceive" = "Dados totais recebidos desde a inicialização do sistema" +"xraySwitchVersionDialog" = "Alterar Versão do Xray" +"xraySwitchVersionDialogDesc" = "Tem certeza de que deseja alterar a versão do Xray para" +"dontRefresh" = "Instalação em andamento, por favor não atualize a página" +"logs" = "Logs" +"config" = "Configuração" +"backup" = "Backup e Restauração" +"backupTitle" = "Backup e Restauração do Banco de Dados" +"backupDescription" = "É recomendado fazer um backup antes de restaurar o banco de dados." +"exportDatabase" = "Fazer Backup" +"importDatabase" = "Restaurar" + +[pages.inbounds] +"title" = "Inbounds" +"totalDownUp" = "Total Enviado/Recebido" +"totalUsage" = "Uso Total" +"inboundCount" = "Total de Inbounds" +"operate" = "Menu" +"enable" = "Ativado" +"remark" = "Observação" +"protocol" = "Protocolo" +"port" = "Porta" +"traffic" = "Tráfego" +"details" = "Detalhes" +"transportConfig" = "Transporte" +"expireDate" = "Duração" +"resetTraffic" = "Redefinir Tráfego" +"addInbound" = "Adicionar Inbound" +"generalActions" = "Ações Gerais" +"create" = "Criar" +"update" = "Atualizar" +"modifyInbound" = "Modificar Inbound" +"deleteInbound" = "Excluir Inbound" +"deleteInboundContent" = "Tem certeza de que deseja excluir o inbound?" +"deleteClient" = "Excluir Cliente" +"deleteClientContent" = "Tem certeza de que deseja excluir o cliente?" +"resetTrafficContent" = "Tem certeza de que deseja redefinir o tráfego?" +"copyLink" = "Copiar URL" +"address" = "Endereço" +"network" = "Rede" +"destinationPort" = "Porta de Destino" +"targetAddress" = "Endereço de Destino" +"monitorDesc" = "Deixe em branco para ouvir todos os IPs" +"meansNoLimit" = " = Ilimitado. (unidade: GB)" +"totalFlow" = "Fluxo Total" +"leaveBlankToNeverExpire" = "Deixe em branco para nunca expirar" +"noRecommendKeepDefault" = "Recomenda-se manter o padrão" +"certificatePath" = "Caminho" +"certificateContent" = "Conteúdo" +"publicKey" = "Chave Pública" +"privatekey" = "Chave Privada" +"clickOnQRcode" = "Clique no Código QR para Copiar" +"client" = "Cliente" +"export" = "Exportar Todos os URLs" +"clone" = "Clonar" +"cloneInbound" = "Clonar" +"cloneInboundContent" = "Todas as configurações deste inbound, exceto Porta, IP de Escuta e Clientes, serão aplicadas ao clone." +"cloneInboundOk" = "Clonar" +"resetAllTraffic" = "Redefinir Tráfego de Todos os Inbounds" +"resetAllTrafficTitle" = "Redefinir Tráfego de Todos os Inbounds" +"resetAllTrafficContent" = "Tem certeza de que deseja redefinir o tráfego de todos os inbounds?" +"resetInboundClientTraffics" = "Redefinir Tráfego dos Clientes" +"resetInboundClientTrafficTitle" = "Redefinir Tráfego dos Clientes" +"resetInboundClientTrafficContent" = "Tem certeza de que deseja redefinir o tráfego dos clientes deste inbound?" +"resetAllClientTraffics" = "Redefinir Tráfego de Todos os Clientes" +"resetAllClientTrafficTitle" = "Redefinir Tráfego de Todos os Clientes" +"resetAllClientTrafficContent" = "Tem certeza de que deseja redefinir o tráfego de todos os clientes?" +"delDepletedClients" = "Excluir Clientes Esgotados" +"delDepletedClientsTitle" = "Excluir Clientes Esgotados" +"delDepletedClientsContent" = "Tem certeza de que deseja excluir todos os clientes esgotados?" +"email" = "Email" +"emailDesc" = "Por favor, forneça um endereço de e-mail único." +"IPLimit" = "Limite de IP" +"IPLimitDesc" = "Desativa o inbound se o número ultrapassar o valor definido. (0 = desativar)" +"IPLimitlog" = "Log de IP" +"IPLimitlogDesc" = "O histórico de IPs. (para ativar o inbound após a desativação, limpe o log)" +"IPLimitlogclear" = "Limpar o Log" +"setDefaultCert" = "Definir Certificado pelo Painel" +"xtlsDesc" = "O Xray deve ser v1.7.5" +"realityDesc" = "O Xray deve ser v1.8.0+" +"telegramDesc" = "Por favor, forneça o ID do Chat do Telegram. (use o comando '/id' no bot) ou (@userinfobot)" +"subscriptionDesc" = "Para encontrar seu URL de assinatura, navegue até 'Detalhes'. Além disso, você pode usar o mesmo nome para vários clientes." +"info" = "Informações" +"same" = "Igual" +"inboundData" = "Dados do Inbound" +"exportInbound" = "Exportar Inbound" +"import" = "Importar" +"importInbound" = "Importar um Inbound" + +[pages.client] +"add" = "Adicionar Cliente" +"edit" = "Editar Cliente" +"submitAdd" = "Adicionar Cliente" +"submitEdit" = "Salvar Alterações" +"clientCount" = "Número de Clientes" +"bulk" = "Adicionar Vários" +"method" = "Método" +"first" = "Primeiro" +"last" = "Último" +"prefix" = "Prefixo" +"postfix" = "Sufixo" +"delayedStart" = "Iniciar Após Primeiro Uso" +"expireDays" = "Duração" +"days" = "Dia(s)" +"renew" = "Renovação Automática" +"renewDesc" = "Renovação automática após expiração. (0 = desativado)(unidade: dia)" + +[pages.inbounds.toasts] +"obtain" = "Obter" + +[pages.inbounds.stream.general] +"request" = "Requisição" +"response" = "Resposta" +"name" = "Nome" +"value" = "Valor" + +[pages.inbounds.stream.tcp] +"version" = "Versão" +"method" = "Método" +"path" = "Caminho" +"status" = "Status" +"statusDescription" = "Descrição do Status" +"requestHeader" = "Cabeçalho da Requisição" +"responseHeader" = "Cabeçalho da Resposta" + +[pages.inbounds.stream.quic] +"encryption" = "Criptografia" + +[pages.settings] +"title" = "Configurações do Painel" +"save" = "Salvar" +"infoDesc" = "Toda alteração feita aqui precisa ser salva. Reinicie o painel para aplicar as alterações." +"restartPanel" = "Reiniciar Painel" +"restartPanelDesc" = "Tem certeza de que deseja reiniciar o painel? Se não conseguir acessar o painel após reiniciar, consulte os logs do painel no servidor." +"actions" = "Ações" +"resetDefaultConfig" = "Redefinir para Padrão" +"panelSettings" = "Geral" +"securitySettings" = "Autenticação" +"TGBotSettings" = "Bot do Telegram" +"panelListeningIP" = "IP de Escuta" +"panelListeningIPDesc" = "O endereço IP para o painel web. (deixe em branco para escutar em todos os IPs)" +"panelListeningDomain" = "Domínio de Escuta" +"panelListeningDomainDesc" = "O nome de domínio para o painel web. (deixe em branco para escutar em todos os domínios e IPs)" +"panelPort" = "Porta de Escuta" +"panelPortDesc" = "O número da porta para o painel web. (deve ser uma porta não usada)" +"publicKeyPath" = "Caminho da Chave Pública" +"publicKeyPathDesc" = "O caminho do arquivo de chave pública para o painel web. (começa com ‘/‘)" +"privateKeyPath" = "Caminho da Chave Privada" +"privateKeyPathDesc" = "O caminho do arquivo de chave privada para o painel web. (começa com ‘/‘)" +"panelUrlPath" = "Caminho URI" +"panelUrlPathDesc" = "O caminho URI para o painel web. (começa com ‘/‘ e termina com ‘/‘)" +"pageSize" = "Tamanho da Paginação" +"pageSizeDesc" = "Definir o tamanho da página para a tabela de entradas. (0 = desativado)" +"remarkModel" = "Modelo de Observação & Caractere de Separação" +"datepicker" = "Tipo de Calendário" +"datepickerPlaceholder" = "Selecionar data" +"datepickerDescription" = "Tarefas agendadas serão executadas com base neste calendário." +"sampleRemark" = "Exemplo de Observação" +"oldUsername" = "Nome de Usuário Atual" +"currentPassword" = "Senha Atual" +"newUsername" = "Novo Nome de Usuário" +"newPassword" = "Nova Senha" +"telegramBotEnable" = "Ativar Bot do Telegram" +"telegramBotEnableDesc" = "Ativa o bot do Telegram." +"telegramToken" = "Token do Telegram" +"telegramTokenDesc" = "O token do bot do Telegram obtido de '@BotFather'." +"telegramProxy" = "Proxy SOCKS" +"telegramProxyDesc" = "Ativa o proxy SOCKS5 para conectar ao Telegram. (ajuste as configurações conforme o guia)" +"telegramChatId" = "ID de Chat do Administrador" +"telegramChatIdDesc" = "O(s) ID(s) de Chat do Administrador no Telegram. (separado por vírgulas)(obtenha aqui @userinfobot) ou (use o comando '/id' no bot)" +"telegramNotifyTime" = "Hora da Notificação" +"telegramNotifyTimeDesc" = "O horário de notificação do bot do Telegram configurado para relatórios periódicos. (use o formato de tempo do crontab)" +"tgNotifyBackup" = "Backup do Banco de Dados" +"tgNotifyBackupDesc" = "Enviar arquivo de backup do banco de dados junto com o relatório." +"tgNotifyLogin" = "Notificação de Login" +"tgNotifyLoginDesc" = "Receba notificações sobre o nome de usuário, endereço IP e horário sempre que alguém tentar fazer login no seu painel web." +"sessionMaxAge" = "Duração da Sessão" +"sessionMaxAgeDesc" = "A duração pela qual você pode permanecer logado. (unidade: minuto)" +"expireTimeDiff" = "Notificação de Expiração" +"expireTimeDiffDesc" = "Receba notificações sobre a data de expiração ao atingir esse limite. (unidade: dia)" +"trafficDiff" = "Notificação de Limite de Tráfego" +"trafficDiffDesc" = "Receba notificações sobre o limite de tráfego ao atingir esse limite. (unidade: GB)" +"tgNotifyCpu" = "Notificação de Carga da CPU" +"tgNotifyCpuDesc" = "Receba notificações se a carga da CPU ultrapassar esse limite. (unidade: %)" +"timeZone" = "Fuso Horário" +"timeZoneDesc" = "As tarefas agendadas serão executadas com base nesse fuso horário." +"subSettings" = "Assinatura" +"subEnable" = "Ativar Serviço de Assinatura" +"subEnableDesc" = "Ativa o serviço de assinatura." +"subListen" = "IP de Escuta" +"subListenDesc" = "O endereço IP para o serviço de assinatura. (deixe em branco para escutar em todos os IPs)" +"subPort" = "Porta de Escuta" +"subPortDesc" = "O número da porta para o serviço de assinatura. (deve ser uma porta não usada)" +"subCertPath" = "Caminho da Chave Pública" +"subCertPathDesc" = "O caminho do arquivo de chave pública para o serviço de assinatura. (começa com ‘/‘)" +"subKeyPath" = "Caminho da Chave Privada" +"subKeyPathDesc" = "O caminho do arquivo de chave privada para o serviço de assinatura. (começa com ‘/‘)" +"subPath" = "Caminho URI" +"subPathDesc" = "O caminho URI para o serviço de assinatura. (começa com ‘/‘ e termina com ‘/‘)" +"subDomain" = "Domínio de Escuta" +"subDomainDesc" = "O nome de domínio para o serviço de assinatura. (deixe em branco para escutar em todos os domínios e IPs)" +"subUpdates" = "Intervalos de Atualização" +"subUpdatesDesc" = "Os intervalos de atualização da URL de assinatura nos aplicativos de cliente. (unidade: hora)" +"subEncrypt" = "Codificar" +"subEncryptDesc" = "O conteúdo retornado pelo serviço de assinatura será codificado em Base64." +"subShowInfo" = "Mostrar Informações de Uso" +"subShowInfoDesc" = "O tráfego restante e a data serão exibidos nos aplicativos de cliente." +"subURI" = "URI de Proxy Reverso" +"subURIDesc" = "O caminho URI da URL de assinatura para uso por trás de proxies." +"fragment" = "Fragmentação" +"fragmentDesc" = "Ativa a fragmentação para o pacote TLS hello." +"fragmentSett" = "Configurações de Fragmentação" +"noiseDesc" = "Ativar Noise." +"noiseSett" = "Configurações de Noise" +"mux" = "Mux" +"muxDesc" = "Transmitir múltiplos fluxos de dados independentes dentro de um fluxo de dados estabelecido." +"muxSett" = "Configurações de Mux" +"direct" = "Conexão Direta" +"directDesc" = "Estabelece conexões diretamente com domínios ou intervalos de IP de um país específico." +"directSett" = "Opções de Conexão Direta" + +[pages.xray] +"title" = "Configurações Xray" +"save" = "Salvar" +"restart" = "Reiniciar Xray" +"basicTemplate" = "Básico" +"advancedTemplate" = "Avançado" +"generalConfigs" = "Geral" +"generalConfigsDesc" = "Essas opções determinam ajustes gerais." +"logConfigs" = "Log" +"logConfigsDesc" = "Os logs podem afetar a eficiência do servidor. É recomendável habilitá-los com sabedoria apenas se necessário." +"blockConfigs" = "Escudo de Proteção" +"blockConfigsDesc" = "Essas opções bloqueiam tráfego com base em protocolos e sites específicos solicitados." +"blockCountryConfigs" = "Bloquear País" +"blockCountryConfigsDesc" = "Essas opções bloqueiam tráfego com base no país solicitado." +"directCountryConfigs" = "País Direto" +"directCountryConfigsDesc" = "Uma conexão direta garante que o tráfego específico não seja roteado por outro servidor." +"ipv4Configs" = "Roteamento IPv4" +"ipv4ConfigsDesc" = "Essas opções roteam o tráfego para um destino específico via IPv4." +"warpConfigs" = "Roteamento WARP" +"warpConfigsDesc" = "Essas opções roteam o tráfego para um destino específico via WARP." +"Template" = "Modelo de Configuração Avançada do Xray" +"TemplateDesc" = "O arquivo final de configuração do Xray será gerado com base neste modelo." +"FreedomStrategy" = "Estratégia do Protocolo Freedom" +"FreedomStrategyDesc" = "Definir a estratégia de saída para a rede no Protocolo Freedom." +"RoutingStrategy" = "Estratégia Geral de Roteamento" +"RoutingStrategyDesc" = "Definir a estratégia geral de roteamento de tráfego para resolver todas as solicitações." +"Torrent" = "Bloquear Protocolo BitTorrent" +"TorrentDesc" = "Bloqueia o protocolo BitTorrent." +"PrivateIp" = "Bloquear Conexão para IPs Privados" +"PrivateIpDesc" = "Bloqueia a conexão com faixas de IP privadas." +"Ads" = "Bloquear Anúncios" +"AdsDesc" = "Bloqueia sites de publicidade." +"Family" = "Proteção Familiar" +"FamilyDesc" = "Bloqueia conteúdo adulto e sites maliciosos." +"Security" = "Escudo de Segurança" +"SecurityDesc" = "Bloqueia sites de malware, phishing e mineradores de criptomoedas." +"Speedtest" = "Bloquear Speedtest" +"SpeedtestDesc" = "Bloqueia a conexão com sites de teste de velocidade." +"IRIp" = "Bloquear Conexão para IPs do Irã" +"IRIpDesc" = "Bloqueia a conexão com faixas de IP do Irã." +"IRDomain" = "Bloquear Conexão para Domínios do Irã" +"IRDomainDesc" = "Bloqueia a conexão com domínios do Irã." +"ChinaIp" = "Bloquear Conexão para IPs da China" +"ChinaIpDesc" = "Bloqueia a conexão com faixas de IP da China." +"ChinaDomain" = "Bloquear Conexão para Domínios da China" +"ChinaDomainDesc" = "Bloqueia a conexão com domínios da China." +"RussiaIp" = "Bloquear Conexão para IPs da Rússia" +"RussiaIpDesc" = "Bloqueia a conexão com faixas de IP da Rússia." +"RussiaDomain" = "Bloquear Conexão para Domínios da Rússia" +"RussiaDomainDesc" = "Bloqueia a conexão com domínios da Rússia." +"VNIp" = "Bloquear Conexão para IPs do Vietnã" +"VNIpDesc" = "Bloqueia a conexão com faixas de IP do Vietnã." +"VNDomain" = "Bloquear Conexão para Domínios do Vietnã" +"VNDomainDesc" = "Bloqueia a conexão com domínios do Vietnã." +"DirectIRIp" = "Conexão Direta para IPs do Irã" +"DirectIRIpDesc" = "Estabelece conexão diretamente com faixas de IP do Irã." +"DirectIRDomain" = "Conexão Direta para Domínios do Irã" +"DirectIRDomainDesc" = "Estabelece conexão diretamente com domínios do Irã." +"DirectChinaIp" = "Conexão Direta para IPs da China" +"DirectChinaIpDesc" = "Estabelece conexão diretamente com faixas de IP da China." +"DirectChinaDomain" = "Conexão Direta para Domínios da China" +"DirectChinaDomainDesc" = "Estabelece conexão diretamente com domínios da China." +"DirectRussiaIp" = "Conexão Direta para IPs da Rússia" +"DirectRussiaIpDesc" = "Estabelece conexão diretamente com faixas de IP da Rússia." +"DirectRussiaDomain" = "Conexão Direta para Domínios da Rússia" +"DirectRussiaDomainDesc" = "Estabelece conexão diretamente com domínios da Rússia." +"DirectVNIp" = "Conexão Direta para IPs do Vietnã" +"DirectVNIpDesc" = "Estabelece conexão diretamente com faixas de IP do Vietnã." +"DirectVNDomain" = "Conexão Direta para Domínios do Vietnã" +"DirectVNDomainDesc" = "Estabelece conexão diretamente com domínios do Vietnã." +"GoogleIPv4" = "Google" +"GoogleIPv4Desc" = "Roteia tráfego para o Google via IPv4." +"NetflixIPv4" = "Netflix" +"NetflixIPv4Desc" = "Roteia tráfego para a Netflix via IPv4." +"GoogleWARP" = "Google" +"GoogleWARPDesc" = "Adiciona roteamento para o Google via WARP." +"OpenAIWARP" = "ChatGPT" +"OpenAIWARPDesc" = "Roteia tráfego para o ChatGPT via WARP." +"NetflixWARP" = "Netflix" +"NetflixWARPDesc" = "Roteia tráfego para a Netflix via WARP." +"MetaWARP" = "Meta" +"MetaWARPDesc" = "Roteia tráfego para Meta (Instagram, Facebook, WhatsApp, Threads,...) via WARP." +"AppleWARP" = "Apple" +"AppleWARPDesc" = "Roteia tráfego para a Apple via WARP." +"RedditWARP" = "Reddit" +"RedditWARPDesc" = "Roteia tráfego para o Reddit via WARP." +"SpotifyWARP" = "Spotify" +"SpotifyWARPDesc" = "Roteia tráfego para o Spotify via WARP." +"IRWARP" = "Domínios do Irã" +"IRWARPDesc" = "Roteia tráfego para domínios do Irã via WARP." +"Inbounds" = "Inbounds" +"InboundsDesc" = "Aceitar clientes específicos." +"Outbounds" = "Outbounds" +"Balancers" = "Balanceadores" +"OutboundsDesc" = "Definir o caminho de saída do tráfego." +"Routings" = "Regras de Roteamento" +"RoutingsDesc" = "A prioridade de cada regra é importante!" +"completeTemplate" = "Todos" +"logLevel" = "Nível de Log" +"logLevelDesc" = "O nível de log para erros, indicando a informação que precisa ser registrada." +"accessLog" = "Log de Acesso" +"accessLogDesc" = "O caminho do arquivo para o log de acesso. O valor especial 'none' desativa os logs de acesso." +"errorLog" = "Log de Erros" +"errorLogDesc" = "O caminho do arquivo para o log de erros. O valor especial 'none' desativa os logs de erro." + +[pages.xray.rules] +"first" = "Primeiro" +"last" = "Último" +"up" = "Cima" +"down" = "Baixo" +"source" = "Fonte" +"dest" = "Destino" +"inbound" = "Entrada" +"outbound" = "Saída" +"balancer" = "Balanceador" +"info" = "Info" +"add" = "Adicionar Regra" +"edit" = "Editar Regra" +"useComma" = "Itens separados por vírgula" + +[pages.xray.outbound] +"addOutbound" = "Adicionar Saída" +"addReverse" = "Adicionar Reverso" +"editOutbound" = "Editar Saída" +"editReverse" = "Editar Reverso" +"tag" = "Tag" +"tagDesc" = "Tag Única" +"address" = "Endereço" +"reverse" = "Reverso" +"domain" = "Domínio" +"type" = "Tipo" +"bridge" = "Ponte" +"portal" = "Portal" +"intercon" = "Interconexão" +"settings" = "Configurações" +"accountInfo" = "Informações da Conta" +"outboundStatus" = "Status de Saída" +"sendThrough" = "Enviar Através de" + +[pages.xray.balancer] +"addBalancer" = "Adicionar Balanceador" +"editBalancer" = "Editar Balanceador" +"balancerStrategy" = "Estratégia" +"balancerSelectors" = "Seletores" +"tag" = "Tag" +"tagDesc" = "Tag Única" +"balancerDesc" = "Não é possível usar balancerTag e outboundTag ao mesmo tempo. Se usados simultaneamente, apenas outboundTag funcionará." + +[pages.xray.wireguard] +"secretKey" = "Chave Secreta" +"publicKey" = "Chave Pública" +"allowedIPs" = "IPs Permitidos" +"endpoint" = "Ponto Final" +"psk" = "Chave Pré-Compartilhada" +"domainStrategy" = "Estratégia de Domínio" + +[pages.xray.dns] +"enable" = "Ativar DNS" +"enableDesc" = "Ativar o servidor DNS integrado" +"tag" = "Tag de Entrada DNS" +"tagDesc" = "Esta tag estará disponível como uma tag de Entrada nas regras de roteamento." +"strategy" = "Estratégia de Consulta" +"strategyDesc" = "Estratégia geral para resolver nomes de domínio" +"add" = "Adicionar Servidor" +"edit" = "Editar Servidor" +"domains" = "Domínios" + +[pages.xray.fakedns] +"add" = "Adicionar Fake DNS" +"edit" = "Editar Fake DNS" +"ipPool" = "Sub-rede do Pool de IP" +"poolSize" = "Tamanho do Pool" + +[pages.settings.security] +"admin" = "Admin" +"secret" = "Token Secreto" +"loginSecurity" = "Login Seguro" +"loginSecurityDesc" = "Adiciona uma camada extra de autenticação para fornecer mais segurança." +"secretToken" = "Token Secreto" +"secretTokenDesc" = "Por favor, armazene este token em um local seguro. Este token é necessário para o login e não pode ser recuperado." + +[pages.settings.toasts] +"modifySettings" = "Modificar Configurações" +"getSettings" = "Obter Configurações" +"modifyUser" = "Modificar Admin" +"originalUserPassIncorrect" = "O nome de usuário ou senha atual é inválido" +"userPassMustBeNotEmpty" = "O novo nome de usuário e senha não podem estar vazios" + +[tgbot] +"keyboardClosed" = "❌ Teclado personalizado fechado!" +"noResult" = "❗ Nenhum resultado!" +"noQuery" = "❌ Consulta não encontrada! Por favor, use o comando novamente!" +"wentWrong" = "❌ Algo deu errado!" +"noIpRecord" = "❗ Nenhum registro de IP!" +"noInbounds" = "❗ Nenhuma entrada encontrada!" +"unlimited" = "♾ Ilimitado (Reiniciar)" +"add" = "Adicionar" +"month" = "Mês" +"months" = "Meses" +"day" = "Dia" +"days" = "Dias" +"hours" = "Horas" +"unknown" = "Desconhecido" +"inbounds" = "Entradas" +"clients" = "Clientes" +"offline" = "🔴 Offline" +"online" = "🟢 Online" + +[tgbot.commands] +"unknown" = "❗ Comando desconhecido." +"pleaseChoose" = "👇 Escolha:\r\n" +"help" = "🤖 Bem-vindo a este bot! Ele foi projetado para oferecer dados específicos do painel da web e permite que você faça as modificações necessárias.\r\n\r\n" +"start" = "👋 Olá {{ .Firstname }}.\r\n" +"welcome" = "🤖 Bem-vindo ao bot de gerenciamento do {{ .Hostname }}.\r\n" +"status" = "✅ Bot está OK!" +"usage" = "❗ Por favor, forneça um texto para pesquisar!" +"getID" = "🆔 Seu ID: {{ .ID }}" +"helpAdminCommands" = "Para pesquisar por um email de cliente:\r\n/usage [Email]\r\n\r\nPara pesquisar por inbounds (com estatísticas do cliente):\r\n/inbound [Remark]\r\n\r\nTelegram Chat ID:\r\n/id" +"helpClientCommands" = "Para pesquisar por estatísticas, use o seguinte comando:\r\n\r\n/usage [Email]\r\n\r\nTelegram Chat ID:\r\n/id" + +[tgbot.messages] +"cpuThreshold" = "🔴 A carga da CPU {{ .Percent }}% excede o limite de {{ .Threshold }}%" +"selectUserFailed" = "❌ Erro na seleção do usuário!" +"userSaved" = "✅ Usuário do Telegram salvo." +"loginSuccess" = "✅ Conectado ao painel com sucesso.\r\n" +"loginFailed" = "❗️Tentativa de login no painel falhou.\r\n" +"report" = "🕰 Relatórios agendados: {{ .RunTime }}\r\n" +"datetime" = "⏰ Data&Hora: {{ .DateTime }}\r\n" +"hostname" = "💻 Host: {{ .Hostname }}\r\n" +"version" = "🚀 Versão 3X-UI: {{ .Version }}\r\n" +"xrayVersion" = "📡 Versão Xray: {{ .XrayVersion }}\r\n" +"ipv6" = "🌐 IPv6: {{ .IPv6 }}\r\n" +"ipv4" = "🌐 IPv4: {{ .IPv4 }}\r\n" +"ip" = "🌐 IP: {{ .IP }}\r\n" +"ips" = "🔢 IPs:\r\n{{ .IPs }}\r\n" +"serverUpTime" = "⏳ Tempo de atividade: {{ .UpTime }} {{ .Unit }}\r\n" +"serverLoad" = "📈 Carga do sistema: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n" +"serverMemory" = "📋 RAM: {{ .Current }}/{{ .Total }}\r\n" +"tcpCount" = "🔹 TCP: {{ .Count }}\r\n" +"udpCount" = "🔸 UDP: {{ .Count }}\r\n" +"traffic" = "🚦 Tráfego: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n" +"xrayStatus" = "ℹ️ Status: {{ .State }}\r\n" +"username" = "👤 Nome de usuário: {{ .Username }}\r\n" +"password" = "👤 Senha: {{ .Password }}\r\n" +"time" = "⏰ Hora: {{ .Time }}\r\n" +"inbound" = "📍 Inbound: {{ .Remark }}\r\n" +"port" = "🔌 Porta: {{ .Port }}\r\n" +"expire" = "📅 Data de expiração: {{ .Time }}\r\n" +"expireIn" = "📅 Expira em: {{ .Time }}\r\n" +"active" = "💡 Ativo: {{ .Enable }}\r\n" +"enabled" = "🚨 Ativado: {{ .Enable }}\r\n" +"online" = "🌐 Status da conexão: {{ .Status }}\r\n" +"email" = "📧 Email: {{ .Email }}\r\n" +"upload" = "🔼 Upload: ↑{{ .Upload }}\r\n" +"download" = "🔽 Download: ↓{{ .Download }}\r\n" +"total" = "📊 Total: ↑↓{{ .UpDown }} / {{ .Total }}\r\n" +"TGUser" = "👤 Usuário do Telegram: {{ .TelegramID }}\r\n" +"exhaustedMsg" = "🚨 {{ .Type }} esgotado:\r\n" +"exhaustedCount" = "🚨 Contagem de {{ .Type }} esgotado:\r\n" +"onlinesCount" = "🌐 Clientes online: {{ .Count }}\r\n" +"disabled" = "🛑 Desativado: {{ .Disabled }}\r\n" +"depleteSoon" = "🔜 Esgotar em breve: {{ .Deplete }}\r\n\r\n" +"backupTime" = "🗄 Hora do backup: {{ .Time }}\r\n" +"refreshedOn" = "\r\n📋🔄 Atualizado em: {{ .Time }}\r\n\r\n" +"yes" = "✅ Sim" +"no" = "❌ Não" + +[tgbot.buttons] +"closeKeyboard" = "❌ Fechar teclado" +"cancel" = "❌ Cancelar" +"cancelReset" = "❌ Cancelar redefinição" +"cancelIpLimit" = "❌ Cancelar limite de IP" +"confirmResetTraffic" = "✅ Confirmar redefinição de tráfego?" +"confirmClearIps" = "✅ Confirmar limpar IPs?" +"confirmRemoveTGUser" = "✅ Confirmar remover usuário do Telegram?" +"confirmToggle" = "✅ Confirmar ativar/desativar usuário?" +"dbBackup" = "Obter backup do DB" +"serverUsage" = "Uso do servidor" +"getInbounds" = "Obter Inbounds" +"depleteSoon" = "Esgotar em breve" +"clientUsage" = "Obter uso" +"onlines" = "Clientes online" +"commands" = "Comandos" +"refresh" = "🔄 Atualizar" +"clearIPs" = "❌ Limpar IPs" +"removeTGUser" = "❌ Remover usuário do Telegram" +"selectTGUser" = "👤 Selecionar usuário do Telegram" +"selectOneTGUser" = "👤 Selecione um usuário do Telegram:" +"resetTraffic" = "📈 Redefinir tráfego" +"resetExpire" = "📅 Alterar data de expiração" +"ipLog" = "🔢 Log de IP" +"ipLimit" = "🔢 Limite de IP" +"setTGUser" = "👤 Definir usuário do Telegram" +"toggle" = "🔘 Ativar / Desativar" +"custom" = "🔢 Personalizado" +"confirmNumber" = "✅ Confirmar: {{ .Num }}" +"confirmNumberAdd" = "✅ Confirmar adicionar: {{ .Num }}" +"limitTraffic" = "🚧 Limite de tráfego" +"getBanLogs" = "Obter logs de banimento" +"allClients" = "Todos os clientes" + +[tgbot.answers] +"successfulOperation" = "✅ Operação bem-sucedida!" +"errorOperation" = "❗ Erro na operação." +"getInboundsFailed" = "❌ Falha ao obter inbounds." +"getClientsFailed" = "❌ Falha ao obter clientes." +"canceled" = "❌ {{ .Email }}: Operação cancelada." +"clientRefreshSuccess" = "✅ {{ .Email }}: Cliente atualizado com sucesso." +"IpRefreshSuccess" = "✅ {{ .Email }}: IPs atualizados com sucesso." +"TGIdRefreshSuccess" = "✅ {{ .Email }}: Usuário do Telegram do cliente atualizado com sucesso." +"resetTrafficSuccess" = "✅ {{ .Email }}: Tráfego redefinido com sucesso." +"setTrafficLimitSuccess" = "✅ {{ .Email }}: Limite de tráfego salvo com sucesso." +"expireResetSuccess" = "✅ {{ .Email }}: Dias de expiração redefinidos com sucesso." +"resetIpSuccess" = "✅ {{ .Email }}: Limite de IP {{ .Count }} salvo com sucesso." +"clearIpSuccess" = "✅ {{ .Email }}: IPs limpos com sucesso." +"getIpLog" = "✅ {{ .Email }}: Obter log de IP." +"getUserInfo" = "✅ {{ .Email }}: Obter informações do usuário do Telegram." +"removedTGUserSuccess" = "✅ {{ .Email }}: Usuário do Telegram removido com sucesso." +"enableSuccess" = "✅ {{ .Email }}: Ativado com sucesso." +"disableSuccess" = "✅ {{ .Email }}: Desativado com sucesso." +"askToAddUserId" = "Sua configuração não foi encontrada!\r\nPeça ao seu administrador para usar seu Telegram ChatID em suas configurações.\r\n\r\nSeu ChatID: {{ .TgUserID }}" +"chooseClient" = "Escolha um cliente para Inbound {{ .Inbound }}" +"chooseInbound" = "Escolha um Inbound" From c8b1b162ff18655a6213bb49102a10c8ec094a21 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Thu, 5 Sep 2024 10:21:37 +0200 Subject: [PATCH 07/53] update dependencies --- go.mod | 16 ++++++++-------- go.sum | 32 ++++++++++++++++---------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index ccea00ee..cc89f733 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/valyala/fasthttp v1.55.0 github.com/xtls/xray-core v1.8.24 go.uber.org/atomic v1.11.0 - golang.org/x/text v0.17.0 + golang.org/x/text v0.18.0 google.golang.org/grpc v1.66.0 gorm.io/driver/sqlite v1.5.6 gorm.io/gorm v1.25.11 @@ -40,7 +40,7 @@ require ( github.com/go-playground/validator/v10 v10.22.0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/google/btree v1.1.3 // indirect - github.com/google/pprof v0.0.0-20240829160300-da1f7e9f2b25 // indirect + github.com/google/pprof v0.0.0-20240903155634-a8630aee4ab9 // indirect github.com/gorilla/context v1.1.2 // indirect github.com/gorilla/securecookie v1.1.2 // indirect github.com/gorilla/sessions v1.4.0 // indirect @@ -54,13 +54,13 @@ require ( github.com/leodido/go-urn v1.4.0 // indirect github.com/lufia/plan9stats v0.0.0-20240819163618-b1d8f4d146e7 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-sqlite3 v1.14.22 // indirect + github.com/mattn/go-sqlite3 v1.14.23 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/onsi/ginkgo/v2 v2.20.2 // indirect github.com/pires/go-proxyproto v0.7.0 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect - github.com/quic-go/qpack v0.4.0 // indirect + github.com/quic-go/qpack v0.5.0 // indirect github.com/quic-go/quic-go v0.46.0 // indirect github.com/refraction-networking/utls v1.6.7 // indirect github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect @@ -83,13 +83,13 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/mock v0.4.0 // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect - golang.org/x/arch v0.9.0 // indirect + golang.org/x/arch v0.10.0 // indirect golang.org/x/crypto v0.26.0 // indirect - golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 // indirect - golang.org/x/mod v0.20.0 // indirect + golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e // indirect + golang.org/x/mod v0.21.0 // indirect golang.org/x/net v0.28.0 // indirect golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.24.0 // indirect + golang.org/x/sys v0.25.0 // indirect golang.org/x/time v0.6.0 // indirect golang.org/x/tools v0.24.0 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect diff --git a/go.sum b/go.sum index ac8dcc65..82b9af6f 100644 --- a/go.sum +++ b/go.sum @@ -98,8 +98,8 @@ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20240829160300-da1f7e9f2b25 h1:sEDPKUw6iPjczdu33njxFjO6tYa9bfc0z/QyB/zSsBw= -github.com/google/pprof v0.0.0-20240829160300-da1f7e9f2b25/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/pprof v0.0.0-20240903155634-a8630aee4ab9 h1:q5g0N9eal4bmJwXHC5z0QCKs8qhS35hFfq0BAYsIwZI= +github.com/google/pprof v0.0.0-20240903155634-a8630aee4ab9/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -146,8 +146,8 @@ github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= -github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-sqlite3 v1.14.23 h1:gbShiuAP1W5j9UOksQ06aiiqPMxYecovVGwmTxWtuw0= +github.com/mattn/go-sqlite3 v1.14.23/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= @@ -186,8 +186,8 @@ github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= -github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= +github.com/quic-go/qpack v0.5.0 h1:jldbr38Ef/swDfxtvNvvUIYNg5LNm3Oa9W+IZvCm4q0= +github.com/quic-go/qpack v0.5.0/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= github.com/quic-go/quic-go v0.46.0 h1:uuwLClEEyk1DNvchH8uCByQVjo3yKL9opKulExNDs7Y= github.com/quic-go/quic-go v0.46.0/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM= @@ -287,8 +287,8 @@ go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBseWJUpBw5I82+2U4M= go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= -golang.org/x/arch v0.9.0 h1:ub9TgUInamJ8mrZIGlBG6/4TqWeMszd4N8lNorbrr6k= -golang.org/x/arch v0.9.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +golang.org/x/arch v0.10.0 h1:S3huipmSclq3PJMNe76NGwkBR504WFkQ5dhzWzP8ZW8= +golang.org/x/arch v0.10.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -296,13 +296,13 @@ golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 h1:kx6Ds3MlpiUHKj7syVnbp57++8WpuKPcR5yjLBjvLEA= -golang.org/x/exp v0.0.0-20240823005443-9b4947da3948/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= +golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e h1:I88y4caeGeuDQxgdoFPUq097j7kNfw6uvuiNxUBfcBk= +golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= -golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -336,12 +336,12 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= -golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= -golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= From 5c390341fbcb54f5de9c9110208f7c337542883c Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Thu, 5 Sep 2024 10:23:01 +0200 Subject: [PATCH 08/53] v2.3.15 --- README.es_ES.md | 4 ++-- README.md | 5 +++-- README.ru_RU.md | 4 ++-- README.zh_CN.md | 4 ++-- config/version | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/README.es_ES.md b/README.es_ES.md index ded7d9f9..d1d1cadc 100644 --- a/README.es_ES.md +++ b/README.es_ES.md @@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install. ## Instalar una Versión Personalizada -Para instalar la versión deseada, agrega la versión al final del comando de instalación. Por ejemplo, ver `v2.3.14`: +Para instalar la versión deseada, agrega la versión al final del comando de instalación. Por ejemplo, ver `v2.3.15`: ``` -bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.3.14 +bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.3.15 ``` ## Certificado SSL diff --git a/README.md b/README.md index 0bb94698..90e53386 100644 --- a/README.md +++ b/README.md @@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install. ## Install Custom Version -To install your desired version, add the version to the end of the installation command. e.g., ver `v2.3.14`: +To install your desired version, add the version to the end of the installation command. e.g., ver `v2.3.15`: ``` -bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.3.14 +bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.3.15 ``` ## SSL Certificate @@ -286,6 +286,7 @@ Our platform offers compatibility with a diverse range of architectures and devi - Indonesian - Ukrainian - Turkish +- Português (Brazil) ## Features diff --git a/README.ru_RU.md b/README.ru_RU.md index 8f83be03..8ba33e5c 100644 --- a/README.ru_RU.md +++ b/README.ru_RU.md @@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install. ## Установка определённой версии -Чтобы установить нужную вам версию, добавьте номер версии в конец команды установки. Например, `v2.3.14`: +Чтобы установить нужную вам версию, добавьте номер версии в конец команды установки. Например, `v2.3.15`: ``` -bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.3.14 +bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.3.15 ``` ## SSL Сертификат diff --git a/README.zh_CN.md b/README.zh_CN.md index b320037c..a9e75f16 100644 --- a/README.zh_CN.md +++ b/README.zh_CN.md @@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install. ## 安装指定版本 -要安装所需的版本,请将该版本添加到安装命令的末尾。 e.g., ver `v2.3.14`: +要安装所需的版本,请将该版本添加到安装命令的末尾。 e.g., ver `v2.3.15`: ``` -bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.3.14 +bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.3.15 ``` ## SSL 认证 diff --git a/config/version b/config/version index ac805d3e..0007430c 100644 --- a/config/version +++ b/config/version @@ -1 +1 @@ -2.3.14 \ No newline at end of file +2.3.15 \ No newline at end of file From 2001d96148b04e00d53593ad20951f6d07cd0cea Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Thu, 5 Sep 2024 13:59:30 +0200 Subject: [PATCH 09/53] iplimit - ipv6 support --- web/job/check_client_ip_job.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/job/check_client_ip_job.go b/web/job/check_client_ip_job.go index e5e51c24..0b567d9b 100644 --- a/web/job/check_client_ip_job.go +++ b/web/job/check_client_ip_job.go @@ -122,13 +122,13 @@ func (j *CheckClientIpJob) processLogFile() bool { for scanner.Scan() { line := scanner.Text() - ipRegx, _ := regexp.Compile(`(\d+\.\d+\.\d+\.\d+).* accepted`) + ipRegx, _ := regexp.Compile(`from \[?([0-9a-fA-F:.]+)\]?:\d+ accepted`) emailRegx, _ := regexp.Compile(`email:.+`) matches := ipRegx.FindStringSubmatch(line) if len(matches) > 1 { ip := matches[1] - if ip == "127.0.0.1" { + if ip == "127.0.0.1" || ip == "::1" { continue } From b4baf35ed8a14b58f9db6dde6a33b36d6095bcc1 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Thu, 5 Sep 2024 15:16:15 +0200 Subject: [PATCH 10/53] Update Email Validation --- web/service/inbound.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/web/service/inbound.go b/web/service/inbound.go index fa0ecf31..cbfa831a 100644 --- a/web/service/inbound.go +++ b/web/service/inbound.go @@ -2,7 +2,9 @@ package service import ( "encoding/json" + "errors" "fmt" + "regexp" "strconv" "strings" "time" @@ -411,6 +413,12 @@ func (s *InboundService) AddInboundClient(data *model.Inbound) (bool, error) { return false, err } + email := clients[0].Email + valid, err := validateEmail(email) + if !valid { + return false, err + } + var settings map[string]interface{} err = json.Unmarshal([]byte(data.Settings), &settings) if err != nil { @@ -601,6 +609,12 @@ func (s *InboundService) UpdateInboundClient(data *model.Inbound, clientId strin return false, err } + email := clients[0].Email + valid, err := validateEmail(email) + if !valid { + return false, err + } + var settings map[string]interface{} err = json.Unmarshal([]byte(data.Settings), &settings) if err != nil { @@ -2007,3 +2021,20 @@ func (s *InboundService) MigrateDB() { func (s *InboundService) GetOnlineClients() []string { return p.GetOnlineClients() } + +func validateEmail(email string) (bool, error) { + if strings.Contains(email, " ") { + return false, errors.New("email contains spaces, please remove them") + } + + if email != strings.ToLower(email) { + return false, errors.New("email contains uppercase letters, please convert to lowercase") + } + + emailPattern := `^[a-z0-9._-]+$` + if !regexp.MustCompile(emailPattern).MatchString(email) { + return false, errors.New("email contains invalid characters, please use only lowercase letters, digits, dots, dashes, and underscores") + } + + return true, nil +} From 58c721e7d20bb712af0d13dd2334c39fc10dbab0 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Mon, 9 Sep 2024 09:46:39 +0200 Subject: [PATCH 11/53] quic removed --- sub/subJsonService.go | 4 +- sub/subService.go | 24 ------ web/assets/js/model/outbound.js | 14 +--- web/assets/js/model/xray.js | 75 +------------------ web/html/xui/form/outbound.html | 27 +------ web/html/xui/form/stream/stream_quic.html | 33 -------- web/html/xui/form/stream/stream_settings.html | 6 -- web/html/xui/inbound_info_modal.html | 20 ----- web/translation/translate.en_US.toml | 3 - web/translation/translate.es_ES.toml | 3 - web/translation/translate.fa_IR.toml | 3 - web/translation/translate.id_ID.toml | 3 - web/translation/translate.pt_BR.toml | 3 - web/translation/translate.ru_RU.toml | 3 - web/translation/translate.tr_TR.toml | 3 - web/translation/translate.uk_UA.toml | 3 - web/translation/translate.vi_VN.toml | 3 - web/translation/translate.zh_CN.toml | 3 - 18 files changed, 5 insertions(+), 228 deletions(-) delete mode 100644 web/html/xui/form/stream/stream_quic.html diff --git a/sub/subJsonService.go b/sub/subJsonService.go index d1b5baaa..cbda594a 100644 --- a/sub/subJsonService.go +++ b/sub/subJsonService.go @@ -268,13 +268,13 @@ func (s *SubJsonService) realityData(rData map[string]interface{}) map[string]in rltyData["spiderX"] = "/" + random.Seq(15) shortIds, ok := rData["shortIds"].([]interface{}) if ok && len(shortIds) > 0 { - rltyData["shortId"] = shortIds + rltyData["shortId"] = shortIds[random.Num(len(shortIds))].(string) } else { rltyData["shortId"] = "" } serverNames, ok := rData["serverNames"].([]interface{}) if ok && len(serverNames) > 0 { - rltyData["serverName"] = serverNames + rltyData["serverName"] = serverNames[random.Num(len(serverNames))].(string) } else { rltyData["serverName"] = "" } diff --git a/sub/subService.go b/sub/subService.go index 2f5b2f98..33d2e065 100644 --- a/sub/subService.go +++ b/sub/subService.go @@ -213,12 +213,6 @@ func (s *SubService) genVmessLink(inbound *model.Inbound, email string) string { http, _ := stream["httpSettings"].(map[string]interface{}) obj["path"], _ = http["path"].(string) obj["host"] = searchHost(http) - case "quic": - quic, _ := stream["quicSettings"].(map[string]interface{}) - header := quic["header"].(map[string]interface{}) - obj["type"], _ = header["type"].(string) - obj["host"], _ = quic["security"].(string) - obj["path"], _ = quic["key"].(string) case "grpc": grpc, _ := stream["grpcSettings"].(map[string]interface{}) obj["path"] = grpc["serviceName"].(string) @@ -370,12 +364,6 @@ func (s *SubService) genVlessLink(inbound *model.Inbound, email string) string { http, _ := stream["httpSettings"].(map[string]interface{}) params["path"] = http["path"].(string) params["host"] = searchHost(http) - case "quic": - quic, _ := stream["quicSettings"].(map[string]interface{}) - params["quicSecurity"] = quic["security"].(string) - params["key"] = quic["key"].(string) - header := quic["header"].(map[string]interface{}) - params["headerType"] = header["type"].(string) case "grpc": grpc, _ := stream["grpcSettings"].(map[string]interface{}) params["serviceName"] = grpc["serviceName"].(string) @@ -604,12 +592,6 @@ func (s *SubService) genTrojanLink(inbound *model.Inbound, email string) string http, _ := stream["httpSettings"].(map[string]interface{}) params["path"] = http["path"].(string) params["host"] = searchHost(http) - case "quic": - quic, _ := stream["quicSettings"].(map[string]interface{}) - params["quicSecurity"] = quic["security"].(string) - params["key"] = quic["key"].(string) - header := quic["header"].(map[string]interface{}) - params["headerType"] = header["type"].(string) case "grpc": grpc, _ := stream["grpcSettings"].(map[string]interface{}) params["serviceName"] = grpc["serviceName"].(string) @@ -839,12 +821,6 @@ func (s *SubService) genShadowsocksLink(inbound *model.Inbound, email string) st http, _ := stream["httpSettings"].(map[string]interface{}) params["path"] = http["path"].(string) params["host"] = searchHost(http) - case "quic": - quic, _ := stream["quicSettings"].(map[string]interface{}) - params["quicSecurity"] = quic["security"].(string) - params["key"] = quic["key"].(string) - header := quic["header"].(map[string]interface{}) - params["headerType"] = header["type"].(string) case "grpc": grpc, _ := stream["grpcSettings"].(map[string]interface{}) params["serviceName"] = grpc["serviceName"].(string) diff --git a/web/assets/js/model/outbound.js b/web/assets/js/model/outbound.js index 1ff271f2..dc22a5b1 100644 --- a/web/assets/js/model/outbound.js +++ b/web/assets/js/model/outbound.js @@ -471,7 +471,6 @@ class StreamSettings extends CommonClass { this.kcp = kcpSettings; this.ws = wsSettings; this.http = httpSettings; - this.quic = quicSettings; this.grpc = grpcSettings; this.httpupgrade = httpupgradeSettings; this.splithttp = splithttpSettings; @@ -523,7 +522,6 @@ class StreamSettings extends CommonClass { kcpSettings: network === 'kcp' ? this.kcp.toJson() : undefined, wsSettings: network === 'ws' ? this.ws.toJson() : undefined, httpSettings: network === 'http' ? this.http.toJson() : undefined, - quicSettings: network === 'quic' ? this.quic.toJson() : undefined, grpcSettings: network === 'grpc' ? this.grpc.toJson() : undefined, httpupgradeSettings: network === 'httpupgrade' ? this.httpupgrade.toJson() : undefined, splithttpSettings: network === 'splithttp' ? this.splithttp.toJson() : undefined, @@ -591,7 +589,7 @@ class Outbound extends CommonClass { canEnableTls() { if (![Protocols.VMess, Protocols.VLESS, Protocols.Trojan, Protocols.Shadowsocks].includes(this.protocol)) return false; - return ["tcp", "ws", "http", "quic", "grpc", "httpupgrade", "splithttp"].includes(this.stream.network); + return ["tcp", "ws", "http", "grpc", "httpupgrade", "splithttp"].includes(this.stream.network); } //this is used for xtls-rprx-vision @@ -707,11 +705,6 @@ class Outbound extends CommonClass { stream.http = new HttpStreamSettings( json.path, json.host); - } else if (network === 'quic') { - stream.quic = new QuicStreamSettings( - json.host ? json.host : 'none', - json.path, - json.type ? json.type : 'none'); } else if (network === 'grpc') { stream.grpc = new GrpcStreamSettings(json.path, json.authority, json.type == 'multi'); } else if (network === 'httpupgrade') { @@ -753,11 +746,6 @@ class Outbound extends CommonClass { stream.ws = new WsStreamSettings(path, host); } else if (type === 'http' || type == 'h2') { stream.http = new HttpStreamSettings(path, host); - } else if (type === 'quic') { - stream.quic = new QuicStreamSettings( - url.searchParams.get('quicSecurity') ?? 'none', - url.searchParams.get('key') ?? '', - headerType ?? 'none'); } else if (type === 'grpc') { stream.grpc = new GrpcStreamSettings( url.searchParams.get('serviceName') ?? '', diff --git a/web/assets/js/model/xray.js b/web/assets/js/model/xray.js index a225c993..8b7fca28 100644 --- a/web/assets/js/model/xray.js +++ b/web/assets/js/model/xray.js @@ -449,37 +449,6 @@ class HttpStreamSettings extends XrayCommonClass { } } -class QuicStreamSettings extends XrayCommonClass { - constructor( - security = 'none', - key = RandomUtil.randomSeq(10), - type = 'none' - ) { - super(); - this.security = security; - this.key = key; - this.type = type; - } - - static fromJson(json = {}) { - return new QuicStreamSettings( - json.security, - json.key, - json.header ? json.header.type : 'none', - ); - } - - toJson() { - return { - security: this.security, - key: this.key, - header: { - type: this.type, - } - } - } -} - class GrpcStreamSettings extends XrayCommonClass { constructor( serviceName = "", @@ -1092,7 +1061,6 @@ class StreamSettings extends XrayCommonClass { kcpSettings = new KcpStreamSettings(), wsSettings = new WsStreamSettings(), httpSettings = new HttpStreamSettings(), - quicSettings = new QuicStreamSettings(), grpcSettings = new GrpcStreamSettings(), httpupgradeSettings = new HTTPUpgradeStreamSettings(), splithttpSettings = new SplitHTTPStreamSettings(), @@ -1109,7 +1077,6 @@ class StreamSettings extends XrayCommonClass { this.kcp = kcpSettings; this.ws = wsSettings; this.http = httpSettings; - this.quic = quicSettings; this.grpc = grpcSettings; this.httpupgrade = httpupgradeSettings; this.splithttp = splithttpSettings; @@ -1173,7 +1140,6 @@ class StreamSettings extends XrayCommonClass { KcpStreamSettings.fromJson(json.kcpSettings), WsStreamSettings.fromJson(json.wsSettings), HttpStreamSettings.fromJson(json.httpSettings), - QuicStreamSettings.fromJson(json.quicSettings), GrpcStreamSettings.fromJson(json.grpcSettings), HTTPUpgradeStreamSettings.fromJson(json.httpupgradeSettings), SplitHTTPStreamSettings.fromJson(json.splithttpSettings), @@ -1194,7 +1160,6 @@ class StreamSettings extends XrayCommonClass { kcpSettings: network === 'kcp' ? this.kcp.toJson() : undefined, wsSettings: network === 'ws' ? this.ws.toJson() : undefined, httpSettings: network === 'http' ? this.http.toJson() : undefined, - quicSettings: network === 'quic' ? this.quic.toJson() : undefined, grpcSettings: network === 'grpc' ? this.grpc.toJson() : undefined, httpupgradeSettings: network === 'httpupgrade' ? this.httpupgrade.toJson() : undefined, splithttpSettings: network === 'splithttp' ? this.splithttp.toJson() : undefined, @@ -1311,10 +1276,6 @@ class Inbound extends XrayCommonClass { return this.network === "kcp"; } - get isQuic() { - return this.network === "quic" - } - get isGrpc() { return this.network === "grpc"; } @@ -1393,18 +1354,6 @@ class Inbound extends XrayCommonClass { return null; } - get quicSecurity() { - return this.stream.quic.security; - } - - get quicKey() { - return this.stream.quic.key; - } - - get quicType() { - return this.stream.quic.type; - } - get kcpType() { return this.stream.kcp.type; } @@ -1424,7 +1373,7 @@ class Inbound extends XrayCommonClass { canEnableTls() { if (![Protocols.VMESS, Protocols.VLESS, Protocols.TROJAN, Protocols.SHADOWSOCKS].includes(this.protocol)) return false; - return ["tcp", "ws", "http", "quic", "grpc", "httpupgrade", "splithttp"].includes(this.network); + return ["tcp", "ws", "http", "grpc", "httpupgrade", "splithttp"].includes(this.network); } //this is used for xtls-rprx-vision @@ -1497,10 +1446,6 @@ class Inbound extends XrayCommonClass { obj.net = 'h2'; obj.path = this.stream.http.path; obj.host = this.stream.http.host.join(','); - } else if (network === 'quic') { - obj.type = this.stream.quic.type; - obj.host = this.stream.quic.security; - obj.path = this.stream.quic.key; } else if (network === 'grpc') { obj.path = this.stream.grpc.serviceName; obj.authority = this.stream.grpc.authority; @@ -1570,12 +1515,6 @@ class Inbound extends XrayCommonClass { params.set("path", http.path); params.set("host", http.host); break; - case "quic": - const quic = this.stream.quic; - params.set("quicSecurity", quic.security); - params.set("key", quic.key); - params.set("headerType", quic.type); - break; case "grpc": const grpc = this.stream.grpc; params.set("serviceName", grpc.serviceName); @@ -1691,12 +1630,6 @@ class Inbound extends XrayCommonClass { params.set("path", http.path); params.set("host", http.host); break; - case "quic": - const quic = this.stream.quic; - params.set("quicSecurity", quic.security); - params.set("key", quic.key); - params.set("headerType", quic.type); - break; case "grpc": const grpc = this.stream.grpc; params.set("serviceName", grpc.serviceName); @@ -1779,12 +1712,6 @@ class Inbound extends XrayCommonClass { params.set("path", http.path); params.set("host", http.host); break; - case "quic": - const quic = this.stream.quic; - params.set("quicSecurity", quic.security); - params.set("key", quic.key); - params.set("headerType", quic.type); - break; case "grpc": const grpc = this.stream.grpc; params.set("serviceName", grpc.serviceName); diff --git a/web/html/xui/form/outbound.html b/web/html/xui/form/outbound.html index 7dbd0313..081c6fd7 100644 --- a/web/html/xui/form/outbound.html +++ b/web/html/xui/form/outbound.html @@ -239,7 +239,6 @@ mKCP WebSocket H2 - QUIC gRPC HTTPUpgrade SplitHTTP @@ -317,31 +316,7 @@ - - - - + - - - - + + + {{end}} From cf6a8bd4638b06ec509b0202dea9851317d354ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2024 11:45:21 +0200 Subject: [PATCH 40/53] Bump google.golang.org/grpc from 1.66.2 to 1.67.0 (#2563) Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.66.2 to 1.67.0. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.66.2...v1.67.0) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 343768b2..d66f4300 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/xtls/xray-core v1.8.24 go.uber.org/atomic v1.11.0 golang.org/x/text v0.18.0 - google.golang.org/grpc v1.66.2 + google.golang.org/grpc v1.67.0 gorm.io/driver/sqlite v1.5.6 gorm.io/gorm v1.25.12 ) diff --git a/go.sum b/go.sum index fbd7624d..b6158bf1 100644 --- a/go.sum +++ b/go.sum @@ -374,8 +374,8 @@ google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmE google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo= -google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= +google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw= +google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 4fdef3cfde47a5febe969f7223ddd49800dcd7a4 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Tue, 24 Sep 2024 11:38:10 +0200 Subject: [PATCH 41/53] add or remove noise --- web/assets/js/model/outbound.js | 32 ++++++- web/assets/js/model/xray.js | 10 +- web/html/xui/form/outbound.html | 42 ++++++--- .../xui/form/stream/stream_splithttp.html | 12 +-- web/html/xui/settings.html | 92 +++++++++++-------- web/service/config.json | 5 +- 6 files changed, 125 insertions(+), 68 deletions(-) diff --git a/web/assets/js/model/outbound.js b/web/assets/js/model/outbound.js index bc4ad735..5772d34f 100644 --- a/web/assets/js/model/outbound.js +++ b/web/assets/js/model/outbound.js @@ -854,7 +854,7 @@ Outbound.FreedomSettings = class extends CommonClass { timeout = 10, redirect = '', fragment = {}, - noises = {} + noises = [] ) { super(); this.domainStrategy = domainStrategy; @@ -864,13 +864,21 @@ Outbound.FreedomSettings = class extends CommonClass { this.noises = noises; } + addNoise() { + this.noises.push(new Outbound.FreedomSettings.Noise()); + } + + delNoise(index) { + this.noises.splice(index, 1); + } + static fromJson(json = {}) { return new Outbound.FreedomSettings( json.domainStrategy, json.timeout, json.redirect, json.fragment ? Outbound.FreedomSettings.Fragment.fromJson(json.fragment) : undefined, - json.noises ? Outbound.FreedomSettings.Noises.fromJson(json.noises) : undefined, + json.noises ? json.noises.map(noise => Outbound.FreedomSettings.Noise.fromJson(noise)) : [new Outbound.FreedomSettings.Noise()], ); } @@ -880,10 +888,11 @@ Outbound.FreedomSettings = class extends CommonClass { timeout: this.timeout, redirect: this.redirect, fragment: Object.keys(this.fragment).length === 0 ? undefined : this.fragment, - noises: Object.keys(this.noises).length === 0 ? undefined : this.noises, + noises: Outbound.FreedomSettings.Noise.toJsonArray(this.noises), }; } }; + Outbound.FreedomSettings.Fragment = class extends CommonClass { constructor(packets = '1-3', length = '', interval = '') { super(); @@ -900,7 +909,8 @@ Outbound.FreedomSettings.Fragment = class extends CommonClass { ); } }; -Outbound.FreedomSettings.Noises = class extends CommonClass { + +Outbound.FreedomSettings.Noise = class extends CommonClass { constructor( type = 'rand', packet = '10-20', @@ -913,12 +923,24 @@ Outbound.FreedomSettings.Noises = class extends CommonClass { } static fromJson(json = {}) { - return new Outbound.FreedomSettings.Noises( + return new Outbound.FreedomSettings.Noise( json.type, json.packet, json.delay, ); } + + toJson() { + return { + type: this.type, + packet: this.packet, + delay: this.delay, + }; + } + + static toJsonArray(noises) { + return noises.map(noise => noise.toJson()); + } }; Outbound.BlackholeSettings = class extends CommonClass { diff --git a/web/assets/js/model/xray.js b/web/assets/js/model/xray.js index 93c3ac1e..74211952 100644 --- a/web/assets/js/model/xray.js +++ b/web/assets/js/model/xray.js @@ -530,10 +530,10 @@ class SplitHTTPStreamSettings extends XrayCommonClass { noSSEHeader = false, xPaddingBytes = "100-1000", xmux = { - maxConnections: 0, - maxConcurrency: 0, - cMaxReuseTimes: 0, - cMaxLifetimeMs: 0 + maxConcurrency: 0, + maxConnections: 0, + cMaxReuseTimes: 0, + cMaxLifetimeMs: 0 } ) { super(); @@ -581,8 +581,8 @@ class SplitHTTPStreamSettings extends XrayCommonClass { noSSEHeader: this.noSSEHeader, xPaddingBytes: this.xPaddingBytes, xmux: { - maxConnections: this.xmux.maxConnections, maxConcurrency: this.xmux.maxConcurrency, + maxConnections: this.xmux.maxConnections, cMaxReuseTimes: this.xmux.cMaxReuseTimes, cMaxLifetimeMs: this.xmux.cMaxLifetimeMs } diff --git a/web/html/xui/form/outbound.html b/web/html/xui/form/outbound.html index 21fedd88..bbad5c85 100644 --- a/web/html/xui/form/outbound.html +++ b/web/html/xui/form/outbound.html @@ -46,21 +46,39 @@ + + - + + - diff --git a/web/html/xui/form/stream/stream_splithttp.html b/web/html/xui/form/stream/stream_splithttp.html index f03a039c..453263de 100644 --- a/web/html/xui/form/stream/stream_splithttp.html +++ b/web/html/xui/form/stream/stream_splithttp.html @@ -34,17 +34,17 @@ - - - - + + + + - + - + {{end}} diff --git a/web/html/xui/settings.html b/web/html/xui/settings.html index b95ce0a5..4ffbb0b7 100644 --- a/web/html/xui/settings.html +++ b/web/html/xui/settings.html @@ -314,23 +314,29 @@ - + - - [[ p ]] + + + [[ p ]] - - + + + Remove + Add Noise @@ -436,11 +442,9 @@ protocol: "freedom", settings: { domainStrategy: "AsIs", - noises: { - type: "rand", - packet: "10-20", - delay: "10-16", - } + noises: [ + { type: "rand", packet: "10-20", delay: "10-16" }, + ], }, }, defaultMux: { @@ -604,6 +608,30 @@ this.user.loginSecret = ""; } }, + addNoise() { + const newNoise = { type: "rand", packet: "10-20", delay: "10-16" }; + this.noisesArray = [...this.noisesArray, newNoise]; + }, + removeNoise(index) { + const newNoises = [...this.noisesArray]; + newNoises.splice(index, 1); + this.noisesArray = newNoises; + }, + updateNoiseType(index, value) { + const updatedNoises = [...this.noisesArray]; + updatedNoises[index] = { ...updatedNoises[index], type: value }; + this.noisesArray = updatedNoises; + }, + updateNoisePacket(index, value) { + const updatedNoises = [...this.noisesArray]; + updatedNoises[index] = { ...updatedNoises[index], packet: value }; + this.noisesArray = updatedNoises; + }, + updateNoiseDelay(index, value) { + const updatedNoises = [...this.noisesArray]; + updatedNoises[index] = { ...updatedNoises[index], delay: value }; + this.noisesArray = updatedNoises; + }, }, computed: { fragment: { @@ -643,37 +671,25 @@ } }, noises: { - get: function () { return this.allSetting?.subJsonNoises != ""; }, - set: function (v) { - this.allSetting.subJsonNoises = v ? JSON.stringify(this.defaultNoises) : ""; - } - }, - noisesType: { - get: function () { return this.noises ? JSON.parse(this.allSetting.subJsonNoises).settings.noises.type : ""; }, - set: function (v) { - if (v != "") { - newNoises = JSON.parse(this.allSetting.subJsonNoises); - newNoises.settings.noises.type = v; - this.allSetting.subJsonNoises = JSON.stringify(newNoises); + get() { + return this.allSetting?.subJsonNoises != ""; + }, + set(v) { + if (v) { + this.allSetting.subJsonNoises = JSON.stringify(this.defaultNoises); + } else { + this.allSetting.subJsonNoises = ""; } } }, - noisesPacket: { - get: function () { return this.noises ? JSON.parse(this.allSetting.subJsonNoises).settings.noises.packet : ""; }, - set: function (v) { - if (v != "") { - newNoises = JSON.parse(this.allSetting.subJsonNoises); - newNoises.settings.noises.packet = v; - this.allSetting.subJsonNoises = JSON.stringify(newNoises); - } - } - }, - noisesDelay: { - get: function () { return this.noises ? JSON.parse(this.allSetting.subJsonNoises).settings.noises.delay : ""; }, - set: function (v) { - if (v != "") { - newNoises = JSON.parse(this.allSetting.subJsonNoises); - newNoises.settings.noises.delay = v; + noisesArray: { + get() { + return this.noises ? JSON.parse(this.allSetting.subJsonNoises).settings.noises : []; + }, + set(value) { + if (this.noises) { + const newNoises = JSON.parse(this.allSetting.subJsonNoises); + newNoises.settings.noises = value; this.allSetting.subJsonNoises = JSON.stringify(newNoises); } } diff --git a/web/service/config.json b/web/service/config.json index 3f7fbc3a..122963fe 100644 --- a/web/service/config.json +++ b/web/service/config.json @@ -2,8 +2,9 @@ "log": { "access": "none", "dnsLog": false, - "error": "./error.log", - "loglevel": "warning" + "error": "", + "loglevel": "warning", + "maskAddress": "" }, "api": { "tag": "api", From e5835c299c2c975354e1e9ab7b6fa1497183d963 Mon Sep 17 00:00:00 2001 From: Pavel Kogen Date: Tue, 24 Sep 2024 12:53:12 +0300 Subject: [PATCH 42/53] OS Support - Amazon Linux (#2564) --- README.es_ES.md | 1 + README.md | 1 + README.ru_RU.md | 1 + README.zh_CN.md | 1 + install.sh | 10 +++++++--- x-ui.sh | 10 +++++++--- 6 files changed, 18 insertions(+), 6 deletions(-) diff --git a/README.es_ES.md b/README.es_ES.md index bab3a57a..5c0b8109 100644 --- a/README.es_ES.md +++ b/README.es_ES.md @@ -225,6 +225,7 @@ location /sub { - AlmaLinux 9+ - Rockylinux 9+ - OpenSUSE Tubleweed +- Amazon Linux 2023 ## Arquitecturas y Dispositivos Compatibles diff --git a/README.md b/README.md index d2d2cf17..0b5a5a99 100644 --- a/README.md +++ b/README.md @@ -254,6 +254,7 @@ location /sub { - Rocky Linux 9+ - Oracle Linux 8+ - OpenSUSE Tubleweed +- Amazon Linux 2023 ## Supported Architectures and Devices diff --git a/README.ru_RU.md b/README.ru_RU.md index a1541712..07e30a5b 100644 --- a/README.ru_RU.md +++ b/README.ru_RU.md @@ -253,6 +253,7 @@ location /sub { - Rocky Linux 9+ - Oracle Linux 8+ - OpenSUSE Tubleweed +- Amazon Linux 2023 ## Поддерживаемые архитектуры и устройства diff --git a/README.zh_CN.md b/README.zh_CN.md index eab52883..0406b1b9 100644 --- a/README.zh_CN.md +++ b/README.zh_CN.md @@ -248,6 +248,7 @@ location /sub { - AlmaLinux 9+ - Rockylinux 9+ - OpenSUSE Tubleweed +- Amazon Linux 2023 ## 支持的架构和设备
diff --git a/install.sh b/install.sh index d60d9a8b..2fe66b08 100644 --- a/install.sh +++ b/install.sh @@ -39,12 +39,12 @@ arch() { echo "arch: $(arch)" os_version="" -os_version=$(grep -i version_id /etc/os-release | cut -d \" -f2 | cut -d . -f1) +os_version=$(grep "^VERSION_ID" /etc/os-release | cut -d '=' -f2 | tr -d '"') if [[ "${release}" == "arch" ]]; then echo "Your OS is Arch Linux" elif [[ "${release}" == "parch" ]]; then - echo "Your OS is Parch linux" + echo "Your OS is Parch Linux" elif [[ "${release}" == "manjaro" ]]; then echo "Your OS is Manjaro" elif [[ "${release}" == "armbian" ]]; then @@ -63,6 +63,10 @@ elif [[ "${release}" == "fedora" ]]; then if [[ ${os_version} -lt 36 ]]; then echo -e "${red} Please use Fedora 36 or higher version!${plain}\n" && exit 1 fi +elif [[ "${release}" == "amzn" ]]; then + if [[ ${os_version} != "2023" ]]; then + echo -e "${red} Please use Amazon Linux 2023!${plain}\n" && exit 1 + fi elif [[ "${release}" == "debian" ]]; then if [[ ${os_version} -lt 11 ]]; then echo -e "${red} Please use Debian 11 or higher ${plain}\n" && exit 1 @@ -94,8 +98,8 @@ else echo "- Rocky Linux 9+" echo "- Oracle Linux 8+" echo "- OpenSUSE Tumbleweed" + echo "- Amazon Linux 2023" exit 1 - fi install_base() { diff --git a/x-ui.sh b/x-ui.sh index 0b6bd331..46449217 100644 --- a/x-ui.sh +++ b/x-ui.sh @@ -36,12 +36,12 @@ fi echo "The OS release is: $release" os_version="" -os_version=$(grep -i version_id /etc/os-release | cut -d \" -f2 | cut -d . -f1) +os_version=$(grep "^VERSION_ID" /etc/os-release | cut -d '=' -f2 | tr -d '"') if [[ "${release}" == "arch" ]]; then echo "Your OS is Arch Linux" elif [[ "${release}" == "parch" ]]; then - echo "Your OS is Parch linux" + echo "Your OS is Parch Linux" elif [[ "${release}" == "manjaro" ]]; then echo "Your OS is Manjaro" elif [[ "${release}" == "armbian" ]]; then @@ -60,6 +60,10 @@ elif [[ "${release}" == "fedora" ]]; then if [[ ${os_version} -lt 36 ]]; then echo -e "${red} Please use Fedora 36 or higher version!${plain}\n" && exit 1 fi +elif [[ "${release}" == "amzn" ]]; then + if [[ ${os_version} != "2023" ]]; then + echo -e "${red} Please use Amazon Linux 2023!${plain}\n" && exit 1 + fi elif [[ "${release}" == "debian" ]]; then if [[ ${os_version} -lt 11 ]]; then echo -e "${red} Please use Debian 11 or higher ${plain}\n" && exit 1 @@ -91,8 +95,8 @@ else echo "- Rocky Linux 9+" echo "- Oracle Linux 8+" echo "- OpenSUSE Tumbleweed" + echo "- Amazon Linux 2023" exit 1 - fi # Declare Variables From 16b47959565570e9f121080af157f7c0b95bfa25 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Tue, 24 Sep 2024 12:00:37 +0200 Subject: [PATCH 43/53] removed - timeout --- web/assets/js/model/outbound.js | 4 ---- web/assets/js/model/xray.js | 6 +----- web/html/xui/form/outbound.html | 3 --- web/html/xui/form/protocol/dokodemo.html | 3 --- 4 files changed, 1 insertion(+), 15 deletions(-) diff --git a/web/assets/js/model/outbound.js b/web/assets/js/model/outbound.js index 5772d34f..a66cc215 100644 --- a/web/assets/js/model/outbound.js +++ b/web/assets/js/model/outbound.js @@ -851,14 +851,12 @@ Outbound.Settings = class extends CommonClass { Outbound.FreedomSettings = class extends CommonClass { constructor( domainStrategy = '', - timeout = 10, redirect = '', fragment = {}, noises = [] ) { super(); this.domainStrategy = domainStrategy; - this.timeout = timeout; this.redirect = redirect; this.fragment = fragment; this.noises = noises; @@ -875,7 +873,6 @@ Outbound.FreedomSettings = class extends CommonClass { static fromJson(json = {}) { return new Outbound.FreedomSettings( json.domainStrategy, - json.timeout, json.redirect, json.fragment ? Outbound.FreedomSettings.Fragment.fromJson(json.fragment) : undefined, json.noises ? json.noises.map(noise => Outbound.FreedomSettings.Noise.fromJson(noise)) : [new Outbound.FreedomSettings.Noise()], @@ -885,7 +882,6 @@ Outbound.FreedomSettings = class extends CommonClass { toJson() { return { domainStrategy: ObjectUtil.isEmpty(this.domainStrategy) ? undefined : this.domainStrategy, - timeout: this.timeout, redirect: this.redirect, fragment: Object.keys(this.fragment).length === 0 ? undefined : this.fragment, noises: Outbound.FreedomSettings.Noise.toJsonArray(this.noises), diff --git a/web/assets/js/model/xray.js b/web/assets/js/model/xray.js index 74211952..078b8711 100644 --- a/web/assets/js/model/xray.js +++ b/web/assets/js/model/xray.js @@ -2513,15 +2513,13 @@ Inbound.DokodemoSettings = class extends Inbound.Settings { address, port, network = 'tcp,udp', - followRedirect = false, - timeout = 30 + followRedirect = false ) { super(protocol); this.address = address; this.port = port; this.network = network; this.followRedirect = followRedirect; - this.timeout = timeout; } static fromJson(json = {}) { @@ -2531,7 +2529,6 @@ Inbound.DokodemoSettings = class extends Inbound.Settings { json.port, json.network, json.followRedirect, - json.timeout, ); } @@ -2541,7 +2538,6 @@ Inbound.DokodemoSettings = class extends Inbound.Settings { port: this.port, network: this.network, followRedirect: this.followRedirect, - timeout: this.timeout, }; } }; diff --git a/web/html/xui/form/outbound.html b/web/html/xui/form/outbound.html index bbad5c85..604108fe 100644 --- a/web/html/xui/form/outbound.html +++ b/web/html/xui/form/outbound.html @@ -22,9 +22,6 @@ [[ s ]] - - - diff --git a/web/html/xui/form/protocol/dokodemo.html b/web/html/xui/form/protocol/dokodemo.html index e7e1d950..70ffe7e0 100644 --- a/web/html/xui/form/protocol/dokodemo.html +++ b/web/html/xui/form/protocol/dokodemo.html @@ -16,8 +16,5 @@ - - - {{end}} From d5de8e1bf37e797dfd587d09bab4ade2ba1f943a Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Tue, 24 Sep 2024 12:18:42 +0200 Subject: [PATCH 44/53] removeNoise - hide when only one noise --- web/html/xui/settings.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/html/xui/settings.html b/web/html/xui/settings.html index 4ffbb0b7..2ea44418 100644 --- a/web/html/xui/settings.html +++ b/web/html/xui/settings.html @@ -333,7 +333,7 @@ @input="(value) => updateNoisePacket(index, value)" placeholder="5-10"> - Remove + Remove Add Noise From 75dd7b93f528df313e465a3573c4ea99876d927f Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Tue, 24 Sep 2024 12:19:08 +0200 Subject: [PATCH 45/53] update dependencies --- go.mod | 6 +++--- go.sum | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index d66f4300..7f5e5357 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( require ( github.com/andybalholm/brotli v1.1.0 // indirect - github.com/bytedance/sonic v1.12.2 // indirect + github.com/bytedance/sonic v1.12.3 // indirect github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/cloudflare/circl v1.4.0 // indirect github.com/cloudwego/base64x v0.1.4 // indirect @@ -49,7 +49,7 @@ require ( github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.17.9 // indirect + github.com/klauspost/compress v1.17.10 // indirect github.com/klauspost/cpuid/v2 v2.2.8 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect @@ -64,7 +64,7 @@ require ( github.com/quic-go/quic-go v0.47.0 // indirect github.com/refraction-networking/utls v1.6.7 // indirect github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect - github.com/rogpeppe/go-internal v1.12.0 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/sagernet/sing v0.4.3 // indirect github.com/sagernet/sing-shadowsocks v0.2.7 // indirect github.com/savsgio/gotils v0.0.0-20240704082632-aef3928b8a38 // indirect diff --git a/go.sum b/go.sum index b6158bf1..b3c26149 100644 --- a/go.sum +++ b/go.sum @@ -20,6 +20,8 @@ github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBT github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/bytedance/sonic v1.12.2 h1:oaMFuRTpMHYLpCntGca65YWt5ny+wAceDERTkT2L9lg= github.com/bytedance/sonic v1.12.2/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= +github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= @@ -127,6 +129,8 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.10 h1:oXAz+Vh0PMUvJczoi+flxpnBEPxoER1IaAnU/NMPtT0= +github.com/klauspost/compress v1.17.10/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= @@ -198,6 +202,8 @@ github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/sagernet/sing v0.4.3 h1:Ty/NAiNnVd6844k7ujlL5lkzydhcTH5Psc432jXA4Y8= github.com/sagernet/sing v0.4.3/go.mod h1:ieZHA/+Y9YZfXs2I3WtuwgyCZ6GPsIR7HdKb1SdEnls= From 7c892ac05198b563270023cb1409acde7537aafc Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Tue, 24 Sep 2024 13:24:10 +0200 Subject: [PATCH 46/53] Iplimit - warning improved --- web/job/check_client_ip_job.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/web/job/check_client_ip_job.go b/web/job/check_client_ip_job.go index 481d756b..c38550b7 100644 --- a/web/job/check_client_ip_job.go +++ b/web/job/check_client_ip_job.go @@ -37,17 +37,11 @@ func (j *CheckClientIpJob) Run() { shouldClearAccessLog := false iplimitActive := j.hasLimitIp() - f2bInstalled := j.checkFail2BanInstalled() + f2bInstalled := j.checkFail2BanInstalled(iplimitActive) isAccessLogAvailable := j.checkAccessLogAvailable(iplimitActive) - if iplimitActive { - if f2bInstalled && isAccessLogAvailable { - shouldClearAccessLog = j.processLogFile() - } else { - if !f2bInstalled { - logger.Warning("[iplimit] fail2ban is not installed. IP limiting may not work properly.") - } - } + if iplimitActive && f2bInstalled && isAccessLogAvailable { + shouldClearAccessLog = j.processLogFile() } if shouldClearAccessLog || (isAccessLogAvailable && time.Now().Unix()-j.lastClear > 3600) { @@ -168,11 +162,17 @@ func (j *CheckClientIpJob) processLogFile() bool { return shouldCleanLog } -func (j *CheckClientIpJob) checkFail2BanInstalled() bool { +func (j *CheckClientIpJob) checkFail2BanInstalled(iplimitActive bool) bool { cmd := "fail2ban-client" args := []string{"-h"} err := exec.Command(cmd, args...).Run() - return err == nil + + if iplimitActive && err != nil { + logger.Warning("[LimitIP] Fail2Ban is not installed, Please install Fail2Ban from the x-ui bash menu.") + return false + } + + return true } func (j *CheckClientIpJob) checkAccessLogAvailable(iplimitActive bool) bool { @@ -183,7 +183,7 @@ func (j *CheckClientIpJob) checkAccessLogAvailable(iplimitActive bool) bool { if accessLogPath == "none" || accessLogPath == "" { if iplimitActive { - logger.Warning("Access log path is not set, and IP limit is active. Please configure the access log path.") + logger.Warning("[LimitIP] Access log path is not set, Please configure the access log path in Xray configs.") } return false } From c30c6f08f36e1784ba59108f0b9d3d160b83daa1 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Tue, 24 Sep 2024 14:57:14 +0200 Subject: [PATCH 47/53] Direct Sub Json - geoIP, geoSite --- web/html/xui/settings.html | 66 ++++++++++++++++++++++------ web/translation/translate.en_US.toml | 2 +- web/translation/translate.es_ES.toml | 2 +- web/translation/translate.fa_IR.toml | 2 +- web/translation/translate.id_ID.toml | 2 +- web/translation/translate.pt_BR.toml | 2 +- web/translation/translate.ru_RU.toml | 2 +- web/translation/translate.tr_TR.toml | 2 +- web/translation/translate.uk_UA.toml | 2 +- web/translation/translate.vi_VN.toml | 2 +- web/translation/translate.zh_CN.toml | 2 +- 11 files changed, 63 insertions(+), 23 deletions(-) diff --git a/web/html/xui/settings.html b/web/html/xui/settings.html index 2ea44418..7cebfd1e 100644 --- a/web/html/xui/settings.html +++ b/web/html/xui/settings.html @@ -380,9 +380,14 @@ - + - + + + + + + @@ -458,8 +463,7 @@ type: "field", outboundTag: "direct", domain: [ - "geosite:category-ir", - "geosite:cn" + "geosite:category-ir" ], "enabled": true }, @@ -468,17 +472,30 @@ outboundTag: "direct", ip: [ "geoip:private", - "geoip:ir", - "geoip:cn" + "geoip:ir" ], enabled: true }, ], - countryOptions: [ + geoIPOptions: [ { label: 'Private IP/Domain', value: 'private' }, { label: '🇮🇷 Iran', value: 'ir' }, { label: '🇨🇳 China', value: 'cn' }, { label: '🇷🇺 Russia', value: 'ru' }, + { label: '🇻🇳 Vietnam', value: 'vn' }, + { label: '🇪🇸 Spain', value: 'es' }, + { label: '🇮🇩 Indonesia', value: 'id' }, + { label: '🇺🇦 Ukraine', value: 'ua' }, + { label: '🇹🇷 Türkiye', value: 'tr' }, + { label: '🇧🇷 Brazil', value: 'br' }, + ], + geoSiteOptions: [ + { label: '🇮🇷 Iran', value: 'ir' }, + { label: '🇨🇳 China', value: 'cn' }, + { label: '🇷🇺 Russia', value: 'ru' }, + { label: 'Apple', value: 'apple' }, + { label: 'Meta', value: 'meta' }, + { label: 'Google', value: 'google' }, ], get remarkModel() { rm = this.allSetting.remarkModel; @@ -730,26 +747,49 @@ this.allSetting.subJsonRules = v ? JSON.stringify(this.defaultRules) : ""; } }, - directCountries: { + geoIP: { get: function () { if (!this.enableDirect) return []; - rules = JSON.parse(this.allSetting.subJsonRules); + const rules = JSON.parse(this.allSetting.subJsonRules); return Array.isArray(rules) ? rules[1].ip.map(d => d.replace("geoip:", "")) : []; }, set: function (v) { - rules = JSON.parse(this.allSetting.subJsonRules); + const rules = JSON.parse(this.allSetting.subJsonRules); if (!Array.isArray(rules)) return; - rules[0].domain = []; + rules[1].ip = []; + v.forEach(d => { + rules[1].ip.push("geoip:" + d); + }); + this.allSetting.subJsonRules = JSON.stringify(rules); + } + }, + geoSite: { + get: function () { + if (!this.enableDirect) return []; + const rules = JSON.parse(this.allSetting.subJsonRules); + return Array.isArray(rules) ? + rules[0].domain.map(d => { + if (d.startsWith("geosite:category-")) { + return d.replace("geosite:category-", ""); + } + return d.replace("geosite:", ""); + }) + : []; + }, + set: function (v) { + const rules = JSON.parse(this.allSetting.subJsonRules); + if (!Array.isArray(rules)) return; + + rules[0].domain = []; v.forEach(d => { let category = ''; - if (["cn", "private"].includes(d)) { + if (["cn", "apple", "meta", "google"].includes(d)) { category = ""; } else if (["ru", "ir"].includes(d)) { category = "category-"; } rules[0].domain.push("geosite:" + category + d); - rules[1].ip.push("geoip:" + d); }); this.allSetting.subJsonRules = JSON.stringify(rules); } diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml index f92f46ed..0978e84e 100644 --- a/web/translation/translate.en_US.toml +++ b/web/translation/translate.en_US.toml @@ -316,7 +316,7 @@ "muxSett" = "Mux Settings" "direct" = "Direct Connection" "directDesc" = "Directly establishes connections with domains or IP ranges of a specific country." -"directSett" = "Direct Connection Options" + [pages.xray] "title" = "Xray Configs" diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml index 462e534e..1997bd82 100644 --- a/web/translation/translate.es_ES.toml +++ b/web/translation/translate.es_ES.toml @@ -316,7 +316,7 @@ "muxSett" = "Configuración Mux" "direct" = "Conexión Directa" "directDesc" = "Establece conexiones directas con dominios o rangos de IP de un país específico." -"directSett" = "Opciones de Conexión Directa" + [pages.xray] "title" = "Xray Configuración" diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml index 0b4e7854..dac201f2 100644 --- a/web/translation/translate.fa_IR.toml +++ b/web/translation/translate.fa_IR.toml @@ -316,7 +316,7 @@ "muxSett" = "تنظیمات ماکس" "direct" = "اتصال مستقیم" "directDesc" = "به طور مستقیم با دامنه ها یا محدوده آی‌پی یک کشور خاص ارتباط برقرار می کند" -"directSett" = "گزینه های اتصال مستقیم" + [pages.xray] "title" = "پیکربندی ایکس‌ری" diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml index b59c5fc7..565b10a7 100644 --- a/web/translation/translate.id_ID.toml +++ b/web/translation/translate.id_ID.toml @@ -316,7 +316,7 @@ "muxSett" = "Pengaturan Mux" "direct" = "Koneksi langsung" "directDesc" = "Secara langsung membuat koneksi dengan domain atau rentang IP negara tertentu." -"directSett" = "Opsi Koneksi Langsung" + [pages.xray] "title" = "Konfigurasi Xray" diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml index 4da6d8f9..106bc9b9 100644 --- a/web/translation/translate.pt_BR.toml +++ b/web/translation/translate.pt_BR.toml @@ -316,7 +316,7 @@ "muxSett" = "Configurações de Mux" "direct" = "Conexão Direta" "directDesc" = "Estabelece conexões diretamente com domínios ou intervalos de IP de um país específico." -"directSett" = "Opções de Conexão Direta" + [pages.xray] "title" = "Configurações Xray" diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml index 59196c00..7ddc95c8 100644 --- a/web/translation/translate.ru_RU.toml +++ b/web/translation/translate.ru_RU.toml @@ -316,7 +316,7 @@ "muxSett" = "Mux Настройки" "direct" = "Прямая связь" "directDesc" = "Напрямую устанавливает соединения с доменами или диапазонами IP конкретной страны." -"directSett" = "Варианты прямого подключения" + [pages.xray] "title" = "Настройки Xray" diff --git a/web/translation/translate.tr_TR.toml b/web/translation/translate.tr_TR.toml index 1274941f..f21a2927 100644 --- a/web/translation/translate.tr_TR.toml +++ b/web/translation/translate.tr_TR.toml @@ -316,7 +316,7 @@ "muxSett" = "Mux Ayarları" "direct" = "Doğrudan Bağlantı" "directDesc" = "Belirli bir ülkenin alan adları veya IP aralıkları ile doğrudan bağlantı kurar." -"directSett" = "Doğrudan Bağlantı Seçenekleri" + [pages.xray] "title" = "Xray Yapılandırmaları" diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml index 221c34d5..1ed68eab 100644 --- a/web/translation/translate.uk_UA.toml +++ b/web/translation/translate.uk_UA.toml @@ -316,7 +316,7 @@ "muxSett" = "Налаштування Mux" "direct" = "Пряме підключення" "directDesc" = "Безпосередньо встановлює з’єднання з доменами або діапазонами IP певної країни." -"directSett" = "Параметри прямого підключення" + [pages.xray] "title" = "Xray конфігурації" diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml index e45c664b..edcf56bb 100644 --- a/web/translation/translate.vi_VN.toml +++ b/web/translation/translate.vi_VN.toml @@ -316,7 +316,7 @@ "muxSett" = "Mux Cài đặt" "direct" = "Kết nối trực tiếp" "directDesc" = "Trực tiếp thiết lập kết nối với tên miền hoặc dải IP của một quốc gia cụ thể." -"directSett" = "Tùy chọn kết nối trực tiếp" + [pages.xray] "title" = "Cài đặt Xray" diff --git a/web/translation/translate.zh_CN.toml b/web/translation/translate.zh_CN.toml index 0314b0ab..65a2a6ea 100644 --- a/web/translation/translate.zh_CN.toml +++ b/web/translation/translate.zh_CN.toml @@ -316,7 +316,7 @@ "muxSett" = "复用器设置" "direct" = "直接连接" "directDesc" = "直接与特定国家的域或IP范围建立连接" -"directSett" = "直接连接选项" + [pages.xray] "title" = "Xray 配置" From dc29e858c916c17c5a45353befe0d2cb1d22ca19 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Tue, 24 Sep 2024 15:15:19 +0200 Subject: [PATCH 48/53] Xray Core v24.9.19 --- .github/workflows/release.yml | 2 +- DockerInit.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e8a6f841..d98919a5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -83,7 +83,7 @@ jobs: cd x-ui/bin # Download dependencies - Xray_URL="https://github.com/XTLS/Xray-core/releases/download/v24.9.16/" + Xray_URL="https://github.com/XTLS/Xray-core/releases/download/v24.9.19/" if [ "${{ matrix.platform }}" == "amd64" ]; then wget ${Xray_URL}Xray-linux-64.zip unzip Xray-linux-64.zip diff --git a/DockerInit.sh b/DockerInit.sh index ac06cf4d..a4dcbe34 100755 --- a/DockerInit.sh +++ b/DockerInit.sh @@ -27,7 +27,7 @@ case $1 in esac mkdir -p build/bin cd build/bin -wget "https://github.com/XTLS/Xray-core/releases/download/v24.9.16/Xray-linux-${ARCH}.zip" +wget "https://github.com/XTLS/Xray-core/releases/download/v24.9.19/Xray-linux-${ARCH}.zip" unzip "Xray-linux-${ARCH}.zip" rm -f "Xray-linux-${ARCH}.zip" geoip.dat geosite.dat mv xray "xray-linux-${FNAME}" From 43713fbdf8f441db09396ca9300c181e23a2715f Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Tue, 24 Sep 2024 15:15:29 +0200 Subject: [PATCH 49/53] v2.4.2 --- README.es_ES.md | 4 ++-- README.md | 4 ++-- README.ru_RU.md | 4 ++-- README.zh_CN.md | 4 ++-- config/version | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.es_ES.md b/README.es_ES.md index 5c0b8109..efbc846d 100644 --- a/README.es_ES.md +++ b/README.es_ES.md @@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install. ## Instalar una Versión Personalizada -Para instalar la versión deseada, agrega la versión al final del comando de instalación. Por ejemplo, ver `v2.4.1`: +Para instalar la versión deseada, agrega la versión al final del comando de instalación. Por ejemplo, ver `v2.4.2`: ``` -bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.1 +bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.2 ``` ## Certificado SSL diff --git a/README.md b/README.md index 0b5a5a99..a1359756 100644 --- a/README.md +++ b/README.md @@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install. ## Install Custom Version -To install your desired version, add the version to the end of the installation command. e.g., ver `v2.4.1`: +To install your desired version, add the version to the end of the installation command. e.g., ver `v2.4.2`: ``` -bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.1 +bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.2 ``` ## SSL Certificate diff --git a/README.ru_RU.md b/README.ru_RU.md index 07e30a5b..21925394 100644 --- a/README.ru_RU.md +++ b/README.ru_RU.md @@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install. ## Установка определённой версии -Чтобы установить нужную вам версию, добавьте номер версии в конец команды установки. Например, `v2.4.1`: +Чтобы установить нужную вам версию, добавьте номер версии в конец команды установки. Например, `v2.4.2`: ``` -bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.1 +bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.2 ``` ## SSL Сертификат diff --git a/README.zh_CN.md b/README.zh_CN.md index 0406b1b9..f57df5b8 100644 --- a/README.zh_CN.md +++ b/README.zh_CN.md @@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install. ## 安装指定版本 -要安装所需的版本,请将该版本添加到安装命令的末尾。 e.g., ver `v2.4.1`: +要安装所需的版本,请将该版本添加到安装命令的末尾。 e.g., ver `v2.4.2`: ``` -bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.1 +bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.2 ``` ### SSL证书 diff --git a/config/version b/config/version index 58073ef8..acdc3f1b 100644 --- a/config/version +++ b/config/version @@ -1 +1 @@ -2.4.1 \ No newline at end of file +2.4.2 \ No newline at end of file From da7e4d51d6ff62ac71c5c11eb09b9a5f8bad2426 Mon Sep 17 00:00:00 2001 From: Sanaei Date: Tue, 24 Sep 2024 16:50:00 +0200 Subject: [PATCH 50/53] OS Support - Amazon Linux + AlmaLinux 8 --- README.es_ES.md | 2 +- README.md | 2 +- README.ru_RU.md | 2 +- README.zh_CN.md | 2 +- install.sh | 10 +++++----- x-ui.sh | 10 +++++----- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/README.es_ES.md b/README.es_ES.md index efbc846d..cc935be3 100644 --- a/README.es_ES.md +++ b/README.es_ES.md @@ -222,7 +222,7 @@ location /sub { - Arch Linux - Manjaro - Armbian -- AlmaLinux 9+ +- AlmaLinux 8+ - Rockylinux 9+ - OpenSUSE Tubleweed - Amazon Linux 2023 diff --git a/README.md b/README.md index a1359756..02c476a8 100644 --- a/README.md +++ b/README.md @@ -250,7 +250,7 @@ location /sub { - Parch Linux - Manjaro - Armbian -- AlmaLinux 9+ +- AlmaLinux 8+ - Rocky Linux 9+ - Oracle Linux 8+ - OpenSUSE Tubleweed diff --git a/README.ru_RU.md b/README.ru_RU.md index 21925394..65419a31 100644 --- a/README.ru_RU.md +++ b/README.ru_RU.md @@ -249,7 +249,7 @@ location /sub { - Parch Linux - Manjaro - Armbian -- AlmaLinux 9+ +- AlmaLinux 8+ - Rocky Linux 9+ - Oracle Linux 8+ - OpenSUSE Tubleweed diff --git a/README.zh_CN.md b/README.zh_CN.md index f57df5b8..94b3b597 100644 --- a/README.zh_CN.md +++ b/README.zh_CN.md @@ -245,7 +245,7 @@ location /sub { - Arch Linux - Manjaro - Armbian -- AlmaLinux 9+ +- AlmaLinux 8+ - Rockylinux 9+ - OpenSUSE Tubleweed - Amazon Linux 2023 diff --git a/install.sh b/install.sh index 2fe66b08..ea60eb54 100644 --- a/install.sh +++ b/install.sh @@ -39,7 +39,7 @@ arch() { echo "arch: $(arch)" os_version="" -os_version=$(grep "^VERSION_ID" /etc/os-release | cut -d '=' -f2 | tr -d '"') +os_version=$(grep "^VERSION_ID" /etc/os-release | cut -d '=' -f2 | tr -d '"' | tr -d '.') if [[ "${release}" == "arch" ]]; then echo "Your OS is Arch Linux" @@ -56,7 +56,7 @@ elif [[ "${release}" == "centos" ]]; then echo -e "${red} Please use CentOS 8 or higher ${plain}\n" && exit 1 fi elif [[ "${release}" == "ubuntu" ]]; then - if [[ ${os_version} -lt 20 ]]; then + if [[ ${os_version} -lt 2004 ]]; then echo -e "${red} Please use Ubuntu 20 or higher version!${plain}\n" && exit 1 fi elif [[ "${release}" == "fedora" ]]; then @@ -72,8 +72,8 @@ elif [[ "${release}" == "debian" ]]; then echo -e "${red} Please use Debian 11 or higher ${plain}\n" && exit 1 fi elif [[ "${release}" == "almalinux" ]]; then - if [[ ${os_version} -lt 9 ]]; then - echo -e "${red} Please use AlmaLinux 9 or higher ${plain}\n" && exit 1 + if [[ ${os_version} -lt 8 ]]; then + echo -e "${red} Please use AlmaLinux 8 or higher ${plain}\n" && exit 1 fi elif [[ "${release}" == "rocky" ]]; then if [[ ${os_version} -lt 9 ]]; then @@ -94,7 +94,7 @@ else echo "- Parch Linux" echo "- Manjaro" echo "- Armbian" - echo "- AlmaLinux 9+" + echo "- AlmaLinux 8+" echo "- Rocky Linux 9+" echo "- Oracle Linux 8+" echo "- OpenSUSE Tumbleweed" diff --git a/x-ui.sh b/x-ui.sh index 46449217..9067ef4f 100644 --- a/x-ui.sh +++ b/x-ui.sh @@ -36,7 +36,7 @@ fi echo "The OS release is: $release" os_version="" -os_version=$(grep "^VERSION_ID" /etc/os-release | cut -d '=' -f2 | tr -d '"') +os_version=$(grep "^VERSION_ID" /etc/os-release | cut -d '=' -f2 | tr -d '"' | tr -d '.') if [[ "${release}" == "arch" ]]; then echo "Your OS is Arch Linux" @@ -53,7 +53,7 @@ elif [[ "${release}" == "centos" ]]; then echo -e "${red} Please use CentOS 8 or higher ${plain}\n" && exit 1 fi elif [[ "${release}" == "ubuntu" ]]; then - if [[ ${os_version} -lt 20 ]]; then + if [[ ${os_version} -lt 2004 ]]; then echo -e "${red} Please use Ubuntu 20 or higher version!${plain}\n" && exit 1 fi elif [[ "${release}" == "fedora" ]]; then @@ -69,8 +69,8 @@ elif [[ "${release}" == "debian" ]]; then echo -e "${red} Please use Debian 11 or higher ${plain}\n" && exit 1 fi elif [[ "${release}" == "almalinux" ]]; then - if [[ ${os_version} -lt 9 ]]; then - echo -e "${red} Please use AlmaLinux 9 or higher ${plain}\n" && exit 1 + if [[ ${os_version} -lt 8 ]]; then + echo -e "${red} Please use AlmaLinux 8 or higher ${plain}\n" && exit 1 fi elif [[ "${release}" == "rocky" ]]; then if [[ ${os_version} -lt 9 ]]; then @@ -91,7 +91,7 @@ else echo "- Parch Linux" echo "- Manjaro" echo "- Armbian" - echo "- AlmaLinux 9+" + echo "- AlmaLinux 8+" echo "- Rocky Linux 9+" echo "- Oracle Linux 8+" echo "- OpenSUSE Tumbleweed" From 4bea427c796d31f3f208c840de9a97a261ac47ca Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Wed, 25 Sep 2024 10:16:47 +0200 Subject: [PATCH 51/53] minor change --- README.es_ES.md | 4 +++- README.md | 2 +- README.ru_RU.md | 2 +- README.zh_CN.md | 4 +++- install.sh | 6 +++--- web/html/xui/settings.html | 2 +- x-ui.sh | 6 +++--- 7 files changed, 15 insertions(+), 11 deletions(-) diff --git a/README.es_ES.md b/README.es_ES.md index cc935be3..8aaf4400 100644 --- a/README.es_ES.md +++ b/README.es_ES.md @@ -220,10 +220,12 @@ location /sub { - CentOS 8+ - Fedora 36+ - Arch Linux +- Parch Linux - Manjaro - Armbian - AlmaLinux 8+ -- Rockylinux 9+ +- Rocky Linux 8+ +- Oracle Linux 8+ - OpenSUSE Tubleweed - Amazon Linux 2023 diff --git a/README.md b/README.md index 02c476a8..10cd824f 100644 --- a/README.md +++ b/README.md @@ -251,7 +251,7 @@ location /sub { - Manjaro - Armbian - AlmaLinux 8+ -- Rocky Linux 9+ +- Rocky Linux 8+ - Oracle Linux 8+ - OpenSUSE Tubleweed - Amazon Linux 2023 diff --git a/README.ru_RU.md b/README.ru_RU.md index 65419a31..1bcc28e2 100644 --- a/README.ru_RU.md +++ b/README.ru_RU.md @@ -250,7 +250,7 @@ location /sub { - Manjaro - Armbian - AlmaLinux 8+ -- Rocky Linux 9+ +- Rocky Linux 8+ - Oracle Linux 8+ - OpenSUSE Tubleweed - Amazon Linux 2023 diff --git a/README.zh_CN.md b/README.zh_CN.md index 94b3b597..60730e7e 100644 --- a/README.zh_CN.md +++ b/README.zh_CN.md @@ -243,10 +243,12 @@ location /sub { - CentOS 8+ - Fedora 36+ - Arch Linux +- Parch Linux - Manjaro - Armbian - AlmaLinux 8+ -- Rockylinux 9+ +- Rocky Linux 8+ +- Oracle Linux 8+ - OpenSUSE Tubleweed - Amazon Linux 2023 diff --git a/install.sh b/install.sh index ea60eb54..cfebc6b1 100644 --- a/install.sh +++ b/install.sh @@ -76,8 +76,8 @@ elif [[ "${release}" == "almalinux" ]]; then echo -e "${red} Please use AlmaLinux 8 or higher ${plain}\n" && exit 1 fi elif [[ "${release}" == "rocky" ]]; then - if [[ ${os_version} -lt 9 ]]; then - echo -e "${red} Please use Rocky Linux 9 or higher ${plain}\n" && exit 1 + if [[ ${os_version} -lt 8 ]]; then + echo -e "${red} Please use Rocky Linux 8 or higher ${plain}\n" && exit 1 fi elif [[ "${release}" == "oracle" ]]; then if [[ ${os_version} -lt 8 ]]; then @@ -95,7 +95,7 @@ else echo "- Manjaro" echo "- Armbian" echo "- AlmaLinux 8+" - echo "- Rocky Linux 9+" + echo "- Rocky Linux 8+" echo "- Oracle Linux 8+" echo "- OpenSUSE Tumbleweed" echo "- Amazon Linux 2023" diff --git a/web/html/xui/settings.html b/web/html/xui/settings.html index 7cebfd1e..f2462518 100644 --- a/web/html/xui/settings.html +++ b/web/html/xui/settings.html @@ -478,7 +478,7 @@ }, ], geoIPOptions: [ - { label: 'Private IP/Domain', value: 'private' }, + { label: 'Private IP', value: 'private' }, { label: '🇮🇷 Iran', value: 'ir' }, { label: '🇨🇳 China', value: 'cn' }, { label: '🇷🇺 Russia', value: 'ru' }, diff --git a/x-ui.sh b/x-ui.sh index 9067ef4f..5e54987e 100644 --- a/x-ui.sh +++ b/x-ui.sh @@ -73,8 +73,8 @@ elif [[ "${release}" == "almalinux" ]]; then echo -e "${red} Please use AlmaLinux 8 or higher ${plain}\n" && exit 1 fi elif [[ "${release}" == "rocky" ]]; then - if [[ ${os_version} -lt 9 ]]; then - echo -e "${red} Please use Rocky Linux 9 or higher ${plain}\n" && exit 1 + if [[ ${os_version} -lt 8 ]]; then + echo -e "${red} Please use Rocky Linux 8 or higher ${plain}\n" && exit 1 fi elif [[ "${release}" == "oracle" ]]; then if [[ ${os_version} -lt 8 ]]; then @@ -92,7 +92,7 @@ else echo "- Manjaro" echo "- Armbian" echo "- AlmaLinux 8+" - echo "- Rocky Linux 9+" + echo "- Rocky Linux 8+" echo "- Oracle Linux 8+" echo "- OpenSUSE Tumbleweed" echo "- Amazon Linux 2023" From 19b95829e015b97602cfc505685548d1001a7719 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Wed, 25 Sep 2024 11:19:41 +0200 Subject: [PATCH 52/53] OS Support - AlmaLinux 8.0 + --- README.es_ES.md | 2 +- README.md | 2 +- README.ru_RU.md | 2 +- README.zh_CN.md | 2 +- install.sh | 6 +++--- x-ui.sh | 6 +++--- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/README.es_ES.md b/README.es_ES.md index 8aaf4400..e03149d0 100644 --- a/README.es_ES.md +++ b/README.es_ES.md @@ -223,7 +223,7 @@ location /sub { - Parch Linux - Manjaro - Armbian -- AlmaLinux 8+ +- AlmaLinux 8.0+ - Rocky Linux 8+ - Oracle Linux 8+ - OpenSUSE Tubleweed diff --git a/README.md b/README.md index 10cd824f..e6525637 100644 --- a/README.md +++ b/README.md @@ -250,7 +250,7 @@ location /sub { - Parch Linux - Manjaro - Armbian -- AlmaLinux 8+ +- AlmaLinux 8.0+ - Rocky Linux 8+ - Oracle Linux 8+ - OpenSUSE Tubleweed diff --git a/README.ru_RU.md b/README.ru_RU.md index 1bcc28e2..3c65e65e 100644 --- a/README.ru_RU.md +++ b/README.ru_RU.md @@ -249,7 +249,7 @@ location /sub { - Parch Linux - Manjaro - Armbian -- AlmaLinux 8+ +- AlmaLinux 8.0+ - Rocky Linux 8+ - Oracle Linux 8+ - OpenSUSE Tubleweed diff --git a/README.zh_CN.md b/README.zh_CN.md index 60730e7e..9f69a7c4 100644 --- a/README.zh_CN.md +++ b/README.zh_CN.md @@ -246,7 +246,7 @@ location /sub { - Parch Linux - Manjaro - Armbian -- AlmaLinux 8+ +- AlmaLinux 8.0+ - Rocky Linux 8+ - Oracle Linux 8+ - OpenSUSE Tubleweed diff --git a/install.sh b/install.sh index cfebc6b1..a0b937a4 100644 --- a/install.sh +++ b/install.sh @@ -72,8 +72,8 @@ elif [[ "${release}" == "debian" ]]; then echo -e "${red} Please use Debian 11 or higher ${plain}\n" && exit 1 fi elif [[ "${release}" == "almalinux" ]]; then - if [[ ${os_version} -lt 8 ]]; then - echo -e "${red} Please use AlmaLinux 8 or higher ${plain}\n" && exit 1 + if [[ ${os_version} -lt 80 ]]; then + echo -e "${red} Please use AlmaLinux 8.0 or higher ${plain}\n" && exit 1 fi elif [[ "${release}" == "rocky" ]]; then if [[ ${os_version} -lt 8 ]]; then @@ -94,7 +94,7 @@ else echo "- Parch Linux" echo "- Manjaro" echo "- Armbian" - echo "- AlmaLinux 8+" + echo "- AlmaLinux 8.0+" echo "- Rocky Linux 8+" echo "- Oracle Linux 8+" echo "- OpenSUSE Tumbleweed" diff --git a/x-ui.sh b/x-ui.sh index 5e54987e..120c83a0 100644 --- a/x-ui.sh +++ b/x-ui.sh @@ -69,8 +69,8 @@ elif [[ "${release}" == "debian" ]]; then echo -e "${red} Please use Debian 11 or higher ${plain}\n" && exit 1 fi elif [[ "${release}" == "almalinux" ]]; then - if [[ ${os_version} -lt 8 ]]; then - echo -e "${red} Please use AlmaLinux 8 or higher ${plain}\n" && exit 1 + if [[ ${os_version} -lt 80 ]]; then + echo -e "${red} Please use AlmaLinux 8.0 or higher ${plain}\n" && exit 1 fi elif [[ "${release}" == "rocky" ]]; then if [[ ${os_version} -lt 8 ]]; then @@ -91,7 +91,7 @@ else echo "- Parch Linux" echo "- Manjaro" echo "- Armbian" - echo "- AlmaLinux 8+" + echo "- AlmaLinux 8.0+" echo "- Rocky Linux 8+" echo "- Oracle Linux 8+" echo "- OpenSUSE Tumbleweed" From 6cf2b56f9bdb38452a4ecdd1b10ae3cf6ed41bbe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 13:07:10 +0200 Subject: [PATCH 53/53] Bump github.com/valyala/fasthttp from 1.55.0 to 1.56.0 (#2566) Bumps [github.com/valyala/fasthttp](https://github.com/valyala/fasthttp) from 1.55.0 to 1.56.0. - [Release notes](https://github.com/valyala/fasthttp/releases) - [Commits](https://github.com/valyala/fasthttp/compare/v1.55.0...v1.56.0) --- updated-dependencies: - dependency-name: github.com/valyala/fasthttp dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 10 ++-------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 7f5e5357..749d9257 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/pelletier/go-toml/v2 v2.2.3 github.com/robfig/cron/v3 v3.0.1 github.com/shirou/gopsutil/v4 v4.24.8 - github.com/valyala/fasthttp v1.55.0 + github.com/valyala/fasthttp v1.56.0 github.com/xtls/xray-core v1.8.24 go.uber.org/atomic v1.11.0 golang.org/x/text v0.18.0 diff --git a/go.sum b/go.sum index b3c26149..414b57e6 100644 --- a/go.sum +++ b/go.sum @@ -18,8 +18,6 @@ github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYU github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/bytedance/sonic v1.12.2 h1:oaMFuRTpMHYLpCntGca65YWt5ny+wAceDERTkT2L9lg= -github.com/bytedance/sonic v1.12.2/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= @@ -127,8 +125,6 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= -github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/compress v1.17.10 h1:oXAz+Vh0PMUvJczoi+flxpnBEPxoER1IaAnU/NMPtT0= github.com/klauspost/compress v1.17.10/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= @@ -200,8 +196,6 @@ github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 h1:f/FNXud6gA3MNr github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3/go.mod h1:HgjTstvQsPGkxUsCd2KWxErBblirPizecHcpD3ffK+s= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= @@ -269,8 +263,8 @@ github.com/v2fly/ss-bloomring v0.0.0-20210312155135-28617310f63e h1:5QefA066A1tF github.com/v2fly/ss-bloomring v0.0.0-20210312155135-28617310f63e/go.mod h1:5t19P9LBIrNamL6AcMQOncg/r10y3Pc01AbHeMhwlpU= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.55.0 h1:Zkefzgt6a7+bVKHnu/YaYSOPfNYNisSVBo/unVCf8k8= -github.com/valyala/fasthttp v1.55.0/go.mod h1:NkY9JtkrpPKmgwV3HTaS2HWaJss9RSIsRVfcxxoHiOM= +github.com/valyala/fasthttp v1.56.0 h1:bEZdJev/6LCBlpdORfrLu/WOZXXxvrUQSiyniuaoW8U= +github.com/valyala/fasthttp v1.56.0/go.mod h1:sReBt3XZVnudxuLOx4J/fMrJVorWRiWY2koQKgABiVI= github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ= github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU=