function runTest() { $is_sane = Auth_OpenID_TrustRoot::isSane($this->case); $parsed = (bool) Auth_OpenID_TrustRoot::_parse($this->case); switch ($this->expected) { case 'sane': $this->assertTrue($is_sane); $this->assertTrue($parsed); break; case 'insane': $this->assertTrue($parsed); $this->assertFalse($is_sane); break; default: $this->assertFalse($parsed); $this->assertFalse($is_sane); } }
function trustRootValid() { if (!$this->trust_root) { return true; } $tr = Auth_OpenID_TrustRoot::_parse($this->trust_root); if ($tr === false) { return new Auth_OpenID_MalformedTrustRoot($this->message, $this->trust_root); } if ($this->return_to !== null) { return Auth_OpenID_TrustRoot::match($this->trust_root, $this->return_to); } else { return true; } }
/** * Does this URL match the given trust root? * * Return whether the URL falls under the given trust root. This * does not check whether the trust root is sane. If the URL or * trust root do not parse, this function will return false. * * @param string $trust_root The trust root to match against * * @param string $url The URL to check * * @return bool $matches Whether the URL matches against the * trust root */ function match($trust_root, $url) { $trust_root_parsed = Auth_OpenID_TrustRoot::_parse($trust_root); $url_parsed = Auth_OpenID_TrustRoot::_parse($url); if (!$trust_root_parsed || !$url_parsed) { return false; } // Check hosts matching if ($url_parsed['wildcard']) { return false; } if ($trust_root_parsed['wildcard']) { $host_tail = $trust_root_parsed['host']; $host = $url_parsed['host']; if ($host_tail && substr($host, -strlen($host_tail)) != $host_tail && substr($host_tail, 1) != $host) { return false; } } else { if ($trust_root_parsed['host'] != $url_parsed['host']) { return false; } } // Check path and query matching $base_path = $trust_root_parsed['path']; $path = $url_parsed['path']; if (!isset($trust_root_parsed['query'])) { if ($base_path != $path) { if (substr($path, 0, strlen($base_path)) != $base_path) { return false; } if (substr($base_path, strlen($base_path) - 1, 1) != '/' && substr($path, strlen($base_path), 1) != '/') { return false; } } } else { $base_query = $trust_root_parsed['query']; $query = @$url_parsed['query']; $qplus = substr($query, 0, strlen($base_query) + 1); $bqplus = $base_query . '&'; if ($base_path != $path || $base_query != $query && $qplus != $bqplus) { return false; } } // The port and scheme need to match exactly return $trust_root_parsed['scheme'] == $url_parsed['scheme'] && $url_parsed['port'] === $trust_root_parsed['port']; }