{"action":"created","comment":{"url":"https://api.github.com/repos/rails/rails/pulls/comments/127781840","pull_request_review_id":50401019,"id":127781840,"diff_hunk":"@@ -13,12 +13,12 @@ class Railtie < Rails::Railtie # :nodoc:\n     config.action_dispatch.default_charset = nil\n     config.action_dispatch.rack_cache = false\n     config.action_dispatch.http_auth_salt = \"http authentication\"\n-    config.action_dispatch.signed_cookie_salt = \"signed cookie\"\n-    config.action_dispatch.encrypted_cookie_salt = \"encrypted cookie\"\n-    config.action_dispatch.encrypted_signed_cookie_salt = \"signed encrypted cookie\"\n     config.action_dispatch.use_authenticated_cookie_encryption = false\n     config.action_dispatch.perform_deep_munge = true\n \n+    config.action_dispatch.legacy_encryptor_schemes = []\n+    config.action_dispatch.legacy_verifier_schemes  = []","path":"actionpack/lib/action_dispatch/railtie.rb","position":11,"original_position":11,"commit_id":"c7405d28c329b958cbd6464addd78436bcc9b7f1","original_commit_id":"c7405d28c329b958cbd6464addd78436bcc9b7f1","user":{"login":"kaspth","id":350807,"avatar_url":"https://avatars0.githubusercontent.com/u/350807?v=4","gravatar_id":"","url":"https://api.github.com/users/kaspth","html_url":"https://github.com/kaspth","followers_url":"https://api.github.com/users/kaspth/followers","following_url":"https://api.github.com/users/kaspth/following{/other_user}","gists_url":"https://api.github.com/users/kaspth/gists{/gist_id}","starred_url":"https://api.github.com/users/kaspth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kaspth/subscriptions","organizations_url":"https://api.github.com/users/kaspth/orgs","repos_url":"https://api.github.com/users/kaspth/repos","events_url":"https://api.github.com/users/kaspth/events{/privacy}","received_events_url":"https://api.github.com/users/kaspth/received_events","type":"User","site_admin":false},"body":"How about just `verifiers` and `encryptors`? We should support passing a message verifier or encryptor instance to `rotate_out`, which I forgot to add above.\r\n\r\nI'm still on the fence about the `_out` suffix. Do think you think just `config.secrets.rotate` would be clear enough to imply that it's the old value that goes there?","created_at":"2017-07-17T18:11:54Z","updated_at":"2017-07-17T18:11:54Z","html_url":"https://github.com/rails/rails/pull/29716#discussion_r127781840","pull_request_url":"https://api.github.com/repos/rails/rails/pulls/29716","_links":{"self":{"href":"https://api.github.com/repos/rails/rails/pulls/comments/127781840"},"html":{"href":"https://github.com/rails/rails/pull/29716#discussion_r127781840"},"pull_request":{"href":"https://api.github.com/repos/rails/rails/pulls/29716"}}},"pull_request":{"url":"https://api.github.com/repos/rails/rails/pulls/29716","id":129509350,"html_url":"https://github.com/rails/rails/pull/29716","diff_url":"https://github.com/rails/rails/pull/29716.diff","patch_url":"https://github.com/rails/rails/pull/29716.patch","issue_url":"https://api.github.com/repos/rails/rails/issues/29716","number":29716,"state":"open","locked":false,"title":"Add ActiveSupport::KeyRotator and simplify the Cookies middleware","user":{"login":"mikeycgto","id":82063,"avatar_url":"https://avatars2.githubusercontent.com/u/82063?v=4","gravatar_id":"","url":"https://api.github.com/users/mikeycgto","html_url":"https://github.com/mikeycgto","followers_url":"https://api.github.com/users/mikeycgto/followers","following_url":"https://api.github.com/users/mikeycgto/following{/other_user}","gists_url":"https://api.github.com/users/mikeycgto/gists{/gist_id}","starred_url":"https://api.github.com/users/mikeycgto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikeycgto/subscriptions","organizations_url":"https://api.github.com/users/mikeycgto/orgs","repos_url":"https://api.github.com/users/mikeycgto/repos","events_url":"https://api.github.com/users/mikeycgto/events{/privacy}","received_events_url":"https://api.github.com/users/mikeycgto/received_events","type":"User","site_admin":false},"body":"### Summary\r\n\r\nThis PR introduces `ActiveSupport::KeyRotator` which wraps `KeyGenerator` as well as `MessageEncryptor` and `MessageVerifier` and provides an interface for easily rotating between different encryption ciphers or message digests, salts, and secrets.\r\n\r\nThis PR also simplifies the cookies middleware and removes several of the internal legacy middlewares. Upgrading both signed and encrypted legacy cookies is now handled by rotation capable middlewares which each use a `KeyRotator` instance. Is also introduces a new interface for configuring the middleware.\r\n\r\n### Other Information\r\n\r\nThis feature spawned from discussions had in the Rails’ basecamp.\r\n\r\nI still need to update the configuring and security markdown guides with details of this change. I plan on adding a new section the security guide detailing how secrets and salts can be rotated. I also want to add more rotation tests to `railties/test/application/middleware/cookies_test.rb`.\r\n\r\nAny and all feedback is welcomed!\r\n\r\n/cc @matthewd @kaspth\r\n","created_at":"2017-07-08T00:32:48Z","updated_at":"2017-07-17T18:11:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2aec2bdf1acd1938fa151d967acf04d17f4ec988","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/rails/rails/pulls/29716/commits","review_comments_url":"https://api.github.com/repos/rails/rails/pulls/29716/comments","review_comment_url":"https://api.github.com/repos/rails/rails/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rails/rails/issues/29716/comments","statuses_url":"https://api.github.com/repos/rails/rails/statuses/c7405d28c329b958cbd6464addd78436bcc9b7f1","head":{"label":"mikeycgto:active-support-key-rotator","ref":"active-support-key-rotator","sha":"c7405d28c329b958cbd6464addd78436bcc9b7f1","user":{"login":"mikeycgto","id":82063,"avatar_url":"https://avatars2.githubusercontent.com/u/82063?v=4","gravatar_id":"","url":"https://api.github.com/users/mikeycgto","html_url":"https://github.com/mikeycgto","followers_url":"https://api.github.com/users/mikeycgto/followers","following_url":"https://api.github.com/users/mikeycgto/following{/other_user}","gists_url":"https://api.github.com/users/mikeycgto/gists{/gist_id}","starred_url":"https://api.github.com/users/mikeycgto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikeycgto/subscriptions","organizations_url":"https://api.github.com/users/mikeycgto/orgs","repos_url":"https://api.github.com/users/mikeycgto/repos","events_url":"https://api.github.com/users/mikeycgto/events{/privacy}","received_events_url":"https://api.github.com/users/mikeycgto/received_events","type":"User","site_admin":false},"repo":{"id":82952343,"name":"rails","full_name":"mikeycgto/rails","owner":{"login":"mikeycgto","id":82063,"avatar_url":"https://avatars2.githubusercontent.com/u/82063?v=4","gravatar_id":"","url":"https://api.github.com/users/mikeycgto","html_url":"https://github.com/mikeycgto","followers_url":"https://api.github.com/users/mikeycgto/followers","following_url":"https://api.github.com/users/mikeycgto/following{/other_user}","gists_url":"https://api.github.com/users/mikeycgto/gists{/gist_id}","starred_url":"https://api.github.com/users/mikeycgto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikeycgto/subscriptions","organizations_url":"https://api.github.com/users/mikeycgto/orgs","repos_url":"https://api.github.com/users/mikeycgto/repos","events_url":"https://api.github.com/users/mikeycgto/events{/privacy}","received_events_url":"https://api.github.com/users/mikeycgto/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikeycgto/rails","description":"Ruby on Rails","fork":true,"url":"https://api.github.com/repos/mikeycgto/rails","forks_url":"https://api.github.com/repos/mikeycgto/rails/forks","keys_url":"https://api.github.com/repos/mikeycgto/rails/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikeycgto/rails/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikeycgto/rails/teams","hooks_url":"https://api.github.com/repos/mikeycgto/rails/hooks","issue_events_url":"https://api.github.com/repos/mikeycgto/rails/issues/events{/number}","events_url":"https://api.github.com/repos/mikeycgto/rails/events","assignees_url":"https://api.github.com/repos/mikeycgto/rails/assignees{/user}","branches_url":"https://api.github.com/repos/mikeycgto/rails/branches{/branch}","tags_url":"https://api.github.com/repos/mikeycgto/rails/tags","blobs_url":"https://api.github.com/repos/mikeycgto/rails/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikeycgto/rails/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikeycgto/rails/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikeycgto/rails/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikeycgto/rails/statuses/{sha}","languages_url":"https://api.github.com/repos/mikeycgto/rails/languages","stargazers_url":"https://api.github.com/repos/mikeycgto/rails/stargazers","contributors_url":"https://api.github.com/repos/mikeycgto/rails/contributors","subscribers_url":"https://api.github.com/repos/mikeycgto/rails/subscribers","subscription_url":"https://api.github.com/repos/mikeycgto/rails/subscription","commits_url":"https://api.github.com/repos/mikeycgto/rails/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikeycgto/rails/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikeycgto/rails/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikeycgto/rails/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikeycgto/rails/contents/{+path}","compare_url":"https://api.github.com/repos/mikeycgto/rails/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikeycgto/rails/merges","archive_url":"https://api.github.com/repos/mikeycgto/rails/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikeycgto/rails/downloads","issues_url":"https://api.github.com/repos/mikeycgto/rails/issues{/number}","pulls_url":"https://api.github.com/repos/mikeycgto/rails/pulls{/number}","milestones_url":"https://api.github.com/repos/mikeycgto/rails/milestones{/number}","notifications_url":"https://api.github.com/repos/mikeycgto/rails/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikeycgto/rails/labels{/name}","releases_url":"https://api.github.com/repos/mikeycgto/rails/releases{/id}","deployments_url":"https://api.github.com/repos/mikeycgto/rails/deployments","created_at":"2017-02-23T17:22:21Z","updated_at":"2017-02-23T17:22:59Z","pushed_at":"2017-07-08T17:35:09Z","git_url":"git://github.com/mikeycgto/rails.git","ssh_url":"git@github.com:mikeycgto/rails.git","clone_url":"https://github.com/mikeycgto/rails.git","svn_url":"https://github.com/mikeycgto/rails","homepage":"http://rubyonrails.org","size":150010,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"rails:master","ref":"master","sha":"1990c8f9b63aaa3b766c8ddf745f25cf8822b332","user":{"login":"rails","id":4223,"avatar_url":"https://avatars1.githubusercontent.com/u/4223?v=4","gravatar_id":"","url":"https://api.github.com/users/rails","html_url":"https://github.com/rails","followers_url":"https://api.github.com/users/rails/followers","following_url":"https://api.github.com/users/rails/following{/other_user}","gists_url":"https://api.github.com/users/rails/gists{/gist_id}","starred_url":"https://api.github.com/users/rails/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rails/subscriptions","organizations_url":"https://api.github.com/users/rails/orgs","repos_url":"https://api.github.com/users/rails/repos","events_url":"https://api.github.com/users/rails/events{/privacy}","received_events_url":"https://api.github.com/users/rails/received_events","type":"Organization","site_admin":false},"repo":{"id":8514,"name":"rails","full_name":"rails/rails","owner":{"login":"rails","id":4223,"avatar_url":"https://avatars1.githubusercontent.com/u/4223?v=4","gravatar_id":"","url":"https://api.github.com/users/rails","html_url":"https://github.com/rails","followers_url":"https://api.github.com/users/rails/followers","following_url":"https://api.github.com/users/rails/following{/other_user}","gists_url":"https://api.github.com/users/rails/gists{/gist_id}","starred_url":"https://api.github.com/users/rails/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rails/subscriptions","organizations_url":"https://api.github.com/users/rails/orgs","repos_url":"https://api.github.com/users/rails/repos","events_url":"https://api.github.com/users/rails/events{/privacy}","received_events_url":"https://api.github.com/users/rails/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rails/rails","description":"Ruby on Rails","fork":false,"url":"https://api.github.com/repos/rails/rails","forks_url":"https://api.github.com/repos/rails/rails/forks","keys_url":"https://api.github.com/repos/rails/rails/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rails/rails/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rails/rails/teams","hooks_url":"https://api.github.com/repos/rails/rails/hooks","issue_events_url":"https://api.github.com/repos/rails/rails/issues/events{/number}","events_url":"https://api.github.com/repos/rails/rails/events","assignees_url":"https://api.github.com/repos/rails/rails/assignees{/user}","branches_url":"https://api.github.com/repos/rails/rails/branches{/branch}","tags_url":"https://api.github.com/repos/rails/rails/tags","blobs_url":"https://api.github.com/repos/rails/rails/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rails/rails/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rails/rails/git/refs{/sha}","trees_url":"https://api.github.com/repos/rails/rails/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rails/rails/statuses/{sha}","languages_url":"https://api.github.com/repos/rails/rails/languages","stargazers_url":"https://api.github.com/repos/rails/rails/stargazers","contributors_url":"https://api.github.com/repos/rails/rails/contributors","subscribers_url":"https://api.github.com/repos/rails/rails/subscribers","subscription_url":"https://api.github.com/repos/rails/rails/subscription","commits_url":"https://api.github.com/repos/rails/rails/commits{/sha}","git_commits_url":"https://api.github.com/repos/rails/rails/git/commits{/sha}","comments_url":"https://api.github.com/repos/rails/rails/comments{/number}","issue_comment_url":"https://api.github.com/repos/rails/rails/issues/comments{/number}","contents_url":"https://api.github.com/repos/rails/rails/contents/{+path}","compare_url":"https://api.github.com/repos/rails/rails/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rails/rails/merges","archive_url":"https://api.github.com/repos/rails/rails/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rails/rails/downloads","issues_url":"https://api.github.com/repos/rails/rails/issues{/number}","pulls_url":"https://api.github.com/repos/rails/rails/pulls{/number}","milestones_url":"https://api.github.com/repos/rails/rails/milestones{/number}","notifications_url":"https://api.github.com/repos/rails/rails/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rails/rails/labels{/name}","releases_url":"https://api.github.com/repos/rails/rails/releases{/id}","deployments_url":"https://api.github.com/repos/rails/rails/deployments","created_at":"2008-04-11T02:19:47Z","updated_at":"2017-07-17T17:53:43Z","pushed_at":"2017-07-17T18:00:00Z","git_url":"git://github.com/rails/rails.git","ssh_url":"git@github.com:rails/rails.git","clone_url":"https://github.com/rails/rails.git","svn_url":"https://github.com/rails/rails","homepage":"http://rubyonrails.org","size":151198,"stargazers_count":36337,"watchers_count":36337,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":14818,"mirror_url":null,"open_issues_count":1179,"forks":14818,"open_issues":1179,"watchers":36337,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rails/rails/pulls/29716"},"html":{"href":"https://github.com/rails/rails/pull/29716"},"issue":{"href":"https://api.github.com/repos/rails/rails/issues/29716"},"comments":{"href":"https://api.github.com/repos/rails/rails/issues/29716/comments"},"review_comments":{"href":"https://api.github.com/repos/rails/rails/pulls/29716/comments"},"review_comment":{"href":"https://api.github.com/repos/rails/rails/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rails/rails/pulls/29716/commits"},"statuses":{"href":"https://api.github.com/repos/rails/rails/statuses/c7405d28c329b958cbd6464addd78436bcc9b7f1"}}}}
{"actor":{"display_login":"kaspth"}}