]> git.99rst.org Git - irssi-scripts.irssi.org.git/commitdiff
Added proxy support for dictleo using Mojo::UserAgent
authorMorgen Malinoski <redacted>
Tue, 4 Jan 2022 03:03:26 +0000 (21:03 -0600)
committerMorgen Malinoski <redacted>
Tue, 4 Jan 2022 03:03:26 +0000 (21:03 -0600)
scripts/leodict.pl

index 2f90a9d8e8ac9289534ba99dc1c5e6ed7374342c..5c21bc17ac470584beb6cd2ae38781dba047e474 100644 (file)
@@ -84,6 +84,15 @@ SETTINGS
     example: -it -from
   'leodict_paste_max_translations'
   'leodict_paste_beautify'
+  'leodict_http_proxy_address'
+    example: 127.0.0.1
+    defaults to none, meaning no proxy will be used for requests.
+    despite the name, does not have to be http proxy.
+  'leodict_http_proxy_port'
+    example: 9050
+    defaults to 0, but must be changed if proxy address is not none.
+  'leodict_http_proxy_type'
+    supported: socks, https, http
 ";
     my $text='';
     foreach (split(/\n/, $help)) {
@@ -144,6 +153,22 @@ sub get_page ($) {
     my ($url) = @_;
     #return get('http://dict.leo.org/?search='.$word.'&relink=off');
     my $ua = Mojo::UserAgent->new;
+
+    # Add proxy to Mojo if needed
+    my $proxy_addr = Irssi::settings_get_str('leodict_http_proxy_address');
+    my $proxy_port = Irssi::settings_get_int('leodict_http_proxy_port');
+    my $proxy_type = Irssi::settings_get_str('leodict_http_proxy_type');
+    if ($proxy_addr ne 'none') {
+       # Socks proxy
+       if ($proxy_type eq 'socks' || $proxy_type eq 'https') {
+           $ua->proxy->http("$proxy_type://$proxy_addr:$proxy_port")->https("$proxy_type://$proxy_addr:$proxy_port"); 
+       }
+       # Must be http proxy
+       else {
+           $ua->proxy->http("$proxy_type://$proxy_addr:$proxy_port");
+       }
+    }
+    
     my $res;
     eval {
        $res=$ua->get($url)->result;
@@ -175,6 +200,22 @@ sub translate ($$$) {
         print CLIENTCRAP "%R>>%n Please wait until your earlier request has been finished.";
         return;
     }
+
+    # Validate proxy if needed
+    my $proxy_addr = Irssi::settings_get_str('leodict_http_proxy_address');
+    my $proxy_port = Irssi::settings_get_int('leodict_http_proxy_port');
+    my $proxy_type = Irssi::settings_get_str('leodict_http_proxy_type');
+    if ($proxy_addr ne 'none') {
+       if ($proxy_type ne 'socks' && $proxy_type ne 'https' && $proxy_type ne 'http') {
+           print CLIENTCRAP "%R>>%n Invalid proxy type: $proxy_type.";
+           return;
+       }
+       if ($proxy_port eq 0) {
+           print CLIENTCRAP "%R>>%n Please specify a proxy port.";
+           return;
+       }
+    }
+    
     my $pid = fork();
     $forked = 1;
     if ($pid > 0) {
@@ -306,7 +347,8 @@ my %options = (
 sub cmd_leodict ($$$) {
     my ($args, $server, $witem) = @_;
     utf8::decode($args);
-    my $burl= "https://dict.leo.org/";
+    #my $burl= "https://dict.leo.org/";
+    my $burl = "https://dict.leo.org/";
     my $url;
 
     $lang= $dlang;
@@ -380,6 +422,9 @@ Irssi::command_set_options('leodict', join(" ",keys %options));
 Irssi::settings_add_str($IRSSI{'name'}, 'leodict_default_options', '-en -both');
 Irssi::settings_add_int($IRSSI{'name'}, 'leodict_paste_max_translations', 2);
 Irssi::settings_add_bool($IRSSI{'name'}, 'leodict_paste_beautify', 1);
+Irssi::settings_add_str($IRSSI{'name'}, 'leodict_http_proxy_address', 'none');
+Irssi::settings_add_int($IRSSI{'name'}, 'leodict_http_proxy_port', 0);
+Irssi::settings_add_str($IRSSI{'name'}, 'leodict_http_proxy_type', 'none');
 
 sig_setup_changed();
 
git clone https://git.99rst.org/PROJECT