SaveText.Ru

Без имени
  1. <?php
  2.  
  3. class IngotsInit
  4. {
  5.         var $links = null;
  6.         var $announcements = null;
  7.        
  8.         function __construct($o = array())
  9.         {
  10.                 $o['CODE_TYPE'] = 'l';
  11.                 $this->links = new INGOTSClient($o);
  12.                
  13.                 $o['CODE_TYPE'] = 'a';
  14.                 $this->announcements = new INGOTSClient($o);
  15.         }
  16.        
  17.         function ShowLinks(){
  18.                 return $this->links->build_links();
  19.         }
  20.        
  21.         function ShowFLinks(){
  22.                 return $this->announcements->build_links();
  23.         }
  24. }
  25.  
  26. class INGOTSClient
  27. {
  28.         var $file_code = 'INGOTS_%code.php';
  29.  
  30.         var $transmiter = null;
  31.         var $code_type = 'l';
  32.        
  33.         function __construct($o = array()) {
  34.        
  35.         // code type
  36.                 if ( isset($o['CODE_TYPE']) && strlen($o['CODE_TYPE']) == 1 ) {
  37.                         $this->code_type = strtolower($o['CODE_TYPE']);
  38.                 } else {
  39.                         $this->code_type = 'l'; // links
  40.                 }
  41.                
  42.                 $code_file = dirname(__FILE__) . '/data/' . str_replace('%', $this->code_type, $this->file_code);
  43.                 $username = $this->getUser($o);
  44.                
  45.                 if ( @strpos($_SERVER['HTTP_USER_AGENT'], 'ingotsbot.' . $username) !== false && isset($_GET['ingots_force_recovery'])) {
  46.                         @unlink(dirname(__FILE__) . '/data/*.php');
  47.                         @unlink(dirname(__FILE__) . '/data/*.lock');
  48.                         print '<!--<ingots_force_recovery_result>true</ingots_force_recovery_result>-->';
  49.                         return true;
  50.                 }
  51.                
  52.                 if ( file_exists($code_file) )
  53.                 {
  54.                 // unlock if locked
  55.                         if ( file_exists($code_file . '.lock') ) {
  56.                                 @unlink($code_file . '.lock');
  57.                         }
  58.                        
  59.                 // setup_code
  60.                         include_once $code_file;
  61.                 } else {
  62.                 // downloading latest version of code
  63.                         if ( $this->getCode($o, $this->code_type) ) {
  64.                                 include_once $code_file;
  65.                         }
  66.                 }
  67.                
  68.                 $transmiter_class = $this->code_type . 'INGOTSTransmiter';
  69.                 if(class_exists($transmiter_class))
  70.                 {
  71.                         $o['USERNAME'] = $this->getUser($o);
  72.                         $this->transmiter = new $transmiter_class($o);
  73.                 }
  74.     }
  75.        
  76.        
  77.         function build_links()
  78.         {
  79.                 if($this->transmiter != null){
  80.                         return $this->transmiter->build_links();
  81.                 }
  82.                 return '';
  83.         }
  84.        
  85.        
  86.         function getCode($o = array(), $code_type = 'l')
  87.         {
  88.                 $username = $this->getUser($o);
  89.                 $code_file = dirname(__FILE__) . '/data/' . str_replace('%', $code_type, $this->file_code);
  90.                 if ( (!file_exists($code_file) && !file_exists($code_file . '.lock'))
  91.                 || ( strpos($userAgent, 'ingotsbot.' . $username) !== false && isset($_GET['ingots_request']))) {
  92.                        
  93.                         if (  !is_writable(dirname(__FILE__) . '/data') ) {
  94.                                 print 'Unable to load Kappusta code. Directory ' . realpath(dirname(__FILE__).'/data').' is not writeable!';
  95.                                 return false;
  96.                         }
  97.  
  98.                         if ( file_exists($code_file . '.lock') && file_exists($code_file) ) {
  99.                                 $filetime = filectime($code_file . '.lock');
  100.                                
  101.                                 if ( time() - $filetime < 10 ) {
  102.                                         print '<!--<ingots_update>false: locked for ' . time() - $filetime . ' seconds</ingots_update>-->';
  103.                                         return false;
  104.                                 } else {
  105.                                         @unlink(realpath(dirname(__FILE__) . '/data') . '/core_update.lock');
  106.                                         print '<!--<ingots_update_info>true: now ' . time() . ', locked at ' . $filetime . ' seconds</ingots_update_info>-->';
  107.                                         return false;
  108.                                 }
  109.                         }
  110.                 }
  111.                
  112.                 $fp = fopen($code_file . '.lock', 'w+');
  113.                 fwrite($fp, time());
  114.                 fclose($fp);
  115.                
  116.                 $code_type = isset($o['CODE_TYPE']) ? $o['CODE_TYPE'] : 'l';
  117.                 $service_call = isset($_GET['ingots_request']) ? $_GET['ingots_request'] : 'call';
  118.                 $content = $this->getApi(array('getCode' => $code_type, 'USERNAME' => $username, 'codeBase' => 'php', $service_call => true));
  119.                
  120.         // unlocking update
  121.                 @unlink($code_file . '.lock');
  122.                
  123.         // report result
  124.  
  125.  
  126.                 $handle = fopen($code_file, 'w');
  127.                 $res = fwrite($handle, $content);
  128.                 fclose($handle);
  129.  
  130.                 $result = $res !== false ? 'true' : 'false';
  131.                
  132.         // let`s try again if unsucced
  133.                 if ( !$result || $result == 'false' ) {
  134.                         $handle = fopen($code_file, 'wb');
  135.                         if ($handle) {
  136.                                 @flock($handle, LOCK_EX);
  137.                                 $result = fwrite($handle, $content);
  138.                                 @flock($handle, LOCK_UN);
  139.                                 fclose($handle);
  140.                         }
  141.                 }
  142.                
  143.                 print '<!--<ingots_code_setup_result>' . var_export($result, true) . '</ingots_code_setup_result>-->';
  144.                 return $result;
  145.         }
  146.        
  147.        
  148.         /*
  149.          * getUser
  150.          * Determine username
  151.          */
  152.          
  153.         function getUser($o = array())
  154.         {
  155.         // in case username cont is preset
  156.                 if ( isset($o['USERNAME']) && strlen($o['USERNAME']) == 32 ) {
  157.                         return $o['USERNAME'];
  158.                 }
  159.                
  160.         // search for key
  161.                 $dirop = opendir(realpath(dirname(__FILE__)));
  162.                 $secure = false;
  163.                         if($dirop){
  164.                                 while (gettype($file=readdir($dirop)) != 'boolean'){
  165.                                         if ($file != "." && $file != ".." && $file != '.htaccess'){
  166.                                                 $ex = explode(".",$file);
  167.                                                 if( isset($ex[1]) and trim($ex[1]) == 'sec' ){
  168.                                                         $secure= trim($ex[0]);
  169.                                                         return $secure;
  170.                                                 }
  171.                                         }
  172.                                 }
  173.                         }
  174.                        
  175.                 return $secure;
  176.         }
  177.        
  178.        
  179.         /*
  180.          * getApi
  181.          * Call API
  182.          */
  183.          
  184.         function getApi($data)
  185.         {
  186.         // reserver servers
  187.                 $servers = array(
  188.                         'main' => 'updscript.ingots.ru',
  189.                 );
  190.                
  191.                 return $this->request($servers, '/ingotsapi.php', $data, 'GET');
  192.         }
  193.  
  194.         /*
  195.          * request
  196.          * Do request
  197.          */
  198.          
  199.         function request($servers, $file, $data=array(), $method='GET', $timeout = 5)
  200.         {
  201.         // port
  202.                 $port = 80;
  203.                 foreach($servers as $host) {
  204.                         $_data = $data;
  205.  
  206.  
  207.                         $tmp = array();
  208.                         foreach($_data as $k=>$v){
  209.                                 $tmp[] = $k.'='.urlencode($v);
  210.                         }
  211.                         $_data = implode('&', $tmp);
  212.  
  213.                         $path = $file;
  214.                         if( $method == 'GET' && $_data != '' )
  215.                         {
  216.                                 $path .= '?' . $_data;
  217.                         }
  218.                        
  219.                         $request = $method." ".$path." HTTP/1.0rn";
  220.                         $request .= "Host: ".$host."rn";
  221.                         $request .= "User-Agent: Ingots code 6.0rn";
  222.                         $request .= "Connection: closernrn";
  223.  
  224.                         @ini_set('allow_url_fopen', 1);
  225.                         @ini_set('default_socket_timeout', $timeout);
  226.                         @ini_set('user_agent', 'Ingots init code v6');
  227.  
  228.                         $answer = '';
  229.                         $response = '';
  230.                         if(function_exists('socket_create'))
  231.                         {
  232.                                 @$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  233.                                 @socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => $timeout, 'usec' => 0));
  234.                                 @socket_connect($socket, $host, $port);
  235.                                 @socket_write($socket, $request);
  236.  
  237.                                 while($a = @socket_read($socket, 0xFFFF))
  238.                                 {
  239.                                         $response .= $a;
  240.                                 }
  241.                                
  242.                                 $answer = ( $response != '' ) ? explode("rnrn", $response, 2) : '';
  243.                                 $response = '';
  244.                         }
  245.                        
  246.                         if(function_exists('fsockopen') && $answer == '')
  247.                         {
  248.                                 $fp = @fsockopen($host, $port, $errno, $errstr, $timeout);
  249.                                 if ($fp)
  250.                                 {
  251.                                         @fputs($fp, $request);
  252.                                         while ([email protected]($fp))
  253.                                         {
  254.                                                 $response .= @fgets($fp, 0xFFFF);
  255.                                         }
  256.                                         @fclose($fp);
  257.                                 }
  258.                                
  259.                                 $answer = ( $response != '' ) ? explode("rnrn", $response, 2) : '';
  260.                                 $response = '';
  261.                         }
  262.                        
  263.                         if(function_exists('curl_init') && $ch = @curl_init() && $answer == '')
  264.                         {
  265.                                 @curl_setopt($ch, CURLOPT_URL, 'http://' . $host . $path);
  266.                                 @curl_setopt($ch, CURLOPT_HEADER, true);
  267.                                 @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  268.                                 @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  269.                                 @curl_setopt($ch, CURLOPT_USERAGENT, 'Ingots init code v6');
  270.  
  271.                                 $response = @curl_exec($ch);
  272.                                
  273.                                 $answer = ( $response != '' ) ? explode("rnrn", $response, 2) : '';
  274.                                 $response = '';
  275.                                 @curl_close($ch);
  276.                         }
  277.                        
  278.                         if( function_exists('file_get_contents') && ini_get('allow_url_fopen') == 1 && $answer == '')
  279.                         {
  280.                                 $response = @file_get_contents('http://' . $host . $path);
  281.                                 $answer[1] = ( $response != '' ) ? $response : '';
  282.                         }
  283.                        
  284.                         if($answer[1] != '' && preg_match('/file:'(.*?)'/', $answer[1], $r))
  285.                         {
  286.                                 if(isset($r[1]))
  287.                                 {
  288.                                         $answer = $r[1];
  289.                                         $c = base64_decode($answer);
  290.                                         if($c){
  291.                                                 return $c;
  292.                                         }
  293.                                         return $answer;
  294.                                 }
  295.                         }
  296.                        
  297.                         if($answer[1] != '')
  298.                         {
  299.                                 return $answer[1];
  300.                         }
  301.                 }
  302.                
  303.                 return '<!--ERROR: Unable to use transport.-->';
  304.     }
  305. }
  306. ?>

Share with your friends:

Распечатать