From 7c4fcefd314a8f651b2f3fa21bdac869107c81e5 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 27 Sep 2010 14:23:10 -0700 Subject: [PATCH] Enhanced OStatus fixup-shadow.php cleanup script to check for direct matches against user.uri and user_group.uri (for local groups). This should catch cases that were missed before because we were only doing pattern-matching checks, and the pattern didn't match because the site has been renamed and the old URI no longer matches the current domain / path structure. Could use some more thorough testing in practice! --- plugins/OStatus/scripts/fixup-shadow.php | 56 +++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/plugins/OStatus/scripts/fixup-shadow.php b/plugins/OStatus/scripts/fixup-shadow.php index 4b6ad08a31..3e2c18e02f 100644 --- a/plugins/OStatus/scripts/fixup-shadow.php +++ b/plugins/OStatus/scripts/fixup-shadow.php @@ -35,6 +35,58 @@ require_once INSTALLDIR.'/scripts/commandline.inc'; $dry = have_option('dry-run'); +// Look for user.uri matches... These may not match up with the current +// URL schema if the site has changed names. +echo "Checking for bogus ostatus_profile entries matching user.uri...\n"; + +$user = new User(); +$oprofile = new Ostatus_profile(); +$user->joinAdd($oprofile, 'INNER', 'oprofile', 'uri'); +$user->find(); +$count = $user->N; +echo "Found $count...\n"; + +while ($user->fetch()) { + $uri = $user->uri; + echo "user $user->id ($user->nickname) hidden by $uri"; + if ($dry) { + echo " - skipping\n"; + } else { + echo " - removing bogus ostatus_profile entry..."; + $evil = Ostatus_profile::staticGet('uri', $uri); + $evil->delete(); + echo " ok\n"; + } +} +echo "\n"; + +// Also try user_group.uri matches for local groups. +// Not all group entries will have this filled out, though, as it's new! +echo "Checking for bogus ostatus_profile entries matching local user_group.uri...\n"; +$group = new User_group(); +$group->joinAdd(array('uri', 'ostatus_profile:uri')); +$group->joinAdd(array('id', 'local_group:group_id')); +$group->find(); +$count = $group->N; +echo "Found $count...\n"; + +while ($group->fetch()) { + $uri = $group->uri; + echo "group $group->id ($group->nickname) hidden by $uri"; + if ($dry) { + echo " - skipping\n"; + } else { + echo " - removing bogus ostatus_profile entry..."; + $evil = Ostatus_profile::staticGet('uri', $uri); + $evil->delete(); + echo " ok\n"; + } +} +echo "\n"; + + +// Fallback? +echo "Checking for bogus profiles blocking local users/groups by URI pattern match...\n"; $oprofile = new Ostatus_profile(); $marker = mt_rand(31337, 31337000); @@ -42,16 +94,18 @@ $marker = mt_rand(31337, 31337000); $profileTemplate = common_local_url('userbyid', array('id' => $marker)); $encProfile = $oprofile->escape($profileTemplate, true); $encProfile = str_replace($marker, '%', $encProfile); +echo " LIKE '$encProfile'\n"; $groupTemplate = common_local_url('groupbyid', array('id' => $marker)); $encGroup = $oprofile->escape($groupTemplate, true); $encGroup = str_replace($marker, '%', $encGroup); +echo " LIKE '$encGroup'\n"; $sql = "SELECT * FROM ostatus_profile WHERE uri LIKE '%s' OR uri LIKE '%s'"; $oprofile->query(sprintf($sql, $encProfile, $encGroup)); $count = $oprofile->N; -echo "Found $count bogus ostatus_profile entries shadowing local users and groups:\n"; +echo "Found $count...\n"; while ($oprofile->fetch()) { $uri = $oprofile->uri;