SVN: toys/rsget.pl: README RSGet/HTTPServer.pm RSGet/Main.pm
sparky
sparky at pld-linux.org
Sun Oct 11 16:43:12 CEST 2009
Author: sparky
Date: Sun Oct 11 16:43:12 2009
New Revision: 10754
Modified:
toys/rsget.pl/README
toys/rsget.pl/RSGet/HTTPServer.pm
toys/rsget.pl/RSGet/Main.pm
Log:
- basic http authentification
Modified: toys/rsget.pl/README
==============================================================================
--- toys/rsget.pl/README (original)
+++ toys/rsget.pl/README Sun Oct 11 16:43:12 2009
@@ -1,7 +1,8 @@
TODO:
- Write more documentation
-
+- When continuing partially downloaded data start few kb before the end and
+ compare old with new.
Features:
- Perfect for screen session
Modified: toys/rsget.pl/RSGet/HTTPServer.pm
==============================================================================
--- toys/rsget.pl/RSGet/HTTPServer.pm (original)
+++ toys/rsget.pl/RSGet/HTTPServer.pm Sun Oct 11 16:43:12 2009
@@ -5,6 +5,7 @@
use IO::Socket;
use RSGet::Tools;
use RSGet::HTTPRequest;
+use MIME::Base64 ();
use URI::Escape;
set_rev qq$Id$;
@@ -53,6 +54,7 @@
$OK = 1;
last;
}
+ s/\r\n$//;
push @headers, $_;
$len = $1 if /^Content-Length:\s*(\d+)/i;
}
@@ -71,7 +73,7 @@
close $client;
return undef;
}
-
+
my( $method, $file, $ignore ) = split /\s+/, $request;
$file =~ s#^/+##;
@@ -88,8 +90,28 @@
my $get = $1;
%post = map { /^(.*?)=(.*)/; (uri_unescape( $1 ), uri_unescape( $2 )) } split /;+/, $get;
}
+
+ my $authorized = 1;
+ if ( my $pass = setting( "http_pass" ) ) {
+ $authorized = 0;
+ my %headers = map /^(.*?):\s*(.*)$/, @headers;
+ if ( $headers{Authorization} and $headers{Authorization} =~ /^Basic\s+(.*)/ ) {
+ my $auth = MIME::Base64::decode( $1 );
+ $auth =~ s/^(.*?)://;
+ my $user = $1;
+ if ( $user eq "root" ) {
+ $authorized = 1 if $pass eq $auth;
+ }
+ }
+ }
+
my $print;
- if ( my $func = $RSGet::HTTPRequest::handlers{$file} ) {
+ if ( not $authorized ) {
+ $print .= "HTTP/1.1 401 Authorization Required\r\n";
+ $print .= "WWW-Authenticate: Basic\r\n";
+ $print .= "Content-Type: text/plain\r\n";
+ $print .= "\r\nAuthorization Required\n";
+ } elsif ( my $func = $RSGet::HTTPRequest::handlers{$file} ) {
$print = "HTTP/1.1 200 OK\r\n";
my $headers = { Content_Type => "text/xml; charset=utf-8" };
my $data = &$func( $file, \%post, $headers );
Modified: toys/rsget.pl/RSGet/Main.pm
==============================================================================
--- toys/rsget.pl/RSGet/Main.pm (original)
+++ toys/rsget.pl/RSGet/Main.pm Sun Oct 11 16:43:12 2009
@@ -23,6 +23,7 @@
def_settings(
interfaces => [ "Specify output interfaces or IP addresses.", undef, qr/.+/ ],
http_port => [ "Start HTTP server on specified port.", undef, qr/\d+/ ],
+ http_pass => [ "HTTP password, as plain text, user is 'root'.", undef, qr/\S+/ ],
verbose => [ "Verbosity level.", 0, qr/\d+/ ],
);
More information about the pld-cvs-commit
mailing list