1: <?php
2:
3: 4: 5:
6:
7: require_once 'Auth/Yadis/XRDS.php';
8: require_once 'Auth/Yadis/XRI.php';
9:
10: class Auth_Yadis_ProxyResolver {
11: function Auth_Yadis_ProxyResolver($fetcher, $proxy_url = null)
12: {
13: $this->fetcher = $fetcher;
14: $this->proxy_url = $proxy_url;
15: if (!$this->proxy_url) {
16: $this->proxy_url = Auth_Yadis_getDefaultProxy();
17: }
18: }
19:
20: function queryURL($xri, $service_type = null)
21: {
22:
23: $qxri = substr(Auth_Yadis_toURINormal($xri), 6);
24: $hxri = $this->proxy_url . $qxri;
25: $args = array(
26: '_xrd_r' => 'application/xrds+xml'
27: );
28:
29: if ($service_type) {
30: $args['_xrd_t'] = $service_type;
31: } else {
32:
33: $args['_xrd_r'] .= ';sep=false';
34: }
35:
36: $query = Auth_Yadis_XRIAppendArgs($hxri, $args);
37: return $query;
38: }
39:
40: function query($xri, $service_types, $filters = array())
41: {
42: $services = array();
43: $canonicalID = null;
44: foreach ($service_types as $service_type) {
45: $url = $this->queryURL($xri, $service_type);
46: $response = $this->fetcher->get($url);
47: if ($response->status != 200 and $response->status != 206) {
48: continue;
49: }
50: $xrds = Auth_Yadis_XRDS::parseXRDS($response->body);
51: if (!$xrds) {
52: continue;
53: }
54: $canonicalID = Auth_Yadis_getCanonicalID($xri,
55: $xrds);
56:
57: if ($canonicalID === false) {
58: return null;
59: }
60:
61: $some_services = $xrds->services($filters);
62: $services = array_merge($services, $some_services);
63:
64:
65:
66: }
67: return array($canonicalID, $services);
68: }
69: }
70:
71:
72: