{"action":"created","comment":{"url":"https://api.github.com/repos/RIKSOF/json-api-vc/pulls/comments/87542741","pull_request_review_id":8151708,"id":87542741,"diff_hunk":"@@ -0,0 +1,295 @@\n+'use strict';\n+\n+/**\n+ * @author Copyright RIKSOF (Private) Limited 2016.\n+ *\n+ * @file Test user management.\n+ */\n+var assert = require('assert');\n+var UserManagement = require('../../lib/services/UserManagement.js');\n+var Repository = require( '../../lib/vc/Repository.js' );\n+var Mongo = require('../../lib/db/MongoDb.js');\n+var Promise = require('bluebird');\n+var Document = require('../../lib/vc/Document.js');\n+var Mongo = require('../../lib/db/MongoDb.js');\n+var db;\n+\n+describe( 'User Management MongoDb', function() {\n+  before( function (done) {\n+\n+    db = new Mongo ( 'mongodb://localhost:27017/versioncontrol' );\n+    db.connect().then( function( connection ) { \n+      done();\n+    });\n+  });\n+    \n+  it( 'Should be able to add a new user', function() {\n+\n+    var repo = new Repository( 'system', db );\n+    var um = null;\n+\n+    return repo.setup().then( function( ) {\n+      return repo.branches.add( 'users' );\n+    }).then( function ( b ) {\n+      // Initialize um.\n+      um = new UserManagement( repo, b );\n+\n+      // Add the user.\n+      return um.addUser( 'John Doe', 'info@mail.com', 'abcd', UserManagement.User.GRANT_PASSWORD, 'Added new user John Doe by System user.' );\n+    }).then( function( result ) {\n+      // Should add the first time.\n+      assert.equal( 'info@mail.com', result.emailOrId );\n+\n+      return um.addUser( 'John Doe', 'info@mail.com', 'abcd', UserManagement.User.GRANT_PASSWORD, 'Added new user John Doe by System user.' );\n+    }).then( function ( result ) {\n+      // We should never come here.\n+      assert.equal( true, false );\n+    }).catch( e => {\n+      assert.notEqual( null, e );\n+    });\n+  });\n+\n+  it( 'Should be able to get an added user', function() {\n+\n+    var repo = new Repository( 'system', db );\n+    var um = null;\n+\n+    return repo.setup().then( function( ) {\n+      return repo.branches.add( 'users' );\n+    }).then( function ( b ) {\n+      // Initialize um.\n+      um = new UserManagement( repo, b );\n+\n+      // Add the user.\n+      return um.addUser( 'John Doe', 'info1@mail.com', 'abcd', UserManagement.User.GRANT_PASSWORD, 'Added new user John Doe by System user.' );\n+    }).then( function ( user ) {\n+      return um.getUserByEmailOrId( 'info1@mail.com', UserManagement.User.STATUS_INACTIVE );\n+    }).then( function ( u ) {\n+      assert.equal( 'John Doe', u.name );\n+      assert.equal( 'info1@mail.com', u.emailOrId );\n+      assert.notEqual( 'abcd', u.passwordOrSecret );\n+\n+      return um.getUserByEmailOrId( 'info1@mail.com', UserManagement.User.STATUS_ACTIVE );\n+    }).then( function ( u ) {\n+      assert.equal( null, u );\n+    });\n+  });\n+\n+  it( 'Should be able to activate a user and then deactivate', function() {\n+\n+    var repo = new Repository( 'system', db );\n+    var um = null;\n+\n+    return repo.setup().then( function( ) {\n+      return repo.branches.add( 'users' );\n+    }).then( function ( b ) {\n+      // Initialize um.\n+      um = new UserManagement( repo, b );\n+\n+      // Add the user.\n+      return um.addUser( 'John Doe', 'info2@mail.com', 'abcd', UserManagement.User.GRANT_PASSWORD, 'Added new user John Doe by System user.' );\n+    }).then( function ( result ) {\n+      return um.changeUserStatus( 'info2@mail.com', UserManagement.User.STATUS_ACTIVE, 'System user made the user active.' );\n+    }).then( function ( result ) {\n+      assert.equal( 'info2@mail.com', result.emailOrId );\n+\n+      // Make sure the user became active.\n+      return um.getUserByEmailOrId( 'info2@mail.com', UserManagement.User.STATUS_ACTIVE );\n+    }).then( function ( u ) {\n+      assert.equal( UserManagement.User.STATUS_ACTIVE, u.status );\n+\n+      // Make user inactive again.\n+      return um.changeUserStatus( 'info2@mail.com', UserManagement.User.STATUS_INACTIVE, 'System user made the user inactive.' );\n+    }).then( function ( result ) {\n+      assert.equal( 'info2@mail.com', result.emailOrId );\n+    });\n+  });\n+\n+  it( 'Should allow to change a user password', function() {\n+\n+    var repo = new Repository( 'system', db );\n+    var um = null;\n+    var oldPassword = null;\n+    var newPassword = null;\n+\n+    return repo.setup().then( function( ) {\n+      return repo.branches.add( 'users' );\n+    }).then( function ( b ) {\n+      // Initialize um.\n+      um = new UserManagement( repo, b );\n+\n+      // Add the user.\n+      return um.addUser( 'John Doe', 'info3@mail.com', 'abcd', UserManagement.User.GRANT_PASSWORD, 'Added new user John Doe by System user.' );\n+    }).then( function ( user ) {\n+      return um.getUserByEmailOrId( 'info3@mail.com' );\n+    }).then( function ( user ) {\n+      oldPassword = user.passwordOrSecret;\n+\n+      // Make user active.\n+      return um.changeUserPasswordOrSecret( 'info3@mail.com', 'defg', 'System user changed password of this user.' );\n+    }).then( function ( user ) {\n+      assert.equal( 'info3@mail.com', user.emailOrId );\n+\n+      // Get new password.\n+      return um.getUserByEmailOrId( 'info3@mail.com' );\n+    }).then( function ( newPassword ) {\n+      // Make sure the passwords do not match.\n+      assert.notEqual( oldPassword, newPassword );\n+    });\n+  });\n+\n+  it( 'Should allow verification of password', function() {\n+\n+    var repo = new Repository( 'system', db );\n+    var um = null;\n+\n+    return repo.setup().then( function( ) {\n+      return repo.branches.add( 'users' );\n+    }).then( function ( b ) {\n+      // Initialize um.\n+      um = new UserManagement( repo, b );\n+\n+      // Add the user.\n+      return um.addUser( 'John Doe', 'info4@mail.com', 'abcd', UserManagement.User.GRANT_PASSWORD, 'Added new user John Doe by System user.' );\n+    }).then( function ( user ) {\n+      assert.equal( 'info4@mail.com', user.emailOrId );\n+      return um.changeUserStatus( user.emailOrId, UserManagement.User.STATUS_ACTIVE, 'System user made the user active.' );\n+    }).then( function ( user ) {\n+      assert.equal( 'info4@mail.com', user.emailOrId );\n+      return um.verifyUserPasswordOrSecret( user.emailOrId, 'abcd', UserManagement.User.GRANT_PASSWORD,  'Login attempt by user.' );\n+    }).then( function ( user ) {\n+      // Correct password was verified.\n+      assert.notEqual( null, user.passwordOrSecret );\n+      assert.notEqual( 'abcd', user.passwordOrSecret  );\n+\n+      // Incorrect password\n+      return um.verifyUserPasswordOrSecret( user.emailOrId, 'abcde', UserManagement.User.GRANT_PASSWORD, 'Login attempt by user.' );\n+    }).then( function ( user ) {\n+      assert.equal( null, user );\n+\n+      // Incorrect email.\n+      return um.verifyUserPasswordOrSecret( 'info4@mailcom', 'abcd', UserManagement.User.GRANT_PASSWORD, 'Login attempt by user.' );\n+    }).then( function ( user ) {\n+      assert.equal( null, user );\n+\n+      // Incorrect client credentials.\n+      return um.verifyUserPasswordOrSecret( user.emailOrId, 'abcd', UserManagement.User.GRANT_CLIENT_CREDENTIALS, 'Login attempt by user.' );\n+    }).then( function ( user  ) {\n+      assert.equal( false, true );\n+    }).catch( e => {\n+      assert.equal( 'Incorrect username or password', e.message );\n+\n+      return um.getUserByEmailOrId( 'info4@mail.com' ).then( function ( user ) {\n+        // Check commit logs.\n+        assert.equal( 'Added new user John Doe by System user.', Document.getCommits( user )[0].logMessage );\n+        assert.equal( 'System user made the user active.',  Document.getCommits( user )[1].logMessage );\n+        assert.equal( 'Successful login: Login attempt by user.',  Document.getCommits( user )[2].logMessage );\n+        assert.equal( 'Failed login: Login attempt by user.',  Document.getCommits( user )[3].logMessage );\n+      });\n+    });\n+  });\n+\n+  it( 'Should be able to set an OAuth 2.0 token', function() {\n+\n+    var repo = new Repository( 'system', db );\n+    var um = null;\n+\n+    return repo.setup().then( function( ) {\n+      return repo.branches.add( 'users' );\n+    }).then( function ( b ) {\n+      // Initialize um.\n+      um = new UserManagement( repo, b );\n+\n+      // Add the user.\n+      return um.addUser( 'John Doe', 'info5@mail.com', 'abcd', UserManagement.User.GRANT_PASSWORD, 'Added new user John Doe by System user.' );\n+    }).then( function ( user ) {\n+      // Set user token.\n+      return um.updateUserToken( 'info5@mail.com', '123456789', 1234567, 'System user set a token.' );\n+    }).then( function ( user ) {\n+      assert.equal( 'info5@mail.com', user.emailOrId );\n+\n+      // Make sure we get the updated token.\n+      return um.getUserByToken( '123456789', 'inactive' );\n+    }).then( function ( u ) {\n+      assert.equal( 1234567, u.tokens[ '123456789' ] );\n+\n+      // Set user token for an invalid user.\n+      return um.updateUserToken( 'info5@mailcom', '123456789', 1234567, 'System user set a token.' );\n+    }).then( function ( user ) {\n+      assert.equal( false, true );\n+    }).catch( e => {\n+      assert.equal( 'No such user with id info5@mailcom', e.message );\n+    });\n+  });\n+\n+  it( 'Should be able to set an OAuth 2.0 refresh token', function() {\n+\n+    var repo = new Repository( 'system', db );\n+    var um = null;\n+\n+    return repo.setup().then( function( ) {\n+      return repo.branches.add( 'users' );\n+    }).then( function ( b ) {\n+      // Initialize um.\n+      um = new UserManagement( repo, b );\n+\n+      // Add the user.\n+      return um.addUser( 'John Doe', 'info7@mail.com', 'abcd', UserManagement.User.GRANT_PASSWORD, 'Added new user John Doe by System user.' );","path":"test/services/UserManagement.mongo.js","position":237,"original_position":237,"commit_id":"d4fe91c60a25a419495489ec547fd6c72e27c16b","original_commit_id":"d4fe91c60a25a419495489ec547fd6c72e27c16b","user":{"login":"mkhurramali","id":1565155,"avatar_url":"https://avatars.githubusercontent.com/u/1565155?v=3","gravatar_id":"","url":"https://api.github.com/users/mkhurramali","html_url":"https://github.com/mkhurramali","followers_url":"https://api.github.com/users/mkhurramali/followers","following_url":"https://api.github.com/users/mkhurramali/following{/other_user}","gists_url":"https://api.github.com/users/mkhurramali/gists{/gist_id}","starred_url":"https://api.github.com/users/mkhurramali/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mkhurramali/subscriptions","organizations_url":"https://api.github.com/users/mkhurramali/orgs","repos_url":"https://api.github.com/users/mkhurramali/repos","events_url":"https://api.github.com/users/mkhurramali/events{/privacy}","received_events_url":"https://api.github.com/users/mkhurramali/received_events","type":"User","site_admin":false},"body":"For `abcd` did you mean `Abused`?","created_at":"2016-11-11T06:23:19Z","updated_at":"2016-11-11T06:23:19Z","html_url":"https://github.com/RIKSOF/json-api-vc/pull/2#discussion_r87542741","pull_request_url":"https://api.github.com/repos/RIKSOF/json-api-vc/pulls/2","_links":{"self":{"href":"https://api.github.com/repos/RIKSOF/json-api-vc/pulls/comments/87542741"},"html":{"href":"https://github.com/RIKSOF/json-api-vc/pull/2#discussion_r87542741"},"pull_request":{"href":"https://api.github.com/repos/RIKSOF/json-api-vc/pulls/2"}}},"pull_request":{"url":"https://api.github.com/repos/RIKSOF/json-api-vc/pulls/2","id":90525461,"html_url":"https://github.com/RIKSOF/json-api-vc/pull/2","diff_url":"https://github.com/RIKSOF/json-api-vc/pull/2.diff","patch_url":"https://github.com/RIKSOF/json-api-vc/pull/2.patch","issue_url":"https://api.github.com/repos/RIKSOF/json-api-vc/issues/2","number":2,"state":"open","locked":false,"title":"Integrate mongodb","user":{"login":"riksof-abdulbari","id":16382695,"avatar_url":"https://avatars.githubusercontent.com/u/16382695?v=3","gravatar_id":"","url":"https://api.github.com/users/riksof-abdulbari","html_url":"https://github.com/riksof-abdulbari","followers_url":"https://api.github.com/users/riksof-abdulbari/followers","following_url":"https://api.github.com/users/riksof-abdulbari/following{/other_user}","gists_url":"https://api.github.com/users/riksof-abdulbari/gists{/gist_id}","starred_url":"https://api.github.com/users/riksof-abdulbari/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/riksof-abdulbari/subscriptions","organizations_url":"https://api.github.com/users/riksof-abdulbari/orgs","repos_url":"https://api.github.com/users/riksof-abdulbari/repos","events_url":"https://api.github.com/users/riksof-abdulbari/events{/privacy}","received_events_url":"https://api.github.com/users/riksof-abdulbari/received_events","type":"User","site_admin":false},"body":"https://trello.com/c/P2NmZVJJ/2-integrate-with-mongodb\n","created_at":"2016-10-23T18:57:00Z","updated_at":"2016-11-11T06:23:19Z","closed_at":null,"merged_at":null,"merge_commit_sha":"208fa057c5e7215dd27a535c0e30acb241179f6a","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/RIKSOF/json-api-vc/pulls/2/commits","review_comments_url":"https://api.github.com/repos/RIKSOF/json-api-vc/pulls/2/comments","review_comment_url":"https://api.github.com/repos/RIKSOF/json-api-vc/pulls/comments{/number}","comments_url":"https://api.github.com/repos/RIKSOF/json-api-vc/issues/2/comments","statuses_url":"https://api.github.com/repos/RIKSOF/json-api-vc/statuses/d4fe91c60a25a419495489ec547fd6c72e27c16b","head":{"label":"RIKSOF:integrate-mongodb","ref":"integrate-mongodb","sha":"d4fe91c60a25a419495489ec547fd6c72e27c16b","user":{"login":"RIKSOF","id":1582310,"avatar_url":"https://avatars.githubusercontent.com/u/1582310?v=3","gravatar_id":"","url":"https://api.github.com/users/RIKSOF","html_url":"https://github.com/RIKSOF","followers_url":"https://api.github.com/users/RIKSOF/followers","following_url":"https://api.github.com/users/RIKSOF/following{/other_user}","gists_url":"https://api.github.com/users/RIKSOF/gists{/gist_id}","starred_url":"https://api.github.com/users/RIKSOF/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RIKSOF/subscriptions","organizations_url":"https://api.github.com/users/RIKSOF/orgs","repos_url":"https://api.github.com/users/RIKSOF/repos","events_url":"https://api.github.com/users/RIKSOF/events{/privacy}","received_events_url":"https://api.github.com/users/RIKSOF/received_events","type":"Organization","site_admin":false},"repo":{"id":66145247,"name":"json-api-vc","full_name":"RIKSOF/json-api-vc","owner":{"login":"RIKSOF","id":1582310,"avatar_url":"https://avatars.githubusercontent.com/u/1582310?v=3","gravatar_id":"","url":"https://api.github.com/users/RIKSOF","html_url":"https://github.com/RIKSOF","followers_url":"https://api.github.com/users/RIKSOF/followers","following_url":"https://api.github.com/users/RIKSOF/following{/other_user}","gists_url":"https://api.github.com/users/RIKSOF/gists{/gist_id}","starred_url":"https://api.github.com/users/RIKSOF/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RIKSOF/subscriptions","organizations_url":"https://api.github.com/users/RIKSOF/orgs","repos_url":"https://api.github.com/users/RIKSOF/repos","events_url":"https://api.github.com/users/RIKSOF/events{/privacy}","received_events_url":"https://api.github.com/users/RIKSOF/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/RIKSOF/json-api-vc","description":"A module for quickly building json api with git like version control.","fork":false,"url":"https://api.github.com/repos/RIKSOF/json-api-vc","forks_url":"https://api.github.com/repos/RIKSOF/json-api-vc/forks","keys_url":"https://api.github.com/repos/RIKSOF/json-api-vc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RIKSOF/json-api-vc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RIKSOF/json-api-vc/teams","hooks_url":"https://api.github.com/repos/RIKSOF/json-api-vc/hooks","issue_events_url":"https://api.github.com/repos/RIKSOF/json-api-vc/issues/events{/number}","events_url":"https://api.github.com/repos/RIKSOF/json-api-vc/events","assignees_url":"https://api.github.com/repos/RIKSOF/json-api-vc/assignees{/user}","branches_url":"https://api.github.com/repos/RIKSOF/json-api-vc/branches{/branch}","tags_url":"https://api.github.com/repos/RIKSOF/json-api-vc/tags","blobs_url":"https://api.github.com/repos/RIKSOF/json-api-vc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RIKSOF/json-api-vc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RIKSOF/json-api-vc/git/refs{/sha}","trees_url":"https://api.github.com/repos/RIKSOF/json-api-vc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RIKSOF/json-api-vc/statuses/{sha}","languages_url":"https://api.github.com/repos/RIKSOF/json-api-vc/languages","stargazers_url":"https://api.github.com/repos/RIKSOF/json-api-vc/stargazers","contributors_url":"https://api.github.com/repos/RIKSOF/json-api-vc/contributors","subscribers_url":"https://api.github.com/repos/RIKSOF/json-api-vc/subscribers","subscription_url":"https://api.github.com/repos/RIKSOF/json-api-vc/subscription","commits_url":"https://api.github.com/repos/RIKSOF/json-api-vc/commits{/sha}","git_commits_url":"https://api.github.com/repos/RIKSOF/json-api-vc/git/commits{/sha}","comments_url":"https://api.github.com/repos/RIKSOF/json-api-vc/comments{/number}","issue_comment_url":"https://api.github.com/repos/RIKSOF/json-api-vc/issues/comments{/number}","contents_url":"https://api.github.com/repos/RIKSOF/json-api-vc/contents/{+path}","compare_url":"https://api.github.com/repos/RIKSOF/json-api-vc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RIKSOF/json-api-vc/merges","archive_url":"https://api.github.com/repos/RIKSOF/json-api-vc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RIKSOF/json-api-vc/downloads","issues_url":"https://api.github.com/repos/RIKSOF/json-api-vc/issues{/number}","pulls_url":"https://api.github.com/repos/RIKSOF/json-api-vc/pulls{/number}","milestones_url":"https://api.github.com/repos/RIKSOF/json-api-vc/milestones{/number}","notifications_url":"https://api.github.com/repos/RIKSOF/json-api-vc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RIKSOF/json-api-vc/labels{/name}","releases_url":"https://api.github.com/repos/RIKSOF/json-api-vc/releases{/id}","deployments_url":"https://api.github.com/repos/RIKSOF/json-api-vc/deployments","created_at":"2016-08-20T12:20:09Z","updated_at":"2016-08-21T15:00:30Z","pushed_at":"2016-11-07T11:11:34Z","git_url":"git://github.com/RIKSOF/json-api-vc.git","ssh_url":"git@github.com:RIKSOF/json-api-vc.git","clone_url":"https://github.com/RIKSOF/json-api-vc.git","svn_url":"https://github.com/RIKSOF/json-api-vc","homepage":null,"size":683,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"RIKSOF:master","ref":"master","sha":"fe141a33d9fbca743f75531fae99941430840bdf","user":{"login":"RIKSOF","id":1582310,"avatar_url":"https://avatars.githubusercontent.com/u/1582310?v=3","gravatar_id":"","url":"https://api.github.com/users/RIKSOF","html_url":"https://github.com/RIKSOF","followers_url":"https://api.github.com/users/RIKSOF/followers","following_url":"https://api.github.com/users/RIKSOF/following{/other_user}","gists_url":"https://api.github.com/users/RIKSOF/gists{/gist_id}","starred_url":"https://api.github.com/users/RIKSOF/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RIKSOF/subscriptions","organizations_url":"https://api.github.com/users/RIKSOF/orgs","repos_url":"https://api.github.com/users/RIKSOF/repos","events_url":"https://api.github.com/users/RIKSOF/events{/privacy}","received_events_url":"https://api.github.com/users/RIKSOF/received_events","type":"Organization","site_admin":false},"repo":{"id":66145247,"name":"json-api-vc","full_name":"RIKSOF/json-api-vc","owner":{"login":"RIKSOF","id":1582310,"avatar_url":"https://avatars.githubusercontent.com/u/1582310?v=3","gravatar_id":"","url":"https://api.github.com/users/RIKSOF","html_url":"https://github.com/RIKSOF","followers_url":"https://api.github.com/users/RIKSOF/followers","following_url":"https://api.github.com/users/RIKSOF/following{/other_user}","gists_url":"https://api.github.com/users/RIKSOF/gists{/gist_id}","starred_url":"https://api.github.com/users/RIKSOF/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RIKSOF/subscriptions","organizations_url":"https://api.github.com/users/RIKSOF/orgs","repos_url":"https://api.github.com/users/RIKSOF/repos","events_url":"https://api.github.com/users/RIKSOF/events{/privacy}","received_events_url":"https://api.github.com/users/RIKSOF/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/RIKSOF/json-api-vc","description":"A module for quickly building json api with git like version control.","fork":false,"url":"https://api.github.com/repos/RIKSOF/json-api-vc","forks_url":"https://api.github.com/repos/RIKSOF/json-api-vc/forks","keys_url":"https://api.github.com/repos/RIKSOF/json-api-vc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RIKSOF/json-api-vc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RIKSOF/json-api-vc/teams","hooks_url":"https://api.github.com/repos/RIKSOF/json-api-vc/hooks","issue_events_url":"https://api.github.com/repos/RIKSOF/json-api-vc/issues/events{/number}","events_url":"https://api.github.com/repos/RIKSOF/json-api-vc/events","assignees_url":"https://api.github.com/repos/RIKSOF/json-api-vc/assignees{/user}","branches_url":"https://api.github.com/repos/RIKSOF/json-api-vc/branches{/branch}","tags_url":"https://api.github.com/repos/RIKSOF/json-api-vc/tags","blobs_url":"https://api.github.com/repos/RIKSOF/json-api-vc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RIKSOF/json-api-vc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RIKSOF/json-api-vc/git/refs{/sha}","trees_url":"https://api.github.com/repos/RIKSOF/json-api-vc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RIKSOF/json-api-vc/statuses/{sha}","languages_url":"https://api.github.com/repos/RIKSOF/json-api-vc/languages","stargazers_url":"https://api.github.com/repos/RIKSOF/json-api-vc/stargazers","contributors_url":"https://api.github.com/repos/RIKSOF/json-api-vc/contributors","subscribers_url":"https://api.github.com/repos/RIKSOF/json-api-vc/subscribers","subscription_url":"https://api.github.com/repos/RIKSOF/json-api-vc/subscription","commits_url":"https://api.github.com/repos/RIKSOF/json-api-vc/commits{/sha}","git_commits_url":"https://api.github.com/repos/RIKSOF/json-api-vc/git/commits{/sha}","comments_url":"https://api.github.com/repos/RIKSOF/json-api-vc/comments{/number}","issue_comment_url":"https://api.github.com/repos/RIKSOF/json-api-vc/issues/comments{/number}","contents_url":"https://api.github.com/repos/RIKSOF/json-api-vc/contents/{+path}","compare_url":"https://api.github.com/repos/RIKSOF/json-api-vc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RIKSOF/json-api-vc/merges","archive_url":"https://api.github.com/repos/RIKSOF/json-api-vc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RIKSOF/json-api-vc/downloads","issues_url":"https://api.github.com/repos/RIKSOF/json-api-vc/issues{/number}","pulls_url":"https://api.github.com/repos/RIKSOF/json-api-vc/pulls{/number}","milestones_url":"https://api.github.com/repos/RIKSOF/json-api-vc/milestones{/number}","notifications_url":"https://api.github.com/repos/RIKSOF/json-api-vc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RIKSOF/json-api-vc/labels{/name}","releases_url":"https://api.github.com/repos/RIKSOF/json-api-vc/releases{/id}","deployments_url":"https://api.github.com/repos/RIKSOF/json-api-vc/deployments","created_at":"2016-08-20T12:20:09Z","updated_at":"2016-08-21T15:00:30Z","pushed_at":"2016-11-07T11:11:34Z","git_url":"git://github.com/RIKSOF/json-api-vc.git","ssh_url":"git@github.com:RIKSOF/json-api-vc.git","clone_url":"https://github.com/RIKSOF/json-api-vc.git","svn_url":"https://github.com/RIKSOF/json-api-vc","homepage":null,"size":683,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/RIKSOF/json-api-vc/pulls/2"},"html":{"href":"https://github.com/RIKSOF/json-api-vc/pull/2"},"issue":{"href":"https://api.github.com/repos/RIKSOF/json-api-vc/issues/2"},"comments":{"href":"https://api.github.com/repos/RIKSOF/json-api-vc/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/RIKSOF/json-api-vc/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/RIKSOF/json-api-vc/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/RIKSOF/json-api-vc/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/RIKSOF/json-api-vc/statuses/d4fe91c60a25a419495489ec547fd6c72e27c16b"}}}}
{"actor":{"display_login":"mkhurramali"}}