object->isPerson()) { try { // Try to create an acct: URI if we're dealing with a profile $aliases[] = $this->reconstructAcct(); } catch (WebFingerReconstructionException $e) { common_debug("WebFinger reconstruction for Profile failed (id={$this->object->getID()})"); } } return array_merge($aliases, parent::getAliases()); } public function reconstructAcct() { $acct = null; if (Event::handle('StartWebFingerReconstruction', array($this->object, &$acct))) { // TODO: getUri may not always give us the correct host on remote users? $host = parse_url($this->object->getUri(), PHP_URL_HOST); if (empty($this->object->getNickname()) || empty($host)) { throw new WebFingerReconstructionException($this->object); } $acct = mb_strtolower(sprintf('acct:%s@%s', $this->object->getNickname(), $host)); Event::handle('EndWebFingerReconstruction', array($this->object, &$acct)); } return $acct; } public function updateXRD(XML_XRD $xrd) { if (Event::handle('StartWebFingerProfileLinks', array($xrd, $this->object))) { if (common_config('site', 'fancy')) { $apiRoot = common_path('api/', true); } else { $apiRoot = common_path('index.php/api/', true); } // Profile page, can give more metadata from Link header or HTML parsing $xrd->links[] = new XML_XRD_Element_Link(self::PROFILEPAGE, $this->object->getUrl(), 'text/html'); // XFN $xrd->links[] = new XML_XRD_Element_Link('http://gmpg.org/xfn/11', $this->object->getUrl(), 'text/html'); if ($this->object->isPerson()) { // FOAF for user $xrd->links[] = new XML_XRD_Element_Link('describedby', common_local_url('foaf', array('nickname' => $this->object->getNickname())), 'application/rdf+xml'); // nickname discovery for apps etc. $link = new XML_XRD_Element_Link('http://apinamespace.org/atom', common_local_url('ApiAtomService', array('id' => $this->object->getNickname())), 'application/atomsvc+xml'); // XML_XRD must implement changing properties first $link['http://apinamespace.org/atom/username'] = $this->object->getNickname(); $xrd->links[] = clone $link; $link = new XML_XRD_Element_Link('http://apinamespace.org/twitter', $apiRoot); // XML_XRD must implement changing properties first $link['http://apinamespace.org/twitter/username'] = $this->object->getNickname(); $xrd->links[] = clone $link; } elseif ($this->object->isGroup()) { // FOAF for group $xrd->links[] = new XML_XRD_Element_Link('describedby', common_local_url('foafgroup', array('nickname' => $this->object->getNickname())), 'application/rdf+xml'); } Event::handle('EndWebFingerProfileLinks', array($xrd, $this->object)); } } }