{"action":"created","comment":{"url":"https://api.github.com/repos/Wikia/app/pulls/comments/59260257","id":59260257,"diff_hunk":"@@ -58,6 +65,37 @@ protected function assertValidPageAddedToCategory() {\n \t\t}\n \t}\n \n+\tpublic function assertCanEmail() {\n+\t\tparent::assertCanEmail();\n+\t\t$this->assertEmailsNotThrottled();\n+\t}\n+\n+\tprivate function assertEmailsNotThrottled() {\n+\t\tglobal $wgMemc;\n+\t\t$emailsSent = (int) $wgMemc->get( $this->getTargetUserCacheKey() );\n+\t\tif ( $emailsSent >=  self::EMAILS_PER_THROTTLE_PERIOD ) {\n+\t\t\tthrow new Check( 'Attempt to send too many emails' );\n+\t\t}\n+\t}\n+\n+\tprotected function afterSuccess() {\n+\t\t$this->incrementEmailsSentCount();\n+\t}\n+\n+\tprivate function incrementEmailsSentCount() {\n+\t\tglobal $wgMemc;\n+\t\t$emailsSent = $wgMemc->get( $this->getTargetUserCacheKey() );\n+\t\tif ( !is_int( $emailsSent ) ) {\n+\t\t\t$wgMemc->set( $this->getTargetUserCacheKey(), 0, time() + self::THROTTLE_PERIOD );","path":"extensions/wikia/Email/Controller/CategoryAddController.class.php","position":39,"original_position":39,"commit_id":"6a18e1403dc780fa9c04ff2d65b7b39e5f3f79b1","original_commit_id":"6a18e1403dc780fa9c04ff2d65b7b39e5f3f79b1","user":{"login":"jsutterfield","id":1657792,"avatar_url":"https://avatars.githubusercontent.com/u/1657792?v=3","gravatar_id":"","url":"https://api.github.com/users/jsutterfield","html_url":"https://github.com/jsutterfield","followers_url":"https://api.github.com/users/jsutterfield/followers","following_url":"https://api.github.com/users/jsutterfield/following{/other_user}","gists_url":"https://api.github.com/users/jsutterfield/gists{/gist_id}","starred_url":"https://api.github.com/users/jsutterfield/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jsutterfield/subscriptions","organizations_url":"https://api.github.com/users/jsutterfield/orgs","repos_url":"https://api.github.com/users/jsutterfield/repos","events_url":"https://api.github.com/users/jsutterfield/events{/privacy}","received_events_url":"https://api.github.com/users/jsutterfield/received_events","type":"User","site_admin":false},"body":"Nope, we initialize to 0, then it's incremented to 1 on L92.","created_at":"2016-04-11T18:53:43Z","updated_at":"2016-04-11T18:53:43Z","html_url":"https://github.com/Wikia/app/pull/10168#discussion_r59260257","pull_request_url":"https://api.github.com/repos/Wikia/app/pulls/10168","_links":{"self":{"href":"https://api.github.com/repos/Wikia/app/pulls/comments/59260257"},"html":{"href":"https://github.com/Wikia/app/pull/10168#discussion_r59260257"},"pull_request":{"href":"https://api.github.com/repos/Wikia/app/pulls/10168"}}},"pull_request":{"url":"https://api.github.com/repos/Wikia/app/pulls/10168","id":65387597,"html_url":"https://github.com/Wikia/app/pull/10168","diff_url":"https://github.com/Wikia/app/pull/10168.diff","patch_url":"https://github.com/Wikia/app/pull/10168.patch","issue_url":"https://api.github.com/repos/Wikia/app/issues/10168","number":10168,"state":"open","locked":false,"title":"SOC-1358 Throttle category add emails","user":{"login":"jsutterfield","id":1657792,"avatar_url":"https://avatars.githubusercontent.com/u/1657792?v=3","gravatar_id":"","url":"https://api.github.com/users/jsutterfield","html_url":"https://github.com/jsutterfield","followers_url":"https://api.github.com/users/jsutterfield/followers","following_url":"https://api.github.com/users/jsutterfield/following{/other_user}","gists_url":"https://api.github.com/users/jsutterfield/gists{/gist_id}","starred_url":"https://api.github.com/users/jsutterfield/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jsutterfield/subscriptions","organizations_url":"https://api.github.com/users/jsutterfield/orgs","repos_url":"https://api.github.com/users/jsutterfield/repos","events_url":"https://api.github.com/users/jsutterfield/events{/privacy}","received_events_url":"https://api.github.com/users/jsutterfield/received_events","type":"User","site_admin":false},"body":"Ticket: https://wikia-inc.atlassian.net/browse/SOC-1358\r\n\r\nThere have been reports by users of mass floods of category add emails (up to 35k) which can be triggered when a commonly used template is edited to include new categories. This PR adds a throttle so we only send up to 10 category add emails every 30 mins.","created_at":"2016-04-05T23:19:31Z","updated_at":"2016-04-11T18:53:43Z","closed_at":null,"merged_at":null,"merge_commit_sha":"784f1ae03b1c73507bdce8947bd1ad35ae993ddd","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/Wikia/app/pulls/10168/commits","review_comments_url":"https://api.github.com/repos/Wikia/app/pulls/10168/comments","review_comment_url":"https://api.github.com/repos/Wikia/app/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Wikia/app/issues/10168/comments","statuses_url":"https://api.github.com/repos/Wikia/app/statuses/6a18e1403dc780fa9c04ff2d65b7b39e5f3f79b1","head":{"label":"Wikia:SOC-1358","ref":"SOC-1358","sha":"6a18e1403dc780fa9c04ff2d65b7b39e5f3f79b1","user":{"login":"Wikia","id":1171011,"avatar_url":"https://avatars.githubusercontent.com/u/1171011?v=3","gravatar_id":"","url":"https://api.github.com/users/Wikia","html_url":"https://github.com/Wikia","followers_url":"https://api.github.com/users/Wikia/followers","following_url":"https://api.github.com/users/Wikia/following{/other_user}","gists_url":"https://api.github.com/users/Wikia/gists{/gist_id}","starred_url":"https://api.github.com/users/Wikia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Wikia/subscriptions","organizations_url":"https://api.github.com/users/Wikia/orgs","repos_url":"https://api.github.com/users/Wikia/repos","events_url":"https://api.github.com/users/Wikia/events{/privacy}","received_events_url":"https://api.github.com/users/Wikia/received_events","type":"Organization","site_admin":false},"repo":{"id":5532313,"name":"app","full_name":"Wikia/app","owner":{"login":"Wikia","id":1171011,"avatar_url":"https://avatars.githubusercontent.com/u/1171011?v=3","gravatar_id":"","url":"https://api.github.com/users/Wikia","html_url":"https://github.com/Wikia","followers_url":"https://api.github.com/users/Wikia/followers","following_url":"https://api.github.com/users/Wikia/following{/other_user}","gists_url":"https://api.github.com/users/Wikia/gists{/gist_id}","starred_url":"https://api.github.com/users/Wikia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Wikia/subscriptions","organizations_url":"https://api.github.com/users/Wikia/orgs","repos_url":"https://api.github.com/users/Wikia/repos","events_url":"https://api.github.com/users/Wikia/events{/privacy}","received_events_url":"https://api.github.com/users/Wikia/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Wikia/app","description":"Wikia Application Code","fork":false,"url":"https://api.github.com/repos/Wikia/app","forks_url":"https://api.github.com/repos/Wikia/app/forks","keys_url":"https://api.github.com/repos/Wikia/app/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Wikia/app/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Wikia/app/teams","hooks_url":"https://api.github.com/repos/Wikia/app/hooks","issue_events_url":"https://api.github.com/repos/Wikia/app/issues/events{/number}","events_url":"https://api.github.com/repos/Wikia/app/events","assignees_url":"https://api.github.com/repos/Wikia/app/assignees{/user}","branches_url":"https://api.github.com/repos/Wikia/app/branches{/branch}","tags_url":"https://api.github.com/repos/Wikia/app/tags","blobs_url":"https://api.github.com/repos/Wikia/app/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Wikia/app/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Wikia/app/git/refs{/sha}","trees_url":"https://api.github.com/repos/Wikia/app/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Wikia/app/statuses/{sha}","languages_url":"https://api.github.com/repos/Wikia/app/languages","stargazers_url":"https://api.github.com/repos/Wikia/app/stargazers","contributors_url":"https://api.github.com/repos/Wikia/app/contributors","subscribers_url":"https://api.github.com/repos/Wikia/app/subscribers","subscription_url":"https://api.github.com/repos/Wikia/app/subscription","commits_url":"https://api.github.com/repos/Wikia/app/commits{/sha}","git_commits_url":"https://api.github.com/repos/Wikia/app/git/commits{/sha}","comments_url":"https://api.github.com/repos/Wikia/app/comments{/number}","issue_comment_url":"https://api.github.com/repos/Wikia/app/issues/comments{/number}","contents_url":"https://api.github.com/repos/Wikia/app/contents/{+path}","compare_url":"https://api.github.com/repos/Wikia/app/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Wikia/app/merges","archive_url":"https://api.github.com/repos/Wikia/app/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Wikia/app/downloads","issues_url":"https://api.github.com/repos/Wikia/app/issues{/number}","pulls_url":"https://api.github.com/repos/Wikia/app/pulls{/number}","milestones_url":"https://api.github.com/repos/Wikia/app/milestones{/number}","notifications_url":"https://api.github.com/repos/Wikia/app/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Wikia/app/labels{/name}","releases_url":"https://api.github.com/repos/Wikia/app/releases{/id}","deployments_url":"https://api.github.com/repos/Wikia/app/deployments","created_at":"2012-08-23T20:55:58Z","updated_at":"2016-04-06T08:17:14Z","pushed_at":"2016-04-11T17:28:54Z","git_url":"git://github.com/Wikia/app.git","ssh_url":"git@github.com:Wikia/app.git","clone_url":"https://github.com/Wikia/app.git","svn_url":"https://github.com/Wikia/app","homepage":"http://dev.wikia.com","size":693933,"stargazers_count":96,"watchers_count":96,"language":"PHP","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":78,"mirror_url":null,"open_issues_count":97,"forks":78,"open_issues":97,"watchers":96,"default_branch":"dev"}},"base":{"label":"Wikia:dev","ref":"dev","sha":"e3bfbf8a7cbda4aefa7b18275cad3779ab131f21","user":{"login":"Wikia","id":1171011,"avatar_url":"https://avatars.githubusercontent.com/u/1171011?v=3","gravatar_id":"","url":"https://api.github.com/users/Wikia","html_url":"https://github.com/Wikia","followers_url":"https://api.github.com/users/Wikia/followers","following_url":"https://api.github.com/users/Wikia/following{/other_user}","gists_url":"https://api.github.com/users/Wikia/gists{/gist_id}","starred_url":"https://api.github.com/users/Wikia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Wikia/subscriptions","organizations_url":"https://api.github.com/users/Wikia/orgs","repos_url":"https://api.github.com/users/Wikia/repos","events_url":"https://api.github.com/users/Wikia/events{/privacy}","received_events_url":"https://api.github.com/users/Wikia/received_events","type":"Organization","site_admin":false},"repo":{"id":5532313,"name":"app","full_name":"Wikia/app","owner":{"login":"Wikia","id":1171011,"avatar_url":"https://avatars.githubusercontent.com/u/1171011?v=3","gravatar_id":"","url":"https://api.github.com/users/Wikia","html_url":"https://github.com/Wikia","followers_url":"https://api.github.com/users/Wikia/followers","following_url":"https://api.github.com/users/Wikia/following{/other_user}","gists_url":"https://api.github.com/users/Wikia/gists{/gist_id}","starred_url":"https://api.github.com/users/Wikia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Wikia/subscriptions","organizations_url":"https://api.github.com/users/Wikia/orgs","repos_url":"https://api.github.com/users/Wikia/repos","events_url":"https://api.github.com/users/Wikia/events{/privacy}","received_events_url":"https://api.github.com/users/Wikia/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Wikia/app","description":"Wikia Application Code","fork":false,"url":"https://api.github.com/repos/Wikia/app","forks_url":"https://api.github.com/repos/Wikia/app/forks","keys_url":"https://api.github.com/repos/Wikia/app/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Wikia/app/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Wikia/app/teams","hooks_url":"https://api.github.com/repos/Wikia/app/hooks","issue_events_url":"https://api.github.com/repos/Wikia/app/issues/events{/number}","events_url":"https://api.github.com/repos/Wikia/app/events","assignees_url":"https://api.github.com/repos/Wikia/app/assignees{/user}","branches_url":"https://api.github.com/repos/Wikia/app/branches{/branch}","tags_url":"https://api.github.com/repos/Wikia/app/tags","blobs_url":"https://api.github.com/repos/Wikia/app/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Wikia/app/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Wikia/app/git/refs{/sha}","trees_url":"https://api.github.com/repos/Wikia/app/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Wikia/app/statuses/{sha}","languages_url":"https://api.github.com/repos/Wikia/app/languages","stargazers_url":"https://api.github.com/repos/Wikia/app/stargazers","contributors_url":"https://api.github.com/repos/Wikia/app/contributors","subscribers_url":"https://api.github.com/repos/Wikia/app/subscribers","subscription_url":"https://api.github.com/repos/Wikia/app/subscription","commits_url":"https://api.github.com/repos/Wikia/app/commits{/sha}","git_commits_url":"https://api.github.com/repos/Wikia/app/git/commits{/sha}","comments_url":"https://api.github.com/repos/Wikia/app/comments{/number}","issue_comment_url":"https://api.github.com/repos/Wikia/app/issues/comments{/number}","contents_url":"https://api.github.com/repos/Wikia/app/contents/{+path}","compare_url":"https://api.github.com/repos/Wikia/app/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Wikia/app/merges","archive_url":"https://api.github.com/repos/Wikia/app/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Wikia/app/downloads","issues_url":"https://api.github.com/repos/Wikia/app/issues{/number}","pulls_url":"https://api.github.com/repos/Wikia/app/pulls{/number}","milestones_url":"https://api.github.com/repos/Wikia/app/milestones{/number}","notifications_url":"https://api.github.com/repos/Wikia/app/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Wikia/app/labels{/name}","releases_url":"https://api.github.com/repos/Wikia/app/releases{/id}","deployments_url":"https://api.github.com/repos/Wikia/app/deployments","created_at":"2012-08-23T20:55:58Z","updated_at":"2016-04-06T08:17:14Z","pushed_at":"2016-04-11T17:28:54Z","git_url":"git://github.com/Wikia/app.git","ssh_url":"git@github.com:Wikia/app.git","clone_url":"https://github.com/Wikia/app.git","svn_url":"https://github.com/Wikia/app","homepage":"http://dev.wikia.com","size":693933,"stargazers_count":96,"watchers_count":96,"language":"PHP","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":78,"mirror_url":null,"open_issues_count":97,"forks":78,"open_issues":97,"watchers":96,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/Wikia/app/pulls/10168"},"html":{"href":"https://github.com/Wikia/app/pull/10168"},"issue":{"href":"https://api.github.com/repos/Wikia/app/issues/10168"},"comments":{"href":"https://api.github.com/repos/Wikia/app/issues/10168/comments"},"review_comments":{"href":"https://api.github.com/repos/Wikia/app/pulls/10168/comments"},"review_comment":{"href":"https://api.github.com/repos/Wikia/app/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Wikia/app/pulls/10168/commits"},"statuses":{"href":"https://api.github.com/repos/Wikia/app/statuses/6a18e1403dc780fa9c04ff2d65b7b39e5f3f79b1"}}}}