summaryrefslogtreecommitdiff
path: root/actions/xrds.php
blob: 8ba89fec0ff7c56a262ebaa29374ba9a8c0b8359 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php

/**
 * XRDS for OpenMicroBlogging
 *
 * PHP version 5
 *
 * @category Action
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @author   Robin Millette <millette@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 *
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2008, 2009, StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * 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/>.
 */

if (!defined('STATUSNET') && !defined('LACONICA')) {
    exit(1);
}

require_once INSTALLDIR.'/lib/omb.php';
require_once INSTALLDIR.'/extlib/libomb/service_provider.php';
require_once INSTALLDIR.'/extlib/libomb/xrds_mapper.php';

/**
 * XRDS for OpenMicroBlogging
 *
 * @category Action
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @author   Robin Millette <millette@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 */
class XrdsAction extends Action
{
    /**
     * Is read only?
     *
     * @return boolean true
     */
    function isReadOnly()
    {
        return true;
    }

    /**
     * Class handler.
     *
     * @param array $args query arguments
     *
     * @return void
     */
    function handle($args)
    {
        parent::handle($args);
        $nickname = $this->trimmed('nickname');
        $user     = User::staticGet('nickname', $nickname);
        if (!$user) {
            $this->clientError(_('No such user.'));
            return;
        }
        $this->showXrds($user);
    }

    /**
     * Show XRDS for a user.
     *
     * @param class $user XRDS for this user.
     *
     * @return void
     */
    function showXrds($user)
    {
        $srv = new OMB_Service_Provider(profile_to_omb_profile($user->uri,
                                        $user->getProfile()));
        /* Use libomb’s default XRDS Writer. */
        $xrds_writer = null;
        $srv->writeXRDS(new Laconica_XRDS_Mapper(), $xrds_writer);
    }
}

class Laconica_XRDS_Mapper implements OMB_XRDS_Mapper
{
    protected $urls;

    public function __construct()
    {
        $this->urls = array(
            OAUTH_ENDPOINT_REQUEST => 'requesttoken',
            OAUTH_ENDPOINT_AUTHORIZE => 'userauthorization',
            OAUTH_ENDPOINT_ACCESS => 'accesstoken',
            OMB_ENDPOINT_POSTNOTICE => 'postnotice',
            OMB_ENDPOINT_UPDATEPROFILE => 'updateprofile');
    }

    public function getURL($action)
    {
        return common_local_url($this->urls[$action]);
    }
}
?>