fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2010-11-11 05:44 am

[dw-free] Remove all traces UserNewComment/UserNewEntry events

[commit: http://hg.dwscoalition.org/dw-free/rev/89fe44e3e37a]

http://bugs.dwscoalition.org/show_bug.cgi?id=3220

Reduce potential for creepiness. (These events were meant to allow you to
track any comment/entry someone posted anywhere. Never exposed in any
interface; never enabled; get rid of them anyway).

Patch by [personal profile] fu.

Files modified:
  • cgi-bin/LJ/Event.pm
  • cgi-bin/LJ/Event/UserNewComment.pm
  • cgi-bin/LJ/Event/UserNewEntry.pm
  • cgi-bin/LJ/Talk.pm
  • cgi-bin/ljdefaults.pl
  • cgi-bin/ljprotocol.pl
  • t/esn-journalnewentry.t
--------------------------------------------------------------------------------
diff -r f616643e7fdf -r 89fe44e3e37a cgi-bin/LJ/Event.pm
--- a/cgi-bin/LJ/Event.pm	Wed Nov 10 09:49:22 2010 -0600
+++ b/cgi-bin/LJ/Event.pm	Thu Nov 11 13:43:33 2010 +0800
@@ -30,14 +30,10 @@ foreach my $event (@EVENTS) {
 # Guide to subclasses:
 #    LJ::Event::JournalNewEntry    -- a journal (user/community) has a new entry in it
 #                                   ($ju,$ditemid,undef)
-#    LJ::Event::UserNewEntry       -- a user posted a new entry in some journal
-#                                   ($u,$journalid,$ditemid)
 #    LJ::Event::JournalNewComment  -- a journal has a new comment in it
 #                                   ($ju,$jtalkid)   # TODO: should probably be ($ju,$jitemid,$jtalkid)
 #    LJ::Event::JournalNewComment::TopLevel -- a journal has a new top-level comment in it
 #                                   ($ju,$jitemid)
-#    LJ::Event::UserNewComment     -- a user left a new comment somewhere
-#                                   ($u,$journalid,$jtalkid)
 #    LJ::Event::AddedToCircle      -- user $fromuserid added $u to their circle; $actionid is 1 (trust) or 2 (watch)
 #                                   ($u,$fromuserid,$actionid)
 #    LJ::Event::RemovedFromCircle  -- user $fromuserid removed $u to their circle; $actionid is 1 (trust) or 2 (watch)
diff -r f616643e7fdf -r 89fe44e3e37a cgi-bin/LJ/Event/UserNewComment.pm
--- a/cgi-bin/LJ/Event/UserNewComment.pm	Wed Nov 10 09:49:22 2010 -0600
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-# This code was forked from the LiveJournal project owned and operated
-# by Live Journal, Inc. The code has been modified and expanded by
-# Dreamwidth Studios, LLC. These files were originally licensed under
-# the terms of the license supplied by Live Journal, Inc, which can
-# currently be found at:
-#
-# http://code.livejournal.org/trac/livejournal/browser/trunk/LICENSE-LiveJournal.txt
-#
-# In accordance with the original license, this code and all its
-# modifications are provided under the GNU General Public License.
-# A copy of that license can be found in the LICENSE file included as
-# part of this distribution.
-
-package LJ::Event::UserNewComment;
-use strict;
-use Scalar::Util qw(blessed);
-use LJ::Comment;
-use Carp qw(croak);
-use base 'LJ::Event';
-
-sub new {
-    my ($class, $comment) = @_;
-    croak 'Not an LJ::Comment' unless blessed $comment && $comment->isa("LJ::Comment");
-    return $class->SUPER::new($comment->poster,
-                              $comment->journal->{userid}, $comment->jtalkid);
-}
-
-sub is_common { 0 }
-
-# when was this comment left?
-sub eventtime_unix {
-    my $self = shift;
-    my $cmt = $self->comment;
-    return $cmt ? $cmt->unixtime : $self->SUPER::eventtime_unix;
-}
-
-sub comment {
-    my $self = shift;
-    return LJ::Comment->new($self->journal, jtalkid => $self->arg1);
-}
-
-1;
diff -r f616643e7fdf -r 89fe44e3e37a cgi-bin/LJ/Event/UserNewEntry.pm
--- a/cgi-bin/LJ/Event/UserNewEntry.pm	Wed Nov 10 09:49:22 2010 -0600
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-# This code was forked from the LiveJournal project owned and operated
-# by Live Journal, Inc. The code has been modified and expanded by
-# Dreamwidth Studios, LLC. These files were originally licensed under
-# the terms of the license supplied by Live Journal, Inc, which can
-# currently be found at:
-#
-# http://code.livejournal.org/trac/livejournal/browser/trunk/LICENSE-LiveJournal.txt
-#
-# In accordance with the original license, this code and all its
-# modifications are provided under the GNU General Public License.
-# A copy of that license can be found in the LICENSE file included as
-# part of this distribution.
-
-package LJ::Event::UserNewEntry;
-
-#
-# UserNewEntry Event: Fired when a 'poster' posts 'entry' in 'journal'
-#
-
-use strict;
-use Scalar::Util qw(blessed);
-use Carp qw(croak);
-use LJ::Entry;
-use base 'LJ::Event';
-
-############################################################################
-# constructor & property overrides
-#
-
-sub new {
-    my ($class, $entry) = @_;
-    croak 'Not an LJ::Entry' unless blessed $entry && $entry->isa("LJ::Entry");
-    return $class->SUPER::new($entry->poster, $entry->journalid, $entry->ditemid);
-}
-
-sub is_common { 0 }
-
-############################################################################
-# canonical accessors into the meaning of this event's arguments
-#  * poster:  user object who posted
-#  * journal: journal u object where entry was posted
-#  * entry:   entry object which was posted (from journal, ditemid)
-#
-
-# user who posted the entry
-sub poster {
-    my $self = shift;
-    return $self->u;
-}
-
-sub posterid {
-    my $self = shift;
-    return $self->u->{userid};
-}
-
-# journal entry was posted in
-sub journal {
-    my $self = shift;
-    return LJ::load_userid($self->arg1);
-}
-
-sub journalid {
-    my $self = shift;
-    return $self->arg1+0;
-}
-
-# entry which was posted
-sub entry {
-    my $self = shift;
-    return LJ::Entry->new($self->journal, ditemid => $self->ditemid);
-}
-
-sub ditemid {
-    my $self = shift;
-    return $self->arg2;
-}
-
-############################################################################
-# subscription matching logic
-#
-
-sub matches_filter {
-    my ($self, $subscr) = @_;
-
-    # does the entry actually exist?
-    return 0 unless $self->journalid && $self->ditemid; # TODO: throw error?
-
-    # construct the entry so we can determine visibility
-    my $entry = $self->entry;
-    return 0 unless $entry && $entry->valid; # TODO: throw error?
-    return 0 unless $entry->visible_to($subscr->owner);
-
-    # journalid of 0 means 'all friends', so if the poster is
-    # watched by the subscription owner, then they match
-    return 1 if ! $subscr->journalid && $subscr->owner->watches( $self->poster );
-
-    # otherwise we have a journalid, see if it's the specific
-    # journal that the subscription is watching
-    return $subscr->journal->equals( $self->poster );
-}
-
-
-############################################################################
-# methods for rendering ->as_*
-#
-
-sub as_string {
-    my $self = shift;
-    my $entry = $self->entry;
-    my $about = $entry->subject_text ? " titled '" . $entry->subject_text . "'" : '';
-    return sprintf("User '%s' made a new entry $about at: " . $self->entry->url,
-                   $self->poster->{name});
-}
-
-sub as_html {
-    my $self = shift;
-
-    my $entry = $self->entry;
-    return "(Invalid entry)" unless $entry && $entry->valid;
-    my $url = $entry->url;
-
-    my $ju = LJ::ljuser($self->journal);
-    my $pu = LJ::ljuser($self->poster);
-
-    return "User $pu has posted a new <a href=\"$url\">entry</a> in $ju.";
-}
-
-sub subscription_as_html {
-    my ($class, $subscr) = @_;
-
-    # journal is the 'watched journal' of the subscription
-    #  * 0 means the subscription is for posts by any friend
-    my $journal = $subscr->journal;
-
-    # non-zero journal means the subscription refers to
-    # posts made by a specific user
-
-    return $journal ?
-        BML::ml('event.user_new_entry.user', { user => $journal->ljuser_display } ) : # $journaluser posts a new entry anywhere.
-        BML::ml('event.user_new_entry.any'); # "Any of my friends posts a new entry anywhere."
-}
-
-1;
diff -r f616643e7fdf -r 89fe44e3e37a cgi-bin/LJ/Talk.pm
--- a/cgi-bin/LJ/Talk.pm	Wed Nov 10 09:49:22 2010 -0600
+++ b/cgi-bin/LJ/Talk.pm	Thu Nov 11 13:43:33 2010 +0800
@@ -16,7 +16,6 @@ use strict;
 
 use LJ::Constants;
 use LJ::Event::JournalNewComment;
-use LJ::Event::UserNewComment;
 use LJ::Comment;
 use LJ::EventLogRecord::NewComment;
 use LJ::OpenID;
@@ -2932,8 +2931,6 @@ sub enter_comment {
         my @jobs;
 
         push @jobs, LJ::Event::JournalNewComment->new($cmtobj)->fire_job;
-        push @jobs, LJ::Event::UserNewComment->new($cmtobj)->fire_job
-            if $cmtobj->poster && LJ::is_enabled('esn-userevents');
         push @jobs, LJ::EventLogRecord::NewComment->new($cmtobj)->fire_job;
 
         my $sclient = LJ::theschwartz();
@@ -3731,8 +3728,6 @@ sub edit_comment {
         my @jobs;
 
         push @jobs, LJ::Event::JournalNewComment->new($comment_obj)->fire_job;
-        push @jobs, LJ::Event::UserNewComment->new($comment_obj)->fire_job
-            if $comment_obj->poster && LJ::is_enabled('esn-userevents');
         push @jobs, LJ::EventLogRecord::NewComment->new($comment_obj)->fire_job;
 
         my $sclient = LJ::theschwartz();
diff -r f616643e7fdf -r 89fe44e3e37a cgi-bin/ljdefaults.pl
--- a/cgi-bin/ljdefaults.pl	Wed Nov 10 09:49:22 2010 -0600
+++ b/cgi-bin/ljdefaults.pl	Thu Nov 11 13:43:33 2010 +0800
@@ -227,8 +227,6 @@ no strict "vars";
                                UserExpunged
                                UserMessageRecvd
                                UserMessageSent
-                               UserNewComment
-                               UserNewEntry
                                VgiftApproved
                                XPostFailure
                                XPostSuccess
diff -r f616643e7fdf -r 89fe44e3e37a cgi-bin/ljprotocol.pl
--- a/cgi-bin/ljprotocol.pl	Wed Nov 10 09:49:22 2010 -0600
+++ b/cgi-bin/ljprotocol.pl	Thu Nov 11 13:43:33 2010 +0800
@@ -20,7 +20,6 @@ use LJ::Constants;
 use LJ::Constants;
 use LJ::Console;
 use LJ::Event::JournalNewEntry;
-use LJ::Event::UserNewEntry;
 use LJ::Event::AddedToCircle;
 use LJ::Entry;
 use LJ::Poll;
@@ -352,8 +351,6 @@ sub getinbox
         UserExpunged         => 17,
         UserMessageRecvd     => 18,
         UserMessageSent      => 19,
-        UserNewComment       => 20,
-        UserNewEntry         => 21,
     );
     my %number_type = reverse %type_number;
     
@@ -1691,8 +1688,7 @@ sub postevent
     # but still fire the logging events
     unless ( $flags->{nonotify} ) {
         push @jobs, LJ::Event::JournalNewEntry->new($entry)->fire_job;
-        push @jobs, LJ::Event::UserNewEntry->new($entry)->fire_job if LJ::is_enabled('esn-userevents') || $LJ::_T_FIRE_USERNEWENTRY;
-        push @jobs, LJ::Event::OfficialPost->new($entry)->fire_job if $uowner->is_official;        
+        push @jobs, LJ::Event::OfficialPost->new($entry)->fire_job if $uowner->is_official;
 
         # PubSubHubbub Support
         LJ::Feed::generate_hubbub_jobs( $uowner, \@jobs ) unless $uowner->is_syndicated;
diff -r f616643e7fdf -r 89fe44e3e37a t/esn-journalnewentry.t
--- a/t/esn-journalnewentry.t	Wed Nov 10 09:49:22 2010 -0600
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
-# -*-perl-*-
-
-use strict;
-use Test::More;
-use lib "$ENV{LJHOME}/cgi-bin";
-require 'ljlib.pl';
-require 'ljprotocol.pl';
-
-use LJ::Community;
-use LJ::Event;
-use LJ::Test qw(memcache_stress temp_user temp_comm);
-use FindBin qw($Bin);
-
-plan tests => 48;
-
-# so this event firing isn't disabled:
-local $LJ::_T_FIRE_USERNEWENTRY = 1;
-
-# we want to test four major cases here, matching and not matching for
-# two types of subscriptions, all of subscr etypeid = JournalNewEntry
-#
-#          jid   sarg1   sarg2   meaning
-#    S1:     n       0       0   all new posts made by user 'n' (subject to security)
-#    S2:     0       0       0   all new posts made by friends  (test security)
-#    --- NOTE: S2 is currently disabled
-#
-
-my %got_email = ();   # userid -> received email
-
-local $LJ::_T_EMAIL_NOTIFICATION = sub {
-    my ($u, $body) = @_;
-    $got_email{$u->userid}++;
-    return 1;
-};
-
-my $proc_events = sub {
-    %got_email = ();
-    LJ::Event->process_fired_events;
-};
-
-my $got_notified = sub {
-    my $u = shift;
-    $proc_events->();
-    return $got_email{$u->{userid}};
-};
-
-
-my $mem_round = 0;
-my $s1s2;
-
-# testing case S1 above:
-memcache_stress(sub {
-    $mem_round++;
-
-    test_esn_flow(sub {
-        my ($u1, $u2, $ucomm) = @_;
-
-        # subscribe $u1 to all posts by $u2
-        my $subsc = $u1->subscribe(
-                                   event   => "UserNewEntry",
-                                   method  => "Email",
-                                   journal => $u2,
-                                   );
-
-        ok($subsc, "made S1 subscription");
-
-        $s1s2 = "S1";
-        test_post($u1, $u2, $ucomm);
-
-        ok($subsc->delete, "Deleted subscription");
-
-        ###### S2:
-        if (LJ::Event::JournalNewEntry->zero_journalid_subs_means eq "trusted_or_watched") {
-            # subscribe $u1 to all comments on all friends journals
-            # subscribe $u1 to all posts on $u2
-            my $subsc = $u1->subscribe(
-                                       event   => "JournalNewEntry",
-                                       method  => "Email",
-                                       );
-
-            ok($subsc, "made S2 subscription");
-
-            $s1s2 = "S2";
-            test_post($u1, $u2, $ucomm);
-
-            # remove $u2 from $u1's friends list, post in $u2 and make sure $u1 isn't notified
-            $u1->remove_edge( $u2, watch => { nonotify => 1 }, trust => { nonotify => 1 } );
-            $u2->t_post_fake_entry;
-            my $email = $got_notified->($u1);
-            ok(! $email, "u1 did not get notified because u2 is no longer his friend");
-            ok($subsc->delete, "Deleted subscription");
-        }
-
-    });
-});
-
-# post an entry in $u2, by $u2 and make sure $u1 gets notified
-# post an entry in $u1, by $u2 and make sure $u1 doesn't get notified
-# post a friends-only entry in $u2, by $u2 and make sure $u1 doesn't get notified
-# post an entry in $ucomm, by $u2 and make sure $u1 gets notified
-# post an entry in $u1, by $ucomm and make sure $u1 doesn't get notified
-# post a friends-only entry in $ucomm, by $u2 and make sure $u1 doesn't get notified
-sub test_post {
-    my ($u1, $u2, $ucomm) = @_;
-    my $email;
-
-    my $do_post = sub {
-        my ( $u, $usejournal, %opts ) = @_;
-        if ( $usejournal ) {
-            return eval { $u->t_post_fake_comm_entry( $ucomm, %opts ) };
-        } else {
-            return eval { $u->t_post_fake_entry( %opts ) };
-        }
-    };
-
-    # u2 must have membership for usemask posting
-    die unless $u2->add_edge( $ucomm, member => {} );
-    foreach my $usejournal (0..1) {
-        my $suffix = $usejournal ? " in comm" : "";
-
-        my $state = "(state: mem=$mem_round,s1s2=$s1s2,usejournal=$usejournal)";
-
-        # post an entry in $u2
-        my $u2e1 = $do_post->( $u2, $usejournal );
-        ok($u2e1, "made a post$suffix");
-        is($@, "", "no errors");
-
-        # S1 failing case:
-        # post an entry on $u1, where nobody's subscribed
-        my $u1e1 = $do_post->( $u1, $usejournal );
-        ok($u1e1, "did a post$suffix");
-
-        # make sure we did not get notification
-        $email = $got_notified->($u2);
-        ok(! $email, "got no email");
-
-        # S1 failing case, posting to u2, due to security
-        my $u2e2f = $do_post->( $u2, $usejournal, security => "friends" );
-        ok($u2e2f, "did a post$suffix");
-        is($u2e2f->security, "usemask", "is actually friends only");
-
-        # make sure we didn't get notification
-        $email = $got_notified->($u1);
-        ok(! $email, "got no email, due to security (u2 doesn't trust u1)");
-    }
-}
-
-
-sub test_esn_flow {
-    my $cv = shift;
-    my $u1 = temp_user();
-    my $u2 = temp_user();
-
-    # need a community for $u1 and $u2 to play in
-    my $ucomm = temp_comm();
-
-    $u1->add_edge( $u2, watch => { nonotify => 1 }, trust => { nonotify => 1 } ); # make u1 friend u2
-    $cv->($u1, $u2, $ucomm);
-}
-
-1;
-
--------------------------------------------------------------------------------