Esempio n. 1
0
	function export($out) {
		$data = $this->data;
		
		$tmp = tempnam(sys_get_temp_dir(), 'phpinstaller-') . '.zip';
		
		HTTP::get("https://github.com/{$data['user']}/{$data['project']}/zipball/{$data['branch']}", $tmp);
		Zip::import($tmp, $out, 1);		
	}
Esempio n. 2
0
 /**
  * Make sure all the images we're using exist
  */
 public function testEmailImages()
 {
     $this->setVignetteEnvToProd();
     $this->disableMemCache();
     foreach (Email\ImageHelper::getIconInfo() as $iconInfo) {
         $url = $iconInfo['url'];
         $name = $iconInfo['name'];
         $response = HTTP::get($url);
         $this->assertTrue($response !== false, "{$name} should return HTTP 200 -- {$url}");
     }
 }
Esempio n. 3
0
 public function __construct()
 {
     $pgHTTP = new HTTP();
     $text = $pgHTTP->get('http://meta.wikimedia.org/w/index.php?title=IRC/Quotes&action=raw&ctype=text/css', false);
     $text = explode('<pre><nowiki>', $text);
     $text = explode('</nowiki></pre>', $text[1]);
     $text = explode('%%', $text[0]);
     $text = substr($text[0], 2);
     $text = htmlspecialchars($text);
     $text = trim($text);
     $text = preg_replace('/\\n/', '<br />', $text);
     $this->quotes = explode("%<br />", $text);
 }
 public function __construct(WebRequest $request)
 {
     parent::__construct($request);
     global $IP, $wgUser;
     $ac = new AssetsConfig();
     $assets = $ac->resolve($this->mOid, true, !isset($this->mParams['minify']) || $this->mParams['minify'] == true, $this->mParams);
     $this->mContentType = $ac->getGroupType($this->mOid);
     foreach ($assets as $asset) {
         // reference to a file to be fetched by the browser from external server (BugId:9522)
         if (substr($asset, 0, 10) == '#external_') {
             // do nothing
         } else {
             if (Http::isValidURI($asset)) {
                 $params = array();
                 $url = parse_url($asset);
                 if (isset($url['query'])) {
                     parse_str($url['query'], $params);
                 }
                 // Start checking the url to see if it is something we care about (BugId:30188)
                 if (isset($params['action']) && $params['action'] == 'raw' && isset($params['gen']) && $params['gen'] == 'js') {
                     //$this->mContent .= RequestContext::getMain()->getSkin()->generateUserJs(); // FIXME
                 } else {
                     if (isset($params['action']) && $params['action'] == 'raw' && isset($params['gen']) && $params['gen'] == 'css') {
                         //$this->mContent .= RequestContext::getMain()->getSkin()->generateUserStylesheet(); // FIXME
                     } else {
                         //Debug added on May 4, 2012 to inquire external requests spikes
                         $start = microtime(true);
                         $this->mContent .= HTTP::get($asset);
                         $totalTime = microtime(true) - $start;
                         if ($totalTime >= 1) {
                             Wikia::log(__METHOD__, false, "oid: {$this->mOid}, totalTime: {$totalTime}, asset: {$asset}, referrer: {$_SERVER['HTTP_REFERER']}, entrypoint: {$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}", true);
                         }
                     }
                 }
             } else {
                 $this->mContent .= file_get_contents($IP . '/' . $asset);
             }
         }
         if ($this->mContentType == AssetsManager::TYPE_JS) {
             // add semicolon to separate concatenated files (BugId:20272)
             // but only for JS (BugId:20824)
             $this->mContent .= ";\n";
         }
     }
     // For RTE only
     // TODO: add "filters" definitions to config.php
     if ($this->mOid == 'rte' || $this->mOid == 'eplrte' || $this->mOid == 'mini_editor_rte_js') {
         $this->mContent = preg_replace('#^.*@Packager\\.RemoveLine.*$#m', '', $this->mContent);
         $this->mContent = str_replace("", '', $this->mContent);
     }
 }
Esempio n. 5
0
 static function getNamespaceNames($lang, $wiki)
 {
     $http = new HTTP();
     $namespaces = $http->get("http://{$lang}.{$wiki}.org/w/api.php?action=query&meta=siteinfo&siprop=namespaces&format=php");
     $namespaces = unserialize($namespaces);
     $namespaces = $namespaces['query']['namespaces'];
     unset($namespaces[-2]);
     unset($namespaces[-1]);
     $namespaces[0]['*'] = "Mainspace";
     $namespacenames = array();
     foreach ($namespaces as $value => $ns) {
         $namespacenames[$value] = $ns['*'];
     }
     #print_r($namespacenames);die;
     return $namespacenames;
 }
Esempio n. 6
0
 protected function extractVideoId($url)
 {
     global $wgMemc;
     $cacheKey = wfMemcKey('video', 'viddler', sha1($url));
     $cachedEmbedId = $wgMemc->get($cacheKey);
     if ($cachedEmbedId !== false) {
         return $cachedEmbedId;
     }
     $apiUrl = 'http://lab.viddler.com/services/oembed/?format=json&url=' . urlencode($url);
     $apiResult = HTTP::get($apiUrl);
     if ($apiResult === false) {
         return null;
     }
     $apiResult = FormatJson::decode($apiResult, true);
     // Extract the player source from the HTML
     if (!preg_match(self::idRegex, $apiResult['html'], $matches)) {
         return null;
     }
     $embedId = $matches['id'];
     $wgMemc->set($cacheKey, $embedId, 60 * 60 * 24);
     return $embedId;
 }
Esempio n. 7
0
 /**
  * @depends testGetFile
  */
 public function testAddFilePartial($getFileData)
 {
     $oldFilename = "work/old";
     $fileContents = $getFileData['response']->getBody();
     file_put_contents($oldFilename, $fileContents);
     $newFilename = "work/new";
     $patchFilename = "work/patch";
     $algorithms = array("bsdiff" => "bsdiff " . escapeshellarg($oldFilename) . " " . escapeshellarg($newFilename) . " " . escapeshellarg($patchFilename), "xdelta" => "xdelta3 -f -e -9 -S djw -s " . escapeshellarg($oldFilename) . " " . escapeshellarg($newFilename) . " " . escapeshellarg($patchFilename), "vcdiff" => "vcdiff encode " . "-dictionary " . escapeshellarg($oldFilename) . " " . " -target " . escapeshellarg($newFilename) . " " . " -delta " . escapeshellarg($patchFilename));
     foreach ($algorithms as $algo => $cmd) {
         clearstatcache();
         // Create random contents
         file_put_contents($newFilename, uniqid(self::getRandomUnicodeString(), true));
         $newHash = md5_file($newFilename);
         // Get upload authorization
         $fileParams = array("md5" => $newHash, "filename" => "test_" . $fileContents, "filesize" => filesize($newFilename), "mtime" => filemtime($newFilename) * 1000, "contentType" => "text/plain", "charset" => "utf-8");
         $response = API::userPost(self::$config['userID'], "items/{$getFileData['key']}/file?key=" . self::$config['apiKey'], $this->implodeParams($fileParams), array("Content-Type: application/x-www-form-urlencoded", "If-Match: " . md5_file($oldFilename)));
         $this->assert200($response);
         $json = json_decode($response->getBody());
         $this->assertNotNull($json);
         exec($cmd);
         $patch = file_get_contents($patchFilename);
         $this->assertNotEquals("", $patch);
         self::$toDelete[] = "{$newHash}/test_{$newHash}";
         // Upload patch file
         $response = API::userPatch(self::$config['userID'], "items/{$getFileData['key']}/file?key=" . self::$config['apiKey'] . "&algorithm={$algo}&upload=" . $json->uploadKey, $patch, array("If-Match: " . md5_file($oldFilename)));
         $this->assert204($response);
         unlink($patchFilename);
         rename($newFilename, $oldFilename);
         // Verify attachment item metadata
         $response = API::userGet(self::$config['userID'], "items/{$getFileData['key']}?key=" . self::$config['apiKey'] . "&content=json");
         $xml = API::getXMLFromResponse($response);
         $json = json_decode(array_shift($xml->xpath('/atom:entry/atom:content')));
         $this->assertEquals($fileParams['md5'], $json->md5);
         $this->assertEquals($fileParams['mtime'], $json->mtime);
         $this->assertEquals($fileParams['contentType'], $json->contentType);
         $this->assertEquals($fileParams['charset'], $json->charset);
         // Verify file on S3
         $response = API::userGet(self::$config['userID'], "items/{$getFileData['key']}/file?key=" . self::$config['apiKey']);
         $this->assert302($response);
         $location = $response->getHeader("Location");
         $response = HTTP::get($location);
         $this->assert200($response);
         $this->assertEquals($fileParams['md5'], md5($response->getBody()));
         $t = $fileParams['contentType'];
         $this->assertEquals($t . ($t && $fileParams['charset'] ? "; charset={$fileParams['charset']}" : ""), $response->getHeader("Content-Type"));
     }
 }
Esempio n. 8
0
 public static function get($url, $headers = array(), $auth = false)
 {
     $url = self::$config['apiURLPrefix'] . $url;
     if (self::$apiVersion) {
         $headers[] = "Zotero-API-Version: " . self::$apiVersion;
     }
     if (!$auth && self::$apiKey) {
         $headers[] = "Authorization: Bearer " . self::$apiKey;
     }
     $response = HTTP::get($url, $headers, $auth);
     if (self::$config['verbose'] >= 2) {
         echo "\n\n" . $response->getBody() . "\n";
     }
     return $response;
 }
Esempio n. 9
0
 function runHTTPFailureChecks()
 {
     // Each of the following requests should result in a failure.
     $timeout = 1;
     $start_time = time();
     $r = HTTP::get("http://www.example.com:1/", $timeout);
     $end_time = time();
     $this->assertLessThan($timeout + 2, $end_time - $start_time, "Request took less than {$timeout}s via " . Http::$httpEngine);
     $this->assertEquals($r, false, "false -- what we get on error from Http::get()");
     $r = HTTP::get("http://www.example.com/this-file-does-not-exist", $timeout);
     $this->assertFalse($r, "False on 404s");
     $r = HttpRequest::factory("http://www.example.com/this-file-does-not-exist");
     $er = $r->execute();
     if (is_a($r, 'PhpHttpRequest') && version_compare('5.2.10', phpversion(), '>')) {
         $this->assertRegexp("/HTTP request failed/", $er->getWikiText());
     } else {
         $this->assertRegexp("/404 Not Found/", $er->getWikiText());
     }
 }
require_once '../commandLine.inc';
if (isset($options['help'])) {
    die("Update field `city_description` in table `city_list` base on media wiki msg ");
}
function deleteScript($document)
{
    $search = array('@<script[^>]*?>.*?</script>@si');
    $text = preg_replace($search, '', $document);
    return trim(strip_tags($text));
}
$sql = 'SELECT cv_id, city_url, city_description FROM `city_list`';
$db = WikiFactory::db(DB_MASTER);
$res = $db->query($sql);
$countAll = $countNoEmpty = 0;
$sql = '';
$countNoEmpty = 0;
while ($row = $db->fetchRow($res)) {
    $countAll++;
    $url = $row['city_url'] . "index.php?title=MediaWiki:Description&action=render";
    $out = HTTP::get($url);
    $out = deleteScript($out);
    if ($out != $row['city_description']) {
        echo $row['city_id'] . ":" . $row[' city_sitename'] . ":" . $countNoEmpty . "\n";
        $sql = " UPDATE city_list SET city_description =" . $db->addQuotes($out) . " where city_id=" . $row['city_id'] . ";\n";
        $db->query($sql);
        $countNoEmpty++;
    } else {
        echo "is up to date\n";
    }
}
echo "Found {$countAll} rows, {$countNoEmpty} with the wiki description updated.\n";
Esempio n. 11
0
 public function testConfigure()
 {
     HTTP::configure(array('base' => 'http://httpbin.org', 'headers' => array('Doing' => 'tests')));
     $res = HTTP::get('/get')->send();
     $this->assertFalse($res->error());
     $this->assertEquals(200, $res->status());
     $this->assertInstanceOf('stdClass', $res->body());
 }
Esempio n. 12
0
 public static function get($url, $headers = array(), $auth = false)
 {
     self::loadConfig();
     $url = self::$config['apiURLPrefix'] . $url;
     $response = HTTP::get($url, $headers, $auth);
     if (self::$config['verbose']) {
         echo "\n\n" . $response->getBody() . "\n";
     }
     return $response;
 }
Esempio n. 13
0
function wfGetDevelopersJSON($language, $query, $callback)
{
    $data = false;
    // differ by "language": rfc, php, js, css, ...
    switch ($language) {
        // Request For Comments
        case 'rfc':
            $rfcId = intval($query);
            if (empty($rfcId)) {
                continue;
            }
            // fetch RFC file
            $url = "http://www.faqs.org/rfcs/rfc{$rfcId}.html";
            $content = HTTP::get($url);
            // remove HTML <head> section
            $content = substr($content, strpos($content, '<HR SIZE=2 NOSHADE>'));
            //echo '<pre>'.htmlspecialchars($content).'</pre>';
            // get title and short summary
            if (preg_match('/\\- (.+)<\\/h1>/m', $content, $matches)) {
                $title = $matches[1];
                $introIdx = intval(stripos($content, 'introduction') + 12);
                $abstractIdx = intval(stripos($content, 'abstract') + 8);
                // use whatever is first
                $idx = min($introIdx, $abstractIdx) > 100 ? min($introIdx, $abstractIdx) : max($introIdx, $abstractIdx);
                $summary = trim(strip_tags(substr($content, $idx, 1024)));
            } else {
                // RFC not found - return empty title
                $title = "";
            }
            $data = array('type' => 'rfc', 'id' => $rfcId, 'title' => $title, 'summary' => !empty($summary) ? $summary : '', 'href' => "http://www.rfc-archive.org/getrfc.php?rfc={$rfcId}");
            break;
            // PHP
        // PHP
        case 'php':
            $function = preg_replace('/[^A-Za-z0-9_]/', '', $query);
            $href = 'http://us.php.net/' . $function;
            $content = HTTP::get($href);
            //echo '<pre>'.htmlspecialchars($content).'</pre>';
            // grab info from manual page
            $syntax = wfLimitText('<div class="methodsynopsis dc-description">', '<p class="para rdfs-comment">', $content);
            if (!empty($syntax)) {
                $syntax = trim(strip_tags($syntax));
                $syntax = preg_replace('/(\\s+)/', ' ', $syntax);
            }
            $description = wfLimitText('rdfs-comment">', '<div', $content);
            if (!empty($description)) {
                $description = trim(strip_tags($description), "\n. ");
                $description = preg_replace('/(\\s+)/', ' ', $description);
            }
            $params = wfLimitText('<p class="para">', '<div', $content);
            if (!empty($params)) {
                $params = trim(strip_tags($params, '<dl><dd><dt>'));
                $params = preg_replace('/(\\s+)/', ' ', $params);
            }
            $returns = wfLimitText('<h3 class="title">Return Values</h3>', '<div', $content);
            if (!empty($returns)) {
                $returns = trim(strip_tags($returns, '<p>'));
                $returns = preg_replace('/(\\s+)/', ' ', $returns);
            }
            $data = array('type' => 'php', 'title' => $function, 'syntax' => !empty($syntax) ? $syntax : '', 'params' => !empty($params) ? $params : '', 'desc' => !empty($description) ? $description : '', 'returns' => !empty($returns) ? $returns : '', 'href' => 'http://{{LANG}}.php.net/' . $function);
            break;
            // C
        // C
        case 'c':
            $function = preg_replace('/[^A-Za-z0-9_]/', '', $query);
            $href = "http://www.elook.org/programming/c/{$function}.html";
            $content = HTTP::get($href);
            // grab info from manual page
            $syntax = wfLimitText('<i>Syntax:</i>', '</pre>', $content);
            if (!empty($syntax)) {
                $syntax = trim(strip_tags($syntax));
            }
            $description = wfLimitText('<i>Description:</i>', '<br /><br />', $content);
            if (!empty($description)) {
                $description = trim(strip_tags($description, '<br><pre>'), "\n. ");
                $description = preg_replace('/(\\s+)/', ' ', $description);
            }
            $data = array('type' => 'c', 'title' => $function, 'syntax' => !empty($syntax) ? $syntax : '', 'desc' => !empty($description) ? $description : '', 'href' => $href);
            break;
            // man page
        // man page
        case 'man':
            $cmd = preg_replace('/[^A-Za-z0-9_]/', '', $query);
            $href = 'http://unixhelp.ed.ac.uk/CGI/man-cgi?' . $cmd;
            $content = HTTP::get($href);
            //echo '<pre>'.htmlspecialchars($content).'</pre>';
            // grab info from manual page
            $description = wfLimitText('<PRE>', '</PRE>', $content);
            if (!empty($description)) {
                $description = wfLimitText("\n", "\n", $description);
                $description = trim(strip_tags($description, '<h2>'));
                $description = substr($description, 0, -40);
                // keep headers formatted
                $description = strtr($description, array('<H2>' => '<b>', '</H2>' => '</b>'));
            }
            $data = array('type' => 'man', 'title' => $cmd, 'desc' => !empty($description) ? $description : '', 'href' => $href);
            break;
        default:
            return '';
    }
    // json encode our response
    $jsonData = jsonify($data);
    $response = new AjaxResponse(!empty($callback) ? "{$callback}({$jsonData});" : $jsonData);
    $response->setContentType('application/javascript; charset=utf-8');
    return $response;
}