diff options
author | Brion Vibber <brion@pobox.com> | 2010-09-27 14:23:10 -0700 |
---|---|---|
committer | Brion Vibber <brion@pobox.com> | 2010-09-28 07:45:38 -0700 |
commit | 4e5a69ad6f201ea83820be63eb60fc0af3e077a7 (patch) | |
tree | a2c27254647de2b4dc870b02cc60e8a85e570562 | |
parent | a6469aeed88a400d5d38d75a210417de4af4eea7 (diff) |
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!
-rw-r--r-- | plugins/OStatus/scripts/fixup-shadow.php | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/plugins/OStatus/scripts/fixup-shadow.php b/plugins/OStatus/scripts/fixup-shadow.php index 4b6ad08a3..3e2c18e02 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; |