Exemplo n.º 1
0
 /**
  * Method to build and return a full request URL for the request.  This method will
  * add appropriate pagination details if necessary and also prepend the API url
  * to have a complete URL for the request.
  *
  * @param   string   $path   URL to inflect
  * @param   integer  $page   Page to request
  * @param   integer  $limit  Number of results to return per page
  *
  * @return  string   The request URL.
  *
  * @since   11.3
  */
 protected function fetchUrl($path, $page = 0, $limit = 0)
 {
     // Get a new JUri object fousing the api url and given path.
     $uri = new JUri($this->options->get('api.url') . $path);
     if ($this->options->get('gh.token', false)) {
         // Use oAuth authentication - @todo set in request header ?
         $uri->setVar('access_token', $this->options->get('gh.token'));
     } else {
         // Use basic authentication
         if ($this->options->get('api.username', false)) {
             $uri->setUser($this->options->get('api.username'));
         }
         if ($this->options->get('api.password', false)) {
             $uri->setPass($this->options->get('api.password'));
         }
     }
     // If we have a defined page number add it to the JUri object.
     if ($page > 0) {
         $uri->setVar('page', (int) $page);
     }
     // If we have a defined items per page add it to the JUri object.
     if ($limit > 0) {
         $uri->setVar('per_page', (int) $limit);
     }
     return (string) $uri;
 }
Exemplo n.º 2
0
 /**
  * Build and return a full request URL.
  *
  * This method will add appropriate pagination details and basic authentication credentials if necessary
  * and also prepend the API url to have a complete URL for the request.
  *
  * @param   string   $path   URL to inflect
  * @param   integer  $page   Page to request
  * @param   integer  $limit  Number of results to return per page
  *
  * @return  string   The request URL.
  *
  * @since   3.0.0
  */
 protected function fetchUrl($path, $page = 0, $limit = 0)
 {
     // Get a new JUri object fousing the api url and given path.
     $uri = new \JUri($this->options->get('api.url') . $path);
     // Only apply basic authentication if an access token is not set
     if ($this->options->get('gh.token', false) === false) {
         // Use basic authentication
         if ($this->options->get('api.username', false)) {
             $username = $this->options->get('api.username');
             $username = str_replace('@', '%40', $username);
             $uri->setUser($username);
         }
         if ($this->options->get('api.password', false)) {
             $password = $this->options->get('api.password');
             $password = str_replace('@', '%40', $password);
             $uri->setPass($password);
         }
     }
     // If we have a defined page number add it to the JUri object.
     if ($page > 0) {
         $uri->setVar('page', (int) $page);
     }
     // If we have a defined items per page add it to the JUri object.
     if ($limit > 0) {
         $uri->setVar('per_page', (int) $limit);
     }
     return (string) $uri;
 }
Exemplo n.º 3
0
 /**
  * Method to build and return a full request URL for the request.
  *
  * @param   string  $path  URL to inflect
  *
  * @return  string   The request URL.
  *
  * @since   12.3
  */
 protected function fetchUrl($path)
 {
     // Append the path with output format
     $path .= '&format=xml';
     $uri = new JUri($this->options->get('api.url') . '/api.php' . $path);
     if ($this->options->get('api.username', false)) {
         $uri->setUser($this->options->get('api.username'));
     }
     if ($this->options->get('api.password', false)) {
         $uri->setPass($this->options->get('api.password'));
     }
     return (string) $uri;
 }
Exemplo n.º 4
0
 /**
  * Method to build and return a full request URL for the request.  This method will
  * add appropriate pagination details if necessary and also prepend the API url
  * to have a complete URL for the request.
  *
  * @param string  $path  URL to inflect
  * @param integer $page  Page to request
  * @param integer $limit Number of results to return per page
  *
  * @return string The request URL.
  *
  * @since   11.3
  */
 protected function fetchUrl($path, $page = 0, $limit = 0)
 {
     // Get a new JUri object fousing the api url and given path.
     $uri = new JUri($this->options->get('api.url') . $path);
     if ($this->options->get('api.username', false)) {
         $uri->setUser($this->options->get('api.username'));
     }
     if ($this->options->get('api.password', false)) {
         $uri->setPass($this->options->get('api.password'));
     }
     // If we have a defined page number add it to the JUri object.
     if ($page > 0) {
         $uri->setVar('page', (int) $page);
     }
     // If we have a defined items per page add it to the JUri object.
     if ($limit > 0) {
         $uri->setVar('per_page', (int) $limit);
     }
     return (string) $uri;
 }
 /**
  * Test the setUser method.
  *
  * @return  void
  *
  * @since   11.1
  * @covers  JUri::setUser
  */
 public function testSetUser()
 {
     $this->object->setUser('root');
     $this->assertThat($this->object->getUser(), $this->equalTo('root'));
 }
Exemplo n.º 6
0
 /**
  * redirectToDownload
  *
  * @return  void
  *
  * @throws \Exception
  */
 public static function redirectToDownload()
 {
     $username = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : null;
     $password = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : null;
     $input = \JFactory::getApplication()->input;
     $uri = new \JUri(\JUri::root());
     $uri->setUser($username);
     $uri->setPass($password);
     $uri->setVar('access_token', $input->get('access_token'));
     $uri->setVar('cmd', 'backup.download');
     \JFactory::getApplication()->redirect($uri);
     exit;
 }
 /**
  * Send a request to the server and return a JHttpResponse object with the response.
  *
  * @param   string   $method     The HTTP method for sending the request.
  * @param   JUri     $uri        The URI to the resource to request.
  * @param   mixed    $data       Either an associative array or a string to be sent with the request.
  * @param   array    $headers    An array of request headers to send with the request.
  * @param   integer  $timeout    Read timeout in seconds.
  * @param   string   $userAgent  The optional user agent string to send with the request.
  *
  * @return  JHttpResponse
  *
  * @since   11.3
  * @throws  RuntimeException
  */
 public function request($method, JUri $uri, $data = null, array $headers = null, $timeout = null, $userAgent = null)
 {
     // Create the stream context options array with the required method offset.
     $options = array('method' => strtoupper($method));
     // If data exists let's encode it and make sure our Content-Type header is set.
     if (isset($data)) {
         // If the data is a scalar value simply add it to the stream context options.
         if (is_scalar($data)) {
             $options['content'] = $data;
         } else {
             $options['content'] = http_build_query($data);
         }
         if (!isset($headers['Content-Type'])) {
             $headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
         }
         // Add the relevant headers.
         $headers['Content-Length'] = strlen($options['content']);
     }
     // If an explicit timeout is given user it.
     if (isset($timeout)) {
         $options['timeout'] = (int) $timeout;
     }
     // If an explicit user agent is given use it.
     if (isset($userAgent)) {
         $options['user_agent'] = $userAgent;
     }
     // Ignore HTTP errors so that we can capture them.
     $options['ignore_errors'] = 1;
     // Follow redirects.
     $options['follow_location'] = (int) $this->options->get('follow_location', 1);
     // Set any custom transport options
     foreach ($this->options->get('transport.stream', array()) as $key => $value) {
         $options[$key] = $value;
     }
     // Add the proxy configuration, if any.
     $config = JFactory::getConfig();
     if ($config->get('proxy_enable')) {
         $options['proxy'] = $config->get('proxy_host') . ':' . $config->get('proxy_port');
         $options['request_fulluri'] = true;
         // Put any required authorization into the headers array to be handled later
         // TODO: do we need to support any auth type other than Basic?
         if ($user = $config->get('proxy_user')) {
             $auth = base64_encode($config->get('proxy_user') . ':' . $config->get('proxy_pass'));
             $headers['Proxy-Authorization'] = 'Basic ' . $auth;
         }
     }
     // Build the headers string for the request.
     $headerEntries = array();
     if (isset($headers)) {
         foreach ($headers as $key => $value) {
             $headerEntries[] = $key . ': ' . $value;
         }
         // Add the headers string into the stream context options array.
         $options['header'] = implode("\r\n", $headerEntries);
     }
     // Get the current context options.
     $contextOptions = stream_context_get_options(stream_context_get_default());
     // Add our options to the current ones, if any.
     $contextOptions['http'] = isset($contextOptions['http']) ? array_merge($contextOptions['http'], $options) : $options;
     // Create the stream context for the request.
     $context = stream_context_create(array('http' => $options, 'ssl' => array('verify_peer' => true, 'cafile' => $this->options->get('stream.certpath', __DIR__ . '/cacert.pem'), 'verify_depth' => 5)));
     // Authentification, if needed
     if ($this->options->get('userauth') && $this->options->get('passwordauth')) {
         $uri->setUser($this->options->get('userauth'));
         $uri->setPass($this->options->get('passwordauth'));
     }
     // Capture PHP errors
     $php_errormsg = '';
     $track_errors = ini_get('track_errors');
     ini_set('track_errors', true);
     // Open the stream for reading.
     $stream = @fopen((string) $uri, 'r', false, $context);
     if (!$stream) {
         if (!$php_errormsg) {
             // Error but nothing from php? Create our own
             $php_errormsg = sprintf('Could not connect to resource: %s', $uri, $err, $errno);
         }
         // Restore error tracking to give control to the exception handler
         ini_set('track_errors', $track_errors);
         throw new RuntimeException($php_errormsg);
     }
     // Restore error tracking to what it was before.
     ini_set('track_errors', $track_errors);
     // Get the metadata for the stream, including response headers.
     $metadata = stream_get_meta_data($stream);
     // Get the contents from the stream.
     $content = stream_get_contents($stream);
     // Close the stream.
     fclose($stream);
     if (isset($metadata['wrapper_data']['headers'])) {
         $headers = $metadata['wrapper_data']['headers'];
     } elseif (isset($metadata['wrapper_data'])) {
         $headers = $metadata['wrapper_data'];
     } else {
         $headers = array();
     }
     return $this->getResponse($headers, $content);
 }
Exemplo n.º 8
0
 /**
  * Get session start time
  */
 protected function _testSessionInit()
 {
     $uri = new JUri(JUri::root());
     if (isset($_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_PW']) {
         $uri->setPass($_SERVER['PHP_AUTH_PW']);
     }
     if (isset($_SERVER['PHP_AUTH_USER']) && $_SERVER['PHP_AUTH_USER']) {
         $uri->setUser($_SERVER['PHP_AUTH_USER']);
     }
     $requestUrl = $uri->toString() . 'media/zoo/applications/jbuniversal/tools/test-session.php';
     $values = array();
     for ($j = 0; $j < 10; $j++) {
         $values[] = (double) $this->app->jbhttp->request($requestUrl . '?nocache=' . mt_rand());
     }
     return array_sum($values) / doubleval(count($values));
 }