echo "group\n";
} else {
$profile = $oprofile->localProfile();
- try {
- foreach (array('nickname', 'fullname', 'bio', 'homepage', 'location') as $field) {
- print " $field: {$profile->$field}\n";
- }
- } catch (NoProfileException $e) {
- print "local profile not found";
+ foreach (array('nickname', 'fullname', 'bio', 'homepage', 'location') as $field) {
+ print " $field: {$profile->$field}\n";
}
}
echo "\n";
}
-function fixProfile($uri) {
- $oprofile = Ostatus_profile::getKV('uri', $uri);
-
- if (!$oprofile) {
- print "No OStatus remote profile known for URI $uri\n";
- return false;
- }
-
+function fixProfile(Ostatus_profile $oprofile) {
echo "Before:\n";
showProfileInfo($oprofile);
$feedurl = $oprofile->feeduri;
- $client = new HttpClient();
+ $client = new HTTPClient();
$response = $client->get($feedurl);
if ($response->isOk()) {
echo "Updating profile from feed: $feedurl\n";
$dom = new DOMDocument();
if ($dom->loadXML($response->getBody())) {
- $feed = $dom->documentElement;
- $entries = $dom->getElementsByTagNameNS(Activity::ATOM, 'entry');
- if ($entries->length) {
- $entry = $entries->item(0);
- $activity = new Activity($entry, $feed);
- $oprofile->checkAuthorship($activity);
+ 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);
echo " (ok)\n";
} else {
- echo " (no entry; skipping)\n";
+ echo " (no author on feed; skipping)\n";
return false;
}
} else {
}
$ok = true;
+$validate = new Validate();
if (have_option('all')) {
$oprofile = new Ostatus_profile();
$oprofile->find();
echo "Found $oprofile->N profiles:\n\n";
while ($oprofile->fetch()) {
- $ok = fixProfile($oprofile->uri) && $ok;
+ try {
+ $ok = fixProfile($oprofile) && $ok;
+ } catch (Exception $e) {
+ $ok = false;
+ echo "Failed on URI=="._ve($oprofile->uri).": {$e->getMessage()}\n";
+ }
}
} else if (have_option('suspicious')) {
$oprofile = new Ostatus_profile();
$oprofile->find();
echo "Found $oprofile->N matching profiles:\n\n";
while ($oprofile->fetch()) {
- $ok = fixProfile($oprofile->uri) && $ok;
+ try {
+ $ok = fixProfile($oprofile) && $ok;
+ } catch (Exception $e) {
+ $ok = false;
+ echo "Failed on URI=="._ve($oprofile->uri).": {$e->getMessage()}\n";
+ }
}
-} else if (!empty($args[0]) && Validate::uri($args[0])) {
+} else if (!empty($args[0]) && $validate->uri($args[0])) {
$uri = $args[0];
- $ok = fixProfile($uri);
+ $oprofile = Ostatus_profile::getKV('uri', $uri);
+
+ if (!$oprofile instanceof Ostatus_profile) {
+ print "No OStatus remote profile known for URI $uri\n";
+ return false;
+ }
+
+ try {
+ $ok = fixProfile($oprofile) && $ok;
+ } catch (Exception $e) {
+ $ok = false;
+ echo "Failed on URI=="._ve($oprofile->uri).": {$e->getMessage()}\n";
+ }
} else {
print "$helptext";
$ok = false;