3 * Handle an updateprofile action
9 * @author Evan Prodromou <evan@controlyourself.ca>
10 * @author Robin Millette <millette@controlyourself.ca>
11 * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
12 * @link http://laconi.ca/
14 * Laconica - a distributed open-source microblogging tool
15 * Copyright (C) 2008, 2009, Control Yourself, 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('LACONICA')) {
35 require_once INSTALLDIR.'/lib/omb.php';
36 require_once INSTALLDIR.'/extlib/libomb/service_provider.php';
39 * Handle an updateprofile action
43 * @author Evan Prodromou <evan@controlyourself.ca>
44 * @author Robin Millette <millette@controlyourself.ca>
45 * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
46 * @link http://laconi.ca/
48 class UpdateprofileAction extends Action
52 * For initializing members of the class.
54 * @param array $argarray misc. arguments
56 * @return boolean true
58 function prepare($argarray)
60 $version = $req->get_parameter('omb_version');
61 if ($version != OMB_VERSION_01) {
62 $this->clientError(_('Unsupported OMB version'), 400);
65 # First, check to see if listenee exists
66 $listenee = $req->get_parameter('omb_listenee');
67 $remote = Remote_profile::staticGet('uri', $listenee);
69 $this->clientError(_('Profile unknown'), 404);
72 # Second, check to see if they should be able to post updates!
73 # We see if there are any subscriptions to that remote user with
76 $sub = new Subscription();
77 $sub->subscribed = $remote->id;
78 $sub->token = $token->key;
79 if (!$sub->find(true)) {
80 $this->clientError(_('You did not send us that profile'), 403);
84 $profile = Profile::staticGet('id', $remote->id);
86 # This one is our fault
87 $this->serverError(_('Remote profile with no matching profile'), 500);
90 $nickname = $req->get_parameter('omb_listenee_nickname');
91 if ($nickname && !Validate::string($nickname, array('min_length' => 1,
93 'format' => NICKNAME_FMT))) {
94 $this->clientError(_('Nickname must have only lowercase letters and numbers and no spaces.'));
97 $license = $req->get_parameter('omb_listenee_license');
98 if ($license && !common_valid_http_url($license)) {
99 $this->clientError(sprintf(_("Invalid license URL '%s'"), $license));
105 function handle($args)
107 parent::handle($args);
110 $srv = new OMB_Service_Provider(null, omb_oauth_datastore(),
112 $srv->handleUpdateProfile();
113 } catch (Exception $e) {
114 $this->serverError($e->getMessage());