Last active
June 13, 2023 02:35
-
-
Save viniciusgonmelo/156d75b6a9a07a6ae954b770002ac845 to your computer and use it in GitHub Desktop.
Configura um proxy para executar uma aplicação
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env perl | |
# Script: proxy-run-cmd.pl | |
# Descrição: Configura um proxy para executar uma aplicação | |
# o arquivo de configuração 'proxy-run-cmd.conf' deve estar no $HOME do usuário | |
# Exemplo de 'proxy-run-cmd.conf' | |
# nome_do_proxy=http://usuario@proxy:porta | |
# Exemplo de uso: | |
# ./proxy-run-cmd --proxy=PROXY_1 --cmd=chromium | |
use strict; | |
use warnings; | |
use FindBin qw($RealBin); | |
use Getopt::Long; | |
use Term::ReadKey; | |
## Define o arquivo de configuração | |
my $config_file = "${RealBin}/proxy-run-cmd.conf"; | |
## Verifica se o arquivo de configuração existe | |
die "Erro: arquivo de configuração $config_file não encontrado.\n" | |
unless -e $config_file; | |
## Carrega as configurações | |
my %proxies; | |
{ | |
open my $fh, '<', $config_file | |
or die "Erro ao abrir o arquivo de configuração: $!"; | |
while (my $line = <$fh>) { | |
chomp $line; | |
my ($name, $proxy) = split /=/, $line; | |
$proxies{$name} = $proxy; | |
} | |
close $fh; | |
} | |
## Definição das opções de linha de comando | |
my ($proxy_name, $cmd); | |
GetOptions( | |
'proxy=s' => \$proxy_name, | |
'cmd=s' => \$cmd, | |
) or die 'Erro: opção não suportada.'; | |
## Verifica se as opções obrigatórias foram fornecidas | |
die "Erro: --proxy e --cmd precisam ser especificados.\n" | |
unless $proxy_name && $cmd; | |
## Verifica se o proxy foi definido no arquivo de configuração | |
die "Erro: proxy $proxy_name não definido no arquivo de configuração.\n" | |
unless defined $proxies{$proxy_name}; | |
## Configura o proxy | |
my ($protocol, $user, $proxy) = $proxies{$proxy_name} =~ /^(\w+):\/\/([^@]+)@(.+)$/; | |
die "Erro: protocolo $protocol não suportado. Utilize http ou https na configuração do proxy.\n" | |
unless ($protocol eq 'http' or $protocol eq 'https'); | |
Term::ReadKey::ReadMode('noecho'); | |
print "Senha para $protocol://$user\@$proxy: "; | |
my $pass = Term::ReadKey::ReadLine(0); | |
Term::ReadKey::ReadMode('restore'); | |
print "\n"; | |
chomp $pass; | |
## Define variáveis de ambiente do proxy | |
$ENV{http_proxy} = "$protocol://$user:$pass\@$proxy"; | |
$ENV{https_proxy} = "$protocol://$user:$pass\@$proxy"; | |
$ENV{ftp_proxy} = "$protocol://$user:$pass\@$proxy"; | |
$ENV{all_proxy} = "$protocol://$user:$pass\@$proxy"; | |
$ENV{HTTP_PROXY} = "$protocol://$user:$pass\@$proxy"; | |
$ENV{HTTPS_PROXY} = "$protocol://$user:$pass\@$proxy"; | |
$ENV{FTP_PROXY} = "$protocol://$user:$pass\@$proxy"; | |
$ENV{ALL_PROXY} = "$protocol://$user:$pass\@$proxy"; | |
# Executa o comando com as variáveis do proxy setadas | |
system $cmd; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment