summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tool/irssi_cf_alturl.pl187
1 files changed, 132 insertions, 55 deletions
diff --git a/tool/irssi_cf_alturl.pl b/tool/irssi_cf_alturl.pl
index 3ef2726e..1626316e 100644
--- a/tool/irssi_cf_alturl.pl
+++ b/tool/irssi_cf_alturl.pl
@@ -1,15 +1,27 @@
#!/usr/bin/perl -w
# This Irssi script automatically check incoming http/https links
# and replace it to archive one if it is MITMed.
+#
+# Irssi /set Options
+# you can view your current settigns by running "/set cflarealt" in Irssi
+#
+# /set cflarealt_debug <on|off> -- (off) if you have a problem try turning this on to debug
+# /set cflarealt_send2channel <on|off> -- (off) send the converted URL publicly to everyone in your channels
+# /set cflarealt_channels <"#channel1, #channel2, etc"> -- Channels to automatically convert. Empty Defaults to all
+# /set cflarealt_shorturl_activate <on|off> -- (off) set it 'on' to use shortner
+# /set cflarealt_shorturl_min <40> -- (40) How long a url has to be to trigger automatic url shortening
+#
+# Optional manual usage is
+# /cflarealt http://yourlongurl.com/blahblahblah
#---------------------------------------------------------------------
-use strict;
+##use strict;
use vars qw($VERSION %IRSSI);
-$VERSION = "20190501";
-
-%IRSSI = (
+$VERSION = "20190505";
+%IRSSI = (
+ # Special thanks to: "eo, tsaavik"
authors => "Anonymous",
- contact => 'nobody@cloudflare-tor.nab',
+ contact => 'anonymous@cloudflare-tor.nab',
name => "irssi_cf_alturl.pl",
description => "Cloudflare URL replacer",
license => "WTFPL",
@@ -21,15 +33,49 @@ use Irssi::Irc;
use LWP::Simple;
use LWP::UserAgent;
-my ( $min_url_length, $send_to_channel, $debug, $channel_list );
+my ( $cfg_minurllen, $cfg_send2chan, $cfg_useshort, $cfg_isdebug, $cfg_chanlist );
+my @cached = ();
sub setuphandler {
- $send_to_channel = 1;
- $channel_list = '';
- my $old_min_url_length = $min_url_length;
- $min_url_length = 0;
- my $old_debug = $debug;
- $debug = 0;
+ Irssi::settings_add_bool( "cflarealt", "cflarealt_send2channel", 0 );
+ if ( Irssi::settings_get_bool("cflarealt_send2channel") ) {
+ print "cflarealt: sending of shorturl's to public channels enabled";
+ $cfg_send2chan = 1;
+ }
+
+ Irssi::settings_add_bool( "cflarealt", "cflarealt_shorturl_activate", 0 );
+ if ( Irssi::settings_get_bool("cflarealt_shorturl_activate") ) {
+ print "cflarealt: URL shortner enabled";
+ $cfg_useshort = 1;
+ }
+
+ Irssi::settings_add_str( "cflarealt", "cflarealt_channels", "" );
+ $cfg_chanlist = Irssi::settings_get_str("cflarealt_channels");
+ if ($cfg_chanlist) {
+ print "cflarealt: Following channels are now parsed $cfg_chanlist";
+ }
+
+ Irssi::settings_add_int( "cflarealt", "cflarealt_shorturl_min", 40 );
+ my $old_min_url_length = $cfg_minurllen;
+ $cfg_minurllen = Irssi::settings_get_int("cflarealt_shorturl_min");
+ if ( $cfg_minurllen != $old_min_url_length ) {
+ print "cflarealt: min_url_length sucessfully set to $cfg_minurllen";
+ }
+
+ Irssi::settings_add_bool( "cflarealt", "cflarealt_debug", 0 );
+ my $old_debug = $cfg_isdebug;
+ $cfg_isdebug = Irssi::settings_get_bool("cflarealt_debug");
+ if ( $cfg_isdebug != $old_debug ) {
+ if ($cfg_isdebug) {
+ print "cflarealt: Debug Mode Enabled";
+ $cfg_isdebug = 1;
+ }
+ else {
+ print "cflarealt: Debug Mode Disabled";
+ $cfg_isdebug = 0;
+ }
+ }
+
}
sub GotUrl {
@@ -38,20 +84,26 @@ sub GotUrl {
Irssi::print("Not connected to server");
return;
}
+ return unless ( goodchan($target) );
$data =~ s/^\s+//;
$data =~ s/\s+$//;
my @urls = ();
- my ( $url, $a, $return, $char, $ch, $result, $choice ) = "";
+ my ( $url, $a, $return, $char, $ch, $result ) = "";
my $same = 0;
my $sitewas = "t";
my @chars = ();
+
return unless ( ( $data =~ /\bhttp\:/ ) || ( $data =~ /\bhttps\:/ ) );
deb("$target triggered GotUrl() with url: $data");
+ # split on whitespace and get the url(s) out
+ # done this way in case there are more than
+ # one url per line.
foreach ( split( /\s/, $data ) ) {
if ( ( $_ =~ /^http\:/ ) || ( $_ =~ /^https\:/ ) ) {
foreach $a (@urls) {
if ( $_ eq $a ) {
+ # incase they use the same url on the line.
$same = 1;
next;
}
@@ -62,59 +114,84 @@ sub GotUrl {
}
}
}
+
+ my ( $myurl, $fqdn, $junk );
+ my ( $url, $browser, $response, $answer );
+
foreach (@urls) {
- @chars = split( //, $_ );
- foreach $char (@chars) {
- if ( $char !~ /[A-Za-z0-9]/ ) {
- $ch = sprintf( "%%%02x", ord($char) );
- $result .= $ch;
+ $myurl = $_;
+ ( $junk, $fqdn ) = split( /\/\//, $myurl, 2 );
+ ( $fqdn, $junk ) = split( /\//, $fqdn, 2 );
+
+ if ( length($fqdn) >= 4 ) {
+## Start of Act
+## ACT1: Update URL if Cloudflared
+ if ( grep( /^$fqdn$/, @cached ) ) {
+ deb("$target Found in Cache $fqdn");
+ $myurl = 'https://web.archive.org/web/' . $myurl;
}
else {
- $result .= $char;
+ deb("$target Asking API about $fqdn");
+ $answer = '';
+ $url = 'https://searxes.danwin1210.me/collab/open/ismitm.php?f='
+ . $fqdn;
+ $browser = LWP::UserAgent->new;
+ $browser->agent("Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0");
+ $response = $browser->get($url);
+ $answer = $response->content;
+ if ( $answer == '[true,true]' ) {
+ push( @cached, $fqdn );
+ $myurl = 'https://web.archive.org/web/' . $myurl;
+ }
}
- }
- $choice = 'searxesmitmdb';
- deb("mitmtest(\$server, $target, $result)");
- mitmtest( $server, $target, $result );
- }
- return;
-}
-sub mitmtest {
- my ( $server, $chan, $longurl ) = @_;
- my ($fqdn) = $longurl =~ m!(https?://[^:/]+)!;
- my ( $junk, $fqdn ) = split( /\/\//, $fqdn, 2 );
- my $scanned_url;
-## FQDN is ok
- if (length($fqdn) >= 4) {
- my $url = 'https://searxes.danwin1210.me/collab/open/ismitm.php?f=' . $fqdn;
- my $browser = LWP::UserAgent->new;
- $browser->agent("cloudflare cflare_alt.pl");
- my $response = $browser->get($url);
- $scanned_url = $response->content;
- }
-## if the array[1] is true => it is MITM
- if ( $scanned_url == '[true,true]' ) {
- $scanned_url = 'https://web.archive.org/web/' . $longurl;
- }
- else {
- $scanned_url = $longurl;
- }
- if ( $response->is_success ) {
- if ( $send_to_channel == 1 ) {
- $server->command("msg $chan $scanned_url");
- }
- else {
- $server->print( "$chan", "$scanned_url", MSGLEVEL_CLIENTCRAP );
+## ACT2: Short URL __if__ enabled and long
+ if ( $cfg_useshort == 1 ) {
+ if ( length($myurl) > $cfg_minurllen ) {
+ # Should change from tinyurl because it is Cloudflare.
+ # What is the alternative solution?
+ deb("$target Creating Short URL for $myurl");
+ $url = 'https://tinyurl.com/api-create.php?url=' . $result;
+ $browser = LWP::UserAgent->new;
+ $browser->agent("Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0");
+ $response = $browser->get($url);
+ $answer = $response->content;
+ if ( index( $answer, 'http://tinyurl.com/' ) == 0 ) {
+ $myurl = $answer;
+ }
+ }
+ }
+
+##ACT3: Shout Result
+ if ( $cfg_send2chan == 1 ) {
+ $server->command("msg $target $myurl");
+ }
+ else {
+ $server->print( "$target", "$myurl", MSGLEVEL_CLIENTCRAP );
+ }
+## End of Act
}
+ deb("$target process done for input $myurl");
}
- else {
- deb("ERROR: service is down or not pingable");
+
+ if ( $#cached > 500 ) {
+ @cached = ();
}
+
+ return;
}
sub deb($) {
- Irssi::print(shift) if ( $debug == 1 );
+ Irssi::print(shift) if ( $cfg_isdebug == 1 );
+}
+
+sub goodchan {
+ my $chan = shift;
+ return ("OK") if ( !$cfg_chanlist );
+ foreach ( split( /\,/, $cfg_chanlist ) ) {
+ return ("$_") if ( $_ =~ /$chan/i );
+ }
+ return undef;
}
setuphandler();