{"action":"created","comment":{"url":"https://api.github.com/repos/SjonHortensius/pfsense/pulls/comments/29274498","id":29274498,"diff_hunk":"@@ -116,137 +112,128 @@ function(index,row) { jQuery(row).fadeOut(1000); }\n //]]>\n </script>\n \n-<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"tabcon\">\n-\t<tr>\n-\t\t<td>\n-\t\t<?php\n-\t\t\t$tab_array = array();\n-\t\t\t$tab_array[] = array(gettext(\"States\"), true, \"diag_dump_states.php\");\n-\t\t\tif (isset($config['system']['lb_use_sticky']))\n-\t\t\t\t$tab_array[] = array(gettext(\"Source Tracking\"), false, \"diag_dump_states_sources.php\");\n-\t\t\t$tab_array[] = array(gettext(\"Reset States\"), false, \"diag_resetstate.php\");\n-\t\t\tdisplay_top_tabs($tab_array);\n-\t\t?>\n-\t\t</td>\n-\t</tr>\n-\t<tr>\n-\t\t<td>\n-\t\t\t<div id=\"mainarea\">\n-\n-<!-- Start of tab content -->\n-\n <?php\n-\t$current_statecount=`pfctl -si | grep \"current entries\" | awk '{ print $3 }'`;\n+$tab_array = array();\n+$tab_array[] = array(gettext(\"States\"), true, \"diag_dump_states.php\");\n+if (isset($config['system']['lb_use_sticky']))\n+\t$tab_array[] = array(gettext(\"Source Tracking\"), false, \"diag_dump_states_sources.php\");\n+$tab_array[] = array(gettext(\"Reset States\"), false, \"diag_resetstate.php\");\n+display_top_tabs($tab_array);\n+\n+// Start of tab content\n+$current_statecount=`pfctl -si | grep \"current entries\" | awk '{ print $3 }'`;\n+\n+require('classes/Form.class.php');\n+\n+$form = new Form(false);\n+\n+$section = new Form_Section('State filter');\n+\n+$section->addInput(new Form_Input(\n+\t'filtertext',\n+\t'Filter expression',\n+\t'text',\n+\thtmlspecialchars($_POST['filtertext']),\n+\t['placeholder' => '']\n+));\n+\n+$section->addInput(new Form_StaticText(\n+\t'',\n+\t new Form_Button('filter', 'Filter', null)\n+));\n+\n+if (isset($_POST['filtertext']) && (is_ipaddr($_POST['filtertext']) || is_subnet($_POST['filtertext']))) {\n+$section->addInput(new Form_StaticText(\n+\t'Kill filtered states',\n+\tnew Form_Button(\n+\t\t'killfilter',\n+\t\t'\tKill   '\n+\t)))->setHelp('Remove all states to and from the filtered address');\n+}\n+\n+$form->add($section);\n+print $form;\n ?>\n \n-<table class=\"tabcont\" width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" summary=\"states\">\n-\t<tr>\n-\t\t<td>\n-\t\t\t<form action=\"<?=$_SERVER['SCRIPT_NAME'];?>\" method=\"post\" name=\"iform\">\n-\t\t\t<table class=\"tabcont\" width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" summary=\"filter\">\n-\t\t\t\t<tr>\n-\t\t\t\t\t<td>\n-\t\t\t\t\t\t<?=gettext(\"Current total state count\");?>: <?= $current_statecount ?>\n-\t\t\t\t\t</td>\n-\t\t\t\t\t<td style=\"font-weight:bold;\" align=\"right\">\n-\t\t\t\t\t\t<?=gettext(\"Filter expression:\");?>\n-\t\t\t\t\t\t<input type=\"text\" name=\"filter\" class=\"formfld search\" value=\"<?=htmlspecialchars($_POST['filter']);?>\" size=\"30\" />\n-\t\t\t\t\t\t<input type=\"submit\" class=\"formbtn\" value=\"<?=gettext(\"Filter\");?>\" />\n-\t\t\t\t\t<?php if (isset($_POST['filter']) && (is_ipaddr($_POST['filter']) || is_subnet($_POST['filter']))): ?>\n-\t\t\t\t\t\t<input type=\"submit\" class=\"formbtn\" name=\"killfilter\" value=\"<?=gettext(\"Kill\");?>\" />\n-\t\t\t\t\t<?php endif; ?>\n-\t\t\t\t\t</td>\n-\t\t\t\t</tr>\n-\t\t\t</table>\n-\t\t\t</form>\n-\t\t</td>\n-\t</tr>\n-\t<tr>\n-\t\t<td>\n-\t\t\t<table class=\"tabcont sortable\" width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" summary=\"results\">\n-\t\t\t\t<thead>\n-\t\t\t\t<tr>\n-\t\t\t\t\t<th class=\"listhdrr\" width=\"5%\"><?=gettext(\"Int\");?></th>\n-\t\t\t\t\t<th class=\"listhdrr\" width=\"5%\"><?=gettext(\"Proto\");?></th>\n-\t\t\t\t\t<th class=\"listhdrr\" width=\"65\"><?=gettext(\"Source -> Router -> Destination\");?></th>\n-\t\t\t\t\t<th class=\"listhdr\" width=\"24%\"><?=gettext(\"State\");?></th>\n-\t\t\t\t\t<th class=\"list sort_ignore\" width=\"1%\"></th>\n-\t\t\t\t</tr>\n-\t\t\t\t</thead>\n-\t\t\t\t<tbody>\n-<?php\n-$row = 0;\n-/* get our states */\n-$grepline = (isset($_POST['filter'])) ? \"| /usr/bin/egrep \" . escapeshellarg(htmlspecialchars($_POST['filter'])) : \"\";\n-$fd = popen(\"/sbin/pfctl -s state {$grepline}\", \"r\" );\n-while ($line = chop(fgets($fd))) {\n-\tif($row >= 10000)\n-\t\tbreak;\n-\n-\t$line_split = preg_split(\"/\\s+/\", $line);\n-\n-\t$iface  = array_shift($line_split);\n-\t$proto = array_shift($line_split);\n-\t$state = array_pop($line_split);\n-\t$info  = implode(\" \", $line_split);\n-\n-\t// We may want to make this optional, with a large state table, this could get to be expensive.\n-\t$iface = convert_real_interface_to_friendly_descr($iface);\n-\n-\t/* break up info and extract $srcip and $dstip */\n-\t$ends = preg_split(\"/\\<?-\\>?/\", $info);\n-\t$parts = explode(\":\", $ends[0]);\n-\t$srcip = trim($parts[0]);\n-\t$parts = explode(\":\", $ends[count($ends) - 1]);\n-\t$dstip = trim($parts[0]);\n+<script>\n+\tdocument.getElementById(\"filter\").className = \"btn btn-default btn-sm\";\n+\tdocument.getElementById(\"killfilter\").className = \"btn btn-danger btn-sm\";\n+</script>\n \n+<table class=\"table table-striped table-hover table-compact\" summary=\"results\">\n+\t<thead>\n+\t\t<tr class=\"info\">\n+\t\t\t<th class=\"col-md-1\"><?=gettext(\"Int\")?></th>\n+\t\t\t<th class=\"col-md-1\"><?=gettext(\"Proto\")?></th>\n+\t\t\t<th class=\"col-md-5\"><?=gettext(\"Source -> Router -> Destination\")?></th>\n+\t\t\t<th class=\"col-md-4\"><?=gettext(\"State\")?></th>\n+\t\t\t<th class=\"col-md-1\"></th> <!-- For the optional \"Remove\" button -->\n+\t\t</tr>\n+\t</thead>\n+\t<tbody>\n+<?php\n+\t$row = 0;\n+\t/* get our states */\n+\t$grepline = (isset($_POST['filtertext'])) ? \"| /usr/bin/egrep \" . escapeshellarg(htmlspecialchars($_POST['filtertext'])) : \"\";\n+\t$fd = popen(\"/sbin/pfctl -s state {$grepline}\", \"r\" );\n+\twhile ($line = chop(fgets($fd))) {\n+\t\tif($row >= 10000)\n+\t\t\tbreak;\n+\n+\t\t$line_split = preg_split(\"/\\s+/\", $line);\n+\n+\t\t$iface\t= array_shift($line_split);\n+\t\t$proto = array_shift($line_split);\n+\t\t$state = array_pop($line_split);\n+\t\t$info  = implode(\" \", $line_split);\n+\n+\t\t// We may want to make this optional, with a large state table, this could get to be expensive.\n+\t\t$iface = convert_real_interface_to_friendly_descr($iface);\n+\n+\t\t/* break up info and extract $srcip and $dstip */\n+\t\t$ends = preg_split(\"/\\<?-\\>?/\", $info);\n+\t\t$parts = explode(\":\", $ends[0]);\n+\t\t$srcip = trim($parts[0]);\n+\t\t$parts = explode(\":\", $ends[count($ends) - 1]);\n+\t\t$dstip = trim($parts[0]);\n ?>\n-\t<tr valign=\"top\" id=\"r:<?= $srcip ?>:<?= $dstip ?>\">\n-\t\t\t<td class=\"listlr\"><?= $iface ?></td>\n-\t\t\t<td class=\"listr\"><?= $proto ?></td>\n-\t\t\t<td class=\"listr\"><?= $info ?></td>\n-\t\t\t<td class=\"listr\"><?= $state ?></td>\n-\t\t\t<td class=\"list\">\n-\t\t\t<img src=\"/themes/<?= $g['theme'] ?>/images/icons/icon_x.gif\" height=\"17\" width=\"17\" border=\"0\"\n-\t\t\t\tonclick=\"removeState('<?= $srcip ?>', '<?= $dstip ?>');\" style=\"cursor:pointer;\"\n-\t\t\t\tname=\"i:<?= $srcip ?>:<?= $dstip ?>\"\n-\t\t\t\ttitle=\"<?= gettext('Remove all state entries from') ?> <?= $srcip ?> <?= gettext('to') ?> <?= $dstip ?>\" alt=\"\" />\n+\n+\t\t<tr id=\"r:<?= $srcip ?>:<?= $dstip ?>\">\n+\t\t\t<td><?= $iface ?></td>\n+\t\t\t<td><?= $proto ?></td>\n+\t\t\t<td><?= $info ?></td>\n+\t\t\t<td><?= $state ?></td>\n+\n+\t\t\t<td>\n+\t\t\t\t<a class=\"btn btn-xs btn-danger\"\n+\t\t\t\t   onclick=\"removeState('<?= $srcip ?>', '<?= $dstip ?>');\" name=\"i:<?= $srcip ?>:<?= $dstip ?>\"\n+\t\t\t\t   title=\"<?= gettext('Remove all state entries from ') ?><?= $srcip ?><?= gettext(' to ') ?><?= $dstip ?>\" alt=\"\">Remove</a>\n \t\t\t</td>\n-\t</tr>\n+\t\t</tr>\n <?php\n \t$row++;\n-\tob_flush();\n }\n \n if ($row == 0): ?>\n-\t<tr>\n-\t\t<td class=\"list\" colspan=\"4\" align=\"center\" valign=\"top\">\n-\t\t<?= gettext(\"No states were found.\") ?>\n-\t\t</td>\n-\t</tr>\n+\t\t<tr>\n+\t\t\t<td colspan=\"4\" align=\"center\">","path":"usr/local/www/diag_dump_states.php","position":262,"original_position":262,"commit_id":"ea22b632e51bb736abe493ae7fa884f43eb1e18d","original_commit_id":"ea22b632e51bb736abe493ae7fa884f43eb1e18d","user":{"login":"SjonHortensius","id":1684987,"avatar_url":"https://avatars.githubusercontent.com/u/1684987?v=3","gravatar_id":"","url":"https://api.github.com/users/SjonHortensius","html_url":"https://github.com/SjonHortensius","followers_url":"https://api.github.com/users/SjonHortensius/followers","following_url":"https://api.github.com/users/SjonHortensius/following{/other_user}","gists_url":"https://api.github.com/users/SjonHortensius/gists{/gist_id}","starred_url":"https://api.github.com/users/SjonHortensius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SjonHortensius/subscriptions","organizations_url":"https://api.github.com/users/SjonHortensius/orgs","repos_url":"https://api.github.com/users/SjonHortensius/repos","events_url":"https://api.github.com/users/SjonHortensius/events{/privacy}","received_events_url":"https://api.github.com/users/SjonHortensius/received_events","type":"User","site_admin":false},"body":"Please remove the align too. Maybe wrap the message in an alert instead?","created_at":"2015-04-28T18:41:58Z","updated_at":"2015-04-28T18:41:58Z","html_url":"https://github.com/SjonHortensius/pfsense/pull/97#discussion_r29274498","pull_request_url":"https://api.github.com/repos/SjonHortensius/pfsense/pulls/97","_links":{"self":{"href":"https://api.github.com/repos/SjonHortensius/pfsense/pulls/comments/29274498"},"html":{"href":"https://github.com/SjonHortensius/pfsense/pull/97#discussion_r29274498"},"pull_request":{"href":"https://api.github.com/repos/SjonHortensius/pfsense/pulls/97"}}},"pull_request":{"url":"https://api.github.com/repos/SjonHortensius/pfsense/pulls/97","id":33619819,"html_url":"https://github.com/SjonHortensius/pfsense/pull/97","diff_url":"https://github.com/SjonHortensius/pfsense/pull/97.diff","patch_url":"https://github.com/SjonHortensius/pfsense/pull/97.patch","issue_url":"https://api.github.com/repos/SjonHortensius/pfsense/issues/97","number":97,"state":"open","locked":false,"title":"Dump states","user":{"login":"sbeaver-netgate","id":11539696,"avatar_url":"https://avatars.githubusercontent.com/u/11539696?v=3","gravatar_id":"","url":"https://api.github.com/users/sbeaver-netgate","html_url":"https://github.com/sbeaver-netgate","followers_url":"https://api.github.com/users/sbeaver-netgate/followers","following_url":"https://api.github.com/users/sbeaver-netgate/following{/other_user}","gists_url":"https://api.github.com/users/sbeaver-netgate/gists{/gist_id}","starred_url":"https://api.github.com/users/sbeaver-netgate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sbeaver-netgate/subscriptions","organizations_url":"https://api.github.com/users/sbeaver-netgate/orgs","repos_url":"https://api.github.com/users/sbeaver-netgate/repos","events_url":"https://api.github.com/users/sbeaver-netgate/events{/privacy}","received_events_url":"https://api.github.com/users/sbeaver-netgate/received_events","type":"User","site_admin":false},"body":"Incorporates changes to:\ndiag_dump_states.php\ndiag_dump_states_sources.php\ndiag_reset_state.php","created_at":"2015-04-19T14:40:02Z","updated_at":"2015-04-28T18:41:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"878d1fc4c4a4e45eee0e20940f7f7c8c333fbaf7","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/SjonHortensius/pfsense/pulls/97/commits","review_comments_url":"https://api.github.com/repos/SjonHortensius/pfsense/pulls/97/comments","review_comment_url":"https://api.github.com/repos/SjonHortensius/pfsense/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SjonHortensius/pfsense/issues/97/comments","statuses_url":"https://api.github.com/repos/SjonHortensius/pfsense/statuses/ea22b632e51bb736abe493ae7fa884f43eb1e18d","head":{"label":"sbeaver-netgate:dump_states","ref":"dump_states","sha":"ea22b632e51bb736abe493ae7fa884f43eb1e18d","user":{"login":"sbeaver-netgate","id":11539696,"avatar_url":"https://avatars.githubusercontent.com/u/11539696?v=3","gravatar_id":"","url":"https://api.github.com/users/sbeaver-netgate","html_url":"https://github.com/sbeaver-netgate","followers_url":"https://api.github.com/users/sbeaver-netgate/followers","following_url":"https://api.github.com/users/sbeaver-netgate/following{/other_user}","gists_url":"https://api.github.com/users/sbeaver-netgate/gists{/gist_id}","starred_url":"https://api.github.com/users/sbeaver-netgate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sbeaver-netgate/subscriptions","organizations_url":"https://api.github.com/users/sbeaver-netgate/orgs","repos_url":"https://api.github.com/users/sbeaver-netgate/repos","events_url":"https://api.github.com/users/sbeaver-netgate/events{/privacy}","received_events_url":"https://api.github.com/users/sbeaver-netgate/received_events","type":"User","site_admin":false},"repo":{"id":32476980,"name":"pfsense","full_name":"sbeaver-netgate/pfsense","owner":{"login":"sbeaver-netgate","id":11539696,"avatar_url":"https://avatars.githubusercontent.com/u/11539696?v=3","gravatar_id":"","url":"https://api.github.com/users/sbeaver-netgate","html_url":"https://github.com/sbeaver-netgate","followers_url":"https://api.github.com/users/sbeaver-netgate/followers","following_url":"https://api.github.com/users/sbeaver-netgate/following{/other_user}","gists_url":"https://api.github.com/users/sbeaver-netgate/gists{/gist_id}","starred_url":"https://api.github.com/users/sbeaver-netgate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sbeaver-netgate/subscriptions","organizations_url":"https://api.github.com/users/sbeaver-netgate/orgs","repos_url":"https://api.github.com/users/sbeaver-netgate/repos","events_url":"https://api.github.com/users/sbeaver-netgate/events{/privacy}","received_events_url":"https://api.github.com/users/sbeaver-netgate/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/sbeaver-netgate/pfsense","description":"We are migrating pfSense to bootstrap!","fork":true,"url":"https://api.github.com/repos/sbeaver-netgate/pfsense","forks_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/forks","keys_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/teams","hooks_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/hooks","issue_events_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/issues/events{/number}","events_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/events","assignees_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/assignees{/user}","branches_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/branches{/branch}","tags_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/tags","blobs_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/git/refs{/sha}","trees_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/statuses/{sha}","languages_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/languages","stargazers_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/stargazers","contributors_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/contributors","subscribers_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/subscribers","subscription_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/subscription","commits_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/commits{/sha}","git_commits_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/git/commits{/sha}","comments_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/comments{/number}","issue_comment_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/issues/comments{/number}","contents_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/contents/{+path}","compare_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/merges","archive_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/downloads","issues_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/issues{/number}","pulls_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/pulls{/number}","milestones_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/milestones{/number}","notifications_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/labels{/name}","releases_url":"https://api.github.com/repos/sbeaver-netgate/pfsense/releases{/id}","created_at":"2015-03-18T18:30:49Z","updated_at":"2015-04-28T11:23:11Z","pushed_at":"2015-04-28T16:46:57Z","git_url":"git://github.com/sbeaver-netgate/pfsense.git","ssh_url":"git@github.com:sbeaver-netgate/pfsense.git","clone_url":"https://github.com/sbeaver-netgate/pfsense.git","svn_url":"https://github.com/sbeaver-netgate/pfsense","homepage":"","size":61109,"stargazers_count":0,"watchers_count":0,"language":"PHP","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"bootstrap"}},"base":{"label":"SjonHortensius:bootstrap","ref":"bootstrap","sha":"50ea05884480ee5ab16fcfe4511dccd6c4db9b21","user":{"login":"SjonHortensius","id":1684987,"avatar_url":"https://avatars.githubusercontent.com/u/1684987?v=3","gravatar_id":"","url":"https://api.github.com/users/SjonHortensius","html_url":"https://github.com/SjonHortensius","followers_url":"https://api.github.com/users/SjonHortensius/followers","following_url":"https://api.github.com/users/SjonHortensius/following{/other_user}","gists_url":"https://api.github.com/users/SjonHortensius/gists{/gist_id}","starred_url":"https://api.github.com/users/SjonHortensius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SjonHortensius/subscriptions","organizations_url":"https://api.github.com/users/SjonHortensius/orgs","repos_url":"https://api.github.com/users/SjonHortensius/repos","events_url":"https://api.github.com/users/SjonHortensius/events{/privacy}","received_events_url":"https://api.github.com/users/SjonHortensius/received_events","type":"User","site_admin":false},"repo":{"id":28600412,"name":"pfsense","full_name":"SjonHortensius/pfsense","owner":{"login":"SjonHortensius","id":1684987,"avatar_url":"https://avatars.githubusercontent.com/u/1684987?v=3","gravatar_id":"","url":"https://api.github.com/users/SjonHortensius","html_url":"https://github.com/SjonHortensius","followers_url":"https://api.github.com/users/SjonHortensius/followers","following_url":"https://api.github.com/users/SjonHortensius/following{/other_user}","gists_url":"https://api.github.com/users/SjonHortensius/gists{/gist_id}","starred_url":"https://api.github.com/users/SjonHortensius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SjonHortensius/subscriptions","organizations_url":"https://api.github.com/users/SjonHortensius/orgs","repos_url":"https://api.github.com/users/SjonHortensius/repos","events_url":"https://api.github.com/users/SjonHortensius/events{/privacy}","received_events_url":"https://api.github.com/users/SjonHortensius/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/SjonHortensius/pfsense","description":"We are migrating pfSense to bootstrap!","fork":true,"url":"https://api.github.com/repos/SjonHortensius/pfsense","forks_url":"https://api.github.com/repos/SjonHortensius/pfsense/forks","keys_url":"https://api.github.com/repos/SjonHortensius/pfsense/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SjonHortensius/pfsense/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SjonHortensius/pfsense/teams","hooks_url":"https://api.github.com/repos/SjonHortensius/pfsense/hooks","issue_events_url":"https://api.github.com/repos/SjonHortensius/pfsense/issues/events{/number}","events_url":"https://api.github.com/repos/SjonHortensius/pfsense/events","assignees_url":"https://api.github.com/repos/SjonHortensius/pfsense/assignees{/user}","branches_url":"https://api.github.com/repos/SjonHortensius/pfsense/branches{/branch}","tags_url":"https://api.github.com/repos/SjonHortensius/pfsense/tags","blobs_url":"https://api.github.com/repos/SjonHortensius/pfsense/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SjonHortensius/pfsense/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SjonHortensius/pfsense/git/refs{/sha}","trees_url":"https://api.github.com/repos/SjonHortensius/pfsense/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SjonHortensius/pfsense/statuses/{sha}","languages_url":"https://api.github.com/repos/SjonHortensius/pfsense/languages","stargazers_url":"https://api.github.com/repos/SjonHortensius/pfsense/stargazers","contributors_url":"https://api.github.com/repos/SjonHortensius/pfsense/contributors","subscribers_url":"https://api.github.com/repos/SjonHortensius/pfsense/subscribers","subscription_url":"https://api.github.com/repos/SjonHortensius/pfsense/subscription","commits_url":"https://api.github.com/repos/SjonHortensius/pfsense/commits{/sha}","git_commits_url":"https://api.github.com/repos/SjonHortensius/pfsense/git/commits{/sha}","comments_url":"https://api.github.com/repos/SjonHortensius/pfsense/comments{/number}","issue_comment_url":"https://api.github.com/repos/SjonHortensius/pfsense/issues/comments{/number}","contents_url":"https://api.github.com/repos/SjonHortensius/pfsense/contents/{+path}","compare_url":"https://api.github.com/repos/SjonHortensius/pfsense/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SjonHortensius/pfsense/merges","archive_url":"https://api.github.com/repos/SjonHortensius/pfsense/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SjonHortensius/pfsense/downloads","issues_url":"https://api.github.com/repos/SjonHortensius/pfsense/issues{/number}","pulls_url":"https://api.github.com/repos/SjonHortensius/pfsense/pulls{/number}","milestones_url":"https://api.github.com/repos/SjonHortensius/pfsense/milestones{/number}","notifications_url":"https://api.github.com/repos/SjonHortensius/pfsense/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SjonHortensius/pfsense/labels{/name}","releases_url":"https://api.github.com/repos/SjonHortensius/pfsense/releases{/id}","created_at":"2014-12-29T17:40:54Z","updated_at":"2015-04-28T18:32:56Z","pushed_at":"2015-04-28T18:32:56Z","git_url":"git://github.com/SjonHortensius/pfsense.git","ssh_url":"git@github.com:SjonHortensius/pfsense.git","clone_url":"https://github.com/SjonHortensius/pfsense.git","svn_url":"https://github.com/SjonHortensius/pfsense","homepage":"","size":62199,"stargazers_count":8,"watchers_count":8,"language":"PHP","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"open_issues_count":39,"forks":4,"open_issues":39,"watchers":8,"default_branch":"bootstrap"}},"_links":{"self":{"href":"https://api.github.com/repos/SjonHortensius/pfsense/pulls/97"},"html":{"href":"https://github.com/SjonHortensius/pfsense/pull/97"},"issue":{"href":"https://api.github.com/repos/SjonHortensius/pfsense/issues/97"},"comments":{"href":"https://api.github.com/repos/SjonHortensius/pfsense/issues/97/comments"},"review_comments":{"href":"https://api.github.com/repos/SjonHortensius/pfsense/pulls/97/comments"},"review_comment":{"href":"https://api.github.com/repos/SjonHortensius/pfsense/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SjonHortensius/pfsense/pulls/97/commits"},"statuses":{"href":"https://api.github.com/repos/SjonHortensius/pfsense/statuses/ea22b632e51bb736abe493ae7fa884f43eb1e18d"}}}}