This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
khosb/modules/core/ssl.inc.php
2008-11-26 14:50:40 -08:00

186 lines
5.0 KiB
PHP

<?php
/**
* AgileBill - Open Billing Software
*
* This body of work is free software; you can redistribute it and/or
* modify it under the terms of the Open AgileBill License
* License as published at http://www.agileco.com/agilebill/license1-4.txt
*
* For questions, help, comments, discussion, etc., please join the
* Agileco community forums at http://forum.agileco.com/
*
* @link http://www.agileco.com/
* @copyright 2004-2008 Agileco, LLC.
* @license http://www.agileco.com/agilebill/license1-4.txt
* @author Tony Landis <tony@agileco.com>
* @package AgileBill
* @version 1.4.93
*/
# Debug
if(empty($VAR) && empty($VAR['do']) && !defined("PATH_AGILE"))
{
include_once('../../config.inc.php');
$test = new CORE_ssl;
$test->test();
}
class CORE_ssl
{
function CORE_ssl ($type=false)
{
$disabled_functions = ini_get('disable_functions');
if ( defined("PATH_CURL") && is_file(PATH_CURL) )
$this->connect_curl_binary = true;
if ( function_exists('curl_init') && $curl_version = curl_version()) {
if ( phpversion() >= 5 ) {
if (eregi('openssl', @$curl_version['ssl_version'] ))
$this->connect_curl_module = true;
} else {
if (eregi('openssl', curl_version()))
$this->connect_curl_module = true;
}
}
if (phpversion() >= '4.3.0')
if (function_exists("fsockopen") )
if (function_exists("openssl_public_decrypt"))
$this->connect_fsockopen = true;
}
# debuging...
function test() {
echo '<textarea cols="50" rows="50">';
if ( @$this->connect_curl_binary ) {
echo 'Using Binary Curl: ';
echo $this->connect('secure.authorize.net', '', '', true, 1);
} elseif ( @$this->connect_curl_module ) {
echo 'Using Curl PHP Module: ';
echo $this->connect('www.amazon.com', '', '', true, 1);
} elseif ( @$this->connect_fsockopen ) {
echo 'Using PHP fsockopen() function + openssl_public_decrypt(): ';
echo $this->connect('www.amazon.com', '', '', true, 1);
} else {
echo 'No SSL functionality!';
}
echo "</textarea>";
}
# type: 1=post 2=get
function connect($host, $url, $vars, $ssl, $type) {
if ( @$this->connect_curl_binary )
return $this->connect_curl_binary ($host, $url, $vars, $ssl, $type);
elseif ( @$this->connect_curl_module )
return $this->connect_curl_module ($host, $url, $vars, $ssl, $type);
elseif ( @$this->connect_fsockopen )
return $this->connect_fsockopen ($host, $url, $vars, $ssl, $type);
else
return false;
}
# SSL connection with Curl Binary
function connect_curl_binary($host, $url, $vars, $ssl, $type) {
if($ssl) $urli = 'https://'.$host .''. $url;
else $urli = 'http://'.$host .''. $url;
$params = "";
if(is_array($vars)) {
for($i=0; $i<count($vars); $i++) {
if ($i > 0) { $params .= '&'; }
$params .= $vars[$i][0].'='.urlencode($vars[$i][1]);
}
} elseif (!empty($vars)) {
$params = $vars;
}
$curl = PATH_CURL;
# connect
if(!empty($params)) {
//echo $curl ."-d -k \"$params\"". $urli;
//echo $urli.'?'.$params;
//exit;
return `$curl -k -d "$params" $urli`;
} else {
//echo "$curl -k $urli";
return `$curl -k $urli`;
}
}
# SSL connection with Curl Module
function connect_curl_module($host, $url, $vars, $ssl, $type) {
if($ssl) $url = 'https://'.$host .''. $url;
else $url = 'http://'.$host .''. $url;
$params = '';
if(is_array($vars)) {
for($i=0; $i<count($vars); $i++) {
if ($i > 0) { $params .= '&'; }
@$params .= $vars[$i][0].'='.urlencode($vars[$i][1]);
}
} elseif (!empty($vars)) {
$params = $vars;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$result = curl_exec ($ch);
curl_close ($ch);
return $result;
}
# SSL connection with fsockopen()
function connect_fsockopen($host, $url, $vars, $ssl, $type) {
if($ssl) {
$host = 'ssl://'. $host;
$port = 443;
} else {
$port = 80;
}
$fp = @fsockopen ($host, $port, $errno, $errstr, 120);
$ret = "";
@$req = substr ($url, $p);
if ($fp) {
fputs ($fp, "POST $req HTTP/1.1\n");
fputs ($fp, "Accept: */*\n");
fputs ($fp, "Accept-Language: en\n");
fputs ($fp, "Connection: Keep-Alive\n");
fputs ($fp, "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)\n");
fputs ($fp, "Content-type: application/x-www-form-urlencoded\n");
$out = "";
for($i=0; $i<count($vars); $i++) {
if($i>0 && !empty($vars[$i][0]))
$out .= '&';
$out .= rawurlencode($vars[$i][0]) .'='. $out .= rawurlencode($vars[$i][1]);
}
$out = trim ($out);
fputs ($fp, "Content-length: ".strlen($out)."\n\n");
fputs ($fp, "$out");
fputs ($fp, "\n");
while(!feof($fp))
$ret .= fgets($fp,128);
fclose ($fp);
} else {
return false;
}
return $ret;
}
}
?>