Get rid of the LWP codepath, now just a simple wrapper for Business::OnlinePayment
authorIvan Kohler <ivan@freeside.biz>
Sat, 5 Dec 2015 04:53:46 +0000 (20:53 -0800)
committerIvan Kohler <ivan@freeside.biz>
Sat, 5 Dec 2015 04:53:46 +0000 (20:53 -0800)
Changes
MANIFEST
lib/Net/HTTPS/Any.pm
t/get-cryptssleay.t [deleted file]
t/post-cryptssleay.t [deleted file]

diff --git a/Changes b/Changes
index 4c6bb5b..565186c 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,9 @@
 Revision history for Net-HTTPS-Any
 
+0.12    unreleased
+        - Get rid of the LWP codepath, now just a simple wrapper for
+          Business::OnlinePayment
+
 0.11    Sat Jul 26 17:30:43 PDT 2014
         - doc: update example in synopsis
         - Depend on Net::SSLeay and test on it (and not Crypt::SSLeay), to
index 2fb0be3..e261230 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -4,9 +4,7 @@ Makefile.PL
 README
 lib/Net/HTTPS/Any.pm
 t/00-load.t
-t/get-cryptssleay.t
 t/get-netssleay.t
 t/pod-coverage.t
 t/pod.t
-t/post-cryptssleay.t
 t/post-netssleay.t
index 862d44a..8224494 100644 (file)
@@ -3,51 +3,20 @@ package Net::HTTPS::Any;
 use warnings;
 use strict;
 use base qw( Exporter );
-use vars qw(@EXPORT_OK $ssl_module $skip_NetSSLeay);
+use vars qw( @EXPORT_OK );
 use URI::Escape;
 use Tie::IxHash;
+use Net::SSLeay 1.30, qw( get_https post_https make_headers make_form );
 
 @EXPORT_OK = qw( https_get https_post );
 
-BEGIN {
-
-    $ssl_module = '';
-
-    eval {
-        die if defined($skip_NetSSLeay) && $skip_NetSSLeay;
-        require Net::SSLeay;
-        Net::SSLeay->VERSION(1.30);
-
-        #import Net::SSLeay
-        #  qw(get_https post_https make_form make_headers);
-        $ssl_module = 'Net::SSLeay';
-    };
-
-    if ($@) {
-        eval {
-            require LWP::UserAgent;
-            require HTTP::Request::Common;
-            require Crypt::SSLeay;
-
-            #import HTTP::Request::Common qw(GET POST);
-            $ssl_module = 'Crypt::SSLeay';
-        };
-    }
-
-    unless ($ssl_module) {
-        die "One of Net::SSLeay (v1.30 or later)"
-          . " or Crypt::SSLeay (+LWP) is required";
-    }
-
-}
-
 =head1 NAME
 
-Net::HTTPS::Any - Simple HTTPS client using whichever underlying SSL module is available
+Net::HTTPS::Any - Simple HTTPS client
 
 =cut
 
-our $VERSION = '0.11';
+our $VERSION = '0.12';
 
 =head1 SYNOPSIS
 
@@ -76,33 +45,13 @@ our $VERSION = '0.11';
 
 =head1 DESCRIPTION
 
-This is a simple wrapper around either of the two available SSL
-modules.  It offers a unified API for sending GET and POST requests over HTTPS
-and receiving responses.
-
-It depends on Net::SSLeay _or_ ( Crypt::SSLeay and LWP::UserAgent ).
-
-=head1 WHY THIS MODULE
-
-If you just want to write something that speaks HTTPS, you don't need this
-module.  Just go ahead and use whichever of the two modules is good for you.
-Don't worry about it.
-
-On the other hand, if you are a CPAN author or distribute a Perl application,
-especially if you aim to support multiple OSes/disributions, using this module
-for speaking HTTPS may make things easier on your users.  It allows your code
-to be used with either SSL implementation.
+This is a wrapper around Net::SSLeay providing a simple interface for the use
+of Business::OnlinePayment.
 
-=head1 FUTURE
-
-Using LWP::Protocol::https 6.02 or later, the LWP path actually uses
-Net::SSLeay also instead of Crypt::SSLeay.  Going forward that makes this
-module more of historical interest, especially so since modern LWP has its own
-mechanism to force use of Crypt::SSLeay:
-  $Net::HTTPS::SSL_SOCKET_CLASS = "Net::SSL";
-
-Therefore this module will likely eventually become a wrapper around a single
-codepath, driven by the conservative needs of Business::OnlinePayment::HTTPS.
+It used to allow switching between Net::SSLeay and Crypt::SSLeay
+implementations, but that was obsoleted.  If you need to do that, use LWP
+instead.  You can set $Net::HTTPS::SSL_SOCKET_CLASS = "Net::SSL" for
+Crypt::SSLeay instead of the default Net::SSLeay (since 6.02).
 
 =head1 FUNCTIONS
 
@@ -177,53 +126,23 @@ sub https_get {
               keys %$post_data );
     }
 
-    if ( $ssl_module eq 'Net::SSLeay' ) {
-
-        no warnings 'uninitialized';
-
-        import Net::SSLeay qw(get_https make_headers);
-        my $headers = make_headers(%headers);
+    my $headers = make_headers(%headers);
 
-        $Net::SSLeay::trace = $opts->{'debug'}
-          if exists $opts->{'debug'} && $opts->{'debug'};
+    $Net::SSLeay::trace = $opts->{'debug'}
+      if exists $opts->{'debug'} && $opts->{'debug'};
 
-        my( $res_page, $res_code, @res_headers ) =
-          get_https( $opts->{'host'},
-                     $opts->{'port'},
-                     $path,
-                     $headers,
-                     #"",
-                     #$opts->{"Content-Type"},
-                   );
+    my( $res_page, $res_code, @res_headers ) =
+      get_https( $opts->{'host'},
+                 $opts->{'port'},
+                 $path,
+                 $headers,
+                 #"",
+                 #$opts->{"Content-Type"},
+               );
 
-        $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2;
+    $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2;
 
-        return ( $res_page, $res_code, @res_headers );
-
-    } elsif ( $ssl_module eq 'Crypt::SSLeay' ) {
-
-        import HTTP::Request::Common qw(GET);
-
-        my $url = 'https://' . $opts->{'host'};
-        $url .= ':' . $opts->{'port'}
-          unless $opts->{'port'} == 443;
-        $url .= "/$path";
-
-        my $ua = new LWP::UserAgent;
-        foreach my $hdr ( keys %headers ) {
-            $ua->default_header( $hdr => $headers{$hdr} );
-        }
-        $ENV{HTTPS_DEBUG} = $opts->{'debug'} if exists $opts->{'debug'};
-        my $res = $ua->request( GET($url) );
-
-        my @res_headers = map { $_ => $res->header($_) }
-                              $res->header_field_names;
-
-        return ( $res->content, $res->code. ' '. $res->message, @res_headers );
-
-    } else {
-        die "unknown SSL module $ssl_module";
-    }
+    return ( $res_page, $res_code, @res_headers );
 
 }
 
@@ -295,69 +214,28 @@ sub https_post {
     }
     $headers{'Host'} ||= $opts->{'host'};
 
-    if ( $ssl_module eq 'Net::SSLeay' ) {
-        
-        no warnings 'uninitialized';
-
-        import Net::SSLeay qw(post_https make_headers make_form);
-        my $headers = make_headers(%headers);
-
-        $Net::SSLeay::trace = $opts->{'debug'}
-          if exists $opts->{'debug'} && $opts->{'debug'};
+    my $headers = make_headers(%headers);
 
-        my $raw_data = ref($post_data) ? make_form(%$post_data) : $post_data;
+    $Net::SSLeay::trace = $opts->{'debug'}
+      if exists $opts->{'debug'} && $opts->{'debug'};
 
-        $Net::SSLeay::trace = $opts->{'debug'}
-          if exists $opts->{'debug'} && $opts->{'debug'};
+    my $raw_data = ref($post_data) ? make_form(%$post_data) : $post_data;
 
-        my( $res_page, $res_code, @res_headers ) =
-          post_https( $opts->{'host'},
-                      $opts->{'port'},
-                      $opts->{'path'},
-                      $headers,
-                      $raw_data,
-                      $opts->{"Content-Type"},
-                    );
+    $Net::SSLeay::trace = $opts->{'debug'}
+      if exists $opts->{'debug'} && $opts->{'debug'};
 
-        $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2;
+    my( $res_page, $res_code, @res_headers ) =
+      post_https( $opts->{'host'},
+                  $opts->{'port'},
+                  $opts->{'path'},
+                  $headers,
+                  $raw_data,
+                  $opts->{"Content-Type"},
+                );
 
-        return ( $res_page, $res_code, @res_headers );
+    $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2;
 
-    } elsif ( $ssl_module eq 'Crypt::SSLeay' ) {
-
-        import HTTP::Request::Common qw(POST);
-
-        my $url = 'https://' . $opts->{'host'};
-        $url .= ':' . $opts->{'port'}
-          unless $opts->{'port'} == 443;
-        $url .= $opts->{'path'};
-
-        my $ua = new LWP::UserAgent;
-        foreach my $hdr ( keys %headers ) {
-            $ua->default_header( $hdr => $headers{$hdr} );
-        }
-
-        $ENV{HTTPS_DEBUG} = $opts->{'debug'} if exists $opts->{'debug'};
-
-        my $res;
-        if ( ref($post_data) ) {
-            $res = $ua->request( POST( $url, [%$post_data] ) );
-        }
-        else {
-            my $req = new HTTP::Request( 'POST' => $url );
-            $req->content_type( $opts->{"Content-Type"} );
-            $req->content($post_data);
-            $res = $ua->request($req);
-        }
-
-        my @res_headers = map { $_ => $res->header($_) }
-                              $res->header_field_names;
-
-        return ( $res->content, $res->code. ' '. $res->message, @res_headers );
-
-    } else {
-        die "unknown SSL module $ssl_module";
-    }
+    return ( $res_page, $res_code, @res_headers );
 
 }
 
@@ -401,7 +279,7 @@ L<http://search.cpan.org/dist/Net-HTTPS-Any>
 
 =head1 COPYRIGHT & LICENSE
 
-Copyright 2008-2014 Freeside Internet Services, Inc. (http://freeside.biz/)
+Copyright 2008-2016 Freeside Internet Services, Inc. (http://freeside.biz/)
 All rights reserved.
 
 This program is free software; you can redistribute it and/or modify it
diff --git a/t/get-cryptssleay.t b/t/get-cryptssleay.t
deleted file mode 100644 (file)
index fa2ef21..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-use Test::More;
-
-BEGIN {
-
-  plan skip_all => "LWP tests disabled to avoid excessive dependencies";
-
-  plan( tests=>4 );
-  $Net::HTTPS::Any::skip_NetSSLeay=1;
-  $Net::HTTPS::Any::skip_NetSSLeay=1;
-  use_ok 'Net::HTTPS::Any', 'https_get';
-};
-
-#200
-
-my($content, $response, %headers) = https_get(
-  { 'host' => 'www.fortify.net',
-    'port' => 443,
-    'path' => '/sslcheck.html',
-  },
-  'net_https_any_test' => 1,
-);
-
-#like($response, qr/^HTTP\/[\d\.]+\s+200/i, 'Received 200 (OK) response');
-like($response, qr/^200/i, 'Received 200 (OK) response');
-
-ok( length($content), 'Received content' );
-
-#404
-
-my($content2, $response2, %headers2) = https_get(
-  { 'host' => 'www.fortify.net',
-    'port' => 443,
-    'path' => '/notfound.html',
-  },
-  'net_https_any_test' => 1,
-);
-
-#like($response2, qr/^HTTP\/[\d\.]+\s+404/i, 'Received 404 (Not found) response');
-like($response2, qr/^404/i, 'Received 404 (Not found) response');
-
diff --git a/t/post-cryptssleay.t b/t/post-cryptssleay.t
deleted file mode 100644 (file)
index f77fa32..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-use Test::More;
-
-BEGIN {
-
-  plan skip_all => "LWP tests disabled to avoid excessive dependencies";
-
-  plan( tests=>4 );
-  $Net::HTTPS::Any::skip_NetSSLeay=1;
-  $Net::HTTPS::Any::skip_NetSSLeay=1;
-  use_ok 'Net::HTTPS::Any', 'https_post';
-};
-
-#200
-
-my($content, $response, %headers) = https_post(
-  { 'host' => 'www.google.com',
-    'port' => 443,
-    'path' => '/accounts/ServiceLoginAuth',
-    'args' => { 'posted' => 'data' },
-  },
-  'net_https_any_test' => 1,
-);
-
-#like($response, qr/^HTTP\/[\d\.]+\s+200/i, 'Received 200 (OK) response');
-like($response, qr/^200/i, 'Received 200 (OK) response');
-
-ok( length($content), 'Received content' );
-
-#404
-
-my($content2, $response2, %headers2) = https_post(
-  { 'host' => 'www.google.com',
-    'port' => 443,
-    'path' => '/notfound.html',
-    'args' => { 'length' => 'required' },
-  },
-  'net_https_any_test' => 1,
-);
-
-#like($response2, qr/^HTTP\/[\d\.]+\s+404/i, 'Received 404 (Not FOund) response');
-like($response2, qr/^404/i, 'Received 404 (Not Found) response');
-