{"action":"created","comment":{"url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/pulls/comments/202537452","pull_request_review_id":137259882,"id":202537452,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMjUzNzQ1Mg==","diff_hunk":"@@ -134,24 +146,207 @@ namespace tokenLib {\n \t\t\treturn false;\n \t\t}\n \t\tCloseHandle(userToken);\n-\t\t\n+\n \n \t\t//add desired group to the token\n \t\tif (!tokenDeconstructed->addGroup(sid)) {\n \t\t\twprintf(L\"  Cannot add group to a token\\n\");\n \t\t\treturn false;\n \t\t}\n \n-\t\t//generate new access token \n+\t\t//generate new access token\n \t\tif (!tokenDeconstructed->generateToken(token)) {\n \t\t\twprintf(L\"  Cannot construct a token\\n\");\n \t\t\treturn false;\n \t\t}\n \t\treturn true;\n \t}\n-}\n \n+\tDLLEXPORT bool aquireTokenWithPrivilegesForTokenManipulation(HANDLE &token) {\n+\t\tauto allProcessesOpt = getAllProcesses();\n+\t\tif (!allProcessesOpt.has_value()) {\n+\t\t\tstd::wcout << L\"Cannot enumerate processes\" << std::endl;\n+\t\t\ttoken = 0;\n+\t\t\treturn false;\n+\t\t}\n+\t\tauto allProcesses = allProcessesOpt.value();\n+\t\tauto privilegedProcessesOpt = getProcessesWithBothPrivileges(allProcesses);\n+\t\tif (!privilegedProcessesOpt.has_value())\n+\t\t{\n+\t\t\tstd::wcout << L\"Cannot locate process with needed privilege\" << std::endl;\n+\t\t\ttoken = 0;\n+\t\t\treturn false;\n+\t\t}\n+\t\tauto privilegedProcesses = privilegedProcessesOpt.value();\n+\n+\t\tauto processHandleOpt = getProcessUnderLocalSystem(privilegedProcesses);\n+\t\tif (!processHandleOpt.has_value()) {\n+\t\t\tstd::wcout << L\"Cannot locate process with needed privilege\" << std::endl;\n+\t\t\ttoken = 0;\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tHANDLE processHandle = processHandleOpt.value();\n+\n+\t\tHANDLE processToken = 0;\n+\t\tif (!OpenProcessToken(processHandle, TOKEN_QUERY | TOKEN_DUPLICATE  | TOKEN_ASSIGN_PRIMARY, &processToken)) {\n+\t\t\ttoken = 0;\n+\t\t\tCloseHandle(processHandle);\n+\t\t\tstd::wcout << L\"Cannot aquire token handle\" << std::endl;\n+\t\t\treturn false;\n+\t\t}\n+\t\tif (!DuplicateTokenEx(processToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenPrimary, &token))\n+\t\t{\n+\t\t\ttoken = 0;\n+\t\t\tCloseHandle(processHandle);\n+\t\t\tCloseHandle(processToken);\n+\t\t\tstd::wcout << L\"Cannot duplicate token\" << std::endl;\n+\t\t\treturn false;\n+\t\t}\n+\t\tCloseHandle(processHandle);\n+\t\tCloseHandle(processToken);\n+\t\treturn true;\n+\t}\n+}\n //private code\n+std::optional<std::vector<DWORD>> getAllProcesses() {\n+\n+\tstd::vector<DWORD> processes(1024); //arbitrary number, chosen as power of 2 for allignment\n+\tDWORD usedBufferSize = 0;\n+\tdo\n+\t{\n+\t\tprocesses.reserve(2 * processes.capacity());\n+\t\tif (!EnumProcesses(&(processes[0]), processes.capacity(), &usedBufferSize))\n+\t\t{\n+\t\t\tstd::wcout << L\"Cannot enumerate processes on the system\" << std::endl;\n+\t\t\treturn std::nullopt;\n+\t\t}\n+\t\tprocesses.resize(usedBufferSize/sizeof(DWORD)); //restore vector integrity\n+\t} while (usedBufferSize / sizeof(DWORD) >= processes.capacity());\n+\treturn processes;\n+}\n+\n+std::optional<std::vector<DWORD>> getProcessesWithBothPrivileges(const std::vector<DWORD>& allProcesses) {\n+\tstd::vector<DWORD> processes;\n+\tfor (auto const& processPid: allProcesses)\n+\t{\n+\t\tHANDLE processHandle;\n+\t\tif ((processHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processPid)) == NULL) continue;\n+\t\tif (hasSeCreateTokenPrivilege(processHandle) && hasSeTcbPrivilege(processHandle))\n+\t\t{\n+\t\t\tprocesses.push_back(processPid);\n+\t\t}\n+\t\tCloseHandle(processHandle);\n+\t}\n+\tif (processes.size() == 0) {\n+\t\tstd::wcout << \"Could not find process with SeCreateTokenPrivilege\" << std::endl;\n+\t\treturn std::nullopt;\n+\t}\n+\treturn processes;\n+\n+}\n+\n+bool hasPrilivege(const HANDLE processHandle, LPCTSTR privilege) {\n+\tHANDLE tokenHandle = 0;\n+\tif (!OpenProcessToken(processHandle, TOKEN_ALL_ACCESS, &tokenHandle)) {\n+\t\tstd::wcout << L\"Cannot open process token\" << std::endl;\n+\t\treturn false;\n+\t}\n+\tDWORD bufferSize = 0;\n+\tGetTokenInformation(tokenHandle, TokenPrivileges, NULL, 0, &bufferSize);\n+\tSetLastError(0);\n+\tPTOKEN_PRIVILEGES tokenPrivileges = (PTOKEN_PRIVILEGES) new BYTE[bufferSize];\n+\tGetTokenInformation(tokenHandle, TokenPrivileges, (LPVOID)tokenPrivileges, bufferSize, &bufferSize);\n+\tif (GetLastError() != 0)\n+\t{\n+\t\tCloseHandle(tokenHandle);\n+\t\tdelete[](BYTE*) tokenPrivileges;\n+\t\tstd::wcout << L\"Cannot query selected token\" << std::endl;\n+\t\treturn false;\n+\t}\n+\n+\tfor (size_t i = 0; i < tokenPrivileges->PrivilegeCount; i++)\n+\t{\n+\t\tbufferSize = 0;\n+\t\tLookupPrivilegeName(NULL, &(tokenPrivileges->Privileges[i]).Luid, NULL, &bufferSize);\n+\t\tLPTSTR name = (LPTSTR) new BYTE[bufferSize * sizeof(TCHAR)];\n+\t\tLookupPrivilegeName(NULL, &(tokenPrivileges->Privileges[i]).Luid, name, &bufferSize);\n+\t\tif (wcscmp(name, privilege) == 0)\n+\t\t{\n+\t\t\tCloseHandle(tokenHandle);\n+\t\t\tdelete[](BYTE*) tokenPrivileges;\n+\t\t\tdelete[](BYTE*) name;\n+\t\t\treturn true;\n+\t\t}\n+\t\tdelete[](BYTE*) name;\n+\t}\n+\tstd::wcout << L\"Selected token does not posses SeCreateTokenPrivilege\" << std::endl;\n+\tCloseHandle(tokenHandle);\n+\tdelete[](BYTE*) tokenPrivileges;\n+\treturn false;\n+","path":"SharkCage/SharedFunctionality/tokenLib/tokenLib.cpp","position":202,"original_position":202,"commit_id":"ac1e3a5a608bd37ed90099edac4d2c97b95d4c30","original_commit_id":"ac1e3a5a608bd37ed90099edac4d2c97b95d4c30","user":{"login":"DonatJR","id":16246147,"node_id":"MDQ6VXNlcjE2MjQ2MTQ3","avatar_url":"https://avatars0.githubusercontent.com/u/16246147?v=4","gravatar_id":"","url":"https://api.github.com/users/DonatJR","html_url":"https://github.com/DonatJR","followers_url":"https://api.github.com/users/DonatJR/followers","following_url":"https://api.github.com/users/DonatJR/following{/other_user}","gists_url":"https://api.github.com/users/DonatJR/gists{/gist_id}","starred_url":"https://api.github.com/users/DonatJR/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DonatJR/subscriptions","organizations_url":"https://api.github.com/users/DonatJR/orgs","repos_url":"https://api.github.com/users/DonatJR/repos","events_url":"https://api.github.com/users/DonatJR/events{/privacy}","received_events_url":"https://api.github.com/users/DonatJR/received_events","type":"User","site_admin":false},"body":"nit: unneeded empty line","created_at":"2018-07-15T10:08:13Z","updated_at":"2018-07-15T10:33:18Z","html_url":"https://github.com/SharkCagey/HTWG_shark_cage/pull/71#discussion_r202537452","pull_request_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/pulls/71","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/pulls/comments/202537452"},"html":{"href":"https://github.com/SharkCagey/HTWG_shark_cage/pull/71#discussion_r202537452"},"pull_request":{"href":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/pulls/71"}}},"pull_request":{"url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/pulls/71","id":201245323,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAxMjQ1MzIz","html_url":"https://github.com/SharkCagey/HTWG_shark_cage/pull/71","diff_url":"https://github.com/SharkCagey/HTWG_shark_cage/pull/71.diff","patch_url":"https://github.com/SharkCagey/HTWG_shark_cage/pull/71.patch","issue_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/issues/71","number":71,"state":"open","locked":false,"title":"Aquisiton of token with SeCreateTokenPrivilege privilege ","user":{"login":"bencikpeter","id":16115043,"node_id":"MDQ6VXNlcjE2MTE1MDQz","avatar_url":"https://avatars3.githubusercontent.com/u/16115043?v=4","gravatar_id":"","url":"https://api.github.com/users/bencikpeter","html_url":"https://github.com/bencikpeter","followers_url":"https://api.github.com/users/bencikpeter/followers","following_url":"https://api.github.com/users/bencikpeter/following{/other_user}","gists_url":"https://api.github.com/users/bencikpeter/gists{/gist_id}","starred_url":"https://api.github.com/users/bencikpeter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bencikpeter/subscriptions","organizations_url":"https://api.github.com/users/bencikpeter/orgs","repos_url":"https://api.github.com/users/bencikpeter/repos","events_url":"https://api.github.com/users/bencikpeter/events{/privacy}","received_events_url":"https://api.github.com/users/bencikpeter/received_events","type":"User","site_admin":false},"body":"Resolving #68 \r\n\r\n`CageManager` is now started with a token of process that has `SeCreateTokenPrivilege` present.\r\n\r\nTo allow you to test on your systems, I´ve created a simple [PrivilegeEnumerator](https://gist.github.com/bencikpeter/d75c195c6db1048ce2175d250bc08db0) program that will aquire it parent´s process security context and enumerate all privileges available for it. Last output is a sentence saying if process has `SeCreateTokenPrivilege` or not (to spare you from searching the list).\r\n\r\nPlease try to run that code inside a cage before approving (my system is a complete mess regarding privileges after I´ve been developing that token modification library 😅 ). It will output all privileges available for `CageManager`","created_at":"2018-07-13T10:06:24Z","updated_at":"2018-07-15T10:33:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d9916433d18134dd3b9ca7f8f729f72dad8113bc","assignee":null,"assignees":[],"requested_reviewers":[{"login":"SailReal","id":1786772,"node_id":"MDQ6VXNlcjE3ODY3NzI=","avatar_url":"https://avatars3.githubusercontent.com/u/1786772?v=4","gravatar_id":"","url":"https://api.github.com/users/SailReal","html_url":"https://github.com/SailReal","followers_url":"https://api.github.com/users/SailReal/followers","following_url":"https://api.github.com/users/SailReal/following{/other_user}","gists_url":"https://api.github.com/users/SailReal/gists{/gist_id}","starred_url":"https://api.github.com/users/SailReal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SailReal/subscriptions","organizations_url":"https://api.github.com/users/SailReal/orgs","repos_url":"https://api.github.com/users/SailReal/repos","events_url":"https://api.github.com/users/SailReal/events{/privacy}","received_events_url":"https://api.github.com/users/SailReal/received_events","type":"User","site_admin":false},{"login":"langweg","id":22796202,"node_id":"MDQ6VXNlcjIyNzk2MjAy","avatar_url":"https://avatars2.githubusercontent.com/u/22796202?v=4","gravatar_id":"","url":"https://api.github.com/users/langweg","html_url":"https://github.com/langweg","followers_url":"https://api.github.com/users/langweg/followers","following_url":"https://api.github.com/users/langweg/following{/other_user}","gists_url":"https://api.github.com/users/langweg/gists{/gist_id}","starred_url":"https://api.github.com/users/langweg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/langweg/subscriptions","organizations_url":"https://api.github.com/users/langweg/orgs","repos_url":"https://api.github.com/users/langweg/repos","events_url":"https://api.github.com/users/langweg/events{/privacy}","received_events_url":"https://api.github.com/users/langweg/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/pulls/71/commits","review_comments_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/pulls/71/comments","review_comment_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/issues/71/comments","statuses_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/statuses/ac1e3a5a608bd37ed90099edac4d2c97b95d4c30","head":{"label":"SharkCagey:68-token-privilege-aquisition","ref":"68-token-privilege-aquisition","sha":"ac1e3a5a608bd37ed90099edac4d2c97b95d4c30","user":{"login":"SharkCagey","id":38069798,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4MDY5Nzk4","avatar_url":"https://avatars3.githubusercontent.com/u/38069798?v=4","gravatar_id":"","url":"https://api.github.com/users/SharkCagey","html_url":"https://github.com/SharkCagey","followers_url":"https://api.github.com/users/SharkCagey/followers","following_url":"https://api.github.com/users/SharkCagey/following{/other_user}","gists_url":"https://api.github.com/users/SharkCagey/gists{/gist_id}","starred_url":"https://api.github.com/users/SharkCagey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SharkCagey/subscriptions","organizations_url":"https://api.github.com/users/SharkCagey/orgs","repos_url":"https://api.github.com/users/SharkCagey/repos","events_url":"https://api.github.com/users/SharkCagey/events{/privacy}","received_events_url":"https://api.github.com/users/SharkCagey/received_events","type":"Organization","site_admin":false},"repo":{"id":128043253,"node_id":"MDEwOlJlcG9zaXRvcnkxMjgwNDMyNTM=","name":"HTWG_shark_cage","full_name":"SharkCagey/HTWG_shark_cage","owner":{"login":"SharkCagey","id":38069798,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4MDY5Nzk4","avatar_url":"https://avatars3.githubusercontent.com/u/38069798?v=4","gravatar_id":"","url":"https://api.github.com/users/SharkCagey","html_url":"https://github.com/SharkCagey","followers_url":"https://api.github.com/users/SharkCagey/followers","following_url":"https://api.github.com/users/SharkCagey/following{/other_user}","gists_url":"https://api.github.com/users/SharkCagey/gists{/gist_id}","starred_url":"https://api.github.com/users/SharkCagey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SharkCagey/subscriptions","organizations_url":"https://api.github.com/users/SharkCagey/orgs","repos_url":"https://api.github.com/users/SharkCagey/repos","events_url":"https://api.github.com/users/SharkCagey/events{/privacy}","received_events_url":"https://api.github.com/users/SharkCagey/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SharkCagey/HTWG_shark_cage","description":null,"fork":true,"url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage","forks_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/forks","keys_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/teams","hooks_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/hooks","issue_events_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/issues/events{/number}","events_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/events","assignees_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/assignees{/user}","branches_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/branches{/branch}","tags_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/tags","blobs_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/git/refs{/sha}","trees_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/statuses/{sha}","languages_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/languages","stargazers_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/stargazers","contributors_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/contributors","subscribers_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/subscribers","subscription_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/subscription","commits_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/commits{/sha}","git_commits_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/git/commits{/sha}","comments_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/comments{/number}","issue_comment_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/issues/comments{/number}","contents_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/contents/{+path}","compare_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/merges","archive_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/downloads","issues_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/issues{/number}","pulls_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/pulls{/number}","milestones_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/milestones{/number}","notifications_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/labels{/name}","releases_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/releases{/id}","deployments_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/deployments","created_at":"2018-04-04T09:57:12Z","updated_at":"2018-04-14T18:39:09Z","pushed_at":"2018-07-14T09:47:26Z","git_url":"git://github.com/SharkCagey/HTWG_shark_cage.git","ssh_url":"git@github.com:SharkCagey/HTWG_shark_cage.git","clone_url":"https://github.com/SharkCagey/HTWG_shark_cage.git","svn_url":"https://github.com/SharkCagey/HTWG_shark_cage","homepage":null,"size":113555,"stargazers_count":0,"watchers_count":0,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":21,"license":null,"forks":0,"open_issues":21,"watchers":0,"default_branch":"master"}},"base":{"label":"SharkCagey:develop","ref":"develop","sha":"379839f3733a08b49bff5d4cea55f448baf06c0e","user":{"login":"SharkCagey","id":38069798,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4MDY5Nzk4","avatar_url":"https://avatars3.githubusercontent.com/u/38069798?v=4","gravatar_id":"","url":"https://api.github.com/users/SharkCagey","html_url":"https://github.com/SharkCagey","followers_url":"https://api.github.com/users/SharkCagey/followers","following_url":"https://api.github.com/users/SharkCagey/following{/other_user}","gists_url":"https://api.github.com/users/SharkCagey/gists{/gist_id}","starred_url":"https://api.github.com/users/SharkCagey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SharkCagey/subscriptions","organizations_url":"https://api.github.com/users/SharkCagey/orgs","repos_url":"https://api.github.com/users/SharkCagey/repos","events_url":"https://api.github.com/users/SharkCagey/events{/privacy}","received_events_url":"https://api.github.com/users/SharkCagey/received_events","type":"Organization","site_admin":false},"repo":{"id":128043253,"node_id":"MDEwOlJlcG9zaXRvcnkxMjgwNDMyNTM=","name":"HTWG_shark_cage","full_name":"SharkCagey/HTWG_shark_cage","owner":{"login":"SharkCagey","id":38069798,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4MDY5Nzk4","avatar_url":"https://avatars3.githubusercontent.com/u/38069798?v=4","gravatar_id":"","url":"https://api.github.com/users/SharkCagey","html_url":"https://github.com/SharkCagey","followers_url":"https://api.github.com/users/SharkCagey/followers","following_url":"https://api.github.com/users/SharkCagey/following{/other_user}","gists_url":"https://api.github.com/users/SharkCagey/gists{/gist_id}","starred_url":"https://api.github.com/users/SharkCagey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SharkCagey/subscriptions","organizations_url":"https://api.github.com/users/SharkCagey/orgs","repos_url":"https://api.github.com/users/SharkCagey/repos","events_url":"https://api.github.com/users/SharkCagey/events{/privacy}","received_events_url":"https://api.github.com/users/SharkCagey/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SharkCagey/HTWG_shark_cage","description":null,"fork":true,"url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage","forks_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/forks","keys_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/teams","hooks_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/hooks","issue_events_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/issues/events{/number}","events_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/events","assignees_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/assignees{/user}","branches_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/branches{/branch}","tags_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/tags","blobs_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/git/refs{/sha}","trees_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/statuses/{sha}","languages_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/languages","stargazers_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/stargazers","contributors_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/contributors","subscribers_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/subscribers","subscription_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/subscription","commits_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/commits{/sha}","git_commits_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/git/commits{/sha}","comments_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/comments{/number}","issue_comment_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/issues/comments{/number}","contents_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/contents/{+path}","compare_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/merges","archive_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/downloads","issues_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/issues{/number}","pulls_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/pulls{/number}","milestones_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/milestones{/number}","notifications_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/labels{/name}","releases_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/releases{/id}","deployments_url":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/deployments","created_at":"2018-04-04T09:57:12Z","updated_at":"2018-04-14T18:39:09Z","pushed_at":"2018-07-14T09:47:26Z","git_url":"git://github.com/SharkCagey/HTWG_shark_cage.git","ssh_url":"git@github.com:SharkCagey/HTWG_shark_cage.git","clone_url":"https://github.com/SharkCagey/HTWG_shark_cage.git","svn_url":"https://github.com/SharkCagey/HTWG_shark_cage","homepage":null,"size":113555,"stargazers_count":0,"watchers_count":0,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":21,"license":null,"forks":0,"open_issues":21,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/pulls/71"},"html":{"href":"https://github.com/SharkCagey/HTWG_shark_cage/pull/71"},"issue":{"href":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/issues/71"},"comments":{"href":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/issues/71/comments"},"review_comments":{"href":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/pulls/71/comments"},"review_comment":{"href":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/pulls/71/commits"},"statuses":{"href":"https://api.github.com/repos/SharkCagey/HTWG_shark_cage/statuses/ac1e3a5a608bd37ed90099edac4d2c97b95d4c30"}},"author_association":"NONE"}}
{"actor":{"display_login":"DonatJR"}}