{"action":"created","comment":{"url":"https://api.github.com/repos/screwdriver-cd/screwdriver/pulls/comments/192131368","pull_request_review_id":124845725,"id":192131368,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5MjEzMTM2OA==","diff_hunk":"@@ -0,0 +1,60 @@\n+'use strict';\n+\n+const boom = require('boom');\n+const schema = require('screwdriver-data-schema');\n+\n+module.exports = () => ({\n+    method: 'POST',\n+    path: '/builds/{id}/token',\n+    config: {\n+        description: 'Generate a JWT for use throughout a given build',\n+        notes: 'Generate a JWT for build using temporal JWT which passed in',\n+        tags: ['api', 'builds', 'build_token'],\n+        auth: {\n+            strategies: ['token'],\n+            scope: ['temporal']\n+        },\n+        plugins: {\n+            'hapi-swagger': {\n+                security: [{ token: [] }]\n+            }\n+        },\n+        handler: (request, reply) => {\n+            const profile = request.auth.credentials;\n+            const buildTimeout = request.payload.buildTimeout;\n+            const buildFactory = request.server.app.buildFactory;\n+\n+            return buildFactory.get(request.params.id).then((build) => {\n+                if (!build) {\n+                    throw boom.notFound('Build does not exist');\n+                }\n+\n+                if (parseInt(request.params.id, 10) !== parseInt(profile.username, 10)) {\n+                    throw boom.notFound('Build Id parameter and token does not match');\n+                }\n+\n+                if (build.status !== 'QUEUED') {","path":"plugins/builds/token.js","position":36,"original_position":36,"commit_id":"65bd0968d77a7739ed25f8c534f1839bab90abd1","original_commit_id":"65bd0968d77a7739ed25f8c534f1839bab90abd1","user":{"login":"jithin1987","id":193126,"node_id":"MDQ6VXNlcjE5MzEyNg==","avatar_url":"https://avatars2.githubusercontent.com/u/193126?v=4","gravatar_id":"","url":"https://api.github.com/users/jithin1987","html_url":"https://github.com/jithin1987","followers_url":"https://api.github.com/users/jithin1987/followers","following_url":"https://api.github.com/users/jithin1987/following{/other_user}","gists_url":"https://api.github.com/users/jithin1987/gists{/gist_id}","starred_url":"https://api.github.com/users/jithin1987/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jithin1987/subscriptions","organizations_url":"https://api.github.com/users/jithin1987/orgs","repos_url":"https://api.github.com/users/jithin1987/repos","events_url":"https://api.github.com/users/jithin1987/events{/privacy}","received_events_url":"https://api.github.com/users/jithin1987/received_events","type":"User","site_admin":false},"body":"We should keep an eye onthis in case we introduce new status for blocked or frozen jobs.","created_at":"2018-05-31T15:03:29Z","updated_at":"2018-05-31T15:06:13Z","html_url":"https://github.com/screwdriver-cd/screwdriver/pull/1087#discussion_r192131368","pull_request_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/pulls/1087","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/screwdriver-cd/screwdriver/pulls/comments/192131368"},"html":{"href":"https://github.com/screwdriver-cd/screwdriver/pull/1087#discussion_r192131368"},"pull_request":{"href":"https://api.github.com/repos/screwdriver-cd/screwdriver/pulls/1087"}}},"pull_request":{"url":"https://api.github.com/repos/screwdriver-cd/screwdriver/pulls/1087","id":190455693,"node_id":"MDExOlB1bGxSZXF1ZXN0MTkwNDU1Njkz","html_url":"https://github.com/screwdriver-cd/screwdriver/pull/1087","diff_url":"https://github.com/screwdriver-cd/screwdriver/pull/1087.diff","patch_url":"https://github.com/screwdriver-cd/screwdriver/pull/1087.patch","issue_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/issues/1087","number":1087,"state":"open","locked":false,"title":"[1] fix(1030): Add API to generate JWT for build using temporal JWT","user":{"login":"sakka2","id":16560466,"node_id":"MDQ6VXNlcjE2NTYwNDY2","avatar_url":"https://avatars0.githubusercontent.com/u/16560466?v=4","gravatar_id":"","url":"https://api.github.com/users/sakka2","html_url":"https://github.com/sakka2","followers_url":"https://api.github.com/users/sakka2/followers","following_url":"https://api.github.com/users/sakka2/following{/other_user}","gists_url":"https://api.github.com/users/sakka2/gists{/gist_id}","starred_url":"https://api.github.com/users/sakka2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sakka2/subscriptions","organizations_url":"https://api.github.com/users/sakka2/orgs","repos_url":"https://api.github.com/users/sakka2/repos","events_url":"https://api.github.com/users/sakka2/events{/privacy}","received_events_url":"https://api.github.com/users/sakka2/received_events","type":"User","site_admin":false},"body":"## Context\r\nJWT is hardcoded to expire in 2 hours.\r\nSo, there is a case that JWT expires before the build timeout.\r\nSee this [issue #998](https://github.com/screwdriver-cd/screwdriver/issues/998).\r\nSee this [issue #1075](https://github.com/screwdriver-cd/screwdriver/issues/1075).\r\n\r\n## Objective \r\nExpires time of JWT should be configurable based on the build timeout.\r\nJWT token need to generate when an executor actually runs the build so that it's expiry time starts from actual build execution.\r\n\r\n### 1.  Add the new API endpoint to generate build JWT.\r\n**request_URL:**  `/v4/builds/{id}/token`\r\n**request_body:** \r\n{\r\n    `\"expiresSec\": \"3700\"`\r\n}\r\n**rquestHeader:** Authorization: Bearer `{temporal JWT}`\r\n\r\n**response_body:**\r\n{\r\n    `\"jwt\": xxxxxxxxxxxxxxxxx (build JWT)`\r\n}\r\n\r\n### 2. In every build, firstly generate temporal JWT.\r\nIn `buildFactory.tokenGen()` method, make changes to always generate temporal JWT.\r\nJWT scope will be changed from `['build']` to `['temporal']`.\r\nhttps://github.com/screwdriver-cd/screwdriver/pull/1062/files#diff-c945a46d13b34fcaff544d966cffcabaR128\r\n\r\n### 3.  In each executor, generate build JWT with calling new API.\r\nFor each `executor.start()` method,  add the process to call the new API endpoint for getting build JWT using temporal JWT passed in, except for `executor-queue`.\r\nIn case `executor-queue`, set the temporal JWT to Redis table, \r\nand in `queue-worker`, `executor.start()` method such as executor-k8s and executor-k8s-vm will call the new API with this temporal JWT as I wrote above.\r\nhttps://github.com/screwdriver-cd/queue-worker/blob/master/lib/jobs.js#L49\r\n\r\n### 4.   Add `expiresIn` argument into generationToken() method in API\r\nAdd `expiresIn` argument into [generateToken](https://github.com/screwdriver-cd/screwdriver/pull/1087/files#diff-cc45542b37e76ced3e366e4aa20f512cR90) method.\r\n\r\n## References\r\n- Issues: \r\n　https://github.com/screwdriver-cd/screwdriver/issues/998\r\n　https://github.com/screwdriver-cd/screwdriver/issues/1030\r\n　https://github.com/screwdriver-cd/screwdriver/issues/1075\r\n- Related: (other PRs)\r\n　https://github.com/screwdriver-cd/screwdriver/pull/1087\r\n　https://github.com/screwdriver-cd/models/pull/245\r\n　https://github.com/screwdriver-cd/executor-base/pull/42\r\n　https://github.com/screwdriver-cd/executor-k8s/pull/84\r\n　https://github.com/screwdriver-cd/executor-k8s-vm/pull/33\r\n　https://github.com/screwdriver-cd/executor-docker/pull/25\r\n　https://github.com/screwdriver-cd/executor-jenkins/pull/20","created_at":"2018-05-25T00:43:03Z","updated_at":"2018-05-31T15:06:13Z","closed_at":null,"merged_at":null,"merge_commit_sha":"88ba1de11fadbba4e37ff1555c251cbc96a9456d","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/pulls/1087/commits","review_comments_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/pulls/1087/comments","review_comment_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/pulls/comments{/number}","comments_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/issues/1087/comments","statuses_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/statuses/65bd0968d77a7739ed25f8c534f1839bab90abd1","head":{"label":"sonic-screwdriver-cd:expires_jwt","ref":"expires_jwt","sha":"65bd0968d77a7739ed25f8c534f1839bab90abd1","user":{"login":"sonic-screwdriver-cd","id":30816763,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMwODE2NzYz","avatar_url":"https://avatars3.githubusercontent.com/u/30816763?v=4","gravatar_id":"","url":"https://api.github.com/users/sonic-screwdriver-cd","html_url":"https://github.com/sonic-screwdriver-cd","followers_url":"https://api.github.com/users/sonic-screwdriver-cd/followers","following_url":"https://api.github.com/users/sonic-screwdriver-cd/following{/other_user}","gists_url":"https://api.github.com/users/sonic-screwdriver-cd/gists{/gist_id}","starred_url":"https://api.github.com/users/sonic-screwdriver-cd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sonic-screwdriver-cd/subscriptions","organizations_url":"https://api.github.com/users/sonic-screwdriver-cd/orgs","repos_url":"https://api.github.com/users/sonic-screwdriver-cd/repos","events_url":"https://api.github.com/users/sonic-screwdriver-cd/events{/privacy}","received_events_url":"https://api.github.com/users/sonic-screwdriver-cd/received_events","type":"Organization","site_admin":false},"repo":{"id":99976224,"node_id":"MDEwOlJlcG9zaXRvcnk5OTk3NjIyNA==","name":"screwdriver","full_name":"sonic-screwdriver-cd/screwdriver","owner":{"login":"sonic-screwdriver-cd","id":30816763,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMwODE2NzYz","avatar_url":"https://avatars3.githubusercontent.com/u/30816763?v=4","gravatar_id":"","url":"https://api.github.com/users/sonic-screwdriver-cd","html_url":"https://github.com/sonic-screwdriver-cd","followers_url":"https://api.github.com/users/sonic-screwdriver-cd/followers","following_url":"https://api.github.com/users/sonic-screwdriver-cd/following{/other_user}","gists_url":"https://api.github.com/users/sonic-screwdriver-cd/gists{/gist_id}","starred_url":"https://api.github.com/users/sonic-screwdriver-cd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sonic-screwdriver-cd/subscriptions","organizations_url":"https://api.github.com/users/sonic-screwdriver-cd/orgs","repos_url":"https://api.github.com/users/sonic-screwdriver-cd/repos","events_url":"https://api.github.com/users/sonic-screwdriver-cd/events{/privacy}","received_events_url":"https://api.github.com/users/sonic-screwdriver-cd/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/sonic-screwdriver-cd/screwdriver","description":"An open source build platform designed for Continuous Delivery","fork":true,"url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver","forks_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/forks","keys_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/teams","hooks_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/hooks","issue_events_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/issues/events{/number}","events_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/events","assignees_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/assignees{/user}","branches_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/branches{/branch}","tags_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/tags","blobs_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/git/refs{/sha}","trees_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/statuses/{sha}","languages_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/languages","stargazers_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/stargazers","contributors_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/contributors","subscribers_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/subscribers","subscription_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/subscription","commits_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/commits{/sha}","git_commits_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/git/commits{/sha}","comments_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/comments{/number}","issue_comment_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/issues/comments{/number}","contents_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/contents/{+path}","compare_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/merges","archive_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/downloads","issues_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/issues{/number}","pulls_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/pulls{/number}","milestones_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/milestones{/number}","notifications_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/labels{/name}","releases_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/releases{/id}","deployments_url":"https://api.github.com/repos/sonic-screwdriver-cd/screwdriver/deployments","created_at":"2017-08-11T00:41:37Z","updated_at":"2018-05-23T04:11:52Z","pushed_at":"2018-05-31T09:35:19Z","git_url":"git://github.com/sonic-screwdriver-cd/screwdriver.git","ssh_url":"git@github.com:sonic-screwdriver-cd/screwdriver.git","clone_url":"https://github.com/sonic-screwdriver-cd/screwdriver.git","svn_url":"https://github.com/sonic-screwdriver-cd/screwdriver","homepage":"http://screwdriver.cd","size":1942,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":2,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"screwdriver-cd:master","ref":"master","sha":"8bb17447a4e48cf987dfa32af3582c2a0e29db9d","user":{"login":"screwdriver-cd","id":19417863,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE5NDE3ODYz","avatar_url":"https://avatars0.githubusercontent.com/u/19417863?v=4","gravatar_id":"","url":"https://api.github.com/users/screwdriver-cd","html_url":"https://github.com/screwdriver-cd","followers_url":"https://api.github.com/users/screwdriver-cd/followers","following_url":"https://api.github.com/users/screwdriver-cd/following{/other_user}","gists_url":"https://api.github.com/users/screwdriver-cd/gists{/gist_id}","starred_url":"https://api.github.com/users/screwdriver-cd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/screwdriver-cd/subscriptions","organizations_url":"https://api.github.com/users/screwdriver-cd/orgs","repos_url":"https://api.github.com/users/screwdriver-cd/repos","events_url":"https://api.github.com/users/screwdriver-cd/events{/privacy}","received_events_url":"https://api.github.com/users/screwdriver-cd/received_events","type":"Organization","site_admin":false},"repo":{"id":59517730,"node_id":"MDEwOlJlcG9zaXRvcnk1OTUxNzczMA==","name":"screwdriver","full_name":"screwdriver-cd/screwdriver","owner":{"login":"screwdriver-cd","id":19417863,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE5NDE3ODYz","avatar_url":"https://avatars0.githubusercontent.com/u/19417863?v=4","gravatar_id":"","url":"https://api.github.com/users/screwdriver-cd","html_url":"https://github.com/screwdriver-cd","followers_url":"https://api.github.com/users/screwdriver-cd/followers","following_url":"https://api.github.com/users/screwdriver-cd/following{/other_user}","gists_url":"https://api.github.com/users/screwdriver-cd/gists{/gist_id}","starred_url":"https://api.github.com/users/screwdriver-cd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/screwdriver-cd/subscriptions","organizations_url":"https://api.github.com/users/screwdriver-cd/orgs","repos_url":"https://api.github.com/users/screwdriver-cd/repos","events_url":"https://api.github.com/users/screwdriver-cd/events{/privacy}","received_events_url":"https://api.github.com/users/screwdriver-cd/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/screwdriver-cd/screwdriver","description":"An open source build platform designed for Continuous Delivery","fork":false,"url":"https://api.github.com/repos/screwdriver-cd/screwdriver","forks_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/forks","keys_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/keys{/key_id}","collaborators_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/teams","hooks_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/hooks","issue_events_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/issues/events{/number}","events_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/events","assignees_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/assignees{/user}","branches_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/branches{/branch}","tags_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/tags","blobs_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/git/refs{/sha}","trees_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/git/trees{/sha}","statuses_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/statuses/{sha}","languages_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/languages","stargazers_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/stargazers","contributors_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/contributors","subscribers_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/subscribers","subscription_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/subscription","commits_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/commits{/sha}","git_commits_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/git/commits{/sha}","comments_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/comments{/number}","issue_comment_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/issues/comments{/number}","contents_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/contents/{+path}","compare_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/compare/{base}...{head}","merges_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/merges","archive_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/downloads","issues_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/issues{/number}","pulls_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/pulls{/number}","milestones_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/milestones{/number}","notifications_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/labels{/name}","releases_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/releases{/id}","deployments_url":"https://api.github.com/repos/screwdriver-cd/screwdriver/deployments","created_at":"2016-05-23T20:55:35Z","updated_at":"2018-05-31T10:07:22Z","pushed_at":"2018-05-31T09:35:20Z","git_url":"git://github.com/screwdriver-cd/screwdriver.git","ssh_url":"git@github.com:screwdriver-cd/screwdriver.git","clone_url":"https://github.com/screwdriver-cd/screwdriver.git","svn_url":"https://github.com/screwdriver-cd/screwdriver","homepage":"http://screwdriver.cd","size":1918,"stargazers_count":508,"watchers_count":508,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":72,"mirror_url":null,"archived":false,"open_issues_count":171,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":72,"open_issues":171,"watchers":508,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/screwdriver-cd/screwdriver/pulls/1087"},"html":{"href":"https://github.com/screwdriver-cd/screwdriver/pull/1087"},"issue":{"href":"https://api.github.com/repos/screwdriver-cd/screwdriver/issues/1087"},"comments":{"href":"https://api.github.com/repos/screwdriver-cd/screwdriver/issues/1087/comments"},"review_comments":{"href":"https://api.github.com/repos/screwdriver-cd/screwdriver/pulls/1087/comments"},"review_comment":{"href":"https://api.github.com/repos/screwdriver-cd/screwdriver/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/screwdriver-cd/screwdriver/pulls/1087/commits"},"statuses":{"href":"https://api.github.com/repos/screwdriver-cd/screwdriver/statuses/65bd0968d77a7739ed25f8c534f1839bab90abd1"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"jithin1987"}}