| 
									
										
										
										
											2008-05-26 07:27:00 -04:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Handle an updateprofile action | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * PHP version 5 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category Action | 
					
						
							| 
									
										
										
										
											2009-08-27 11:16:45 -07:00
										 |  |  |  * @package  StatusNet | 
					
						
							|  |  |  |  * @author   Evan Prodromou <evan@status.net> | 
					
						
							|  |  |  |  * @author   Robin Millette <millette@status.net> | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  |  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 | 
					
						
							| 
									
										
										
										
											2009-08-27 11:16:45 -07:00
										 |  |  |  * @link     http://status.net/ | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2009-08-25 18:14:12 -04:00
										 |  |  |  * StatusNet - the distributed open-source microblogging tool | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * Copyright (C) 2008, 2009, StatusNet, Inc. | 
					
						
							| 
									
										
										
										
											2008-05-26 07:27:00 -04:00
										 |  |  |  * | 
					
						
							|  |  |  |  * 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/>. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-26 10:41:36 -04:00
										 |  |  | if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } | 
					
						
							| 
									
										
										
										
											2008-05-26 07:27:00 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  | require_once INSTALLDIR.'/lib/omb.php'; | 
					
						
							|  |  |  | require_once INSTALLDIR.'/extlib/libomb/service_provider.php'; | 
					
						
							| 
									
										
										
										
											2008-06-12 14:40:28 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Handle an updateprofile action | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category Action | 
					
						
							|  |  |  |  * @package  Laconica | 
					
						
							| 
									
										
										
										
											2009-09-15 22:28:59 -04:00
										 |  |  |  * @author   Evan Prodromou <evan@status.net> | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  |  * @author   Robin Millette <millette@controlyourself.ca> | 
					
						
							|  |  |  |  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 | 
					
						
							|  |  |  |  * @link     http://laconi.ca/ | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2008-12-23 14:49:23 -05:00
										 |  |  | class UpdateprofileAction extends Action | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-21 12:13:24 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * For initializing members of the class. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param array $argarray misc. arguments | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return boolean true | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function prepare($argarray) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $version = $req->get_parameter('omb_version'); | 
					
						
							|  |  |  |         if ($version != OMB_VERSION_01) { | 
					
						
							| 
									
										
										
										
											2009-01-15 23:03:38 +00:00
										 |  |  |             $this->clientError(_('Unsupported OMB version'), 400); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         # First, check to see if listenee exists
 | 
					
						
							|  |  |  |         $listenee =  $req->get_parameter('omb_listenee'); | 
					
						
							|  |  |  |         $remote = Remote_profile::staticGet('uri', $listenee); | 
					
						
							|  |  |  |         if (!$remote) { | 
					
						
							| 
									
										
										
										
											2009-01-15 23:03:38 +00:00
										 |  |  |             $this->clientError(_('Profile unknown'), 404); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         # Second, check to see if they should be able to post updates!
 | 
					
						
							|  |  |  |         # We see if there are any subscriptions to that remote user with
 | 
					
						
							|  |  |  |         # the given token.
 | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $sub = new Subscription(); | 
					
						
							|  |  |  |         $sub->subscribed = $remote->id; | 
					
						
							|  |  |  |         $sub->token = $token->key; | 
					
						
							|  |  |  |         if (!$sub->find(true)) { | 
					
						
							| 
									
										
										
										
											2009-01-15 23:03:38 +00:00
										 |  |  |             $this->clientError(_('You did not send us that profile'), 403); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-07-08 05:45:31 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $profile = Profile::staticGet('id', $remote->id); | 
					
						
							|  |  |  |         if (!$profile) { | 
					
						
							|  |  |  |             # This one is our fault
 | 
					
						
							| 
									
										
										
										
											2009-01-15 23:03:38 +00:00
										 |  |  |             $this->serverError(_('Remote profile with no matching profile'), 500); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $nickname = $req->get_parameter('omb_listenee_nickname'); | 
					
						
							|  |  |  |         if ($nickname && !Validate::string($nickname, array('min_length' => 1, | 
					
						
							|  |  |  |                                                             'max_length' => 64, | 
					
						
							| 
									
										
										
										
											2009-08-05 16:26:19 -04:00
										 |  |  |                                                             'format' => NICKNAME_FMT))) { | 
					
						
							| 
									
										
										
										
											2009-01-15 23:03:38 +00:00
										 |  |  |             $this->clientError(_('Nickname must have only lowercase letters and numbers and no spaces.')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $license = $req->get_parameter('omb_listenee_license'); | 
					
						
							|  |  |  |         if ($license && !common_valid_http_url($license)) { | 
					
						
							| 
									
										
										
										
											2009-01-15 23:03:38 +00:00
										 |  |  |             $this->clientError(sprintf(_("Invalid license URL '%s'"), $license)); | 
					
						
							| 
									
										
										
										
											2009-08-21 12:13:24 +02:00
										 |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     function handle($args) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         parent::handle($args); | 
					
						
							| 
									
										
										
										
											2009-08-21 12:13:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         try { | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  |             $srv = new OMB_Service_Provider(null, omb_oauth_datastore(), | 
					
						
							|  |  |  |                                             omb_oauth_server()); | 
					
						
							|  |  |  |             $srv->handleUpdateProfile(); | 
					
						
							|  |  |  |         } catch (Exception $e) { | 
					
						
							| 
									
										
										
										
											2009-01-15 23:03:38 +00:00
										 |  |  |             $this->serverError($e->getMessage()); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-08-21 15:42:11 -04:00
										 |  |  | } |