3 * Handle an updateprofile action
9 * @author Evan Prodromou <evan@status.net>
10 * @author Robin Millette <millette@status.net>
11 * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
12 * @link http://status.net/
14 * StatusNet - the distributed open-source microblogging tool
15 * Copyright (C) 2008, 2009, StatusNet, Inc.
17 * This program is free software: you can redistribute it and/or modify
18 * it under the terms of the GNU Affero General Public License as published by
19 * the Free Software Foundation, either version 3 of the License, or
20 * (at your option) any later version.
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU Affero General Public License for more details.
27 * You should have received a copy of the GNU Affero General Public License
28 * along with this program. If not, see <http://www.gnu.org/licenses/>.
31 if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
33 require_once INSTALLDIR.'/lib/omb.php';
34 require_once INSTALLDIR.'/extlib/libomb/service_provider.php';
37 * Handle an updateprofile action
41 * @author Evan Prodromou <evan@status.net>
42 * @author Robin Millette <millette@controlyourself.ca>
43 * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
44 * @link http://laconi.ca/
46 class UpdateprofileAction extends Action
50 * For initializing members of the class.
52 * @param array $argarray misc. arguments
54 * @return boolean true
56 function prepare($argarray)
58 $version = $req->get_parameter('omb_version');
59 if ($version != OMB_VERSION_01) {
60 $this->clientError(_('Unsupported OMB version'), 400);
63 # First, check to see if listenee exists
64 $listenee = $req->get_parameter('omb_listenee');
65 $remote = Remote_profile::staticGet('uri', $listenee);
67 $this->clientError(_('Profile unknown'), 404);
70 # Second, check to see if they should be able to post updates!
71 # We see if there are any subscriptions to that remote user with
74 $sub = new Subscription();
75 $sub->subscribed = $remote->id;
76 $sub->token = $token->key;
77 if (!$sub->find(true)) {
78 $this->clientError(_('You did not send us that profile'), 403);
82 $profile = Profile::staticGet('id', $remote->id);
84 # This one is our fault
85 $this->serverError(_('Remote profile with no matching profile'), 500);
88 $nickname = $req->get_parameter('omb_listenee_nickname');
89 if ($nickname && !Validate::string($nickname, array('min_length' => 1,
91 'format' => NICKNAME_FMT))) {
92 $this->clientError(_('Nickname must have only lowercase letters and numbers and no spaces.'));
95 $license = $req->get_parameter('omb_listenee_license');
96 if ($license && !common_valid_http_url($license)) {
97 $this->clientError(sprintf(_("Invalid license URL '%s'"), $license));
103 function handle($args)
105 parent::handle($args);
108 $srv = new OMB_Service_Provider(null, omb_oauth_datastore(),
110 $srv->handleUpdateProfile();
111 } catch (Exception $e) {
112 $this->serverError($e->getMessage());