{"action":"created","comment":{"url":"https://api.github.com/repos/inverse-inc/packetfence/pulls/comments/43512045","id":43512045,"diff_hunk":"@@ -0,0 +1,166 @@\n+package pf::access_filter::radius;\n+\n+=head1 NAME\n+\n+pf::access_filter::radius - handle the answer of the radius request\n+\n+=cut\n+\n+=head1 DESCRIPTION\n+\n+pf::access_filter::radius deny, rewrite radius answer based on rules.\n+\n+=cut\n+\n+use strict;\n+use warnings;\n+\n+use Log::Log4perl;\n+use pf::api::jsonrpcclient;\n+use pf::violation qw (violation_view_top);\n+use pf::locationlog qw(locationlog_set_session);\n+\n+use base qw(pf::access_filter);\n+tie our %ConfigRadiusFilters, 'pfconfig::cached_hash', 'config::RadiusFilters';\n+tie our %RadiusFilterEngineScopes, 'pfconfig::cached_hash', 'FilterEngine::RadiusScopes';\n+\n+\n+=head1 SUBROUTINES\n+\n+=over\n+\n+=item new\n+\n+=cut\n+\n+sub new {\n+   my $logger = Log::Log4perl::get_logger(\"pf::access_filter::radius\");\n+   $logger->debug(\"instantiating new pf::access_filter::radius\");\n+   my ( $class, %argv ) = @_;\n+   my $self = bless {}, $class;\n+   return $self;\n+}\n+\n+=item test\n+\n+Test all the rules\n+\n+=cut\n+\n+sub test {\n+    my ($self, $scope, $args) = @_;\n+    if (exists $RadiusFilterEngineScopes{$scope}) {\n+       $args->{'violation'} = violation_view_top($args->{'mac'});\n+       return $RadiusFilterEngineScopes{$scope}->match_first($args);\n+    }\n+    return undef;\n+}\n+\n+=head2 handleRoleInRule\n+\n+Handles the role update\n+\n+=cut\n+\n+sub handleAnswerInRule {\n+    my ($self, $rule, $args) = @_;\n+    my $logger = Log::Log4perl::get_logger( ref($self) );\n+    my $radius_reply_ref = {};\n+    if(defined $rule) {\n+        $radius_reply_ref = {'Reply-Message' => \"Inverse is the best\"};","path":"lib/pf/access_filter/radius.pm","position":70,"original_position":70,"commit_id":"bc6ed82c36b2d2a9b81e1bf91ccf9e443d1e832d","original_commit_id":"bc6ed82c36b2d2a9b81e1bf91ccf9e443d1e832d","user":{"login":"julsemaan","id":3857942,"avatar_url":"https://avatars.githubusercontent.com/u/3857942?v=3","gravatar_id":"","url":"https://api.github.com/users/julsemaan","html_url":"https://github.com/julsemaan","followers_url":"https://api.github.com/users/julsemaan/followers","following_url":"https://api.github.com/users/julsemaan/following{/other_user}","gists_url":"https://api.github.com/users/julsemaan/gists{/gist_id}","starred_url":"https://api.github.com/users/julsemaan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/julsemaan/subscriptions","organizations_url":"https://api.github.com/users/julsemaan/orgs","repos_url":"https://api.github.com/users/julsemaan/repos","events_url":"https://api.github.com/users/julsemaan/events{/privacy}","received_events_url":"https://api.github.com/users/julsemaan/received_events","type":"User","site_admin":false},"body":"I know it's true... But do we really need to hardcode it :)","created_at":"2015-10-30T15:06:21Z","updated_at":"2015-10-30T15:06:21Z","html_url":"https://github.com/inverse-inc/packetfence/pull/973#discussion_r43512045","pull_request_url":"https://api.github.com/repos/inverse-inc/packetfence/pulls/973","_links":{"self":{"href":"https://api.github.com/repos/inverse-inc/packetfence/pulls/comments/43512045"},"html":{"href":"https://github.com/inverse-inc/packetfence/pull/973#discussion_r43512045"},"pull_request":{"href":"https://api.github.com/repos/inverse-inc/packetfence/pulls/973"}}},"pull_request":{"url":"https://api.github.com/repos/inverse-inc/packetfence/pulls/973","id":48358174,"html_url":"https://github.com/inverse-inc/packetfence/pull/973","diff_url":"https://github.com/inverse-inc/packetfence/pull/973.diff","patch_url":"https://github.com/inverse-inc/packetfence/pull/973.patch","issue_url":"https://api.github.com/repos/inverse-inc/packetfence/issues/973","number":973,"state":"open","locked":false,"title":"Radius filters based on the access filters / Refactor of returnRadiusAccept","user":{"login":"fdurand","id":1553962,"avatar_url":"https://avatars.githubusercontent.com/u/1553962?v=3","gravatar_id":"","url":"https://api.github.com/users/fdurand","html_url":"https://github.com/fdurand","followers_url":"https://api.github.com/users/fdurand/followers","following_url":"https://api.github.com/users/fdurand/following{/other_user}","gists_url":"https://api.github.com/users/fdurand/gists{/gist_id}","starred_url":"https://api.github.com/users/fdurand/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fdurand/subscriptions","organizations_url":"https://api.github.com/users/fdurand/orgs","repos_url":"https://api.github.com/users/fdurand/repos","events_url":"https://api.github.com/users/fdurand/events{/privacy}","received_events_url":"https://api.github.com/users/fdurand/received_events","type":"User","site_admin":false},"body":"# Description\r\nAdded vlan filters rules to return a custom radius answer based on specific criterias, \r\nRefactored of returnRadiusAccept\r\n\r\n# Impacts\r\nRadius\r\n\r\n# Delete branch after merge\r\nYES\r\n\r\n# NEWS file entries\r\n## New Features\r\n* Radius filter to return custom answer based on rules\r\n\r\n## Enhancements\r\n* Better logic based on the definition of the vlanID, role or ACL to return the radius answer\r\n","created_at":"2015-10-21T16:52:52Z","updated_at":"2015-10-30T15:06:21Z","closed_at":null,"merged_at":null,"merge_commit_sha":"55ccf4bca05446e390473539a93c24d48e46e6b4","assignee":{"login":"julsemaan","id":3857942,"avatar_url":"https://avatars.githubusercontent.com/u/3857942?v=3","gravatar_id":"","url":"https://api.github.com/users/julsemaan","html_url":"https://github.com/julsemaan","followers_url":"https://api.github.com/users/julsemaan/followers","following_url":"https://api.github.com/users/julsemaan/following{/other_user}","gists_url":"https://api.github.com/users/julsemaan/gists{/gist_id}","starred_url":"https://api.github.com/users/julsemaan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/julsemaan/subscriptions","organizations_url":"https://api.github.com/users/julsemaan/orgs","repos_url":"https://api.github.com/users/julsemaan/repos","events_url":"https://api.github.com/users/julsemaan/events{/privacy}","received_events_url":"https://api.github.com/users/julsemaan/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/inverse-inc/packetfence/milestones/10","html_url":"https://github.com/inverse-inc/packetfence/milestones/PacketFence-5.5","labels_url":"https://api.github.com/repos/inverse-inc/packetfence/milestones/10/labels","id":1240756,"number":10,"title":"PacketFence-5.5","description":"","creator":{"login":"louismunro","id":193997,"avatar_url":"https://avatars.githubusercontent.com/u/193997?v=3","gravatar_id":"","url":"https://api.github.com/users/louismunro","html_url":"https://github.com/louismunro","followers_url":"https://api.github.com/users/louismunro/followers","following_url":"https://api.github.com/users/louismunro/following{/other_user}","gists_url":"https://api.github.com/users/louismunro/gists{/gist_id}","starred_url":"https://api.github.com/users/louismunro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/louismunro/subscriptions","organizations_url":"https://api.github.com/users/louismunro/orgs","repos_url":"https://api.github.com/users/louismunro/repos","events_url":"https://api.github.com/users/louismunro/events{/privacy}","received_events_url":"https://api.github.com/users/louismunro/received_events","type":"User","site_admin":false},"open_issues":31,"closed_issues":36,"state":"open","created_at":"2015-08-04T18:46:01Z","updated_at":"2015-10-29T20:34:41Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/inverse-inc/packetfence/pulls/973/commits","review_comments_url":"https://api.github.com/repos/inverse-inc/packetfence/pulls/973/comments","review_comment_url":"https://api.github.com/repos/inverse-inc/packetfence/pulls/comments{/number}","comments_url":"https://api.github.com/repos/inverse-inc/packetfence/issues/973/comments","statuses_url":"https://api.github.com/repos/inverse-inc/packetfence/statuses/bc6ed82c36b2d2a9b81e1bf91ccf9e443d1e832d","head":{"label":"inverse-inc:feature/radius_filter","ref":"feature/radius_filter","sha":"bc6ed82c36b2d2a9b81e1bf91ccf9e443d1e832d","user":{"login":"inverse-inc","id":1203154,"avatar_url":"https://avatars.githubusercontent.com/u/1203154?v=3","gravatar_id":"","url":"https://api.github.com/users/inverse-inc","html_url":"https://github.com/inverse-inc","followers_url":"https://api.github.com/users/inverse-inc/followers","following_url":"https://api.github.com/users/inverse-inc/following{/other_user}","gists_url":"https://api.github.com/users/inverse-inc/gists{/gist_id}","starred_url":"https://api.github.com/users/inverse-inc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inverse-inc/subscriptions","organizations_url":"https://api.github.com/users/inverse-inc/orgs","repos_url":"https://api.github.com/users/inverse-inc/repos","events_url":"https://api.github.com/users/inverse-inc/events{/privacy}","received_events_url":"https://api.github.com/users/inverse-inc/received_events","type":"Organization","site_admin":false},"repo":{"id":3595658,"name":"packetfence","full_name":"inverse-inc/packetfence","owner":{"login":"inverse-inc","id":1203154,"avatar_url":"https://avatars.githubusercontent.com/u/1203154?v=3","gravatar_id":"","url":"https://api.github.com/users/inverse-inc","html_url":"https://github.com/inverse-inc","followers_url":"https://api.github.com/users/inverse-inc/followers","following_url":"https://api.github.com/users/inverse-inc/following{/other_user}","gists_url":"https://api.github.com/users/inverse-inc/gists{/gist_id}","starred_url":"https://api.github.com/users/inverse-inc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inverse-inc/subscriptions","organizations_url":"https://api.github.com/users/inverse-inc/orgs","repos_url":"https://api.github.com/users/inverse-inc/repos","events_url":"https://api.github.com/users/inverse-inc/events{/privacy}","received_events_url":"https://api.github.com/users/inverse-inc/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/inverse-inc/packetfence","description":"PacketFence is a fully supported, trusted, Free and Open Source network access control (NAC) solution. Boasting an impressive feature set including a captive-portal for registration and remediation, centralized wired and wireless management, powerful guest management options, 802.1X support, layer-2 isolation of problematic devices; PacketFence can be used to effectively secure networks small to very large heterogeneous networks.","fork":false,"url":"https://api.github.com/repos/inverse-inc/packetfence","forks_url":"https://api.github.com/repos/inverse-inc/packetfence/forks","keys_url":"https://api.github.com/repos/inverse-inc/packetfence/keys{/key_id}","collaborators_url":"https://api.github.com/repos/inverse-inc/packetfence/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/inverse-inc/packetfence/teams","hooks_url":"https://api.github.com/repos/inverse-inc/packetfence/hooks","issue_events_url":"https://api.github.com/repos/inverse-inc/packetfence/issues/events{/number}","events_url":"https://api.github.com/repos/inverse-inc/packetfence/events","assignees_url":"https://api.github.com/repos/inverse-inc/packetfence/assignees{/user}","branches_url":"https://api.github.com/repos/inverse-inc/packetfence/branches{/branch}","tags_url":"https://api.github.com/repos/inverse-inc/packetfence/tags","blobs_url":"https://api.github.com/repos/inverse-inc/packetfence/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/inverse-inc/packetfence/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/inverse-inc/packetfence/git/refs{/sha}","trees_url":"https://api.github.com/repos/inverse-inc/packetfence/git/trees{/sha}","statuses_url":"https://api.github.com/repos/inverse-inc/packetfence/statuses/{sha}","languages_url":"https://api.github.com/repos/inverse-inc/packetfence/languages","stargazers_url":"https://api.github.com/repos/inverse-inc/packetfence/stargazers","contributors_url":"https://api.github.com/repos/inverse-inc/packetfence/contributors","subscribers_url":"https://api.github.com/repos/inverse-inc/packetfence/subscribers","subscription_url":"https://api.github.com/repos/inverse-inc/packetfence/subscription","commits_url":"https://api.github.com/repos/inverse-inc/packetfence/commits{/sha}","git_commits_url":"https://api.github.com/repos/inverse-inc/packetfence/git/commits{/sha}","comments_url":"https://api.github.com/repos/inverse-inc/packetfence/comments{/number}","issue_comment_url":"https://api.github.com/repos/inverse-inc/packetfence/issues/comments{/number}","contents_url":"https://api.github.com/repos/inverse-inc/packetfence/contents/{+path}","compare_url":"https://api.github.com/repos/inverse-inc/packetfence/compare/{base}...{head}","merges_url":"https://api.github.com/repos/inverse-inc/packetfence/merges","archive_url":"https://api.github.com/repos/inverse-inc/packetfence/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/inverse-inc/packetfence/downloads","issues_url":"https://api.github.com/repos/inverse-inc/packetfence/issues{/number}","pulls_url":"https://api.github.com/repos/inverse-inc/packetfence/pulls{/number}","milestones_url":"https://api.github.com/repos/inverse-inc/packetfence/milestones{/number}","notifications_url":"https://api.github.com/repos/inverse-inc/packetfence/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/inverse-inc/packetfence/labels{/name}","releases_url":"https://api.github.com/repos/inverse-inc/packetfence/releases{/id}","created_at":"2012-03-01T20:21:13Z","updated_at":"2015-10-24T08:58:36Z","pushed_at":"2015-10-30T14:37:43Z","git_url":"git://github.com/inverse-inc/packetfence.git","ssh_url":"git@github.com:inverse-inc/packetfence.git","clone_url":"https://github.com/inverse-inc/packetfence.git","svn_url":"https://github.com/inverse-inc/packetfence","homepage":"http://www.packetfence.org","size":169819,"stargazers_count":141,"watchers_count":141,"language":"Perl","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":70,"mirror_url":null,"open_issues_count":158,"forks":70,"open_issues":158,"watchers":141,"default_branch":"devel"}},"base":{"label":"inverse-inc:devel","ref":"devel","sha":"2927a7e300998dced91233d89a2006bb04d55219","user":{"login":"inverse-inc","id":1203154,"avatar_url":"https://avatars.githubusercontent.com/u/1203154?v=3","gravatar_id":"","url":"https://api.github.com/users/inverse-inc","html_url":"https://github.com/inverse-inc","followers_url":"https://api.github.com/users/inverse-inc/followers","following_url":"https://api.github.com/users/inverse-inc/following{/other_user}","gists_url":"https://api.github.com/users/inverse-inc/gists{/gist_id}","starred_url":"https://api.github.com/users/inverse-inc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inverse-inc/subscriptions","organizations_url":"https://api.github.com/users/inverse-inc/orgs","repos_url":"https://api.github.com/users/inverse-inc/repos","events_url":"https://api.github.com/users/inverse-inc/events{/privacy}","received_events_url":"https://api.github.com/users/inverse-inc/received_events","type":"Organization","site_admin":false},"repo":{"id":3595658,"name":"packetfence","full_name":"inverse-inc/packetfence","owner":{"login":"inverse-inc","id":1203154,"avatar_url":"https://avatars.githubusercontent.com/u/1203154?v=3","gravatar_id":"","url":"https://api.github.com/users/inverse-inc","html_url":"https://github.com/inverse-inc","followers_url":"https://api.github.com/users/inverse-inc/followers","following_url":"https://api.github.com/users/inverse-inc/following{/other_user}","gists_url":"https://api.github.com/users/inverse-inc/gists{/gist_id}","starred_url":"https://api.github.com/users/inverse-inc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inverse-inc/subscriptions","organizations_url":"https://api.github.com/users/inverse-inc/orgs","repos_url":"https://api.github.com/users/inverse-inc/repos","events_url":"https://api.github.com/users/inverse-inc/events{/privacy}","received_events_url":"https://api.github.com/users/inverse-inc/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/inverse-inc/packetfence","description":"PacketFence is a fully supported, trusted, Free and Open Source network access control (NAC) solution. Boasting an impressive feature set including a captive-portal for registration and remediation, centralized wired and wireless management, powerful guest management options, 802.1X support, layer-2 isolation of problematic devices; PacketFence can be used to effectively secure networks small to very large heterogeneous networks.","fork":false,"url":"https://api.github.com/repos/inverse-inc/packetfence","forks_url":"https://api.github.com/repos/inverse-inc/packetfence/forks","keys_url":"https://api.github.com/repos/inverse-inc/packetfence/keys{/key_id}","collaborators_url":"https://api.github.com/repos/inverse-inc/packetfence/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/inverse-inc/packetfence/teams","hooks_url":"https://api.github.com/repos/inverse-inc/packetfence/hooks","issue_events_url":"https://api.github.com/repos/inverse-inc/packetfence/issues/events{/number}","events_url":"https://api.github.com/repos/inverse-inc/packetfence/events","assignees_url":"https://api.github.com/repos/inverse-inc/packetfence/assignees{/user}","branches_url":"https://api.github.com/repos/inverse-inc/packetfence/branches{/branch}","tags_url":"https://api.github.com/repos/inverse-inc/packetfence/tags","blobs_url":"https://api.github.com/repos/inverse-inc/packetfence/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/inverse-inc/packetfence/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/inverse-inc/packetfence/git/refs{/sha}","trees_url":"https://api.github.com/repos/inverse-inc/packetfence/git/trees{/sha}","statuses_url":"https://api.github.com/repos/inverse-inc/packetfence/statuses/{sha}","languages_url":"https://api.github.com/repos/inverse-inc/packetfence/languages","stargazers_url":"https://api.github.com/repos/inverse-inc/packetfence/stargazers","contributors_url":"https://api.github.com/repos/inverse-inc/packetfence/contributors","subscribers_url":"https://api.github.com/repos/inverse-inc/packetfence/subscribers","subscription_url":"https://api.github.com/repos/inverse-inc/packetfence/subscription","commits_url":"https://api.github.com/repos/inverse-inc/packetfence/commits{/sha}","git_commits_url":"https://api.github.com/repos/inverse-inc/packetfence/git/commits{/sha}","comments_url":"https://api.github.com/repos/inverse-inc/packetfence/comments{/number}","issue_comment_url":"https://api.github.com/repos/inverse-inc/packetfence/issues/comments{/number}","contents_url":"https://api.github.com/repos/inverse-inc/packetfence/contents/{+path}","compare_url":"https://api.github.com/repos/inverse-inc/packetfence/compare/{base}...{head}","merges_url":"https://api.github.com/repos/inverse-inc/packetfence/merges","archive_url":"https://api.github.com/repos/inverse-inc/packetfence/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/inverse-inc/packetfence/downloads","issues_url":"https://api.github.com/repos/inverse-inc/packetfence/issues{/number}","pulls_url":"https://api.github.com/repos/inverse-inc/packetfence/pulls{/number}","milestones_url":"https://api.github.com/repos/inverse-inc/packetfence/milestones{/number}","notifications_url":"https://api.github.com/repos/inverse-inc/packetfence/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/inverse-inc/packetfence/labels{/name}","releases_url":"https://api.github.com/repos/inverse-inc/packetfence/releases{/id}","created_at":"2012-03-01T20:21:13Z","updated_at":"2015-10-24T08:58:36Z","pushed_at":"2015-10-30T14:37:43Z","git_url":"git://github.com/inverse-inc/packetfence.git","ssh_url":"git@github.com:inverse-inc/packetfence.git","clone_url":"https://github.com/inverse-inc/packetfence.git","svn_url":"https://github.com/inverse-inc/packetfence","homepage":"http://www.packetfence.org","size":169819,"stargazers_count":141,"watchers_count":141,"language":"Perl","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":70,"mirror_url":null,"open_issues_count":158,"forks":70,"open_issues":158,"watchers":141,"default_branch":"devel"}},"_links":{"self":{"href":"https://api.github.com/repos/inverse-inc/packetfence/pulls/973"},"html":{"href":"https://github.com/inverse-inc/packetfence/pull/973"},"issue":{"href":"https://api.github.com/repos/inverse-inc/packetfence/issues/973"},"comments":{"href":"https://api.github.com/repos/inverse-inc/packetfence/issues/973/comments"},"review_comments":{"href":"https://api.github.com/repos/inverse-inc/packetfence/pulls/973/comments"},"review_comment":{"href":"https://api.github.com/repos/inverse-inc/packetfence/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/inverse-inc/packetfence/pulls/973/commits"},"statuses":{"href":"https://api.github.com/repos/inverse-inc/packetfence/statuses/bc6ed82c36b2d2a9b81e1bf91ccf9e443d1e832d"}}}}