summaryrefslogtreecommitdiff
path: root/extlib/libomb/omb_yadis_xrds.php
diff options
context:
space:
mode:
Diffstat (limited to 'extlib/libomb/omb_yadis_xrds.php')
-rwxr-xr-xextlib/libomb/omb_yadis_xrds.php349
1 files changed, 181 insertions, 168 deletions
diff --git a/extlib/libomb/omb_yadis_xrds.php b/extlib/libomb/omb_yadis_xrds.php
index 89921203b..b84752c4c 100755
--- a/extlib/libomb/omb_yadis_xrds.php
+++ b/extlib/libomb/omb_yadis_xrds.php
@@ -1,14 +1,6 @@
<?php
-
-require_once 'Auth/Yadis/Yadis.php';
-require_once 'unsupportedserviceexception.php';
-require_once 'invalidyadisexception.php';
-
/**
- * OMB XRDS representation
- *
- * This class represents a Yadis XRDS file for OMB. It adds some useful methods to
- * Auth_Yadis_XRDS.
+ * This file is part of libomb
*
* PHP version 5
*
@@ -25,172 +17,193 @@ require_once 'invalidyadisexception.php';
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
- * @package OMB
- * @author Adrian Lang <mail@adrianlang.de>
- * @copyright 2009 Adrian Lang
- * @license http://www.gnu.org/licenses/agpl.html GNU AGPL 3.0
- **/
-
-class OMB_Yadis_XRDS extends Auth_Yadis_XRDS {
-
- protected $fetcher;
-
- /**
- * Create an instance from URL
- *
- * Constructs an OMB_Yadis_XRDS object from a given URL. A full Yadis
- * discovery is performed on the URL and the XRDS is parsed.
- * Throws an OMB_InvalidYadisException when no Yadis is discovered or the
- * detected XRDS file is broken.
- *
- * @param string $url The URL on which Yadis discovery
- * should be performed on
- * @param Auth_Yadis_HTTPFetcher $fetcher A fetcher used to get HTTP
- * resources
- *
- * @access public
- *
- * @return OMB_Yadis_XRDS The initialized object representing the given
- * resource
- **/
- public static function fromYadisURL($url, $fetcher) {
- /* Perform a Yadis discovery. */
- $yadis = Auth_Yadis_Yadis::discover($url, $fetcher);
- if ($yadis->failed) {
- throw new OMB_InvalidYadisException($url);
- }
-
- /* Parse the XRDS file. */
- $xrds = OMB_Yadis_XRDS::parseXRDS($yadis->response_text);
- if ($xrds === null) {
- throw new OMB_InvalidYadisException($url);
- }
- $xrds->fetcher = $fetcher;
- return $xrds;
- }
-
- /**
- * Get a specific service
- *
- * Returns the Auth_Yadis_Service object corresponding to the given service
- * URI.
- * Throws an OMB_UnsupportedServiceException if the service is not available.
- *
- * @param string $service URI specifier of the requested service
- *
- * @access public
- *
- * @return Auth_Yadis_Service The object representing the requested service
- **/
- public function getService($service) {
- $match = $this->services(array( create_function('$s',
- "return in_array('$service', \$s->getTypes());")));
- if ($match === array()) {
- throw new OMB_UnsupportedServiceException($service);
- }
- return $match[0];
- }
-
- /**
- * Get a specific XRD
- *
- * Returns the OMB_Yadis_XRDS object corresponding to the given URI.
- * Throws an OMB_UnsupportedServiceException if the XRD is not available.
- * Note that getXRD tries to resolve external XRD parts as well.
- *
- * @param string $uri URI specifier of the requested XRD
- *
- * @access public
- *
- * @return OMB_Yadis_XRDS The object representing the requested XRD
- **/
- public function getXRD($uri) {
- $nexthash = strpos($uri, '#');
- if ($nexthash !== 0) {
- if ($nexthash !== false) {
- $cururi = substr($uri, 0, $nexthash);
- $nexturi = substr($uri, $nexthash);
- }
- return
- OMB_Yadis_XRDS::fromYadisURL($cururi, $this->fetcher)->getXRD($nexturi);
- }
-
- $id = substr($uri, 1);
- foreach ($this->allXrdNodes as $node) {
- $attrs = $this->parser->attributes($node);
- if (array_key_exists('xml:id', $attrs) && $attrs['xml:id'] == $id) {
- /* Trick the constructor into thinking this is the only node. */
- $bogus_nodes = array($node);
- return new OMB_Yadis_XRDS($this->parser, $bogus_nodes);
- }
- }
- throw new OMB_UnsupportedServiceException($uri);
- }
-
- /**
- * Parse an XML string containing a XRDS document
- *
- * Parse an XML string (XRDS document) and return either a
- * Auth_Yadis_XRDS object or null, depending on whether the
- * XRDS XML is valid.
- * Copy and paste from parent to select correct constructor.
- *
- * @param string $xml_string An XRDS XML string.
- *
- * @access public
- *
- * @return mixed An instance of OMB_Yadis_XRDS or null,
- * depending on the validity of $xml_string
- **/
-
- public function &parseXRDS($xml_string, $extra_ns_map = null) {
- $_null = null;
-
- if (!$xml_string) {
- return $_null;
- }
+ * @package OMB
+ * @author Adrian Lang <mail@adrianlang.de>
+ * @license http://www.gnu.org/licenses/agpl.html GNU AGPL 3.0
+ * @version 0.1a-20090828
+ * @link http://adrianlang.de/libomb
+ */
- $parser = Auth_Yadis_getXMLParser();
-
- $ns_map = Auth_Yadis_getNSMap();
-
- if ($extra_ns_map && is_array($extra_ns_map)) {
- $ns_map = array_merge($ns_map, $extra_ns_map);
- }
-
- if (!($parser && $parser->init($xml_string, $ns_map))) {
- return $_null;
- }
+require_once 'Auth/Yadis/Yadis.php';
+require_once 'unsupportedserviceexception.php';
+require_once 'invalidyadisexception.php';
- // Try to get root element.
- $root = $parser->evalXPath('/xrds:XRDS[1]');
- if (!$root) {
- return $_null;
+/**
+ * OMB XRDS representation
+ *
+ * This class represents a Yadis XRDS file for OMB. It adds some useful methods to
+ * Auth_Yadis_XRDS.
+ */
+class OMB_Yadis_XRDS extends Auth_Yadis_XRDS
+{
+
+ protected $fetcher;
+
+ /**
+ * Create an instance from URL
+ *
+ * Constructs an OMB_Yadis_XRDS object from a given URL. A full Yadis
+ * discovery is performed on the URL and the XRDS is parsed.
+ * Throws an OMB_InvalidYadisException when no Yadis is discovered or the
+ * detected XRDS file is broken.
+ *
+ * @param string $url The URL on which Yadis discovery
+ * should be performed on
+ * @param Auth_Yadis_HTTPFetcher $fetcher A fetcher used to get HTTP
+ * resources
+ *
+ * @access public
+ *
+ * @return OMB_Yadis_XRDS The initialized object representing the given
+ * resource
+ */
+ public static function fromYadisURL($url, $fetcher)
+ {
+ /* Perform a Yadis discovery. */
+ $yadis = Auth_Yadis_Yadis::discover($url, $fetcher);
+ if ($yadis->failed) {
+ throw new OMB_InvalidYadisException($url);
+ }
+
+ /* Parse the XRDS file. */
+ $xrds = OMB_Yadis_XRDS::parseXRDS($yadis->response_text);
+ if ($xrds === null) {
+ throw new OMB_InvalidYadisException($url);
+ }
+ $xrds->fetcher = $fetcher;
+ return $xrds;
}
- if (is_array($root)) {
- $root = $root[0];
+ /**
+ * Get a specific service
+ *
+ * Returns the Auth_Yadis_Service object corresponding to the given service
+ * URI.
+ * Throws an OMB_UnsupportedServiceException if the service is not
+ * available.
+ *
+ * @param string $service URI specifier of the requested service
+ *
+ * @access public
+ *
+ * @return Auth_Yadis_Service The object representing the requested service
+ */
+ public function getService($service)
+ {
+ $match = $this->services(array(create_function('$s',
+ "return in_array('$service', \$s->getTypes());")));
+ if ($match === array()) {
+ throw new OMB_UnsupportedServiceException($service);
+ }
+ return $match[0];
}
- $attrs = $parser->attributes($root);
-
- if (array_key_exists('xmlns:xrd', $attrs) &&
- $attrs['xmlns:xrd'] != Auth_Yadis_XMLNS_XRDS) {
- return $_null;
- } else if (array_key_exists('xmlns', $attrs) &&
- preg_match('/xri/', $attrs['xmlns']) &&
- $attrs['xmlns'] != Auth_Yadis_XMLNS_XRD_2_0) {
- return $_null;
+ /**
+ * Get a specific XRD
+ *
+ * Returns the OMB_Yadis_XRDS object corresponding to the given URI.
+ * Throws an OMB_UnsupportedServiceException if the XRD is not available.
+ * Note that getXRD tries to resolve external XRD parts as well.
+ *
+ * @param string $uri URI specifier of the requested XRD
+ *
+ * @access public
+ *
+ * @return OMB_Yadis_XRDS The object representing the requested XRD
+ */
+ public function getXRD($uri)
+ {
+ $nexthash = strpos($uri, '#');
+ if ($nexthash === false) {
+ throw new OMB_InvalidYadisException("‘$uri’ does not specify a " .
+ 'valid XML node.');
+ }
+
+ if ($nexthash > 0) {
+ $cururi = substr($uri, 0, $nexthash);
+ $nexturi = substr($uri, $nexthash);
+ return OMB_Yadis_XRDS::fromYadisURL($cururi, $this->fetcher)
+ ->getXRD($nexturi);
+ }
+
+ $id = substr($uri, 1);
+ foreach ($this->allXrdNodes as $node) {
+ $attrs = $this->parser->attributes($node);
+ if (array_key_exists('xml:id', $attrs) && $attrs['xml:id'] == $id) {
+ /* Trick the constructor into thinking this is the only node. */
+ $bogus_nodes = array($node);
+ return new OMB_Yadis_XRDS($this->parser, $bogus_nodes);
+ }
+ }
+ throw new OMB_UnsupportedServiceException($uri);
}
- // Get the last XRD node.
- $xrd_nodes = $parser->evalXPath('/xrds:XRDS[1]/xrd:XRD');
-
- if (!$xrd_nodes) {
- return $_null;
+ /**
+ * Parse an XML string containing a XRDS document
+ *
+ * Parses an XML string (XRDS document) and returns either an
+ * Auth_Yadis_XRDS object or null, depending on whether the XRDS XML is
+ * valid.
+ * This method is just copy and paste from the parent class to select the
+ * correct constructor.
+ *
+ * @param string $xml_string An XRDS XML string
+ * @param array $extra_ns_map Additional namespace declarations
+ *
+ * @access public
+ *
+ * @return mixed An instance of OMB_Yadis_XRDS or null,
+ * depending on the validity of $xml_string
+ */
+ public function parseXRDS($xml_string, $extra_ns_map = null)
+ {
+ $_null = null;
+
+ if (!$xml_string) {
+ return $_null;
+ }
+
+ $parser = Auth_Yadis_getXMLParser();
+
+ $ns_map = Auth_Yadis_getNSMap();
+
+ if ($extra_ns_map && is_array($extra_ns_map)) {
+ $ns_map = array_merge($ns_map, $extra_ns_map);
+ }
+
+ if (!($parser && $parser->init($xml_string, $ns_map))) {
+ return $_null;
+ }
+
+ // Try to get root element.
+ $root = $parser->evalXPath('/xrds:XRDS[1]');
+ if (!$root) {
+ return $_null;
+ }
+
+ if (is_array($root)) {
+ $root = $root[0];
+ }
+
+ $attrs = $parser->attributes($root);
+
+ if (array_key_exists('xmlns:xrd', $attrs) &&
+ $attrs['xmlns:xrd'] != Auth_Yadis_XMLNS_XRDS) {
+ return $_null;
+ } else if (array_key_exists('xmlns', $attrs) &&
+ preg_match('/xri/', $attrs['xmlns']) &&
+ $attrs['xmlns'] != Auth_Yadis_XMLNS_XRD_2_0) {
+ return $_null;
+ }
+
+ // Get the last XRD node.
+ $xrd_nodes = $parser->evalXPath('/xrds:XRDS[1]/xrd:XRD');
+
+ if (!$xrd_nodes) {
+ return $_null;
+ }
+
+ $xrds = new OMB_Yadis_XRDS($parser, $xrd_nodes);
+ return $xrds;
}
-
- $xrds = new OMB_Yadis_XRDS($parser, $xrd_nodes);
- return $xrds;
- }
}