{"action":"created","comment":{"url":"https://api.github.com/repos/freedomofpress/securedrop/pulls/comments/170720578","pull_request_review_id":99449625,"id":170720578,"diff_hunk":"@@ -0,0 +1,61 @@\n+#!/bin/bash\n+\n+function send_encrypted_alarm() {\n+    /var/ossec/send_encrypted_alarm.sh \"$1\"\n+}\n+\n+function main() {\n+    local sender\n+    local stdin\n+    sender=${1:-send_encrypted_alarm}\n+    stdin=\"$(< /dev/stdin)\"\n+\n+    local count\n+    count=$(echo \"$stdin\" | perl -ne 'print scalar(<>) and exit if(/ossec: output/);')\n+    if [[ \"$count\" =~ ^[0-9]+$ ]] ; then\n+        export SUBJECT=\"Submissions in the past 24h\"\n+        #\n+        # whitespaces below are so the size of both messages are exactly the same\n+        #\n+        if [[ \"$count\" -gt \"0\" ]] ; then\n+            echo \"There has been submission activity in the past 24 hours.   \"\n+            echo \"You should login and check SecureDrop. \"\n+        else\n+            echo \"There has been no submission activity in the past 24 hours.\"\n+            echo \"You do not need to login to SecureDrop.\"\n+        fi | $sender journalist\n+    else\n+        export SUBJECT=\"SecureDrop Submissions Error\"\n+        (\n+            echo \"$0 failed to find the number of submissions in the following OSSEC alert\"\n+            echo\n+            echo \"$stdin\"\n+        ) | $sender ossec\n+    fi\n+}","path":"install_files/ansible-base/roles/ossec/files/process_submissions_today.sh","position":35,"original_position":35,"commit_id":"aef0cde3e4aedc670a00fb5fc054dbd4a200171b","original_commit_id":"0b96cbae4fe4f757a2739777d0531868cc4e4814","user":{"login":"redshiftzero","id":7832803,"avatar_url":"https://avatars3.githubusercontent.com/u/7832803?v=4","gravatar_id":"","url":"https://api.github.com/users/redshiftzero","html_url":"https://github.com/redshiftzero","followers_url":"https://api.github.com/users/redshiftzero/followers","following_url":"https://api.github.com/users/redshiftzero/following{/other_user}","gists_url":"https://api.github.com/users/redshiftzero/gists{/gist_id}","starred_url":"https://api.github.com/users/redshiftzero/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/redshiftzero/subscriptions","organizations_url":"https://api.github.com/users/redshiftzero/orgs","repos_url":"https://api.github.com/users/redshiftzero/repos","events_url":"https://api.github.com/users/redshiftzero/events{/privacy}","received_events_url":"https://api.github.com/users/redshiftzero/received_events","type":"User","site_admin":false},"body":"Ah so when I'm testing a PR where it would be convenient to have both speedy SSH _and_ OSSEC emails, I edit the staging group variables like so:\r\n\r\n```\r\ndiff --git a/install_files/ansible-base/group_vars/staging.yml b/install_files/ansible-base/group_vars/staging.yml\r\nindex c27e5a96..66612ab5 100644\r\n--- a/install_files/ansible-base/group_vars/staging.yml\r\n+++ b/install_files/ansible-base/group_vars/staging.yml\r\n@@ -31,21 +31,10 @@ apache_logging_level: \"info\"\r\n ### Used by the mon role ###\r\n # The OSSEC alert GPG public key has to be in the install_files/ansible-base/ or\r\n # install_files/ansible-base/roles/app/files/ directory\r\n-ossec_alert_gpg_public_key: \"test_admin_key.pub\"\r\n-ossec_gpg_fpr: \"53E1113AC1F25027BA5D475B1141E2BBB5E53711\"\r\n-ossec_alert_email: \"ossec@ossec.test\"\r\n-journalist_alert_gpg_public_key: \"test_admin_key.pub\"\r\n-journalist_gpg_fpr: \"53E1113AC1F25027BA5D475B1141E2BBB5E53711\"\r\n-journalist_alert_email: \"journalist@ossec.test\"\r\n-smtp_relay: \"smtp.faketld\"\r\n-smtp_relay_port: \"587\"\r\n-sasl_username: \"test\"\r\n-sasl_domain: \"ossec.test\"\r\n-sasl_password: \"password123\"\r\n \r\n # Disable Postfix in staging, so we don't hammer Google mail relays\r\n # with known-bad credentials.\r\n-postfix_enable_service: no\r\n+postfix_enable_service: yes\r\n```","created_at":"2018-02-26T20:12:08Z","updated_at":"2018-02-26T20:12:08Z","html_url":"https://github.com/freedomofpress/securedrop/pull/2803#discussion_r170720578","pull_request_url":"https://api.github.com/repos/freedomofpress/securedrop/pulls/2803","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/freedomofpress/securedrop/pulls/comments/170720578"},"html":{"href":"https://github.com/freedomofpress/securedrop/pull/2803#discussion_r170720578"},"pull_request":{"href":"https://api.github.com/repos/freedomofpress/securedrop/pulls/2803"}},"in_reply_to_id":170430840},"pull_request":{"url":"https://api.github.com/repos/freedomofpress/securedrop/pulls/2803","id":161522397,"html_url":"https://github.com/freedomofpress/securedrop/pull/2803","diff_url":"https://github.com/freedomofpress/securedrop/pull/2803.diff","patch_url":"https://github.com/freedomofpress/securedrop/pull/2803.patch","issue_url":"https://api.github.com/repos/freedomofpress/securedrop/issues/2803","number":2803,"state":"open","locked":false,"title":"daily email alert to journalists about submissions received in the past 24h","user":{"login":"dachary","id":433594,"avatar_url":"https://avatars0.githubusercontent.com/u/433594?v=4","gravatar_id":"","url":"https://api.github.com/users/dachary","html_url":"https://github.com/dachary","followers_url":"https://api.github.com/users/dachary/followers","following_url":"https://api.github.com/users/dachary/following{/other_user}","gists_url":"https://api.github.com/users/dachary/gists{/gist_id}","starred_url":"https://api.github.com/users/dachary/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dachary/subscriptions","organizations_url":"https://api.github.com/users/dachary/orgs","repos_url":"https://api.github.com/users/dachary/repos","events_url":"https://api.github.com/users/dachary/events{/privacy}","received_events_url":"https://api.github.com/users/dachary/received_events","type":"User","site_admin":false},"body":"## Status\r\n\r\nReady for Review\r\n\r\n## Description of Changes\r\n\r\nFixes #1195 \r\n\r\nA cron job runs daily on the app server and updates the\r\n\r\n    /var/lib/securedrop/submissions_today.txt\r\n\r\nfile which contains the number of submissions sent in the past 24h, as\r\ncreated by the manage.py how_many_submissions_today command.\r\n\r\nThe OSSEC agent on the app server runs a command daily, displaying\r\nthe content of /var/lib/securedrop/submissions_today.txt. The output\r\nof the command is sent to the OSSEC server.\r\n\r\nA new rule is defined on the OSSEC server to send a mail to when the\r\noutput is received from the OSSEC agent running on the app server.\r\n\r\nA new procmail rule is definied on the OSSEC server to catch mails\r\nencrypt mails containing the /var/lib/securedrop/submissions_today.txt\r\nstring and send them to the email defined by the\r\njournalist_alert_email ansible variable.\r\n\r\nA new set of (optional) ansible variables, similar to\r\nossec_alert_gpg_public_key, ossec_gpg_fpr, ossec_alert_email are\r\ndefined: journalist_alert_gpg_public_key, journalist_gpg_fpr,\r\njournalist_alert_email. They are used to upload a journalist public\r\nkey to the OSSEC server and inserted into the send_encrypted_alarm.sh\r\nscript which handles mails received by procmail.\r\n\r\nThe modified send_encrypted_alarm.sh script takes one\r\nargument (journalist or ossec) and dispatches the mail read from\r\nstdin to the corresponding recipient.\r\n\r\nIntegration tests are implemented to verify the following:\r\n\r\n  * manage.py how_many_submissions_today\r\n  * the app OSSEC agent sends a mail to the journalist address\r\n  * cover all branches of send_encrypted_alarm.sh\r\n\r\n## Testing\r\n\r\n* make build-debs\r\n* vagrant up /staging/\r\n* ./testinfra/test.py staging\r\n<pre>\r\nRunning Testinfra suite against 'staging'...\r\nTarget roles:\r\n    - testinfra/ossec\r\n==================================================================== test session starts =====================================================================\r\nplatform linux2 -- Python 2.7.13, pytest-3.3.1, py-1.5.2, pluggy-0.6.0 -- /home/loic/software/securedrop/virtualenv/bin/python2\r\ncachedir: .cache\r\nrootdir: /home/loic/software/securedrop/securedrop, inifile: setup.cfg\r\nplugins: testinfra-1.7.1, xdist-1.21.0, forked-0.2\r\ncollected 10 items                                                                                                                                           \r\n\r\ntestinfra/ossec/test_journalist_mail.py::TestJournalistMail::test_procmail[ansible://app-staging] SKIPPED                                              [ 10%]\r\ntestinfra/ossec/test_journalist_mail.py::TestJournalistMail::test_send_encrypted_alert[ansible://app-staging] SKIPPED                                  [ 20%]\r\ntestinfra/ossec/test_journalist_mail.py::TestJournalistMail::test_missing_journalist_alert[ansible://app-staging] SKIPPED                              [ 30%]\r\ntestinfra/ossec/test_journalist_mail.py::TestJournalistMail::test_ossec_rule_journalist[ansible://app-staging] SKIPPED                                 [ 40%]\r\ntestinfra/ossec/test_journalist_mail.py::TestJournalistMail::test_journalist_mail_notification[ansible://app-staging] SKIPPED                          [ 50%]\r\ntestinfra/ossec/test_journalist_mail.py::TestJournalistMail::test_procmail[ansible://mon-staging] PASSED                                               [ 60%]\r\ntestinfra/ossec/test_journalist_mail.py::TestJournalistMail::test_send_encrypted_alert[ansible://mon-staging] PASSED                                   [ 70%]\r\ntestinfra/ossec/test_journalist_mail.py::TestJournalistMail::test_missing_journalist_alert[ansible://mon-staging] PASSED                               [ 80%]\r\ntestinfra/ossec/test_journalist_mail.py::TestJournalistMail::test_ossec_rule_journalist[ansible://mon-staging] PASSED                                  [ 90%]\r\ntestinfra/ossec/test_journalist_mail.py::TestJournalistMail::test_journalist_mail_notification[ansible://mon-staging] PASSED                           [100%]\r\n\r\n====================================================================== warnings summary ======================================================================\r\nNone\r\n  Module already imported so cannot be rewritten: testinfra\r\n\r\n-- Docs: http://doc.pytest.org/en/latest/warnings.html\r\n===================================================== 5 passed, 5 skipped, 1 warnings in 106.35 seconds ======================================================\r\n</pre>\r\n\r\n## Comments\r\n\r\nSee the [forum discussion](https://forum.securedrop.club/t/simplifying-testinfra-tests/382) for the rationale behind the **testinfra: remove some XXX tests duplicating Ansible** commits.\r\n\r\n## Deployment\r\n\r\n* The journalist emails is not set for existing installations, nothing will happen\r\n* During sdconfig the admin will be prompted for the email of the journalist and the encryption key. If set, the daily notification mails will be sent.\r\n\r\n## Checklist\r\n\r\n### If you made changes to the app code:\r\n\r\n- [x] Unit and functional tests pass on the development VM\r\n\r\n### If you made changes to the system configuration:\r\n\r\n- [x] [Configuration tests](https://docs.securedrop.org/en/latest/development/testing_configuration_tests.html) pass\r\n\r\n### If you made changes to documentation:\r\n\r\n- [x] Doc linting passed locally\r\n","created_at":"2018-01-07T13:46:29Z","updated_at":"2018-02-26T20:12:08Z","closed_at":null,"merged_at":null,"merge_commit_sha":"da8c1b1d39d80115a78df2a3455ce3cc1fab6447","assignee":null,"assignees":[],"requested_reviewers":[{"login":"conorsch","id":657862,"avatar_url":"https://avatars0.githubusercontent.com/u/657862?v=4","gravatar_id":"","url":"https://api.github.com/users/conorsch","html_url":"https://github.com/conorsch","followers_url":"https://api.github.com/users/conorsch/followers","following_url":"https://api.github.com/users/conorsch/following{/other_user}","gists_url":"https://api.github.com/users/conorsch/gists{/gist_id}","starred_url":"https://api.github.com/users/conorsch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/conorsch/subscriptions","organizations_url":"https://api.github.com/users/conorsch/orgs","repos_url":"https://api.github.com/users/conorsch/repos","events_url":"https://api.github.com/users/conorsch/events{/privacy}","received_events_url":"https://api.github.com/users/conorsch/received_events","type":"User","site_admin":false},{"login":"msheiny","id":1727935,"avatar_url":"https://avatars0.githubusercontent.com/u/1727935?v=4","gravatar_id":"","url":"https://api.github.com/users/msheiny","html_url":"https://github.com/msheiny","followers_url":"https://api.github.com/users/msheiny/followers","following_url":"https://api.github.com/users/msheiny/following{/other_user}","gists_url":"https://api.github.com/users/msheiny/gists{/gist_id}","starred_url":"https://api.github.com/users/msheiny/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/msheiny/subscriptions","organizations_url":"https://api.github.com/users/msheiny/orgs","repos_url":"https://api.github.com/users/msheiny/repos","events_url":"https://api.github.com/users/msheiny/events{/privacy}","received_events_url":"https://api.github.com/users/msheiny/received_events","type":"User","site_admin":false},{"login":"heartsucker","id":3998464,"avatar_url":"https://avatars0.githubusercontent.com/u/3998464?v=4","gravatar_id":"","url":"https://api.github.com/users/heartsucker","html_url":"https://github.com/heartsucker","followers_url":"https://api.github.com/users/heartsucker/followers","following_url":"https://api.github.com/users/heartsucker/following{/other_user}","gists_url":"https://api.github.com/users/heartsucker/gists{/gist_id}","starred_url":"https://api.github.com/users/heartsucker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/heartsucker/subscriptions","organizations_url":"https://api.github.com/users/heartsucker/orgs","repos_url":"https://api.github.com/users/heartsucker/repos","events_url":"https://api.github.com/users/heartsucker/events{/privacy}","received_events_url":"https://api.github.com/users/heartsucker/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":741396371,"url":"https://api.github.com/repos/freedomofpress/securedrop/labels/OSSEC","name":"OSSEC","color":"006b75","default":false},{"id":96394577,"url":"https://api.github.com/repos/freedomofpress/securedrop/labels/feature","name":"feature","color":"fbca04","default":false},{"id":652909251,"url":"https://api.github.com/repos/freedomofpress/securedrop/labels/goals:%20journalist%20experience","name":"goals: journalist experience","color":"0e8a16","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/freedomofpress/securedrop/pulls/2803/commits","review_comments_url":"https://api.github.com/repos/freedomofpress/securedrop/pulls/2803/comments","review_comment_url":"https://api.github.com/repos/freedomofpress/securedrop/pulls/comments{/number}","comments_url":"https://api.github.com/repos/freedomofpress/securedrop/issues/2803/comments","statuses_url":"https://api.github.com/repos/freedomofpress/securedrop/statuses/aef0cde3e4aedc670a00fb5fc054dbd4a200171b","head":{"label":"freedomofpress:wip-dachary-1195-journalist-notification","ref":"wip-dachary-1195-journalist-notification","sha":"aef0cde3e4aedc670a00fb5fc054dbd4a200171b","user":{"login":"freedomofpress","id":5388147,"avatar_url":"https://avatars1.githubusercontent.com/u/5388147?v=4","gravatar_id":"","url":"https://api.github.com/users/freedomofpress","html_url":"https://github.com/freedomofpress","followers_url":"https://api.github.com/users/freedomofpress/followers","following_url":"https://api.github.com/users/freedomofpress/following{/other_user}","gists_url":"https://api.github.com/users/freedomofpress/gists{/gist_id}","starred_url":"https://api.github.com/users/freedomofpress/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/freedomofpress/subscriptions","organizations_url":"https://api.github.com/users/freedomofpress/orgs","repos_url":"https://api.github.com/users/freedomofpress/repos","events_url":"https://api.github.com/users/freedomofpress/events{/privacy}","received_events_url":"https://api.github.com/users/freedomofpress/received_events","type":"Organization","site_admin":false},"repo":{"id":3156820,"name":"securedrop","full_name":"freedomofpress/securedrop","owner":{"login":"freedomofpress","id":5388147,"avatar_url":"https://avatars1.githubusercontent.com/u/5388147?v=4","gravatar_id":"","url":"https://api.github.com/users/freedomofpress","html_url":"https://github.com/freedomofpress","followers_url":"https://api.github.com/users/freedomofpress/followers","following_url":"https://api.github.com/users/freedomofpress/following{/other_user}","gists_url":"https://api.github.com/users/freedomofpress/gists{/gist_id}","starred_url":"https://api.github.com/users/freedomofpress/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/freedomofpress/subscriptions","organizations_url":"https://api.github.com/users/freedomofpress/orgs","repos_url":"https://api.github.com/users/freedomofpress/repos","events_url":"https://api.github.com/users/freedomofpress/events{/privacy}","received_events_url":"https://api.github.com/users/freedomofpress/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/freedomofpress/securedrop","description":"GitHub repository for the SecureDrop whistleblower platform. Do not submit tips here!","fork":false,"url":"https://api.github.com/repos/freedomofpress/securedrop","forks_url":"https://api.github.com/repos/freedomofpress/securedrop/forks","keys_url":"https://api.github.com/repos/freedomofpress/securedrop/keys{/key_id}","collaborators_url":"https://api.github.com/repos/freedomofpress/securedrop/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/freedomofpress/securedrop/teams","hooks_url":"https://api.github.com/repos/freedomofpress/securedrop/hooks","issue_events_url":"https://api.github.com/repos/freedomofpress/securedrop/issues/events{/number}","events_url":"https://api.github.com/repos/freedomofpress/securedrop/events","assignees_url":"https://api.github.com/repos/freedomofpress/securedrop/assignees{/user}","branches_url":"https://api.github.com/repos/freedomofpress/securedrop/branches{/branch}","tags_url":"https://api.github.com/repos/freedomofpress/securedrop/tags","blobs_url":"https://api.github.com/repos/freedomofpress/securedrop/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/freedomofpress/securedrop/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/freedomofpress/securedrop/git/refs{/sha}","trees_url":"https://api.github.com/repos/freedomofpress/securedrop/git/trees{/sha}","statuses_url":"https://api.github.com/repos/freedomofpress/securedrop/statuses/{sha}","languages_url":"https://api.github.com/repos/freedomofpress/securedrop/languages","stargazers_url":"https://api.github.com/repos/freedomofpress/securedrop/stargazers","contributors_url":"https://api.github.com/repos/freedomofpress/securedrop/contributors","subscribers_url":"https://api.github.com/repos/freedomofpress/securedrop/subscribers","subscription_url":"https://api.github.com/repos/freedomofpress/securedrop/subscription","commits_url":"https://api.github.com/repos/freedomofpress/securedrop/commits{/sha}","git_commits_url":"https://api.github.com/repos/freedomofpress/securedrop/git/commits{/sha}","comments_url":"https://api.github.com/repos/freedomofpress/securedrop/comments{/number}","issue_comment_url":"https://api.github.com/repos/freedomofpress/securedrop/issues/comments{/number}","contents_url":"https://api.github.com/repos/freedomofpress/securedrop/contents/{+path}","compare_url":"https://api.github.com/repos/freedomofpress/securedrop/compare/{base}...{head}","merges_url":"https://api.github.com/repos/freedomofpress/securedrop/merges","archive_url":"https://api.github.com/repos/freedomofpress/securedrop/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/freedomofpress/securedrop/downloads","issues_url":"https://api.github.com/repos/freedomofpress/securedrop/issues{/number}","pulls_url":"https://api.github.com/repos/freedomofpress/securedrop/pulls{/number}","milestones_url":"https://api.github.com/repos/freedomofpress/securedrop/milestones{/number}","notifications_url":"https://api.github.com/repos/freedomofpress/securedrop/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/freedomofpress/securedrop/labels{/name}","releases_url":"https://api.github.com/repos/freedomofpress/securedrop/releases{/id}","deployments_url":"https://api.github.com/repos/freedomofpress/securedrop/deployments","created_at":"2012-01-11T19:57:55Z","updated_at":"2018-02-26T20:10:42Z","pushed_at":"2018-02-26T20:11:46Z","git_url":"git://github.com/freedomofpress/securedrop.git","ssh_url":"git@github.com:freedomofpress/securedrop.git","clone_url":"https://github.com/freedomofpress/securedrop.git","svn_url":"https://github.com/freedomofpress/securedrop","homepage":"https://securedrop.org/","size":63913,"stargazers_count":2340,"watchers_count":2340,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":449,"mirror_url":null,"archived":false,"open_issues_count":341,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0"},"forks":449,"open_issues":341,"watchers":2340,"default_branch":"develop"}},"base":{"label":"freedomofpress:develop","ref":"develop","sha":"d87c7118e2ccb9fcfb0544621bc11df2c331dac4","user":{"login":"freedomofpress","id":5388147,"avatar_url":"https://avatars1.githubusercontent.com/u/5388147?v=4","gravatar_id":"","url":"https://api.github.com/users/freedomofpress","html_url":"https://github.com/freedomofpress","followers_url":"https://api.github.com/users/freedomofpress/followers","following_url":"https://api.github.com/users/freedomofpress/following{/other_user}","gists_url":"https://api.github.com/users/freedomofpress/gists{/gist_id}","starred_url":"https://api.github.com/users/freedomofpress/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/freedomofpress/subscriptions","organizations_url":"https://api.github.com/users/freedomofpress/orgs","repos_url":"https://api.github.com/users/freedomofpress/repos","events_url":"https://api.github.com/users/freedomofpress/events{/privacy}","received_events_url":"https://api.github.com/users/freedomofpress/received_events","type":"Organization","site_admin":false},"repo":{"id":3156820,"name":"securedrop","full_name":"freedomofpress/securedrop","owner":{"login":"freedomofpress","id":5388147,"avatar_url":"https://avatars1.githubusercontent.com/u/5388147?v=4","gravatar_id":"","url":"https://api.github.com/users/freedomofpress","html_url":"https://github.com/freedomofpress","followers_url":"https://api.github.com/users/freedomofpress/followers","following_url":"https://api.github.com/users/freedomofpress/following{/other_user}","gists_url":"https://api.github.com/users/freedomofpress/gists{/gist_id}","starred_url":"https://api.github.com/users/freedomofpress/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/freedomofpress/subscriptions","organizations_url":"https://api.github.com/users/freedomofpress/orgs","repos_url":"https://api.github.com/users/freedomofpress/repos","events_url":"https://api.github.com/users/freedomofpress/events{/privacy}","received_events_url":"https://api.github.com/users/freedomofpress/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/freedomofpress/securedrop","description":"GitHub repository for the SecureDrop whistleblower platform. Do not submit tips here!","fork":false,"url":"https://api.github.com/repos/freedomofpress/securedrop","forks_url":"https://api.github.com/repos/freedomofpress/securedrop/forks","keys_url":"https://api.github.com/repos/freedomofpress/securedrop/keys{/key_id}","collaborators_url":"https://api.github.com/repos/freedomofpress/securedrop/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/freedomofpress/securedrop/teams","hooks_url":"https://api.github.com/repos/freedomofpress/securedrop/hooks","issue_events_url":"https://api.github.com/repos/freedomofpress/securedrop/issues/events{/number}","events_url":"https://api.github.com/repos/freedomofpress/securedrop/events","assignees_url":"https://api.github.com/repos/freedomofpress/securedrop/assignees{/user}","branches_url":"https://api.github.com/repos/freedomofpress/securedrop/branches{/branch}","tags_url":"https://api.github.com/repos/freedomofpress/securedrop/tags","blobs_url":"https://api.github.com/repos/freedomofpress/securedrop/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/freedomofpress/securedrop/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/freedomofpress/securedrop/git/refs{/sha}","trees_url":"https://api.github.com/repos/freedomofpress/securedrop/git/trees{/sha}","statuses_url":"https://api.github.com/repos/freedomofpress/securedrop/statuses/{sha}","languages_url":"https://api.github.com/repos/freedomofpress/securedrop/languages","stargazers_url":"https://api.github.com/repos/freedomofpress/securedrop/stargazers","contributors_url":"https://api.github.com/repos/freedomofpress/securedrop/contributors","subscribers_url":"https://api.github.com/repos/freedomofpress/securedrop/subscribers","subscription_url":"https://api.github.com/repos/freedomofpress/securedrop/subscription","commits_url":"https://api.github.com/repos/freedomofpress/securedrop/commits{/sha}","git_commits_url":"https://api.github.com/repos/freedomofpress/securedrop/git/commits{/sha}","comments_url":"https://api.github.com/repos/freedomofpress/securedrop/comments{/number}","issue_comment_url":"https://api.github.com/repos/freedomofpress/securedrop/issues/comments{/number}","contents_url":"https://api.github.com/repos/freedomofpress/securedrop/contents/{+path}","compare_url":"https://api.github.com/repos/freedomofpress/securedrop/compare/{base}...{head}","merges_url":"https://api.github.com/repos/freedomofpress/securedrop/merges","archive_url":"https://api.github.com/repos/freedomofpress/securedrop/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/freedomofpress/securedrop/downloads","issues_url":"https://api.github.com/repos/freedomofpress/securedrop/issues{/number}","pulls_url":"https://api.github.com/repos/freedomofpress/securedrop/pulls{/number}","milestones_url":"https://api.github.com/repos/freedomofpress/securedrop/milestones{/number}","notifications_url":"https://api.github.com/repos/freedomofpress/securedrop/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/freedomofpress/securedrop/labels{/name}","releases_url":"https://api.github.com/repos/freedomofpress/securedrop/releases{/id}","deployments_url":"https://api.github.com/repos/freedomofpress/securedrop/deployments","created_at":"2012-01-11T19:57:55Z","updated_at":"2018-02-26T20:10:42Z","pushed_at":"2018-02-26T20:11:46Z","git_url":"git://github.com/freedomofpress/securedrop.git","ssh_url":"git@github.com:freedomofpress/securedrop.git","clone_url":"https://github.com/freedomofpress/securedrop.git","svn_url":"https://github.com/freedomofpress/securedrop","homepage":"https://securedrop.org/","size":63913,"stargazers_count":2340,"watchers_count":2340,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":449,"mirror_url":null,"archived":false,"open_issues_count":341,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0"},"forks":449,"open_issues":341,"watchers":2340,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/freedomofpress/securedrop/pulls/2803"},"html":{"href":"https://github.com/freedomofpress/securedrop/pull/2803"},"issue":{"href":"https://api.github.com/repos/freedomofpress/securedrop/issues/2803"},"comments":{"href":"https://api.github.com/repos/freedomofpress/securedrop/issues/2803/comments"},"review_comments":{"href":"https://api.github.com/repos/freedomofpress/securedrop/pulls/2803/comments"},"review_comment":{"href":"https://api.github.com/repos/freedomofpress/securedrop/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/freedomofpress/securedrop/pulls/2803/commits"},"statuses":{"href":"https://api.github.com/repos/freedomofpress/securedrop/statuses/aef0cde3e4aedc670a00fb5fc054dbd4a200171b"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"redshiftzero"}}