/** * Check for new messages from upstream * * @author Andreas Gohr <*****@*****.**> */ function checkUpdateMessages() { global $conf; global $INFO; if (!$conf['updatecheck']) { return; } if ($conf['useacl'] && $INFO['perm'] < AUTH_ADMIN) { return; } $cf = $conf['cachedir'] . '/messages.txt'; $lm = @filemtime($cf); // check if new messages needs to be fetched if ($lm < time() - 60 * 60 * 24 || $lm < @filemtime(DOKU_CONF . 'msg')) { $num = @file(DOKU_CONF . 'msg'); $num = is_array($num) ? (int) $num[0] : 0; $http = new DokuHTTPClient(); $http->timeout = 8; $data = $http->get(DOKU_MESSAGEURL . $num); io_saveFile($cf, $data); } else { $data = io_readFile($cf); } // show messages through the usual message mechanism $msgs = explode("\n%\n", $data); foreach ($msgs as $msg) { if ($msg) { msg($msg, 2); } } }
/** * @param $sourceUri * @param $targetUri * @return IXR_Error */ function ping($sourceUri, $targetUri) { global $ID; $ID = substr($_SERVER['PATH_INFO'], 1); if (is_null($this->tools) || !$this->tools->linkbackAllowed()) { return new IXR_Error(PINGBACK_ERROR_TARGETURI_CANNOT_BE_USED, ''); } // Given URLs are no urls? Quit if (!preg_match("#^([a-z0-9\\-\\.+]+?)://.*#i", $sourceUri)) { return new IXR_Error(PINGBACK_ERROR_GENERIC, ''); } if (!preg_match("#^([a-z0-9\\-\\.+]+?)://.*#i", $targetUri)) { return new IXR_Error(PINGBACK_ERROR_GENERIC, ''); } // Source URL does not exist? Quit $http = new DokuHTTPClient(); $page = $http->get($sourceUri); if ($page === false) { return new IXR_Error(PINGBACK_ERROR_SOURCEURI_DOES_NOT_EXIST, ''); } // Target URL does not match with request? Quit if ($targetUri != wl($ID, '', true)) { return new IXR_Error(PINGBACK_ERROR_GENERIC, ''); } // Retrieve data from source $linkback = $this->_getTrackbackData($sourceUri, $targetUri, $page); // Source URL does not contain link to target? Quit if (!$linkback) { return new IXR_Error(PINGBACK_ERROR_SOURCEURI_DOES_NOT_CONTAIN_LINK, ''); } if (!$this->tools->saveLinkback('pingback', $linkback['title'], $sourceUri, $linkback['excerpt'], $ID)) { return new IXR_Error(PINGBACK_ERROR_PINGBACK_ALREADY_MADE, ''); } }
/** * Process trackback request. */ function _process() { // get ID global $ID; $ID = substr($_SERVER['PATH_INFO'], 1); $sourceUri = $_REQUEST['url']; if (is_null($this->tools) || !$this->tools->linkbackAllowed()) { $this->_printTrackbackError('Trackbacks disabled.'); return; } // No POST request? Quit if ($_SERVER['REQUEST_METHOD'] != 'POST') { $this->_printTrackbackError('Trackback was not received via HTTP POST.'); return; } // Given URL is not an url? Quit if (!preg_match("#^([a-z0-9\\-\\.+]+?)://.*#i", $sourceUri)) { $this->_printTrackbackError('Given trackback URL is not an URL.'); return; } // Source does not exist? Quit $http = new DokuHTTPClient(); $page = $http->get($sourceUri); if ($page === false) { $this->_printTrackbackError('Linked page cannot be reached'); return; } if (!$this->tools->saveLinkback('trackback', strip_tags($_REQUEST['title']), $sourceUri, strip_tags($_REQUEST['excerpt']), $ID)) { $this->_printTrackbackError('Trackback already received.'); return; } $this->_printTrackbackSuccess(); }
/** * Check for new messages from upstream * * @author Andreas Gohr <*****@*****.**> */ function checkUpdateMessages() { global $conf; global $INFO; global $updateVersion; if (!$conf['updatecheck']) { return; } if ($conf['useacl'] && !$INFO['ismanager']) { return; } $cf = $conf['cachedir'] . '/messages.txt'; $lm = @filemtime($cf); // check if new messages needs to be fetched if ($lm < time() - 60 * 60 * 24 || $lm < @filemtime(DOKU_INC . DOKU_SCRIPT)) { @touch($cf); dbglog("checkUpdatesMessages(): downloading messages.txt"); $http = new DokuHTTPClient(); $http->timeout = 12; $data = $http->get(DOKU_MESSAGEURL . $updateVersion); io_saveFile($cf, $data); } else { dbglog("checkUpdatesMessages(): messages.txt up to date"); $data = io_readFile($cf); } // show messages through the usual message mechanism $msgs = explode("\n%\n", $data); foreach ($msgs as $msg) { if ($msg) { msg($msg, 2); } } }
private function get_language_data() { /* @var $cache door43Cache */ $cache = $this->getCache(); $cacheFile = 'langnames.json'; $langs = $cache->getObject($cacheFile, true); // download from api.unfoldingWord.org if needed if (empty($langs)) { $http = new DokuHTTPClient(); $raw = $http->get('https://td.unfoldingword.org/exports/langnames.json'); $langs = json_decode($raw, true); $cache->saveString($cacheFile, $raw); } // if still empty, use the backup copy if (empty($langs)) { $langs = json_decode(file_get_contents(dirname(__FILE__) . '/lang/langnames.json'), true); } // $this->LN // $this->translations $ln = array(); $translations = ''; $langDir = array(); foreach ($langs as $lang) { $ln[$lang['lc']] = $lang['ln']; $translations .= ' ' . $lang['lc']; $langDir[$lang['lc']] = $lang['ld']; } $cache->saveObject('helperLN.json', $ln); $cache->saveObject('languageDirection.json', $langDir); $sorted = array_unique(array_filter(explode(' ', $translations))); sort($sorted); $cache->saveObject('translations.json', $sorted); }
/** * Use DokuWiki's HTTP Clients for downloading * * @param string $url * @throws Exception * @return string */ protected function _getRemoteData($url) { $http = new DokuHTTPClient($url); $file = $http->get($url); if (!$file) { throw new Exception('Your server can\'t connect to external resources. Please update the file manually.'); } return $file; }
public function getInfoByHash($repository_id, $commit_id) { $gitlabServer = $this->getConf('server'); $apiToken = $this->getConf('api_token'); $http = new DokuHTTPClient(); $reqUrl = $gitlabServer . '/api/v3/projects/' . $repository_id . '/repository/commits/' . $commit_id . '/?private_token=' . $apiToken; $data = json_decode($http->get($reqUrl), true); return array($data['message'], $data['id']); }
/** * Any implementing HTTP providers should send a request to the provided endpoint with the parameters. * They should return, in string form, the response body and throw an exception on error. * * @param UriInterface $endpoint * @param mixed $requestBody * @param array $extraHeaders * @param string $method * * @return string * * @throws TokenResponseException */ public function retrieveResponse(UriInterface $endpoint, $requestBody, array $extraHeaders = array(), $method = 'POST') { $http = new \DokuHTTPClient(); $http->headers = array_merge($http->headers, $extraHeaders); $ok = $http->sendRequest($endpoint->getAbsoluteUri(), $requestBody, $method); if (!$ok) { throw new TokenResponseException($http->error); } return $http->resp_body; }
/** * Send the data, to the submit url * * @param string $data The popularity data * @return string An empty string if everything worked fine, a string describing the error otherwise */ function sendData($data) { $error = ''; $httpClient = new DokuHTTPClient(); $status = $httpClient->sendRequest($this->submitUrl, array('data' => $data), 'POST'); if (!$status) { $error = $httpClient->error; } return $error; }
public function execute_request() { global $INPUT; // if no contentType was passed, use application/json as the default $contentType = $INPUT->str('contentType'); if (empty($contentType)) { $contentType = 'application/json'; } header('Content-Type: ' . $contentType); $http = new DokuHTTPClient(); // Get the list of source languages that are level 3. $url = $INPUT->str('requestUrl'); echo $http->get($url); }
private function _listhd() { require_once DOKU_INC . 'inc/HTTPClient.php'; $url = 'https://xkcd.com/rss.xml'; $ch = new DokuHTTPClient(); $piece = $ch->get($url); $xml = simplexml_load_string($piece); $comicURL = $xml->channel->item->link; $description = (string) $xml->channel->item->description; $description = html_entity_decode($description, ENT_NOQUOTES); $feed_contents = $description; // Not used anymore because of new xml format //$dom = new DOMDocument(); //$dom->loadXML($description); //$imgSrc = $dom->childNodes->item(0)->attributes->getNamedItem('src' )->value; //$imgTitle = $dom->childNodes->item(0)->attributes->getNamedItem('title' )->value; //$feed_contents = "<a href=\"$comicURL\"><img src=\"$imgSrc\" title=\"$imgTitle\" /></a>\n"; return $feed_contents; }
/** * Check for new messages from upstream * * @author Andreas Gohr <*****@*****.**> */ function checkUpdateMessages() { global $conf; global $INFO; global $updateVersion; if (!$conf['updatecheck']) { return; } if ($conf['useacl'] && !$INFO['ismanager']) { return; } $cf = getCacheName($updateVersion, '.updmsg'); $lm = @filemtime($cf); // check if new messages needs to be fetched if ($lm < time() - 60 * 60 * 24 || $lm < @filemtime(DOKU_INC . DOKU_SCRIPT)) { @touch($cf); dbglog("checkUpdateMessages(): downloading messages to " . $cf); $http = new DokuHTTPClient(); $http->timeout = 12; $resp = $http->get(DOKU_MESSAGEURL . $updateVersion); if (is_string($resp) && ($resp == "" || substr(trim($resp), -1) == '%')) { // basic sanity check that this is either an empty string response (ie "no messages") // or it looks like one of our messages, not WiFi login or other interposed response io_saveFile($cf, $resp); } else { dbglog("checkUpdateMessages(): unexpected HTTP response received"); } } else { dbglog("checkUpdateMessages(): messages up to date"); } $data = io_readFile($cf); // show messages through the usual message mechanism $msgs = explode("\n%\n", $data); foreach ($msgs as $msg) { if ($msg) { msg($msg, 2); } } }
/** * Pings search engines with the sitemap url. Plugins can add or remove * urls to ping using the SITEMAP_PING event. * * @author Michael Hamann */ public function pingSearchEngines() { //ping search engines... $http = new DokuHTTPClient(); $http->timeout = 8; $encoded_sitemap_url = urlencode(wl('', array('do' => 'sitemap'), true, '&')); $ping_urls = array('google' => 'http://www.google.com/webmasters/sitemaps/ping?sitemap=' . $encoded_sitemap_url, 'yahoo' => 'http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=dokuwiki&url=' . $encoded_sitemap_url, 'microsoft' => 'http://www.bing.com/webmaster/ping.aspx?siteMap=' . $encoded_sitemap_url); $data = array('ping_urls' => $ping_urls, 'encoded_sitemap_url' => $encoded_sitemap_url); $event = new Doku_Event('SITEMAP_PING', $data); if ($event->advise_before(true)) { foreach ($data['ping_urls'] as $name => $url) { dbglog("Sitemapper::PingSearchEngines(): pinging {$name}"); $resp = $http->get($url); if ($http->error) { dbglog("Sitemapper:pingSearchengines(): {$http->error}"); } dbglog('Sitemapper:pingSearchengines(): ' . preg_replace('/[\\n\\r]/', ' ', strip_tags($resp))); } } $event->advise_after(); return true; }
/** * Builds a Google Sitemap of all public pages known to the indexer * * The map is placed in the root directory named sitemap.xml.gz - This * file needs to be writable! * * @author Andreas Gohr * @link https://www.google.com/webmasters/sitemaps/docs/en/about.html */ function runSitemapper() { global $conf; print "runSitemapper(): started" . NL; if (!$conf['sitemap']) { return false; } if ($conf['compression'] == 'bz2' || $conf['compression'] == 'gz') { $sitemap = 'sitemap.xml.gz'; } else { $sitemap = 'sitemap.xml'; } print "runSitemapper(): using {$sitemap}" . NL; if (@file_exists(DOKU_INC . $sitemap)) { if (!is_writable(DOKU_INC . $sitemap)) { return false; } } else { if (!is_writable(DOKU_INC)) { return false; } } if (@filesize(DOKU_INC . $sitemap) && @filemtime(DOKU_INC . $sitemap) > time() - $conf['sitemap'] * 60 * 60 * 24) { print 'runSitemapper(): Sitemap up to date' . NL; return false; } $pages = file($conf['indexdir'] . '/page.idx'); print 'runSitemapper(): creating sitemap using ' . count($pages) . ' pages' . NL; // build the sitemap ob_start(); print '<?xml version="1.0" encoding="UTF-8"?>' . NL; print '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . NL; foreach ($pages as $id) { $id = trim($id); $file = wikiFN($id); //skip hidden, non existing and restricted files if (isHiddenPage($id)) { continue; } $date = @filemtime($file); if (!$date) { continue; } if (auth_aclcheck($id, '', '') < AUTH_READ) { continue; } print ' <url>' . NL; print ' <loc>' . wl($id, '', true) . '</loc>' . NL; print ' <lastmod>' . date_iso8601($date) . '</lastmod>' . NL; print ' </url>' . NL; } print '</urlset>' . NL; $data = ob_get_contents(); ob_end_clean(); //save the new sitemap io_saveFile(DOKU_INC . $sitemap, $data); //ping search engines... $http = new DokuHTTPClient(); $http->timeout = 8; //ping google print 'runSitemapper(): pinging google' . NL; $url = 'http://www.google.com/webmasters/sitemaps/ping?sitemap='; $url .= urlencode(DOKU_URL . $sitemap); $resp = $http->get($url); if ($http->error) { print 'runSitemapper(): ' . $http->error . NL; } print 'runSitemapper(): ' . preg_replace('/[\\n\\r]/', ' ', strip_tags($resp)) . NL; //ping yahoo print 'runSitemapper(): pinging yahoo' . NL; $url = 'http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=dokuwiki&url='; $url .= urlencode(DOKU_URL . $sitemap); $resp = $http->get($url); if ($http->error) { print 'runSitemapper(): ' . $http->error . NL; } print 'runSitemapper(): ' . preg_replace('/[\\n\\r]/', ' ', strip_tags($resp)) . NL; //ping microsoft print 'runSitemapper(): pinging microsoft' . NL; $url = 'http://www.bing.com/webmaster/ping.aspx?siteMap='; $url .= urlencode(DOKU_URL . $sitemap); $resp = $http->get($url); if ($http->error) { print 'runSitemapper(): ' . $http->error . NL; } print 'runSitemapper(): ' . preg_replace('/[\\n\\r]/', ' ', strip_tags($resp)) . NL; print 'runSitemapper(): finished' . NL; return true; }
/** * Do all the API work, fetch the data, parse it and return it for the renderer */ function handle($match, $state, $pos, &$handler) { // check type and remove markup if (substr($match, 2, 8) == 'wishlist') { $match = substr($match, 11, -2); $type = 'wishlist'; } elseif (substr($match, 2, 10) == 'amazonlist') { $match = substr($match, 13, -2); $type = 'amazonlist'; } else { $match = substr($match, 9, -2); $type = 'product'; } list($ctry, $asin) = explode(':', $match, 2); // default parameters... $params = array('type' => $type, 'imgw' => $this->getConf('imgw'), 'imgh' => $this->getConf('imgh'), 'maxlen' => $this->getConf('maxlen'), 'price' => $this->getConf('showprice'), 'purchased' => $this->getConf('showpurchased'), 'sort' => $this->getConf('sort')); // ...can be overridden list($asin, $more) = explode(' ', $asin, 2); if (preg_match('/(\\d+)x(\\d+)/i', $more, $match)) { $params['imgw'] = $match[1]; $params['imgh'] = $match[2]; } if (preg_match('/=(\\d+)/', $more, $match)) { $params['maxlen'] = $match[1]; } if (preg_match('/noprice/i', $more, $match)) { $params['price'] = false; } elseif (preg_match('/(show)?price/i', $more, $match)) { $params['price'] = true; } if (preg_match('/nopurchased/i', $more, $match)) { $params['purchased'] = false; } elseif (preg_match('/(show)?purchased/i', $more, $match)) { $params['purchased'] = true; } if (preg_match('/sortprice/i', $more, $match)) { $params['sort'] = 'Price'; } elseif (preg_match('/sortpriority/i', $more, $match)) { $params['sort'] = 'Priority'; } elseif (preg_match('/sortadded/i', $more, $match)) { $params['sort'] = 'DateAdded'; } // no country given? if (empty($asin)) { $asin = $ctry; $ctry = 'us'; } // correct country given? if (!preg_match('/^(us|uk|jp|de|fr|ca)$/', $ctry)) { $ctry = 'us'; } // get partner id $partner = $this->getConf('partner_' . $ctry); // correct domains if ($ctry == 'us') { $ctry = 'com'; } if ($ctry == 'uk') { $ctry = 'co.uk'; } // basic API parameters $opts = array(); $opts['Service'] = 'AWSECommerceService'; $opts['AWSAccessKeyId'] = AMAZON_APIKEY; $opts['AssociateTag'] = $partner; if ($type == 'product') { // parameters for querying a single product $opts['Operation'] = 'ItemLookup'; $opts['ResponseGroup'] = 'Medium,OfferSummary'; if (strlen($asin) < 13) { $opts['IdType'] = 'ASIN'; $opts['ItemId'] = $asin; } else { $opts['SearchIndex'] = 'Books'; $opts['IdType'] = 'ISBN'; $opts['ItemId'] = $asin; } } else { // parameters to query a wishlist $opts['Operation'] = 'ListLookup'; $opts['ResponseGroup'] = 'ListItems,Medium,OfferSummary'; $opts['ListId'] = $asin; $opts['Sort'] = $params['sort']; $opts['IsIncludeUniversal'] = 'True'; $opts['IsOmitPurchasedItems'] = $params['purchased'] ? 'False' : 'True'; if ($type == 'wishlist') { $opts['ListType'] = 'WishList'; } else { $opts['ListType'] = 'Listmania'; } } // support paged results $result = array(); $pages = 1; for ($page = 1; $page <= $pages; $page++) { $opts['ProductPage'] = $page; // fetch it $http = new DokuHTTPClient(); $url = $this->_signedRequestURI($ctry, $opts, $this->getConf('publickey'), $this->getConf('privatekey')); $xml = $http->get($url); if (empty($xml)) { if ($http->error) { return $http->error; } if ($http->status == 403) { return 'Signature check failed, did you set your Access Keys in config?'; } return 'unkown error'; } // parse it require_once dirname(__FILE__) . '/XMLParser.php'; $xmlp = new XMLParser($xml); $data = $xmlp->getTree(); //dbg($data); // check for errors and return the item(s) if ($type == 'product') { // error? if ($data['ITEMLOOKUPRESPONSE'][0]['ITEMS'][0]['REQUEST'][0]['ERRORS']) { return $data['ITEMLOOKUPRESPONSE'][0]['ITEMS'][0]['REQUEST'][0]['ERRORS'][0]['ERROR'][0]['MESSAGE'][0]['VALUE']; } // return item $result = array_merge($result, (array) $data['ITEMLOOKUPRESPONSE'][0]['ITEMS'][0]['ITEM']); } else { // error? if ($data['LISTLOOKUPRESPONSE'][0]['LISTS'][0]['REQUEST'][0]['ERRORS']) { return $data['LISTLOOKUPRESPONSE'][0]['LISTS'][0]['REQUEST'][0]['ERRORS'][0]['ERROR'][0]['MESSAGE'][0]['VALUE']; } // multiple pages? $pages = (int) $data['LISTLOOKUPRESPONSE'][0]['LISTS'][0]['LIST'][0]['TOTALPAGES'][0]['VALUE']; // return items $result = array_merge($result, (array) $data['LISTLOOKUPRESPONSE'][0]['LISTS'][0]['LIST'][0]['LISTITEM']); } } return array($result, $params); }
/** * Returns the content of a graphviz image. * * @param data parameters. * * @return PNG image. */ function get_graphviz_image($data) { global $conf; $image = null; $gathered_data = $this->get_gathered_data($data); $dot_input = $this->get_dot($gathered_data); // See if a manual path was given for graphviz if ($this->getConf('graphviz_path')) { // Local build $cmd = $this->getConf('path'); $cmd .= ' -Tpng'; $cmd .= ' -K' . $data['layout']; $cmd .= ' -o' . escapeshellarg($image); //output $cmd .= ' ' . escapeshellarg($dot_input); //input exec($cmd, $image, $error); if ($error != 0) { if ($conf['debug']) { dbglog(join("\n", $image), 'mindmap command failed: ' . $cmd); } return false; } } else { // Remote via google chart tools $http = new DokuHTTPClient(); $http->timeout = 30; $pass = array(); $pass['cht'] = 'gv:' . $data['format']; $pass['chl'] = $dot_input; $image = $http->post('http://chart.apis.google.com/chart', $pass, '&'); if (!$image) { return false; } } return $image; }
/** * downloads a file from the net and saves it * * if $useAttachment is false, * - $file is the full filename to save the file, incl. path * - if successful will return true, false otherwise * * if $useAttachment is true, * - $file is the directory where the file should be saved * - if successful will return the name used for the saved file, false otherwise * * @author Andreas Gohr <*****@*****.**> * @author Chris Smith <*****@*****.**> */ function io_download($url, $file, $useAttachment = false, $defaultName = '', $maxSize = 2097152) { global $conf; $http = new DokuHTTPClient(); $http->max_bodysize = $maxSize; $http->timeout = 25; //max. 25 sec $http->keep_alive = false; // we do single ops here, no need for keep-alive $data = $http->get($url); if (!$data) { return false; } $name = ''; if ($useAttachment) { if (isset($http->resp_headers['content-disposition'])) { $content_disposition = $http->resp_headers['content-disposition']; $match = array(); if (is_string($content_disposition) && preg_match('/attachment;\\s*filename\\s*=\\s*"([^"]*)"/i', $content_disposition, $match)) { $name = utf8_basename($match[1]); } } if (!$name) { if (!$defaultName) { return false; } $name = $defaultName; } $file = $file . $name; } $fileexists = @file_exists($file); $fp = @fopen($file, "w"); if (!$fp) { return false; } fwrite($fp, $data); fclose($fp); if (!$fileexists and $conf['fperm']) { chmod($file, $conf['fperm']); } if ($useAttachment) { return $name; } return true; }
/** * Get license under which the content is distributed */ function _getWPlicense($wpUrl) { $url = $wpUrl . 'w/api.php?action=query&meta=siteinfo&siprop=rightsinfo&format=xml'; // fetch license data from Wikipedia $http = new DokuHTTPClient(); $http->agent .= ' (DokuWiki WikipediaSnippet Plugin)'; $data = $http->get($url); if (!$data) { return false; } $xml = simplexml_load_string($data, 'SimpleXMLElement'); if (!$xml) { return false; } $url = $xml->query->rightsinfo['url']; $text = $xml->query->rightsinfo['text']; return '<div class="wplicense"><a href="' . $url . '">' . $text . '</a></div>'; }
function Parse($rss_url) { // Open and load RSS file $http = new DokuHTTPClient(); if ($rss_content = $http->get($rss_url)) { // Parse document encoding $result['encoding'] = $this->my_preg_match("'encoding=[\\'\"](.*?)[\\'\"]'si", $rss_content); // if document codepage is specified, use it if ($result['encoding'] != '') { $this->rsscp = $result['encoding']; } else { $this->rsscp = $this->default_cp; } // This is used in my_preg_match() // Parse CHANNEL info preg_match("'<channel.*?>(.*?)</channel>'si", $rss_content, $out_channel); foreach ($this->channeltags as $channeltag) { $temp = $this->my_preg_match("'<{$channeltag}.*?>(.*?)</{$channeltag}>'si", $out_channel[1]); if ($temp != '') { $result[$channeltag] = $temp; } // Set only if not empty } // If date_format is specified and lastBuildDate is valid if ($this->date_format != '' && ($timestamp = strtotime($result['lastBuildDate'])) !== -1) { // convert lastBuildDate to specified date format $result['lastBuildDate'] = strftime($this->date_format, $timestamp); } // Parse TEXTINPUT info preg_match("'<textinput(|[^>]*[^/])>(.*?)</textinput>'si", $rss_content, $out_textinfo); // This a little strange regexp means: // Look for tag <textinput> with or without any attributes, but skip truncated version <textinput /> (it's not beggining tag) if (isset($out_textinfo[2])) { foreach ($this->textinputtags as $textinputtag) { $temp = $this->my_preg_match("'<{$textinputtag}.*?>(.*?)</{$textinputtag}>'si", $out_textinfo[2]); if ($temp != '') { $result['textinput_' . $textinputtag] = $temp; } // Set only if not empty } } // Parse IMAGE info preg_match("'<image.*?>(.*?)</image>'si", $rss_content, $out_imageinfo); if (isset($out_imageinfo[1])) { foreach ($this->imagetags as $imagetag) { $temp = $this->my_preg_match("'<{$imagetag}.*?>(.*?)</{$imagetag}>'si", $out_imageinfo[1]); if ($temp != '') { $result['image_' . $imagetag] = $temp; } // Set only if not empty } } // Parse ITEMS preg_match_all("'<item(| .*?)>(.*?)</item>'si", $rss_content, $items); $rss_items = $items[2]; $i = 0; $result['items'] = array(); // create array even if there are no items foreach ($rss_items as $rss_item) { //check it is this UTF-8 if ($this->check_utf8(utf8_decode($rss_item))) { $rss_item = $rss_item; } else { if ($this->check_utf8($rss_item)) { $rss_item = utf8_decode($rss_item); } } // If number of items is lower then limit: Parse one item if ($i < $this->items_limit || $this->items_limit == 0) { foreach ($this->itemtags as $itemtag) { $temp = $this->my_preg_match("'<{$itemtag}.*?>(.*?)</{$itemtag}>'si", $rss_item); if ($temp != '') { $result['items'][$i][$itemtag] = $temp; } // Set only if not empty } // Strip HTML tags and other bullshit from DESCRIPTION if ($this->stripHTML && $result['items'][$i]['description']) { $result['items'][$i]['description'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['description']))); } // Strip HTML tags and other bullshit from TITLE if ($this->stripHTML && $result['items'][$i]['title']) { $result['items'][$i]['title'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['title']))); } // If date_format is specified and pubDate is valid if ($this->date_format != '' && ($timestamp = strtotime($result['items'][$i]['pubDate'])) !== -1) { // convert pubDate to specified date format $result['items'][$i]['pubDate'] = strftime($this->date_format, $timestamp); } // Item counter $i++; } } $result['items_count'] = $i; return $result; } else { return False; } }
/** * Submits the given data to the given Akismet service. * * @param $function string Akismet service to use. Can be * 'comment-check', 'submit-ham' or * 'submit-spam' * @param $data array Linkback data to submit * @return string The response of Akismet */ function _submitData($function, $data) { $info = $this->getInfo(); $http = new DokuHTTPClient(); // The Aksimet guys ask for a verbose UserAgent: $http->agent = 'DokuWiki/' . getVersion() . ' | ' . $info['name'] . '/' . $info['date']; $http->timeout = 5; $resp = $http->post('http://' . $this->getConf('akismet_apikey') . '.rest.akismet.com/1.1/comment-check', $data); return $resp; }
/** * Download image files * * @author Andreas Gohr <*****@*****.**> */ function media_image_download($url, $file) { global $conf; $http = new DokuHTTPClient(); $http->keep_alive = false; // we do single ops here, no need for keep-alive $http->max_bodysize = $conf['fetchsize']; $http->timeout = 25; //max. 25 sec $http->header_regexp = '!\\r\\nContent-Type: image/(jpe?g|gif|png)!i'; $data = $http->get($url); if (!$data) { return false; } $fileexists = @file_exists($file); $fp = @fopen($file, "w"); if (!$fp) { return false; } fwrite($fp, $data); fclose($fp); if (!$fileexists and $conf['fperm']) { chmod($file, $conf['fperm']); } // check if it is really an image $info = @getimagesize($file); if (!$info) { @unlink($file); return false; } return true; }
/** * Print some info about the current page * * @author Andreas Gohr <*****@*****.**> * @author Giuseppe Di Terlizzi <*****@*****.**> * * @param bool $ret return content instead of printing it * @return bool|string */ function bootstrap3_pageinfo($ret = false) { global $conf; global $lang; global $INFO; global $ID; // return if we are not allowed to view the page if (!auth_quickaclcheck($ID)) { return false; } // prepare date and path $fn = $INFO['filepath']; if (!$conf['fullpath']) { if ($INFO['rev']) { $fn = str_replace(fullpath($conf['olddir']) . '/', '', $fn); } else { $fn = str_replace(fullpath($conf['datadir']) . '/', '', $fn); } } $date_format = bootstrap3_conf('pageInfoDateFormat'); $page_info = bootstrap3_conf('pageInfo'); $fn = utf8_decodeFN($fn); $date = $date_format == 'dformat' ? dformat($INFO['lastmod']) : datetime_h($INFO['lastmod']); // print it if ($INFO['exists']) { $fn_full = $fn; if (!in_array('extension', $page_info)) { $fn = str_replace(array('.txt.gz', '.txt'), '', $fn); } $out = '<ul class="list-inline">'; if (in_array('filename', $page_info)) { $out .= sprintf('<li><i class="fa fa-fw fa-file-text-o text-muted"></i> <span title="%s">%s</span></li>', $fn_full, $fn); } if (in_array('date', $page_info)) { $out .= sprintf('<li><i class="fa fa-fw fa-calendar text-muted"></i> %s <span title="%s">%s</span></li>', $lang['lastmod'], dformat($INFO['lastmod']), $date); } if (in_array('editor', $page_info)) { if (isset($INFO['editor'])) { $user = editorinfo($INFO['editor']); if (bootstrap3_conf('useGravatar')) { global $auth; $user_data = $auth->getUserData($INFO['editor']); $HTTP = new DokuHTTPClient(); $gravatar_img = get_gravatar($user_data['mail'], 16); $gravatar_check = $HTTP->get($gravatar_img . '&d=404'); if ($gravatar_check) { $user_img = sprintf('<img src="%s" alt="" width="16" class="img-rounded" /> ', $gravatar_img); $user = str_replace(array('iw_user', 'interwiki'), '', $user); $user = $user_img . $user; } } $out .= sprintf('<li class="text-muted">%s %s</li>', $lang['by'], $user); } else { $out .= sprintf('<li>(%s)</li>', $lang['external_edit']); } } if ($INFO['locked'] && in_array('locked', $page_info)) { $out .= sprintf('<li><i class="fa fa-fw fa-lock text-muted"></i> %s %s</li>', $lang['lockedby'], editorinfo($INFO['locked'])); } $out .= '</ul>'; if ($ret) { return $out; } else { echo $out; return true; } } return false; }
/** * Get url response and check it * * @author Samuele Tognini <*****@*****.**> */ function _remotequery($url, $tag = true) { require_once DOKU_INC . 'inc/HTTPClient.php'; $http = new DokuHTTPClient(); $http->timeout = 8; $data = $http->get($url); if ($tag) { if ($data === false) { msg($this->getLang('conn_err'), -1); } else { substr($data, 0, 9) === "indexmenu" ? $data = substr($data, 9) : ($data = ""); } } return $data; }
/** * Render the output remotely at plantuml.no-ip.org */ function _remote($data, $in, $out) { if (!file_exists($in)) { dbglog($in, 'No such plantuml input file'); return false; } dbglog("remote render image for {$in}"); $http = new DokuHTTPClient(); $http->timeout = 30; $remote_url = $this->getConf('remote_url'); // strip trailing "/" if present $base_url = preg_replace('/(.+?)\\/$/', '$1', $remote_url); $uml = io_readFile($in); $uml = $this->encodep($uml); $url = "{$base_url}/img/{$uml}"; dbglog("image url: {$url}"); $img = $http->get($url); if (!$img) { dbglog("download image {$url} failed"); } return $img ? io_saveFile($out, $img) : false; }
/** * Run a few sanity checks * * @author Andreas Gohr <*****@*****.**> */ function check() { global $conf; global $INFO; msg('DokuWiki version: ' . getVersion(), 1); if (version_compare(phpversion(), '5.1.2', '<')) { msg('Your PHP version is too old (' . phpversion() . ' vs. 5.1.2+ needed)', -1); } else { msg('PHP version ' . phpversion(), 1); } $mem = (int) php_to_byte(ini_get('memory_limit')); if ($mem) { if ($mem < 16777216) { msg('PHP is limited to less than 16MB RAM (' . $mem . ' bytes). Increase memory_limit in php.ini', -1); } elseif ($mem < 20971520) { msg('PHP is limited to less than 20MB RAM (' . $mem . ' bytes), you might encounter problems with bigger pages. Increase memory_limit in php.ini', -1); } elseif ($mem < 33554432) { msg('PHP is limited to less than 32MB RAM (' . $mem . ' bytes), but that should be enough in most cases. If not, increase memory_limit in php.ini', 0); } else { msg('More than 32MB RAM (' . $mem . ' bytes) available.', 1); } } if (is_writable($conf['changelog'])) { msg('Changelog is writable', 1); } else { if (@file_exists($conf['changelog'])) { msg('Changelog is not writable', -1); } } if (isset($conf['changelog_old']) && @file_exists($conf['changelog_old'])) { msg('Old changelog exists', 0); } if (@file_exists($conf['changelog'] . '_failed')) { msg('Importing old changelog failed', -1); } else { if (@file_exists($conf['changelog'] . '_importing')) { msg('Importing old changelog now.', 0); } else { if (@file_exists($conf['changelog'] . '_import_ok')) { msg('Old changelog imported', 1); if (!plugin_isdisabled('importoldchangelog')) { msg('Importoldchangelog plugin not disabled after import', -1); } } } } if (is_writable($conf['datadir'])) { msg('Datadir is writable', 1); } else { msg('Datadir is not writable', -1); } if (is_writable($conf['olddir'])) { msg('Attic is writable', 1); } else { msg('Attic is not writable', -1); } if (is_writable($conf['mediadir'])) { msg('Mediadir is writable', 1); } else { msg('Mediadir is not writable', -1); } if (is_writable($conf['cachedir'])) { msg('Cachedir is writable', 1); } else { msg('Cachedir is not writable', -1); } if (is_writable($conf['lockdir'])) { msg('Lockdir is writable', 1); } else { msg('Lockdir is not writable', -1); } if ($conf['authtype'] == 'plain') { if (is_writable(DOKU_CONF . 'users.auth.php')) { msg('conf/users.auth.php is writable', 1); } else { msg('conf/users.auth.php is not writable', 0); } } if (function_exists('mb_strpos')) { if (defined('UTF8_NOMBSTRING')) { msg('mb_string extension is available but will not be used', 0); } else { msg('mb_string extension is available and will be used', 1); if (ini_get('mbstring.func_overload') != 0) { msg('mb_string function overloading is enabled, this will cause problems and should be disabled', -1); } } } else { msg('mb_string extension not available - PHP only replacements will be used', 0); } if ($conf['allowdebug']) { msg('Debugging support is enabled. If you don\'t need it you should set $conf[\'allowdebug\'] = 0', -1); } else { msg('Debugging support is disabled', 1); } if ($INFO['userinfo']['name']) { msg('You are currently logged in as ' . $_SERVER['REMOTE_USER'] . ' (' . $INFO['userinfo']['name'] . ')', 0); msg('You are part of the groups ' . join($INFO['userinfo']['grps'], ', '), 0); } else { msg('You are currently not logged in', 0); } msg('Your current permission for this page is ' . $INFO['perm'], 0); if (is_writable($INFO['filepath'])) { msg('The current page is writable by the webserver', 0); } else { msg('The current page is not writable by the webserver', 0); } if ($INFO['writable']) { msg('The current page is writable by you', 0); } else { msg('The current page is not writable by you', 0); } require_once DOKU_INC . 'inc/HTTPClient.php'; $check = wl('', '', true) . 'data/_dummy'; $http = new DokuHTTPClient(); $http->timeout = 6; $res = $http->get($check); if (strpos($res, 'data directory') !== false) { msg('It seems like the data directory is accessible from the web. Make sure this directory is properly protected (See <a href="http://www.dokuwiki.org/security">security</a>)', -1); } elseif ($http->status == 404 || $http->status == 403) { msg('The data directory seems to be properly protected', 1); } else { msg('Failed to check if the data directory is accessible from the web. Make sure this directory is properly protected (See <a href="http://www.dokuwiki.org/security">security</a>)', -1); } }
/** * Render the output remotely at ditaa.org */ function _remote($data, $in, $out) { if (!file_exists($in)) { if ($conf['debug']) { dbglog($in, 'no such ditaa input file'); } return false; } $http = new DokuHTTPClient(); $http->timeout = 30; $pass = array(); $pass['scale'] = $data['scale']; $pass['timeout'] = 25; $pass['grid'] = io_readFile($in); if (!$data['antialias']) { $pass['A'] = 'on'; } if (!$data['shadow']) { $pass['S'] = 'on'; } if ($data['round']) { $pass['r'] = 'on'; } if (!$data['edgesep']) { $pass['E'] = 'on'; } $img = $http->post('http://ditaa.org/ditaa/render', $pass); if (!$img) { return false; } return io_saveFile($out, $img); }
/** * Download the tarball * * @return bool */ private function _step_download() { $this->_say($this->getLang('dl_from'), $this->tgzurl); @set_time_limit(120); @ignore_user_abort(); $http = new DokuHTTPClient(); $http->timeout = 120; $data = $http->get($this->tgzurl); if (!$data) { $this->_warn($http->error); $this->_warn($this->getLang('dl_fail')); return false; } if (!io_saveFile($this->tgzfile, $data)) { $this->_warn($this->getLang('dl_fail')); return false; } $this->_say($this->getLang('dl_done'), filesize_h(strlen($data))); return true; }
<?php /** * DokuWiki Bootstrap3 Template: User Menu * * @link http://dokuwiki.org/template:bootstrap3 * @author Giuseppe Di Terlizzi <*****@*****.**> * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) */ // must be run from within DokuWiki if (!defined('DOKU_INC')) { die; } $gravatar_check = false; if (bootstrap3_conf('useGravatar')) { $HTTP = new DokuHTTPClient(); $gravatar_img_small = get_gravatar($INFO['userinfo']['mail'], 30); $gravatar_img = get_gravatar($INFO['userinfo']['mail'], 64); $gravatar_check = $HTTP->get($gravatar_img . '&d=404'); } if (!empty($_SERVER['REMOTE_USER'])) { ?> <ul class="nav navbar-nav" id="dw__user_menu"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown"> <?php if ($gravatar_check) { ?> <img src="<?php echo $gravatar_img_small;
/** * Render an external media file * * @param string $src full media URL * @param string $title descriptive text * @param string $align left|center|right * @param int $width width of media in pixel * @param int $height height of media in pixel * @param string $cache cache|recache|nocache * @param string $linking linkonly|detail|nolink * @param bool $returnonly whether to return odt or write to doc attribute */ function externalmedia($src, $title = NULL, $align = NULL, $width = NULL, $height = NULL, $cache = NULL, $linking = NULL, $returnonly = false) { list($ext, $mime) = mimetype($src); if (substr($mime, 0, 5) == 'image') { $tmp_dir = $this->config->getParam('tmpdir') . "/odt"; $tmp_name = $tmp_dir . "/" . md5($src) . '.' . $ext; $final_name = 'Pictures/' . md5($tmp_name) . '.' . $ext; if (!$this->docHandler->fileExists($final_name)) { $client = new DokuHTTPClient(); $img = $client->get($src); if ($img === FALSE) { $tmp_name = $src; // fallback to a simple link } else { if (!is_dir($tmp_dir)) { io_mkdir_p($tmp_dir); } $tmp_img = fopen($tmp_name, "w") or die("Can't create temp file {$tmp_img}"); fwrite($tmp_img, $img); fclose($tmp_img); } } if ($returnonly) { $ret = $this->_odtAddImage($tmp_name, $width, $height, $align, $title, true); if (file_exists($tmp_name)) { unlink($tmp_name); } return $ret; } else { $this->_odtAddImage($tmp_name, $width, $height, $align, $title); if (file_exists($tmp_name)) { unlink($tmp_name); } } } else { if ($returnonly) { return $this->externallink($src, $title, true); } else { $this->externallink($src, $title); } } }
function externalmedia($src, $title = NULL, $align = NULL, $width = NULL, $height = NULL, $cache = NULL, $linking = NULL) { global $conf; global $ID; list($ext, $mime) = mimetype($src); if (substr($mime, 0, 5) == 'image') { $tmp_dir = $conf['tmpdir'] . "/odt"; $tmp_name = $tmp_dir . "/" . md5($src) . '.' . $ext; $final_name = 'Pictures/' . md5($tmp_name) . '.' . $ext; if (!isset($this->manifest[$final_name])) { $client = new DokuHTTPClient(); $img = $client->get($src); if ($img === FALSE) { $tmp_name = $src; // fallback to a simple link } else { if (!is_dir($tmp_dir)) { io_mkdir_p($tmp_dir); } $tmp_img = fopen($tmp_name, "w") or die("Can't create temp file {$tmp_img}"); fwrite($tmp_img, $img); fclose($tmp_img); } } $this->_odtAddImage($tmp_name, $width, $height, $align, $title); if (file_exists($tmp_name)) { unlink($tmp_name); } } else { $this->externallink($src, $title); } }