Advertisement
thexiv

Untitled

Mar 13th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.76 KB | None | 0 0
  1. <?php
  2.    
  3. class cURLHandler {
  4.  
  5.     public $ch;
  6.     public $user;
  7.     public $users;
  8.     public $servers;
  9.     public $fields;
  10.     public $sessions;
  11.     public $handles;
  12.  
  13.     function __construct() {
  14.         $this->request = ($_SERVER['REQUEST_METHOD'] == "GET") ? ($_GET) : ($_POST);
  15.     }
  16.  
  17.     public function run() {
  18.  
  19.         // begin
  20.         $this->ch = create_multi_handler();
  21.  
  22.         // aggregate data
  23.         $request = ($_SERVER['REQUEST_METHOD'] == "GET") ? ($_GET) : ($_POST);
  24.         $this->servers = $this->getservers($request);
  25.         $this->fields = $this->get_post_fields($request);
  26.         $this->sessions = $this->get_sessions($request);
  27.         $this->handles = prepare_curl_handles($servers, $fields, $token = array($_COOKIE['token']));
  28.  
  29.         // swarm!
  30.         $this->execute_multiple_curl_handles($handles);
  31.     }
  32.  
  33.     public function create_multi_handler(){
  34.         return curl_multi_init();
  35.     }
  36.  
  37.     public function prepare_curl_handles($servers, $fields, $token){
  38.            
  39.         $h = array();
  40.         foreach($servers as $server_url){
  41.             $h[$server_url] = prepare_curl_handle($server_url, $fields, $token = array($_COOKIE['token']));
  42.         }
  43.        
  44.         return $h;
  45.     }
  46.  
  47.     public function prepare_curl_handle($server_url, $fields, $token){
  48.    
  49.         $handle = curl_init($server_url);
  50.         curl_setopt($handle, CURLOPT_TIMEOUT, 20);
  51.         curl_setopt($handle, CURLOPT_URL, $server_url);
  52.         curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  53.         curl_setopt($handle, CURLOPT_POST, 1);
  54.         curl_setopt($handle, CURLOPT_POSTFIELDS, array(
  55.             "token" => $token,
  56.             "fields" => json_encode($fields)
  57.             )
  58.         );
  59.        
  60.         $len = strlen(json_encode($fields)) + strlen(json_encode($token));
  61.         curl_setopt($handle, CURLOPT_HTTPHEADER, array(                                                                      
  62.             'Content-Type' => 'application/json',
  63.             'Content-Length' => $len
  64.             )
  65.         );
  66.  
  67.         return $handle;
  68.     }
  69.    
  70.     public function add_handles($curl_multi_handler, $handles){
  71.         foreach($handles as $handle)
  72.             curl_multi_add_handle($curl_multi_handler, $handle);
  73.     }
  74.    
  75.     public function perform_multiexec($curl_multi_handler){
  76.    
  77.         do {
  78.             $mrc = curl_multi_exec($curl_multi_handler, $active);
  79.         } while ($active > 0);
  80.  
  81.         while ($active && $mrc == CURLM_OK) {
  82.             if (curl_multi_select($curl_multi_handler) != -1) {
  83.                 do {
  84.                     $mrc = curl_multi_exec($curl_multi_handler, $active);
  85.                 } while ($active > 0);
  86.             }
  87.         }
  88.      
  89.     }
  90.     public function perform_curl_close($curl_multi_handler, $handles){
  91.        
  92.               // is this necessary
  93.         foreach($handles as $handle){
  94.             curl_multi_remove_handle($curl_multi_handler, $handle);
  95.         }
  96.      
  97.         curl_multi_close($curl_multi_handler);
  98.     }
  99.    
  100.     public function execute_multiple_curl_handles($handles){
  101.        
  102.         $curl_multi_handler = create_multi_handler();
  103.         add_handles($curl_multi_handler, $handles);
  104.         perform_multiexec($curl_multi_handler);
  105.         perform_curl_close($curl_multi_handler, $handles);
  106.     }
  107.    
  108.    
  109.     public function trace($var){
  110.        
  111.         echo '<pre>';
  112.         print_r($var);
  113.     }
  114.  
  115.     public function save_server_log($filename = "server.log") {
  116.         if (!(dir_exists("server_logs") ^ mkdir("server_logs")))
  117.             return false;
  118.         file_put_contents($filename, json_encode($this));
  119.     }
  120.  
  121.     public function save_user_log() {
  122.         $filename = $_COOKIE['token'];
  123.         if (!(dir_exists("user_logs") ^ mkdir("user_logs")));
  124.             return false;
  125.         file_put_contents($filename, json_encode($this->user));
  126.     }
  127.  
  128.     public function get_server_log($filename = "server.log") {
  129.         $fp = "";
  130.         if (!file_exists($filename))
  131.             return false;
  132.         $fp = fopen($filename, "r");
  133.         $dim = fread($fp, file_size($filename));
  134.         $decoded = json_decode($dim);
  135.         foreach ($decoded as $k=>$v)
  136.             $this->$k = $v;
  137.     }
  138.  
  139.     public function get_user_log($filename) {
  140.         $filename = $_COOKIE['PHPSESSID'];
  141.         $fp = fopen($filename, "r");
  142.         $dim = fread($fp, file_size($filename));
  143.         $decoded = json_decode($dim);
  144.         foreach ($decoded as $k=>$v)
  145.             $this->user->$k = $v;
  146.     }
  147.  
  148.     public function find_user($email) {
  149.         $path = "user_files/";
  150.         $search = "";
  151.         $files = scandir($path);
  152.         foreach ($files as $value) {
  153.             if (!$value->isFile())
  154.                 continue;
  155.             $dim = fread($fp, file_size($value));
  156.             $search = json_decode($dim);
  157.             if ($this->search_user_log($search) == $email)
  158.                 break;
  159.         }
  160.         foreach ($search as $k=>$v)
  161.             $this->user->$k = $v;
  162.     }
  163.  
  164.     public function search_user_log($dim) {
  165.         $email = $dim->email;
  166.         return $email;
  167.     }
  168.  
  169.     public function get_servers($request){
  170.         return $request['server'];
  171.     }
  172.    
  173.  
  174.     public function get_sessions($request){
  175.         return $request['session'];
  176.     }
  177.    
  178.     public function get_post_fields($request){
  179.         foreach($request as $kk=>$vv){
  180.             if($kk!='server' && $kk!='session'){
  181.                 $fields[$kk]=$vv;
  182.             }
  183.         }
  184.         return $fields;
  185.     }
  186.  
  187.     public function validate_request(){
  188.         if ($this->ch)
  189.             return true;
  190.         return false;
  191.     }
  192.  
  193. }
  194.     /*****************************************************/
  195.  
  196.     session_start();
  197.     if (!isset($_COOKIE['token']))
  198.         setcookie("token", $_COOKIE['PHPSESSID'], time() + (86400 * 365), "/");
  199.  
  200.     $handler = new cURLHandler();
  201.  
  202.     if(!$handler->validate_request()){
  203.         exit();
  204.     }
  205.     else {
  206.         $interrupt = 0;
  207.  
  208.         $window = [];
  209.         $serv_conf_file = fopen("server.ini", "r");
  210.         $serv_conf_opts = fread($serv_conf_file, file_size("server.conf"));
  211.         $user_conf_file = fopen("users.conf", "r");
  212.         $user_conf_opts = fread($user_conf_file, file_size("user.conf"));
  213.  
  214.         foreach ($user_conf_opts as $k => $v)
  215.             $handler->users->$k = $v;
  216.         $handler->users = array_merge($handler->users, array($request['email'] => $_COOKIE['token']));
  217.         foreach ($handler->users as $k => $v) {
  218.             if ($v == $_COOKIE['token']) {
  219.                 $window = array($k => $v);
  220.                 $interrupt = 1;
  221.                 break;
  222.             }
  223.         }
  224.         if ($interrupt == 1) {
  225.             $handler->run();
  226.             header("Location:saas.php?email=" . $window[0] . "&session=" . $window[1]);
  227.         }
  228.         else {
  229.             fwrite($user_conf_file, json_encode($handler->users));
  230.         }
  231.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement