comparison program/steps/utils/modcss.inc @ 0:4681f974d28b

vanilla 1.3.3 distro, I hope
author Charlie Root
date Thu, 04 Jan 2018 15:52:31 -0500
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4681f974d28b
1 <?php
2
3 /**
4 +-----------------------------------------------------------------------+
5 | program/steps/utils/modcss.inc |
6 | |
7 | This file is part of the Roundcube Webmail client |
8 | Copyright (C) 2007-2014, The Roundcube Dev Team |
9 | |
10 | Licensed under the GNU General Public License version 3 or |
11 | any later version with exceptions for skins & plugins. |
12 | See the README file for a full license statement. |
13 | |
14 | PURPOSE: |
15 | Modify CSS source from a URL |
16 | |
17 +-----------------------------------------------------------------------+
18 | Author: Thomas Bruederli <roundcube@gmail.com> |
19 | Author: Aleksander Machniak <alec@alec.pl> |
20 +-----------------------------------------------------------------------+
21 */
22
23 $url = preg_replace('![^a-z0-9.-]!i', '', $_GET['_u']);
24
25 if ($url === null || !($realurl = $_SESSION['modcssurls'][$url])) {
26 header('HTTP/1.1 403 Forbidden');
27 exit("Unauthorized request");
28 }
29
30 // don't allow any other connections than http(s)
31 if (!preg_match('~^(https?)://~i', $realurl, $matches)) {
32 header('HTTP/1.1 403 Forbidden');
33 exit("Invalid URL");
34 }
35
36 if (ini_get('allow_url_fopen')) {
37 $scheme = strtolower($matches[1]);
38 $options = array(
39 $scheme => array(
40 'method' => 'GET',
41 'timeout' => 15,
42 )
43 );
44
45 $context = stream_context_create($options);
46 $source = @file_get_contents($realurl, false, $context);
47
48 // php.net/manual/en/reserved.variables.httpresponseheader.php
49 $headers = implode("\n", (array) $http_response_header);
50 }
51 else if (function_exists('curl_init')) {
52 $curl = curl_init($realurl);
53 curl_setopt($curl, CURLOPT_TIMEOUT, 15);
54 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 15);
55 curl_setopt($curl, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
56 curl_setopt($curl, CURLOPT_ENCODING, '');
57 curl_setopt($curl, CURLOPT_HEADER, true);
58 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
59 $data = curl_exec($curl);
60
61 if ($data !== false) {
62 list($headers, $source) = explode("\r\n\r\n", $data, 2);
63 }
64 else {
65 $headers = false;
66 $source = false;
67 }
68 }
69 else {
70 header('HTTP/1.1 403 Forbidden');
71 exit("HTTP connections disabled");
72 }
73
74 $ctype_regexp = '~Content-Type:\s+text/(css|plain)~i';
75
76 if ($source !== false && preg_match($ctype_regexp, $headers)) {
77 header('Content-Type: text/css');
78 echo rcube_utils::mod_css_styles($source, preg_replace('/[^a-z0-9]/i', '', $_GET['_c']));
79 exit;
80 }
81
82 header('HTTP/1.0 404 Not Found');
83 exit("Invalid response returned by server");