17d101cc1SGerry Weißbach<?php 27d101cc1SGerry Weißbach 37d101cc1SGerry Weißbach/** 47d101cc1SGerry Weißbach * i-net software provides programming examples for illustration only, 57d101cc1SGerry Weißbach * without warranty either expressed or implied, including, but not 67d101cc1SGerry Weißbach * limited to, the implied warranties of merchantability and/or fitness 77d101cc1SGerry Weißbach * for a particular purpose. This programming example assumes that you 87d101cc1SGerry Weißbach * are familiar with the programming language being demonstrated and the 97d101cc1SGerry Weißbach * tools used to create and debug procedures. i-net software support 107d101cc1SGerry Weißbach * professionals can help explain the functionality of a particular 117d101cc1SGerry Weißbach * procedure, but they will not modify these examples to provide added 127d101cc1SGerry Weißbach * functionality or construct procedures to meet your specific needs. 136792d0cfSGerry Weißbach * Copyright © i-net software 1998-2010 147d101cc1SGerry Weißbach */ 157d101cc1SGerry Weißbach 167d101cc1SGerry Weißbach/** ******************************************************************** 177d101cc1SGerry Weißbach * THIS FILE SHOULD NOT BE MODIFIED 187d101cc1SGerry Weißbach ******************************************************************** */ 197d101cc1SGerry Weißbach 207d101cc1SGerry Weißbachif(!defined('DOKU_INC')) die('meh'); 217d101cc1SGerry Weißbachrequire_once( DOKU_INC . 'inc/HTTPClient.php'); 227d101cc1SGerry Weißbach 237d101cc1SGerry Weißbachclass HTTPProxy extends DokuHTTPClient { 247d101cc1SGerry Weißbach 257d101cc1SGerry Weißbach var $debugClass = null; 26cb1f35bbSGerry Weißbach var $setttings = null; 27*1e0bea35SGerry Weissbach var $forceUser = null; 28*1e0bea35SGerry Weissbach var $forcePass = null; 297d101cc1SGerry Weißbach 307d101cc1SGerry Weißbach /** 317d101cc1SGerry Weißbach * Constructor. 327d101cc1SGerry Weißbach */ 33*1e0bea35SGerry Weissbach function __construct($functions){ 347d101cc1SGerry Weißbach global $conf; 357d101cc1SGerry Weißbach 367d101cc1SGerry Weißbach // call parent constructor 37*1e0bea35SGerry Weissbach $this->debugClass = $functions->debug; 38*1e0bea35SGerry Weissbach $this->settings = $functions->settings; 397d101cc1SGerry Weißbach parent::__construct(); 407d101cc1SGerry Weißbach 417d101cc1SGerry Weißbach $this->timeout = 60; //max. 25 sec 422ab96209SGerry Weißbach $this->headers['If-Modified-Since'] = gmdate('r', 0); 437d101cc1SGerry Weißbach $this->status = -1; 447d101cc1SGerry Weißbach $this->debug = true; 45cb1f35bbSGerry Weißbach 46cb1f35bbSGerry Weißbach if ( $this->settings->cookie == null ) { 47cb1f35bbSGerry Weißbach $this->_debug("Has to re-authenticate request."); 48cb1f35bbSGerry Weißbach if ( !$this->authenticate() ) { 49*1e0bea35SGerry Weissbach 50*1e0bea35SGerry Weissbach $this->_debug("Trying other Authentication (auth.php):"); // Try again. 51*1e0bea35SGerry Weissbach if ( !(auth_setup() && $this->authenticate(true)) ) { 52*1e0bea35SGerry Weissbach $this->_debug("Trying other Authentication (config):", $functions->authenticate() && $this->authenticate(true) ? 'authenticated' : 'not authenticated'); // Try again. 53*1e0bea35SGerry Weissbach } else { 54*1e0bea35SGerry Weissbach $this->_debug("Ok, using default auth.php"); // Try again. 55*1e0bea35SGerry Weissbach } 567d101cc1SGerry Weißbach } 577d101cc1SGerry Weißbach 584c005702SGerry Weißbach $this->_debug("Using Authentication:", array('user' => $this->user, 'password' => '*****')); 59cb1f35bbSGerry Weißbach 60cb1f35bbSGerry Weißbach } else { 61cb1f35bbSGerry Weißbach $this->cookies = $this->settings->cookie; 62cb1f35bbSGerry Weißbach } 63cb1f35bbSGerry Weißbach 64cb1f35bbSGerry Weißbach $this->headers['X-Real-Ip'] = clientIP(true); 650cd3f1b4SGerry Weißbach $this->headers['X-Site-Exporter'] = getSecurityToken(); 66cb1f35bbSGerry Weißbach $this->headers['Accept-Encoding'] = $_SERVER['HTTP_ACCEPT_ENCODING']; 67cb1f35bbSGerry Weißbach $this->headers['Accept-Charset'] = $_SERVER['HTTP_ACCEPT_CHARSET']; 68cb1f35bbSGerry Weißbach $this->agent = $_SERVER['HTTP_USER_AGENT']; 69cb1f35bbSGerry Weißbach } 70cb1f35bbSGerry Weißbach 71cb1f35bbSGerry Weißbach /** 72cb1f35bbSGerry Weißbach * Authenticate using currently logged in user 73cb1f35bbSGerry Weißbach */ 74cb1f35bbSGerry Weißbach private function authenticate($secondAttempt=false) { 75cb1f35bbSGerry Weißbach 76cb1f35bbSGerry Weißbach global $auth, $INPUT; 77cb1f35bbSGerry Weißbach 78cb1f35bbSGerry Weißbach // Ok, this is evil. We read the login information of the current user and forward it to the HTTPClient 79cb1f35bbSGerry Weißbach list($this->user, $sticky, $this->pass) = auth_getCookie(); 80cb1f35bbSGerry Weißbach 81cb1f35bbSGerry Weißbach // Logged in in second attempt is now in Session. 82cb1f35bbSGerry Weißbach if ( $secondAttempt && !isset($this->user) && $INPUT->str('u') && $INPUT->str('p') ) { 83cb1f35bbSGerry Weißbach 84cb1f35bbSGerry Weißbach // We hacked directly into the login mechanism which provides the login information without encryption via $INPUT 85cb1f35bbSGerry Weißbach $this->user = $INPUT->str('u'); 86cb1f35bbSGerry Weißbach $this->pass = $INPUT->str('p'); 87cb1f35bbSGerry Weißbach $sticky = $INPUT->str('r'); 88cb1f35bbSGerry Weißbach } else { 89cb1f35bbSGerry Weißbach $secret = auth_cookiesalt(!$sticky, true); //bind non-sticky to session 903de90976SGerry Weißbach $this->pass = !empty($this->pass) ? $this->auth_decrypt($this->pass, $secret) : ''; 91cb1f35bbSGerry Weißbach } 92cb1f35bbSGerry Weißbach 93cb1f35bbSGerry Weißbach return isset($this->user); 94cb1f35bbSGerry Weißbach } 95cb1f35bbSGerry Weißbach 96cb1f35bbSGerry Weißbach /** 97ec70cd20SGerry Weißbach * Auth Decryption has changed from Weatherwax to Binky 98ec70cd20SGerry Weißbach */ 99ec70cd20SGerry Weißbach private function auth_decrypt($pass, $secret) { 100ec70cd20SGerry Weißbach 101ec70cd20SGerry Weißbach if ( function_exists('auth_decrypt') ) { 102ec70cd20SGerry Weißbach // Binky 103ec70cd20SGerry Weißbach return auth_decrypt($pass, $secret); 104ec70cd20SGerry Weißbach } else if ( function_exists('PMA_blowfish_decrypt') ) { 105ec70cd20SGerry Weißbach // Weatherwax 106ec70cd20SGerry Weißbach return PMA_blowfish_decrypt($pass, $secret); 107ec70cd20SGerry Weißbach } else { 108ec70cd20SGerry Weißbach $this->debugClass->runtimeException("No decryption method found"); 109ec70cd20SGerry Weißbach } 110ec70cd20SGerry Weißbach } 111ec70cd20SGerry Weißbach 112ec70cd20SGerry Weißbach /** 113cb1f35bbSGerry Weißbach * Remeber HTTPClient Cookie after successfull authentication 114cb1f35bbSGerry Weißbach */ 115cb1f35bbSGerry Weißbach function sendRequest($url,$data='',$method='GET') { 116cb1f35bbSGerry Weißbach 117cb1f35bbSGerry Weißbach $returnCode = parent::sendRequest($url,$data,$method); 118cb1f35bbSGerry Weißbach if ( $this->settings->cookie == null ) { 119cb1f35bbSGerry Weißbach $this->settings->cookie = $this->cookies; 120cb1f35bbSGerry Weißbach } 121cb1f35bbSGerry Weißbach 122cb1f35bbSGerry Weißbach return $returnCode; 123cb1f35bbSGerry Weißbach } 1247d101cc1SGerry Weißbach 1257d101cc1SGerry Weißbach /** 1267d101cc1SGerry Weißbach * print debug info to file if exists 1277d101cc1SGerry Weißbach */ 1287d101cc1SGerry Weißbach public function _debug($info,$var=null){ 1297d101cc1SGerry Weißbach 1307d101cc1SGerry Weißbach if ( !$this->debugClass ) { 1317d101cc1SGerry Weißbach return; 1327d101cc1SGerry Weißbach } 1337d101cc1SGerry Weißbach 134cb1f35bbSGerry Weißbach $this->debugClass->message("[HTTPClient] " . $info, $var, 1); 1357d101cc1SGerry Weißbach } 1367d101cc1SGerry Weißbach} 1377d101cc1SGerry Weißbach 1387d101cc1SGerry Weißbach//Setup VIM: ex: et ts=4 enc=utf-8 : 139