]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - plugins/OStatus/actions/webfinger.php
change erroneous common_sql_time() to common_sql_date()
[quix0rs-gnu-social.git] / plugins / OStatus / actions / webfinger.php
1 <?php
2 /*
3  * StatusNet - the distributed open-source microblogging tool
4  * Copyright (C) 2010, StatusNet, Inc.
5  *
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.
10  *
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.
15  *
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/>.
18  */
19
20 /**
21  * @package OStatusPlugin
22  * @maintainer James Walker <james@status.net>
23  */
24
25 if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
26
27 class WebfingerAction extends Action
28 {
29
30     public $uri;
31
32     function prepare($args)
33     {
34         parent::prepare($args);
35
36         $this->uri = $this->trimmed('uri');
37
38         return true;
39     }
40
41     function handle()
42     {
43         $acct = Webfinger::normalize($this->uri);
44
45         $xrd = new XRD();
46
47         list($nick, $domain) = explode('@', urldecode($acct));
48         $nick = common_canonical_nickname($nick);
49
50         $this->user = User::staticGet('nickname', $nick);
51         if (!$this->user) {
52             $this->clientError(_('No such user.'), 404);
53             return false;
54         }
55
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));
61
62         $xrd->links[] = array('rel' => Webfinger::UPDATESFROM,
63                               'href' => common_local_url('ApiTimelineUser',
64                                                          array('id' => $this->user->id,
65                                                                'format' => 'atom')),
66                               'type' => 'application/atom+xml');
67
68         $salmon_url = common_local_url('salmon',
69                                        array('id' => $this->user->id));
70
71         $xrd->links[] = array('rel' => 'salmon',
72                               'href' => $salmon_url);
73
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',
77                               'template' => $url );
78
79         header('Content-type: text/xml');
80         print $xrd->toXML();
81     }
82
83 }