#!/usr/bin/perl #=============================================================================== # DESCRIPTION: Простая отправлялка вывода команды или тела файла на pastebin. Определяет подсветку # для некоторых видов указанных через -i файлов. # # USAGE: cat file.txt | pastebinput.pl или pastebinput.pl -i file.txt # # OPTIONS: -i ; -u ; -s ; -e ; -r ; -n # VERSION: 0.9 # CREATED: 2010-01-31 #=============================================================================== require 5.8.8; use warnings; use strict; use encoding 'utf8', STDOUT => 'utf8'; use LWP::UserAgent; use HTTP::Cookies; use Getopt::Std; our $VERSION = '0.9'; my %options = ( # Настройки по умолчанию: 'u' => 'http://pastebin.com', # адрес сервера 'e' => 'd', # срок хранения: d - день, m - месяц, f - постоянно 'r' => 0, # помнить ли отправителя ); getopts('s:u:e:i:n:rh', \%options); if ($options{h}) { usage($VERSION); exit; } if ( $options{i} && !$options{s} ) { simple_sintax_detect(\%options); } my $msg_body = read_input_file(\%options); my $ua = ua_init(); my $msg_url = send_to_pastebin($ua, \%options, $msg_body); print $msg_url,"\n"; exit 0; sub simple_sintax_detect { my $options = shift; my $f_ext = $1 if $options->{i} =~ /^[\wа-я-]+\.([a-z]{1,4})$/i; if ($f_ext =~ /^(?:txt|text|)$/i) { $options->{s} = 'text'; } elsif ($f_ext =~ /^(?:pl|cgi)$/i) { $options->{s} = 'perl'; } elsif ($f_ext =~ /^sh$/i) { $options->{s} = 'bash'; } elsif ($f_ext =~ /^php$/i) { $options->{s} = 'php'; } } sub read_input_file { my $options = shift; if ( !$options->{i} ) { while (<>) { $msg_body .= $_; } } elsif ( $options->{i} ) { open(INFILE, '<', $options->{i}) or die "Can't open $options->{i}: $!\n"; while () { $msg_body .= $_; } close(INFILE); } return $msg_body; } sub send_to_pastebin { my $ua = shift; my ($options, $msg_body) = @_; my $response = $ua->post( $options->{u}, [ format => $options->{s}, code2 => $msg_body, poster => $options->{n}, paste => 'Send', remember => $options->{r}, expiry => $options->{e}, ], ); return $response->status_line unless $response->is_success; return $response->request->uri; } sub ua_init { my $cookies=HTTP::Cookies->new('file'=>'./cookies.lwp','autosave'=>0); my $ua = LWP::UserAgent->new( 'agent' => 'pastebinput - pastebin service agent; dimio@dimio.org', 'cookie_jar' => $cookies, 'requests_redirectable' => ['GET', 'POST'], ); $ua->default_header( 'Accept' => 'text/html, application/xml;q=0.9, application/xhtml+xml, */*;q=0.1', 'Accept-Charset' => 'utf-8; *;q=0.1', 'Accept-Language' => 'ru,en-us;q=0.7,en;q=0.3', 'Accept-Encoding' => 'deflate, gzip, x-gzip, *;q=0', ); return $ua; } sub usage { my $ver = shift; print < (1-я форма) или: COMMAND | pastebinput (2-я форма) В первой форме на сервер будет отправлен указанный файл input_file. Во второй форме на сервер будет отправлен результат вывода COMMAND. Ключи: -s [text, perl, ...] Синтаксис файла для подсветки на pastebin; -u [http://server.com] URL сервера (для отличных от pastebin.org); -e [d, m, f] Срок хранения данных на сервере: d - один день, m - месяц, f - постоянно; -i [input_file] Имя входящего файла, текст которого будет отправлен на pastebin сервер; -n [username] Имя отправителя (иначе - anonimous); -r Помнить отправителя (если установлена); -h Вывод данной справки и завершение программы; Пример использования: pastebinput -r -s perl -e m -n User -i ./test.pl EOF }