xref: /plugin/siteexport/inc/httpproxy.php (revision 8f1c46d475f7f73952d3984c8d28eae6196d69ce)
1<?php
2
3/**
4 * i-net software provides programming examples for illustration only,
5 * without warranty either expressed or implied, including, but not
6 * limited to, the implied warranties of merchantability and/or fitness
7 * for a particular purpose. This programming example assumes that you
8 * are familiar with the programming language being demonstrated and the
9 * tools used to create and debug procedures. i-net software support
10 * professionals can help explain the functionality of a particular
11 * procedure, but they will not modify these examples to provide added
12 * functionality or construct procedures to meet your specific needs.
13 * Copyright © i-net software 1998-2010
14 */
15
16/** ********************************************************************
17 * THIS FILE SHOULD NOT BE MODIFIED
18 ******************************************************************** */
19
20if(!defined('DOKU_INC')) die('meh');
21require_once( DOKU_INC . 'inc/HTTPClient.php');
22
23class HTTPProxy extends DokuHTTPClient {
24
25    var $debugClass = null;
26    var $setttings = null;
27
28    /**
29     * Constructor.
30     */
31    function __construct($functions){
32        global $conf;
33
34        // The proxy should only be used if configured.
35        // Usually the proxy will allow connections away from the current server.
36        // This is what we do not want in most cases.
37        if ( $functions->getConf('useProxy') ) {
38            unset($conf['proxy']);
39        }
40
41        // call parent constructor
42        $this->debugClass = $functions->debug;
43        $this->settings = $functions->settings;
44        parent::__construct();
45
46        $this->timeout = 60; //max. 25 sec
47        $this->headers['If-Modified-Since'] = gmdate('r', 0);
48        $this->status = -1;
49        $this->debug = true;
50
51		if ( $this->settings->cookie == null ) {
52			$this->_debug("Has to re-authenticate request.");
53			if ( !$this->authenticate() ) {
54
55                $this->_debug("Trying other Authentication (auth.php):"); // Try again.
56    		    if ( !(auth_setup() && $this->authenticate(true)) )	{
57                    $this->_debug("Trying other Authentication (config):", $functions->authenticate() && $this->authenticate(true) ? 'authenticated' : 'not authenticated'); // Try again.
58    		    } else {
59                    $this->_debug("Ok, using default auth.php"); // Try again.
60    		    }
61			}
62
63			$this->_debug("Using Authentication:", array('user' => $this->user, 'password' => '*****'));
64
65		} else {
66			$this->cookies = $this->settings->cookie;
67		}
68
69		$this->headers['X-Real-Ip'] = clientIP(true);
70		$this->headers['X-Site-Exporter'] = getSecurityToken();
71		$this->headers['Accept-Encoding'] = $_SERVER['HTTP_ACCEPT_ENCODING'];
72		$this->headers['Accept-Charset'] = $_SERVER['HTTP_ACCEPT_CHARSET'];
73		$this->agent = $_SERVER['HTTP_USER_AGENT'];
74	}
75
76	/**
77	 * Authenticate using currently logged in user
78	 */
79	private function authenticate($secondAttempt=false) {
80
81		global $auth, $INPUT;
82
83		// Ok, this is evil. We read the login information of the current user and forward it to the HTTPClient
84		list($this->user, $sticky, $this->pass) = auth_getCookie();
85
86		// Logged in in second attempt is now in Session.
87		if ( $secondAttempt && !isset($this->user) && $INPUT->str('u') && $INPUT->str('p') ) {
88
89			// We hacked directly into the login mechanism which provides the login information without encryption via $INPUT
90			$this->user = $INPUT->str('u');
91			$this->pass = $INPUT->str('p');
92			$sticky = $INPUT->str('r');
93		} else {
94			$secret = auth_cookiesalt(!$sticky, true); //bind non-sticky to session
95			$this->pass = !empty($this->pass) ? $this->auth_decrypt($this->pass, $secret) : '';
96		}
97
98		return isset($this->user);
99	}
100
101	/**
102	 * Auth Decryption has changed from Weatherwax to Binky
103	 */
104	private function auth_decrypt($pass, $secret) {
105
106		if ( function_exists('auth_decrypt') ) {
107			// Binky
108			return auth_decrypt($pass, $secret);
109		} else if ( function_exists('PMA_blowfish_decrypt') ) {
110			// Weatherwax
111			return PMA_blowfish_decrypt($pass, $secret);
112		} else {
113			$this->debugClass->runtimeException("No decryption method found");
114		}
115	}
116
117	/**
118	 * Remeber HTTPClient Cookie after successfull authentication
119	 */
120	function sendRequest($url,$data='',$method='GET') {
121
122		$returnCode = parent::sendRequest($url,$data,$method);
123		if ( $this->settings->cookie == null ) {
124			$this->settings->cookie = $this->cookies;
125		}
126
127		return $returnCode;
128	}
129
130	 /**
131	 * print debug info to file if exists
132	 */
133	public function _debug($info,$var=null){
134
135		if ( !$this->debugClass ) {
136			return;
137		}
138
139		$this->debugClass->message("[HTTPClient] " . $info, $var, 1);
140	}
141}
142
143//Setup VIM: ex: et ts=4 enc=utf-8 :
144