Skip to content

Instantly share code, notes, and snippets.

@viniciusgonmelo
Last active June 13, 2023 02:35
Show Gist options
  • Save viniciusgonmelo/156d75b6a9a07a6ae954b770002ac845 to your computer and use it in GitHub Desktop.
Save viniciusgonmelo/156d75b6a9a07a6ae954b770002ac845 to your computer and use it in GitHub Desktop.
Configura um proxy para executar uma aplicação
#!/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