3 * StatusNet - the distributed open-source microblogging tool
4 * Copyright (C) 2010, StatusNet, Inc.
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Affero General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Affero General Public License for more details.
16 * You should have received a copy of the GNU Affero General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 * @package OStatusPlugin
22 * @maintainer James Walker <james@status.net>
25 if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
27 class WebfingerAction extends Action
32 function prepare($args)
34 parent::prepare($args);
36 $this->uri = $this->trimmed('uri');
43 $acct = Webfinger::normalize($this->uri);
47 list($nick, $domain) = explode('@', urldecode($acct));
48 $nick = common_canonical_nickname($nick);
50 $this->user = User::staticGet('nickname', $nick);
52 $this->clientError(_('No such user.'), 404);
56 $xrd->subject = $this->uri;
57 $xrd->alias[] = common_profile_url($nick);
58 $xrd->links[] = array('rel' => Webfinger::PROFILEPAGE,
59 'type' => 'text/html',
60 'href' => common_profile_url($nick));
62 $xrd->links[] = array('rel' => Webfinger::UPDATESFROM,
63 'href' => common_local_url('ApiTimelineUser',
64 array('id' => $this->user->id,
66 'type' => 'application/atom+xml');
68 $salmon_url = common_local_url('salmon',
69 array('id' => $this->user->id));
71 $xrd->links[] = array('rel' => 'salmon',
72 'href' => $salmon_url);
74 // TODO - finalize where the redirect should go on the publisher
75 $url = common_local_url('ostatussub') . '?profile={uri}';
76 $xrd->links[] = array('rel' => 'http://ostatus.org/schema/1.0/subscribe',
79 header('Content-type: text/xml');