| 
									
										
										
										
											2011-02-11 11:55:23 -08:00
										 |  |  | #!/usr/bin/env php
 | 
					
						
							|  |  |  | <?php | 
					
						
							| 
									
										
										
										
											2019-09-11 14:14:40 +03:00
										 |  |  | // This file is part of GNU social - https://www.gnu.org/software/social
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // GNU social 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.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // GNU social 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 GNU social.  If not, see <http://www.gnu.org/licenses/>.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * @copyright 2010 StatusNet, Inc. | 
					
						
							|  |  |  |  * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later | 
					
						
							| 
									
										
										
										
											2011-02-11 11:55:23 -08:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-18 17:15:00 +03:00
										 |  |  | define('INSTALLDIR', dirname(__DIR__, 3)); | 
					
						
							|  |  |  | define('PUBLICDIR', INSTALLDIR . DIRECTORY_SEPARATOR . 'public'); | 
					
						
							| 
									
										
										
										
											2011-02-11 11:55:23 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-11 12:23:03 -08:00
										 |  |  | $longoptions = array('all', 'suspicious', 'quiet'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-11 11:55:23 -08:00
										 |  |  | $helptext = <<<END_OF_HELP | 
					
						
							| 
									
										
										
										
											2011-02-11 12:23:03 -08:00
										 |  |  | update-profile-data.php [options] [http://example.com/profile/url] | 
					
						
							| 
									
										
										
										
											2011-02-11 11:55:23 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Rerun profile discovery for the given OStatus remote profile, and save the | 
					
						
							| 
									
										
										
										
											2014-12-08 22:06:29 -05:00
										 |  |  | updated profile data (nickname, fullname, avatar, bio, etc). | 
					
						
							|  |  |  | Doesn't touch feed state. | 
					
						
							| 
									
										
										
										
											2011-02-11 11:55:23 -08:00
										 |  |  | Can be used to clean up after breakages. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-11 12:23:03 -08:00
										 |  |  | Options: | 
					
						
							|  |  |  |   --all        Run for all known OStatus profiles | 
					
						
							|  |  |  |   --suspicious Run for OStatus profiles with all-numeric nicknames | 
					
						
							|  |  |  |                (fixes 0.9.7 prerelease back-compatibility bug) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-11 11:55:23 -08:00
										 |  |  | END_OF_HELP; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require_once INSTALLDIR.'/scripts/commandline.inc'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-11 14:14:40 +03:00
										 |  |  | function showProfileInfo(Ostatus_profile $oprofile) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-02-11 11:55:23 -08:00
										 |  |  |     if ($oprofile->isGroup()) { | 
					
						
							|  |  |  |         echo "group\n"; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         $profile = $oprofile->localProfile(); | 
					
						
							| 
									
										
										
										
											2016-03-28 15:42:41 +02:00
										 |  |  |         foreach (array('nickname', 'fullname', 'bio', 'homepage', 'location') as $field) { | 
					
						
							|  |  |  |             print "  $field: {$profile->$field}\n"; | 
					
						
							| 
									
										
										
										
											2011-02-11 11:55:23 -08:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     echo "\n"; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-11 14:14:40 +03:00
										 |  |  | function fixProfile(Ostatus_profile $oprofile) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-02-11 12:13:33 -08:00
										 |  |  |     echo "Before:\n"; | 
					
						
							|  |  |  |     showProfileInfo($oprofile); | 
					
						
							| 
									
										
										
										
											2011-02-11 11:55:23 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-11 12:13:33 -08:00
										 |  |  |     $feedurl = $oprofile->feeduri; | 
					
						
							| 
									
										
										
										
											2016-03-28 15:42:41 +02:00
										 |  |  |     $client = new HTTPClient(); | 
					
						
							| 
									
										
										
										
											2011-02-11 12:13:33 -08:00
										 |  |  |     $response = $client->get($feedurl); | 
					
						
							|  |  |  |     if ($response->isOk()) { | 
					
						
							|  |  |  |         echo "Updating profile from feed: $feedurl\n"; | 
					
						
							|  |  |  |         $dom = new DOMDocument(); | 
					
						
							|  |  |  |         if ($dom->loadXML($response->getBody())) { | 
					
						
							| 
									
										
										
										
											2016-03-28 16:19:47 +02:00
										 |  |  |             if ($dom->documentElement->tagName !== 'feed') { | 
					
						
							|  |  |  |                 echo "  (no <feed> element in feed URL response; skipping)\n"; | 
					
						
							|  |  |  |                 return false; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             $actorObj = ActivityUtils::getFeedAuthor($dom->documentElement); | 
					
						
							|  |  |  |             if ($actorObj) { | 
					
						
							|  |  |  |                 $oprofile->updateFromActivityObject($actorObj); | 
					
						
							| 
									
										
										
										
											2011-02-11 12:13:33 -08:00
										 |  |  |                 echo "  (ok)\n"; | 
					
						
							|  |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2016-03-28 16:19:47 +02:00
										 |  |  |                 echo "  (no author on feed; skipping)\n"; | 
					
						
							| 
									
										
										
										
											2011-02-11 12:13:33 -08:00
										 |  |  |                 return false; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2011-02-11 11:55:23 -08:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2011-02-11 12:13:33 -08:00
										 |  |  |             echo "  (bad feed; skipping)\n"; | 
					
						
							|  |  |  |             return false; | 
					
						
							| 
									
										
										
										
											2011-02-11 11:55:23 -08:00
										 |  |  |         } | 
					
						
							|  |  |  |     } else { | 
					
						
							| 
									
										
										
										
											2011-02-11 12:13:33 -08:00
										 |  |  |         echo "Failed feed fetch: {$response->getStatus()} for $feedurl\n"; | 
					
						
							|  |  |  |         return false; | 
					
						
							| 
									
										
										
										
											2011-02-11 11:55:23 -08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-02-11 12:13:33 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     echo "After:\n"; | 
					
						
							|  |  |  |     showProfileInfo($oprofile); | 
					
						
							|  |  |  |     return true; | 
					
						
							| 
									
										
										
										
											2011-02-11 11:55:23 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-11 12:23:03 -08:00
										 |  |  | $ok = true; | 
					
						
							| 
									
										
										
										
											2015-11-08 10:33:41 +01:00
										 |  |  | $validate = new Validate(); | 
					
						
							| 
									
										
										
										
											2011-02-11 12:23:03 -08:00
										 |  |  | if (have_option('all')) { | 
					
						
							|  |  |  |     $oprofile = new Ostatus_profile(); | 
					
						
							|  |  |  |     $oprofile->find(); | 
					
						
							|  |  |  |     echo "Found $oprofile->N profiles:\n\n"; | 
					
						
							|  |  |  |     while ($oprofile->fetch()) { | 
					
						
							| 
									
										
										
										
											2016-02-04 12:05:58 +01:00
										 |  |  |         try { | 
					
						
							| 
									
										
										
										
											2016-03-28 15:42:41 +02:00
										 |  |  |             $ok = fixProfile($oprofile) && $ok; | 
					
						
							| 
									
										
										
										
											2016-02-04 12:05:58 +01:00
										 |  |  |         } catch (Exception $e) { | 
					
						
							|  |  |  |             $ok = false; | 
					
						
							|  |  |  |             echo "Failed on URI=="._ve($oprofile->uri).": {$e->getMessage()}\n"; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2011-02-11 12:23:03 -08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-09-11 14:14:40 +03:00
										 |  |  | } elseif (have_option('suspicious')) { | 
					
						
							| 
									
										
										
										
											2011-02-11 12:23:03 -08:00
										 |  |  |     $oprofile = new Ostatus_profile(); | 
					
						
							| 
									
										
										
										
											2019-09-11 14:14:40 +03:00
										 |  |  |     $oprofile->joinAdd(['profile_id', 'profile:id']); | 
					
						
							|  |  |  |     $oprofile->whereAdd("CHAR_LENGTH(nickname) = 1 AND nickname BETWEEN '0' AND '9'"); | 
					
						
							| 
									
										
										
										
											2011-02-11 12:23:03 -08:00
										 |  |  |     $oprofile->find(); | 
					
						
							|  |  |  |     echo "Found $oprofile->N matching profiles:\n\n"; | 
					
						
							|  |  |  |     while ($oprofile->fetch()) { | 
					
						
							| 
									
										
										
										
											2016-02-04 12:05:58 +01:00
										 |  |  |         try { | 
					
						
							| 
									
										
										
										
											2016-03-28 15:42:41 +02:00
										 |  |  |             $ok = fixProfile($oprofile) && $ok; | 
					
						
							| 
									
										
										
										
											2016-02-04 12:05:58 +01:00
										 |  |  |         } catch (Exception $e) { | 
					
						
							|  |  |  |             $ok = false; | 
					
						
							|  |  |  |             echo "Failed on URI=="._ve($oprofile->uri).": {$e->getMessage()}\n"; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2011-02-11 12:23:03 -08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-09-11 14:14:40 +03:00
										 |  |  | } elseif (!empty($args[0]) && $validate->uri($args[0])) { | 
					
						
							| 
									
										
										
										
											2011-02-11 12:23:03 -08:00
										 |  |  |     $uri = $args[0]; | 
					
						
							| 
									
										
										
										
											2016-03-28 15:42:41 +02:00
										 |  |  |     $oprofile = Ostatus_profile::getKV('uri', $uri); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (!$oprofile instanceof Ostatus_profile) { | 
					
						
							|  |  |  |         print "No OStatus remote profile known for URI $uri\n"; | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-04 12:05:58 +01:00
										 |  |  |     try { | 
					
						
							| 
									
										
										
										
											2016-03-28 15:42:41 +02:00
										 |  |  |         $ok = fixProfile($oprofile) && $ok; | 
					
						
							| 
									
										
										
										
											2016-02-04 12:05:58 +01:00
										 |  |  |     } catch (Exception $e) { | 
					
						
							|  |  |  |         $ok = false; | 
					
						
							|  |  |  |         echo "Failed on URI=="._ve($oprofile->uri).": {$e->getMessage()}\n"; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-02-11 12:23:03 -08:00
										 |  |  | } else { | 
					
						
							| 
									
										
										
										
											2011-02-11 12:13:33 -08:00
										 |  |  |     print "$helptext"; | 
					
						
							| 
									
										
										
										
											2011-02-11 12:23:03 -08:00
										 |  |  |     $ok = false; | 
					
						
							| 
									
										
										
										
											2011-02-11 12:13:33 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-11 12:23:03 -08:00
										 |  |  | exit($ok ? 0 : 1); |