コード例 #1
0
 /**
  * @param URL $u
  * @return blaze\lang\String
  */
 public function toExternalForm(URL $u)
 {
     $str = $u->getScheme() . '://';
     if ($u->getUser() != null) {
         $str .= $u->getUser();
         if ($u->getPassword() != null) {
             $str .= ':' . $u->getPassword();
         }
         $str .= '@';
     }
     $str .= $u->getHost();
     if ($u->getPort() != -1) {
         $str .= ':' . $u->getPort();
     }
     if ($u->getPath() != null) {
         $str .= '/' . $u->getPath();
     }
     if ($u->getQuery() != null) {
         $str .= '?' . $u->getQuery();
     }
     if ($u->getFragment() != null) {
         $str .= '#' . $u->getFragment();
     }
     return new \blaze\lang\String($str);
 }
コード例 #2
0
 /**
  * Create client by inspecting the URL
  * 
  * @param string url The API url
  * @return com.atlassian.jira.api.JiraClientProtocol
  */
 public static function forURL($url)
 {
     $u = new URL($url);
     // Check for REST API client v2
     if (create(new String($u->getPath()))->contains('/rest/api/2')) {
         return XPClass::forName('com.atlassian.jira.api.protocol.JiraClientRest2Protocol')->newInstance($u);
         // No suitable protocol found
     } else {
         throw new IllegalArgumentException('No suitable client found for ' . $url);
     }
 }
コード例 #3
0
 /**
  * Setup the class instance. A dsn string must be given with the relevant information
  * about the server and script:
  *
  * Eg: nagios://nagios.xp_framework.net:5667/service_to_monitor
  *
  * @param   string dsn
  */
 public function setup($dsn)
 {
     $url = new URL($dsn);
     $this->server = $url->getHost();
     $this->port = $url->getPort(5667);
     $this->version = $url->getParam('version', NSCA_VERSION_2);
     $this->service = trim($url->getPath(), '/');
     $this->host = $url->getParam('hostname', System::getProperty('host.name'));
     if (FALSE !== $url->getParam('domain', FALSE)) {
         $this->host .= '.' . ltrim($url->getParam('domain'), '.');
     }
 }
コード例 #4
0
 /**
  * Creates a new request object
  *
  * @param   string method
  * @param   peer.URL url
  * @return  scriptlet.HttpScriptletRequest
  */
 protected function newRequest($method, URL $url)
 {
     $q = $url->getQuery('');
     $req = new HttpScriptletRequest();
     $req->method = $method;
     $req->env['SERVER_PROTOCOL'] = 'HTTP/1.1';
     $req->env['REQUEST_URI'] = $url->getPath('/') . ($q ? '?' . $q : '');
     $req->env['QUERY_STRING'] = $q;
     $req->env['HTTP_HOST'] = $url->getHost();
     if ('https' === $url->getScheme()) {
         $req->env['HTTPS'] = 'on';
     }
     $req->setHeaders(array());
     $req->setParams($url->getParams());
     return $req;
 }
コード例 #5
0
 public function doCreate()
 {
     $req = $this->newRequest('GET', new URL('http://localhost/'));
     $res = new HttpScriptletResponse();
     $s = newinstance('scriptlet.xml.XMLScriptlet', array(), '{
     public function needsSession($request) { return TRUE; }
   }');
     $s->service($req, $res);
     $this->assertEquals(HttpConstants::STATUS_FOUND, $res->statusCode);
     // Check URL from Location: header contains the session ID
     with($redirect = new URL(substr($res->headers[0], strlen('Location: '))));
     $this->assertEquals('http', $redirect->getScheme());
     $this->assertEquals('localhost', $redirect->getHost());
     $this->assertEquals(sprintf('/xml/psessionid=%s/static', session_id()), $redirect->getPath());
     $this->assertEquals(array(), $redirect->getParams(), $redirect->getURL());
 }
コード例 #6
0
 /**
  * Handle methods
  *
  * @return  string class method (one of doGet, doPost, doHead)
  * @param   string method Request-Method
  * @see     rfc://2518#8 Description of methods
  */
 public function handleMethod($request)
 {
     // Check if we recognize this method
     if (!isset($this->methods[$request->method])) {
         throw new HttpScriptletException('Cannot handle method "' . $request->method . '"');
     }
     // Select implementation
     $this->handlingImpl = NULL;
     foreach (array_keys($this->impl) as $pattern) {
         if (0 !== strpos(rtrim($request->uri->getPath(), '/') . '/', $pattern)) {
             continue;
         }
         // Set the root URL (e.g. http://wedav.host.com/dav/)
         $request->setRootURL($rootURL = new URL(sprintf('%s://%s%s', $request->uri->getScheme(), $request->uri->Host(), $pattern)));
         // Set request path (e.g. /directory/file)
         $request->setPath($request->decodePath(substr($request->uri->getPath(), strlen($pattern))));
         $this->handlingImpl = $this->impl[$pattern];
         // Set absolute Uri
         $request->setAbsoluteURI($this->handlingImpl->base . $request->getPath());
         break;
     }
     // Implementation not found
     if (NULL === $this->handlingImpl) {
         throw new HttpScriptletException('Cannot handle requests to ' . $request->uri->getPath());
     }
     // determine Useragent
     $client = $request->getHeader('user-agent');
     switch (substr($client, 0, 3)) {
         case 'Mic':
             $this->useragent = WEBDAV_CLIENT_MS;
             break;
         case 'gno':
             $this->useragent = WEBDAV_CLIENT_NAUT;
             break;
         default:
             $this->useragent = WEBDAV_CLIENT_UNKNOWN;
     }
     // Check for authorization handler
     if (isset($this->auth[$rootURL->getPath()])) {
         $this->handlingAuth = $this->auth[$rootURL->getPath()];
         $auth = BasicAuthorization::fromValue($request->getHeader('Authorization'));
         // Can not get username/password from Authorization header
         if (!$auth) {
             return 'doAuthorizationRequest';
         }
         // Use an own User object if you want to save more than username and password
         if ($this->user[$rootURL->getPath()]) {
             $c = XPClass::forName($this->user[$pattern]);
             with($user = $c->newInstance());
             $user->setUsername($auth->getUser());
             $user->setUserPassword($auth->getPassword());
             $request->setUser($user);
         } else {
             // Create a normal WebdavUser object
             $request->setUser(new WebdavUser($auth->getUser(), $auth->getPassword()));
         }
         // Check user
         if (!$this->handlingAuth->authorize($request->getUser())) {
             return 'doAuthorizationRequest';
         }
         // Check for permissions
         if (!$this->handlingAuth->isAuthorized($this->handlingImpl->base . $request->getPath(), $request->getUser(), $request)) {
             return 'doAuthorizationDeny';
         }
     }
     // Read input if we have a Content-length header,
     // else get data from QUERY_STRING
     if (NULL !== ($len = $request->getHeader('Content-length')) && FALSE !== ($fd = fopen('php://input', 'r'))) {
         $data = fread($fd, $len);
         fclose($fd);
         $request->setData($data);
     } else {
         $request->setData(getenv('QUERY_STRING'));
     }
     // Check for mapping
     if (($mapping = $this->mapping[$rootURL->getPath()]) !== NULL) {
         $this->map = $mapping->init($request, $pattern);
     }
     return $this->methods[$request->method];
 }
コード例 #7
0
ファイル: URLTest.php プロジェクト: smokeelow/php-url-parser
 /**
  * @covers \URLParser\URL::__construct
  * @covers \URLParser\URL::getPath
  */
 public function testGetPath()
 {
     $url = new URL($this->testUrl);
     $this->assertEquals($this->path, $url->getPath());
 }
コード例 #8
0
 /**
  * Convert absolute URL to relative path:
  *   "http://webdav.host.com/fs/dir/file.txt" -> "dir/file.txt"
  *
  * @param   string url
  * @return  string
  */
 public function getRelativePath($url)
 {
     $url = new URL($url);
     return $this->decodePath(substr(rawurldecode($url->getPath()), strlen($this->rootURL->getPath())));
 }
コード例 #9
0
 public function handleSessionInitializationError()
 {
     $req = $this->newRequest('GET', new URL('http://localhost/?psessionid=MALFORMED'));
     $res = new HttpScriptletResponse();
     $s = newinstance('scriptlet.HttpScriptlet', array(), '{
     public function needsSession($request) { return TRUE; }
     public function handleSessionInitialization($request) {
       if (!preg_match("/^a-f0-9$/", $request->getSessionId())) { 
         throw new IllegalArgumentException("Invalid characters in session id");
       }
       parent::handleSessionInitialization($request);
     }
     public function handleSessionInitializationError($request, $response) {
       $request->getURL()->addParam("relogin", 1);
       return $request->session->initialize(NULL);
     } 
   }');
     $s->service($req, $res);
     $this->assertEquals(HttpConstants::STATUS_FOUND, $res->statusCode);
     // Check URL from Location: header contains the session ID
     with($redirect = new URL(substr($res->headers[0], strlen('Location: '))));
     $this->assertEquals('http', $redirect->getScheme());
     $this->assertEquals('localhost', $redirect->getHost());
     $this->assertEquals('/', $redirect->getPath());
     $this->assertEquals(session_id(), $redirect->getParam('psessionid'));
     $this->assertEquals('1', $redirect->getParam('relogin'));
 }
コード例 #10
0
 public function atInUserAndPath()
 {
     $u = new URL('http://user@localhost/@');
     $this->assertEquals('user', $u->getUser());
     $this->assertEquals('/@', $u->getPath());
 }
コード例 #11
0
 /**
  * Navigate to a given URL
  *
  * @param   string target
  * @param   string params
  * @param   string method
  * @throws  unittest.AssertionFailedError  
  */
 public function navigateTo($target, $params = NULL, $method = HttpConstants::GET)
 {
     if (strstr($target, '://')) {
         $url = new URL($target);
         $this->conn = $this->getConnection(sprintf('%s://%s%s/', $url->getScheme(), $url->getHost(), -1 === $url->getPort(-1) ? '' : ':' . $url->getPort()));
         $params ? $url->setParams($params) : '';
         $this->beginAt($url->getPath(), $url->getParams(), $method);
     } else {
         if ('' !== $target && '/' === $target[0]) {
             $this->beginAt($target, $params, $method);
         } else {
             $base = $this->getBase();
             $this->beginAt(substr($base, 0, strrpos($base, '/')) . '/' . $target, $params, $method);
         }
     }
 }