{"action":"created","comment":{"url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/pulls/comments/156527177","pull_request_review_id":83015057,"id":156527177,"diff_hunk":"@@ -1,310 +1,499 @@\n \n-var jwkToPem = require('jwk-to-pem');\n-var XMLHttpRequest = require(\"xmlhttprequest\").XMLHttpRequest;\n var async = require('asyncawait/async');\n var await = require('asyncawait/await');\n+var forge = require('node-forge');\n var fs = require('fs');\n-var path = require('path');   \n+var jwkToPem = require('jwk-to-pem');\n+var path = require('path');\n+var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;\n \n var keyBundle = KeyBundle.prototype;\n \n-/*\n-var K2C = {\n-    \"RSA\": RSAKey,\n-    \"EC\": ECKey,\n-    \"oct\": SYMKey,\n+/**\n+   *  Contains a set of keys that have a common origin.\n+   * The sources can be serveral:\n+   * - A dictionary provided at the initialization, see keys below.\n+   * - A list of dictionaries provided at initialization\n+   * - A file containing one of: JWKS, DER encoded key\n+   * - A URL pointing to a webpages from which an JWKS can be downloaded\n+   * \n+   * :param keys: A dictionary or a list of dictionaries with the keys ['kty', 'key', 'alg', 'use', 'kid']\n+   * :param source: Where the key set can be fetch from\n+   * :param verify_ssl: Verify the SSL cert used by the server\n+   * :param fileformat: For a local file either 'jwk' or 'der'\n+   * :param keytype: Iff local file and 'der' format what kind of key it is.\n+      presently only 'rsa' is supported.\n+   * :param keyusage: What the key loaded from file should be used for.\n+      Only applicable for DER files\n+   */\n+function KeyBundle(\n+    keys = [], source = '', fileformat = 'jwk', keyusage = 'None',\n+    cache_time = 300, verify_ssl = true, keyType = 'RSA',\n+    encEnc = 'A128CBC-HS256', keytype = 'RSA') {\n+  this.remote = false;\n+  this.verify_ssl = verify_ssl;\n+  this.cache_time = cache_time;\n+  this.time_out = 0;\n+  this.etag = '';\n+  this.source = null;\n+  this.fileformat = fileformat.toLowerCase();\n+  this.keytype = keytype;\n+  this.keyusage = keyusage;\n+  this.imp_jwks = null;\n+  this.last_updated = 0;\n+  this.formattedKeysList = [];\n+\n+  if (keys) {\n+    if (typeof keys === 'object' && keys !== null && !(keys instanceof Array) &&\n+        !(keys instanceof Date)) {\n+      this.doKeys([keys]);\n+    } else {\n+      this.doKeys(keys);\n+    }\n+  } else {\n+    if (source.startsWith('file://')) {\n+      this.source = source.substring(7);\n+    } else if (source.startsWith('http://') || source.startsWith('https://')) {\n+      this.source = source;\n+      this.remote = true;\n+    } else if (source === '') {\n+      return\n+    } else {\n+      var formatArr = ['rsa', 'der', 'jwks'];\n+      if (formatArr.indexOf(fileformat.toLowerCase()) !== -1) {\n+        if (fs.lstatSync(source).isFile()) {\n+          this.source = source;\n+        } else {\n+          console.log('No such file');\n+        }\n+      } else {\n+        console.log('Unknown source');\n+      }\n+    }\n+    if (!this.remote) {\n+      var formatArr = ['jwks', 'jwk'];\n+\n+      if (formatArr.indexOf(this.fileformat) !== -1) {\n+        keyBundle.doLocalJwk(this.source);\n+      } else if (this.fileformat === 'der') {\n+        keyBundle.doLocalDer(this.source, this.keytype, this.keyusage);\n+      }\n+    }\n+  };\n }\n \n-var MAP = {'dec': 'enc', 'enc': 'enc', 'ver': 'sig', 'sig': 'sig'}*/\n-\n-function KeyBundle(keys=[], source=\"\", fileformat=\"jwk\", cache_time=300, verify_ssl=true, keyType=\"RSA\", encEnc=\"A128CBC-HS256\", keytype=\"RSA\", keyusage=\"None\"){\n-    /*\n-    Contains a set of keys that have a common origin.\n-    The sources can be serveral:\n-    - A dictionary provided at the initialization, see keys below.\n-    - A list of dictionaries provided at initialization\n-    - A file containing one of: JWKS, DER encoded key\n-    - A URL pointing to a webpages from which an JWKS can be downloaded\n-             \n-    :param keys: A dictionary or a list of dictionaries\n-        with the keys [\"kty\", \"key\", \"alg\", \"use\", \"kid\"]\n-    :param source: Where the key set can be fetch from\n-    :param verify_ssl: Verify the SSL cert used by the server\n-    :param fileformat: For a local file either \"jwk\" or \"der\"\n-    :param keytype: Iff local file and 'der' format what kind of key it is.\n-        presently only 'rsa' is supported.\n-    :param keyusage: What the key loaded from file should be used for.\n-        Only applicable for DER files\n-    */\n-    \n-    this.keys = keys;\n-    this.remote = false;\n-    this.verify_ssl = verify_ssl;\n-    this.cache_time = cache_time;\n-    this.time_out = 0;\n-    this.etag = \"\";\n-    this.source = source;\n-    this.fileformat = fileformat.toLowerCase();\n-    this.keytype = keytype;\n-    this.keyusage = keyusage;\n-    this.imp_jwks = null;\n-    this.last_updated = 0;\n-    this.formattedKeysList = [];\n+keyBundle.keys = [];\n+\n+var MAP = {'dec': 'enc', 'enc': 'enc', 'ver': 'sig', 'sig': 'sig'};\n+\n+\n+keyBundle.doKeys = function(keyData) {\n+  if ((typeof keyData) === 'string') {\n+    this.keys.push(keyData);\n+  } else {\n+    for (var i = 0; i < keyData.length; i++) {\n+      this.keys.push(keyData[i]);\n+    }\n+  }\n+\n };\n \n-keyBundle.getKty = function(typ=\"\"){\n-    var keysList = []\n-    for (var index in this.imp_jwks.keys){\n-        var key = this.imp_jwks.keys[index]\n-        if (key.kty == typ)\n-            keysList.push(jwkToPem(key));\n+keyBundle.getKty = function(typ = '') {\n+  this.upToDate();\n+  if (typ != '') {\n+    var keysList = [];\n+    for (var index = 0; index < this.keys.length; index++) {\n+      var key = this.keys[index];\n+      if (key.kty == typ)\n+      keysList.push(key);\n     }\n     return keysList;\n+  } else {\n+    return this.keys;\n+  }\n };\n \n-keyBundle.getKeyList = function(keys){\n-    var keysList = []\n-    var impJwks = this.getJwks();\n-    if (keys.length == 0 && impJwks){\n-        keys = impJwks.keys;\n+keyBundle.getKeyList = function(keys) {\n+  var keysList = [];\n+  var impJwks = this.getJwks();\n+  if (keys.length === 0 && impJwks) {\n+    keys = impJwks.keys;\n+  }\n+  for (var index = 0; index < keys.length; index++) {\n+    var key = jwkToPem(keys[index]);\n+    if (\n+        keys[index].inactive_since &&\n+        keys[index].inactive_since <= new Date().getTime() / 1000) {\n+      console.log('Key not active :' + keys[index]);\n     }\n-    for (var index in keys){\n-        var key = jwkToPem(keys[index])\n-        if (keys[index].inactive_since && keys[index].inactive_since <= Date.now()){\n-            console.log(\"Key not active :\" + keys[index]);\n-        }else{\n-            keysList.push(key);\n-        }\n+    else {\n+      keysList.push(key);\n     }\n-    this.formattedKeysList = keysList;\n-    return keysList;\n+  }\n+  this.formattedKeysList = keysList;\n+  return keysList;\n };\n \n-keyBundle.getKeys = function(){\n-    if (this.formattedKeysList.length != 0){\n-        return this.formattedKeysList;\n-    }\n-    else if (this.source != \"\"){\n-        var HttpClient = function() {\n-            this.get = function(aUrl, aCallback) {\n-                var anHttpRequest = new XMLHttpRequest();\n-                anHttpRequest.onreadystatechange = function() { \n-                    if (anHttpRequest.readyState == 4 && anHttpRequest.status == 200)\n-                        aCallback(anHttpRequest.responseText);\n-                }\n-        \n-                anHttpRequest.open( \"GET\", aUrl, true );            \n-                anHttpRequest.send( null );\n-            }\n-          }\n-        \n-          var client = new HttpClient();\n-          client.get(this.source, function(response) {\n-            // do something with response\n-            var keys = JSON.parse(response).keys;\n-            return keyBundle.getKeyList(keys);\n-          });\n-    }else{\n-        return this.getKeyList(this.keys);\n+keyBundle.getKeysOld = function() {\n+  if (this.formattedKeysList.length != 0) {\n+    return this.formattedKeysList;\n+  } else if (this.source !== '') {\n+    var HttpClient =\n+        function() {\n+      this.get = function(aUrl, aCallback) {\n+        var anHttpRequest = new XMLHttpRequest();\n+        anHttpRequest.onreadystatechange =\n+        function() {\n+          if (anHttpRequest.readyState === 4 && anHttpRequest.status === 200)\n+            aCallback(anHttpRequest.responseText);\n+        }\n+\n+        anHttpRequest.open('GET', aUrl, true);\n+        anHttpRequest.send(null);\n+      }\n     }\n+\n+    var client = new HttpClient();\n+    client.get(this.source, function(response) {\n+      // do something with response\n+      var keys = JSON.parse(response).keys;\n+      return keyBundle.getKeyList(keys);\n+    });\n+  } else {\n+    return this.getKeyList(this.keys);\n+  }\n };\n \n-keyBundle.getKeyWithKid = function(kid){\n-    //throw new Error(\"Unsupported Operation Exception\");    \n-    var keys = \"\";\n-    if (this.imp_jwks != null)\n-        keys = this.imp_jwks.keys;\n-    else{\n-        keys = this.keys;\n+keyBundle.getKeyWithKid = function(kid) {\n+  for (var index = 0; index < this.keys.length; index++) {\n+    var key = this.keys[index];\n+    if (key.kid == kid) {\n+      return key;\n     }\n-    for (var index in keys){\n-        var key = keys[index]\n-        if (key.kid == kid)\n-            return key;\n+  }\n+\n+  this.update()\n+\n+  for (var index = 0; index < this.keys.length; index++) {\n+    var key = this.keys[index];\n+    if (key.kid == kid) {\n+      return key;\n     }\n+  }\n+\n+  return null;\n };\n \n-keyBundle.getJwks= function(private=false){\n-    return this.imp_jwks;   \n+keyBundle.getJwks = function(private = false) {\n+  this.upToDate();\n+  var keys = [];\n+  var jwk = {'keys': keys};\n+  return JSON.stringify(jwk);\n };\n \n-keyBundle.remove = function(key){\n-    var i = this.formattedKeysList.indexOf(key);\n-    if(i != -1) {\n-        this.formattedKeysList.splice(i, 1);\n-    }\n-    this.source = \"\";\n-    this.imp_jwks = \"\";\n+keyBundle.remove = function(key) {\n+  var i = this.keys.indexOf(key);\n+  if (i != -1) {\n+    this.keys.splice(i, 1);\n+  }\n };\n \n-keyBundle.markAsInactive = function(kid){\n-   var k =  this.getKeyWithKid(kid);\n-   k.inactive_since = Date.now();  \n-   this.remove(jwkToPem(k));\n+keyBundle.markAsInactive = function(kid) {\n+  var k = this.getKeyWithKid(kid);\n+  k.inactive_since = new Date().getTime() / 1000;\n };\n \n-keyBundle.update = function(){\n-    //throw new Error(\"Unsupported Operation Exception\");    \n-    /*\n-    Reload the keys if necessary\n-    This is a forced update, will happen even if cache time has not elapsed\n-    Replaced keys will be marked as inactive and not removed.        \n-    */\n-    res = true  \n-    if (this.source){\n-        var keys = this.keys  \n-        this.keys = []\n-\n-        try{\n-            if (self.remote == false){\n-                if (self.fileformat == \"jwks\"){\n-                    self.doLocalJwk(self.source)\n-                }else if (self.fileformat == \"der\"){\n-                    self.doLocalDer(self.source, self.keytype,\n-                                      self.keyusage)\n-                }\n-            }else{\n-                res = self.doRemote()\n-            }\n-        }catch(err){\n-            console.log('Key bundle update failed: {}' + err)\n-            this.keys = keys;\n-            return false\n+/**\n+   * Reload the keys if necessary.\n+   * This is a forced update, will happen even if cache time has not elapsed\n+   * Replaced keys will be marked as inactive and not removed.\n+   */\n+keyBundle.update = function() {\n+  res = true\n+  if (this.source) {\n+    var keys = this.keys;\n+    this.keys = []\n+\n+    try {\n+      if (this.remote === false) {\n+        if (this.fileformat === 'jwks') {\n+          this.doLocalJwk(this.source)\n+        } else if (this.fileformat === 'der') {\n+          this.doLocalDer(this.source, this.keytype, this.keyusage)\n         }\n+      } else {\n+        res = this.doRemote()","path":"src/models/keystore-dependency/keyBundle.js","position":365,"original_position":365,"commit_id":"655f7799f6ed33bc5fa880c8b183f7047c3aa285","original_commit_id":"655f7799f6ed33bc5fa880c8b183f7047c3aa285","user":{"login":"TMSCH","id":2036827,"avatar_url":"https://avatars0.githubusercontent.com/u/2036827?v=4","gravatar_id":"","url":"https://api.github.com/users/TMSCH","html_url":"https://github.com/TMSCH","followers_url":"https://api.github.com/users/TMSCH/followers","following_url":"https://api.github.com/users/TMSCH/following{/other_user}","gists_url":"https://api.github.com/users/TMSCH/gists{/gist_id}","starred_url":"https://api.github.com/users/TMSCH/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TMSCH/subscriptions","organizations_url":"https://api.github.com/users/TMSCH/orgs","repos_url":"https://api.github.com/users/TMSCH/repos","events_url":"https://api.github.com/users/TMSCH/events{/privacy}","received_events_url":"https://api.github.com/users/TMSCH/received_events","type":"User","site_admin":false},"body":"Add trailing ;","created_at":"2017-12-12T23:33:51Z","updated_at":"2017-12-12T23:42:40Z","html_url":"https://github.com/GJWT/nodeOIDCMsg/pull/7#discussion_r156527177","pull_request_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/pulls/7","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/GJWT/nodeOIDCMsg/pulls/comments/156527177"},"html":{"href":"https://github.com/GJWT/nodeOIDCMsg/pull/7#discussion_r156527177"},"pull_request":{"href":"https://api.github.com/repos/GJWT/nodeOIDCMsg/pulls/7"}}},"pull_request":{"url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/pulls/7","id":157939669,"html_url":"https://github.com/GJWT/nodeOIDCMsg/pull/7","diff_url":"https://github.com/GJWT/nodeOIDCMsg/pull/7.diff","patch_url":"https://github.com/GJWT/nodeOIDCMsg/pull/7.patch","issue_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/issues/7","number":7,"state":"open","locked":false,"title":"Added style changes to KeyBundle","user":{"login":"anjuthomas","id":3107133,"avatar_url":"https://avatars3.githubusercontent.com/u/3107133?v=4","gravatar_id":"","url":"https://api.github.com/users/anjuthomas","html_url":"https://github.com/anjuthomas","followers_url":"https://api.github.com/users/anjuthomas/followers","following_url":"https://api.github.com/users/anjuthomas/following{/other_user}","gists_url":"https://api.github.com/users/anjuthomas/gists{/gist_id}","starred_url":"https://api.github.com/users/anjuthomas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anjuthomas/subscriptions","organizations_url":"https://api.github.com/users/anjuthomas/orgs","repos_url":"https://api.github.com/users/anjuthomas/repos","events_url":"https://api.github.com/users/anjuthomas/events{/privacy}","received_events_url":"https://api.github.com/users/anjuthomas/received_events","type":"User","site_admin":false},"body":"","created_at":"2017-12-12T21:09:53Z","updated_at":"2017-12-12T23:42:41Z","closed_at":null,"merged_at":null,"merge_commit_sha":"247b76bac4eee429460756fc9e40538b6b055c2f","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/pulls/7/commits","review_comments_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/pulls/7/comments","review_comment_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/issues/7/comments","statuses_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/statuses/655f7799f6ed33bc5fa880c8b183f7047c3aa285","head":{"label":"GJWT:at-branch","ref":"at-branch","sha":"655f7799f6ed33bc5fa880c8b183f7047c3aa285","user":{"login":"GJWT","id":34324829,"avatar_url":"https://avatars0.githubusercontent.com/u/34324829?v=4","gravatar_id":"","url":"https://api.github.com/users/GJWT","html_url":"https://github.com/GJWT","followers_url":"https://api.github.com/users/GJWT/followers","following_url":"https://api.github.com/users/GJWT/following{/other_user}","gists_url":"https://api.github.com/users/GJWT/gists{/gist_id}","starred_url":"https://api.github.com/users/GJWT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GJWT/subscriptions","organizations_url":"https://api.github.com/users/GJWT/orgs","repos_url":"https://api.github.com/users/GJWT/repos","events_url":"https://api.github.com/users/GJWT/events{/privacy}","received_events_url":"https://api.github.com/users/GJWT/received_events","type":"Organization","site_admin":false},"repo":{"id":113477044,"name":"nodeOIDCMsg","full_name":"GJWT/nodeOIDCMsg","owner":{"login":"GJWT","id":34324829,"avatar_url":"https://avatars0.githubusercontent.com/u/34324829?v=4","gravatar_id":"","url":"https://api.github.com/users/GJWT","html_url":"https://github.com/GJWT","followers_url":"https://api.github.com/users/GJWT/followers","following_url":"https://api.github.com/users/GJWT/following{/other_user}","gists_url":"https://api.github.com/users/GJWT/gists{/gist_id}","starred_url":"https://api.github.com/users/GJWT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GJWT/subscriptions","organizations_url":"https://api.github.com/users/GJWT/orgs","repos_url":"https://api.github.com/users/GJWT/repos","events_url":"https://api.github.com/users/GJWT/events{/privacy}","received_events_url":"https://api.github.com/users/GJWT/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GJWT/nodeOIDCMsg","description":null,"fork":false,"url":"https://api.github.com/repos/GJWT/nodeOIDCMsg","forks_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/forks","keys_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/teams","hooks_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/hooks","issue_events_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/issues/events{/number}","events_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/events","assignees_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/assignees{/user}","branches_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/branches{/branch}","tags_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/tags","blobs_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/git/refs{/sha}","trees_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/statuses/{sha}","languages_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/languages","stargazers_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/stargazers","contributors_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/contributors","subscribers_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/subscribers","subscription_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/subscription","commits_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/commits{/sha}","git_commits_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/git/commits{/sha}","comments_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/comments{/number}","issue_comment_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/issues/comments{/number}","contents_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/contents/{+path}","compare_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/merges","archive_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/downloads","issues_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/issues{/number}","pulls_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/pulls{/number}","milestones_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/milestones{/number}","notifications_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/labels{/name}","releases_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/releases{/id}","deployments_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/deployments","created_at":"2017-12-07T16:58:24Z","updated_at":"2017-12-11T18:57:05Z","pushed_at":"2017-12-12T22:16:38Z","git_url":"git://github.com/GJWT/nodeOIDCMsg.git","ssh_url":"git@github.com:GJWT/nodeOIDCMsg.git","clone_url":"https://github.com/GJWT/nodeOIDCMsg.git","svn_url":"https://github.com/GJWT/nodeOIDCMsg","homepage":null,"size":5483,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":1,"open_issues":2,"watchers":1,"default_branch":"master"}},"base":{"label":"GJWT:master","ref":"master","sha":"d6c9bfcf69af82d06eb40a885eca883eab969393","user":{"login":"GJWT","id":34324829,"avatar_url":"https://avatars0.githubusercontent.com/u/34324829?v=4","gravatar_id":"","url":"https://api.github.com/users/GJWT","html_url":"https://github.com/GJWT","followers_url":"https://api.github.com/users/GJWT/followers","following_url":"https://api.github.com/users/GJWT/following{/other_user}","gists_url":"https://api.github.com/users/GJWT/gists{/gist_id}","starred_url":"https://api.github.com/users/GJWT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GJWT/subscriptions","organizations_url":"https://api.github.com/users/GJWT/orgs","repos_url":"https://api.github.com/users/GJWT/repos","events_url":"https://api.github.com/users/GJWT/events{/privacy}","received_events_url":"https://api.github.com/users/GJWT/received_events","type":"Organization","site_admin":false},"repo":{"id":113477044,"name":"nodeOIDCMsg","full_name":"GJWT/nodeOIDCMsg","owner":{"login":"GJWT","id":34324829,"avatar_url":"https://avatars0.githubusercontent.com/u/34324829?v=4","gravatar_id":"","url":"https://api.github.com/users/GJWT","html_url":"https://github.com/GJWT","followers_url":"https://api.github.com/users/GJWT/followers","following_url":"https://api.github.com/users/GJWT/following{/other_user}","gists_url":"https://api.github.com/users/GJWT/gists{/gist_id}","starred_url":"https://api.github.com/users/GJWT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GJWT/subscriptions","organizations_url":"https://api.github.com/users/GJWT/orgs","repos_url":"https://api.github.com/users/GJWT/repos","events_url":"https://api.github.com/users/GJWT/events{/privacy}","received_events_url":"https://api.github.com/users/GJWT/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GJWT/nodeOIDCMsg","description":null,"fork":false,"url":"https://api.github.com/repos/GJWT/nodeOIDCMsg","forks_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/forks","keys_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/teams","hooks_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/hooks","issue_events_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/issues/events{/number}","events_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/events","assignees_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/assignees{/user}","branches_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/branches{/branch}","tags_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/tags","blobs_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/git/refs{/sha}","trees_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/statuses/{sha}","languages_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/languages","stargazers_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/stargazers","contributors_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/contributors","subscribers_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/subscribers","subscription_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/subscription","commits_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/commits{/sha}","git_commits_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/git/commits{/sha}","comments_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/comments{/number}","issue_comment_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/issues/comments{/number}","contents_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/contents/{+path}","compare_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/merges","archive_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/downloads","issues_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/issues{/number}","pulls_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/pulls{/number}","milestones_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/milestones{/number}","notifications_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/labels{/name}","releases_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/releases{/id}","deployments_url":"https://api.github.com/repos/GJWT/nodeOIDCMsg/deployments","created_at":"2017-12-07T16:58:24Z","updated_at":"2017-12-11T18:57:05Z","pushed_at":"2017-12-12T22:16:38Z","git_url":"git://github.com/GJWT/nodeOIDCMsg.git","ssh_url":"git@github.com:GJWT/nodeOIDCMsg.git","clone_url":"https://github.com/GJWT/nodeOIDCMsg.git","svn_url":"https://github.com/GJWT/nodeOIDCMsg","homepage":null,"size":5483,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":1,"open_issues":2,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/GJWT/nodeOIDCMsg/pulls/7"},"html":{"href":"https://github.com/GJWT/nodeOIDCMsg/pull/7"},"issue":{"href":"https://api.github.com/repos/GJWT/nodeOIDCMsg/issues/7"},"comments":{"href":"https://api.github.com/repos/GJWT/nodeOIDCMsg/issues/7/comments"},"review_comments":{"href":"https://api.github.com/repos/GJWT/nodeOIDCMsg/pulls/7/comments"},"review_comment":{"href":"https://api.github.com/repos/GJWT/nodeOIDCMsg/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GJWT/nodeOIDCMsg/pulls/7/commits"},"statuses":{"href":"https://api.github.com/repos/GJWT/nodeOIDCMsg/statuses/655f7799f6ed33bc5fa880c8b183f7047c3aa285"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"TMSCH"}}