Вход Регистрация
Файл: Space race/classes/captcha/ayah-1.0.2/ayah.php
Строк: 255
<?php
/*
 * Are You A Human
 * PHP Integration Library
 *
 * @version 1.0.2
 *
 *    - Documentation and latest version
 *          http://portal.areyouahuman.com/help
 *    - Get an AYAH Publisher Key
 *          https://portal.areyouahuman.com
 *    - Discussion group
 *          http://getsatisfaction.com/areyouahuman
 *
 * Copyright (c) 2011 AYAH LLC -- http://www.areyouahuman.com
 * AUTHORS:
 *   Jonathan Brown - jonathan@areyouahuman.com
 *   Sneaky Pete - sneakypete@areyouahuman.com
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 *  History
 *
 *  1.0.2: 03/21/2015:
 *      - Changed the script tag to include language="JavaScript" and type="text/javascript" for maximum compatibility.
 *
 *  1.0.1: 12/12/2011:
 *      - Add fallback support for JSON decode with Michal Migurski's library
 *      - Add fallback support when there is no cURL library
 *      - Changed the handling for the constants so that, if they don't exist, it doesn't freak out
 *      - Changed the handling for ayah_config.php so that, if it doesn't exist, it doesn't freak out
 *
 *  1.0.0: 11/15/2011: Initial release with script-implementation support
 *
 *
 */

class AYAH {
    protected 
$ayah_publisher_key;
    protected 
$ayah_scoring_key;
    protected 
$ayah_web_service_host;
    protected 
$session_secret;

    
/**
     * Returns the markup for the PlayThru
     *
     * @return string
     */
    
public function getPublisherHTML() {
        
$url 'https://' $this->ayah_web_service_host "/ws/script/" .
            
urlencode($this->ayah_publisher_key);

        return 
"<div id='AYAH'></div><script src='"$url ."' type='text/javascript' language='JavaScript'></script>";
    }

    
/**
     * Check whether the user is a human
     * Wrapper for the scoreGame API call
     *
     * @return boolean
     */
    
public function scoreResult() {
        
$result false;
        if (
$this->session_secret) {
            
$fields = array(
                
'session_secret' => urlencode($this->session_secret),
                
'scoring_key' => $this->ayah_scoring_key
            
);
            
$resp $this->doHttpsPostReturnJSONArray($this->ayah_web_service_host"/ws/scoreGame"$fields);
            if (
$resp) {
                
$result = ($resp->status_code == 1);
            }
        }

        return 
$result;
    }

    
/**
     * Records a conversion
     * Called on the goal page that A and B redirect to
     * A/B Testing Specific Function
     *
     * @return boolean
     */
    
public function recordConversion(){
        if( isset( 
$this->session_secret ) ){
            return 
'<iframe style="border: none;" height="0" width="0" src="https://' .
                
$this->ayah_web_service_host '/ws/recordConversion/'.
                
urlencode($this->session_secret) . '"></iframe>';
        } else {
            
error_log('AYAH::recordConversion - AYAH Conversion Error: No Session Secret');
            return 
FALSE;
        }
    }


    
/**
     * Constructor
     * If the session secret exists in input, it grabs it
     * @param $params associative array with keys publisher_key, scoring_key, web_service_host
     *
     */
    
public function __construct($params = array()) {
        if(
array_key_exists("session_secret"$_REQUEST)){
            
$this->session_secret $_REQUEST["session_secret"];
        }

        
// Set them to defaults
        
$this->ayah_publisher_key "";
        
$this->ayah_scoring_key "";
        
$this->ayah_web_service_host "ws.areyouahuman.com";

        
// If the constants exist, override with those
        
if (defined('AYAH_PUBLISHER_KEY')) {
            
$this->ayah_publisher_key AYAH_PUBLISHER_KEY;
        }

        if (
defined('AYAH_SCORING_KEY')) {
            
$this->ayah_scoring_key AYAH_SCORING_KEY;
        }

        if (
defined('AYAH_WEB_SERVICE_HOST')) {
            
$this->ayah_web_service_host AYAH_WEB_SERVICE_HOST;
        }

        
// Lastly grab the parameters input and save them
        
foreach (array_keys($params) as $key) {
            if (
in_array($key, array("publisher_key""scoring_key""web_service_host"))) {
                
$variable "ayah_" $key;
                
$this->$variable $params[$key];
            } else {
                
error_log("AYAH::__construct: Unrecognized key for constructor param: $key");
            }
        }

        
// Generate some warnings if a foot shot is coming
        
if ($this->ayah_publisher_key == "") {
            
error_log("AYAH::__construct: Warning: Publisher key is not defined.  This won't work.");
        }

        if (
$this->ayah_scoring_key == "") {
            
error_log("AYAH::__construct: Warning: Scoring key is not defined.  This won't work.");
        }

        if (
$this->ayah_web_service_host == "") {
            
error_log("AYAH::__construct: Warning: Web service host is not defined.  This won't work.");
        }

    }

    
/**
      * Do a HTTPS POST, return some JSON decoded as array (Internal function)
     * @param $host hostname
      * @param $path path
     * @param $fields associative array of fields
     * return JSON decoded data structure or empty data structure
     */
        
protected function doHttpsPostReturnJSONArray($hostname$path$fields) {
        
$result $this->doHttpsPost($hostname$path$fields);

        if (
$result) {
            
$result $this->doJSONArrayDecode($result);
        } else {
            
error_log("AYAH::doHttpsPostGetJSON: Post to https://$hostname$path returned no result.");
            
$result = array();
        }

        return 
$result;
    }

    
// Internal function; does an HTTPS post
    
protected function doHttpsPost($hostname$path$fields) {
        
$result "";
        
// URLencode the post string
        
$fields_string "";
        foreach(
$fields as $key=>$value) {
            if (
is_array($value)) {
                foreach (
$value as $v) {
                    
$fields_string .= $key '[]=' $v '&';
                }
            } else {
                
$fields_string .= $key.'='.$value.'&';
            }
        }
        
rtrim($fields_string,'&');

        
// cURL or something else
        
if (function_exists('curl_init')) {
            
$curlsession curl_init();
            
curl_setopt($curlsession,CURLOPT_URL,"https://" $hostname $path);
            
curl_setopt($curlsession,CURLOPT_POST,count($fields));
            
curl_setopt($curlsession,CURLOPT_POSTFIELDS,$fields_string);
            
curl_setopt($curlsession,CURLOPT_RETURNTRANSFER,1);
            
curl_setopt($curlsession,CURLOPT_SSL_VERIFYHOST,0);
            
curl_setopt($curlsession,CURLOPT_SSL_VERIFYPEER,false);
            
$result curl_exec($curlsession);
        } else {
            
error_log("No cURL support.");

            
// Build a header
            
$http_request  "POST $path HTTP/1.1rn";
            
$http_request .= "Host: $hostnamern";
            
$http_request .= "Content-Type: application/x-www-form-urlencoded;rn";
            
$http_request .= "Content-Length: " strlen($fields_string) . "rn";
            
$http_request .= "User-Agent: AreYouAHuman/PHP 1.0.2rn";
            
$http_request .= "Connection: Closern";
            
$http_request .= "rn";
            
$http_request .= $fields_string ."rn";

            
$result '';
            
$errno $errstr "";
            
$fs fsockopen("ssl://" $hostname443$errno$errstr10);
            if( 
false == $fs ) {
                
error_log('Could not open socket');
            } else {
                
fwrite($fs$http_request);
                while (!
feof($fs)) {
                    
$result .= fgets($fs4096);
                }

                
$result explode("rnrn"$result2);
                
$result $result[1];
            }
        }

        return 
$result;
    }

    
// Internal function: does a JSON decode of the string
    
protected function doJSONArrayDecode($string) {
        
$result = array();

        if (
function_exists("json_decode")) {
            try {
                
$result json_decode$string);
            } catch (
Exception $e) {
                
error_log("AYAH::doJSONArrayDecode() - Exception when calling json_decode: " $e->getMessage());
                
$result null;
            }
        } elseif (
file_Exists("json.php")) {
            
$json = new Services_JSON();
            
$result $json->decode($string);

            if (!
is_array($result)) {
                
error_log("AYAH::doJSONArrayDecode: Expected array; got something else: $result");
                
$result = array();
            }
        } else {
            
error_log("AYAH::doJSONArrayDecode: No JSON decode function available.");
        }

        return 
$result;
    }
}
Онлайн: 1
Реклама