Skip to content
Snippets Groups Projects
Commit c8b6c943 authored by Nigel Kukard's avatar Nigel Kukard
Browse files

Cleanup of window validity code

parent e366e499
No related branches found
No related tags found
No related merge requests found
...@@ -76,43 +76,61 @@ sub checkValidity ...@@ -76,43 +76,61 @@ sub checkValidity
$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] POST AUTH HOOK"); $server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] POST AUTH HOOK");
my ($validFrom,$validTo); my ($validFrom,$validTo,$validWindow);
# Get validity start date # Get validity start date
if (defined($user->{'Attributes'}->{$VALID_FROM_KEY})) { if (defined($user->{'Attributes'}->{$VALID_FROM_KEY})) {
$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] '".$VALID_FROM_KEY."' is defined"); $server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] '".$VALID_FROM_KEY."' is defined");
# Operator: == # Operator: :=
if (defined($user->{'Attributes'}->{$VALID_FROM_KEY}->{'=='})) { if (defined($user->{'Attributes'}->{$VALID_FROM_KEY}->{':='})) {
# Is it formatted as a date? # Is it formatted as a date?
if ($user->{'Attributes'}->{$VALID_FROM_KEY}->{'=='}->{'Value'} =~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) { if ($user->{'Attributes'}->{$VALID_FROM_KEY}->{':='}->{'Value'} =~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) {
$validFrom = $user->{'Attributes'}->{$VALID_FROM_KEY}->{'=='}->{'Value'}; $validFrom = $user->{'Attributes'}->{$VALID_FROM_KEY}->{':='}->{'Value'};
} else { } else {
$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] '".$user->{'Attributes'}->{$VALID_FROM_KEY}->{'=='}->{'Value'}. $server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] '".$user->{'Attributes'}->{$VALID_FROM_KEY}->{':='}->{'Value'}.
"' is NOT in ISO standard format 'YYYY-MM-DD'"); "' is NOT in ISO standard format 'YYYY-MM-DD'");
} }
} else { } else {
$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] No valid operators for attribute '$VALID_FROM_KEY'"); $server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] No valid operators for attribute '$VALID_FROM_KEY'");
} } # if (defined($user->{'Attributes'}->{$VALID_FROM_KEY}->{':='})) {
} } # if (defined($user->{'Attributes'}->{$VALID_FROM_KEY})) {
# Get validity end date # Get validity end date
if (defined($user->{'Attributes'}->{$VALID_TO_KEY})) { if (defined($user->{'Attributes'}->{$VALID_TO_KEY})) {
$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] '".$VALID_TO_KEY."' is defined"); $server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] '".$VALID_TO_KEY."' is defined");
# Operator: == # Operator: :=
if (defined($user->{'Attributes'}->{$VALID_TO_KEY}->{'=='})) { if (defined($user->{'Attributes'}->{$VALID_TO_KEY}->{':='})) {
# Is it formatted as a date? # Is it formatted as a date?
if ($user->{'Attributes'}->{$VALID_TO_KEY}->{'=='}->{'Value'} =~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) { if ($user->{'Attributes'}->{$VALID_TO_KEY}->{':='}->{'Value'} =~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) {
$validTo = $user->{'Attributes'}->{$VALID_TO_KEY}->{'=='}->{'Value'}; $validTo = $user->{'Attributes'}->{$VALID_TO_KEY}->{':='}->{'Value'};
} else { } else {
$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] '".$user->{'Attributes'}->{$VALID_TO_KEY}->{'=='}->{'Value'}. $server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] '".$user->{'Attributes'}->{$VALID_TO_KEY}->{':='}->{'Value'}.
"' is NOT an ISO standard format 'YYYY-MM-DD'"); "' is NOT an ISO standard format 'YYYY-MM-DD'");
} }
} else { } else {
$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] No valid operators for attribute '$VALID_TO_KEY'"); $server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] No valid operators for attribute '$VALID_TO_KEY'");
} } # if (defined($user->{'Attributes'}->{$VALID_TO_KEY}->{':='})) {
} } # if (defined($user->{'Attributes'}->{$VALID_TO_KEY})) {
# Get validity window
if (defined($user->{'Attributes'}->{$VALID_WINDOW_KEY})) {
$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] '".$VALID_WINDOW_KEY."' is defined");
# Operator: :=
if (defined($user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='})) {
# Is it a number?
if ($user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='}->{'Value'} =~ /^\d+$/) {
$validWindow = $user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='}->{'Value'};
} else {
$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] '".$user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='}->{'Value'}.
"' is NOT an integer");
}
} else {
$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] No valid operators for attribute '$VALID_WINDOW_KEY'");
} # if (defined($user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='})) {
} # if (defined($user->{'Attributes'}->{$VALID_WINDOW_KEY})) {
# Now ... # Now ...
...@@ -135,8 +153,8 @@ sub checkValidity ...@@ -135,8 +153,8 @@ sub checkValidity
# Date not within valid period, must be disconnected # Date not within valid period, must be disconnected
return MOD_RES_NACK; return MOD_RES_NACK;
} } # if (!defined($validFrom_unixtime)) {
} } # if (defined($validFrom)) {
# Do we have an end date? # Do we have an end date?
if (defined($validTo)) { if (defined($validTo)) {
...@@ -153,58 +171,35 @@ sub checkValidity ...@@ -153,58 +171,35 @@ sub checkValidity
# Date not within valid period, must be disconnected # Date not within valid period, must be disconnected
return MOD_RES_NACK; return MOD_RES_NACK;
} } # if (!defined($validTo_unixtime)) {
} } # if (defined($validTo)) {
# Get validity window # Do we have a validity window
my $validWindow; if (defined($validWindow)) {
if (defined($user->{'Attributes'}->{$VALID_WINDOW_KEY})) {
$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] '".$VALID_WINDOW_KEY."' is defined"); # Check first if we have the ability to support this feature
# Operator: := if (defined($user->{'_UserDB'}->{'Users_data_get'})) {
if (defined($user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='})) { # Fetch users_data for first login
# Is it a number? if (defined(my $res = $user->{'_UserDB'}->{'Users_data_get'}($server,$user,'global','FirstLogin'))) {
if ($user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='}->{'Value'} =~ /^\d+$/) { # Check if this user should be disconnected
$validWindow = $user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='}->{'Value'}; if (defined($validWindow) && defined($res)) {
my $validUntil = $validWindow + $res->{'Value'};
# If current time after start of valid pariod
if ($now > $validUntil) {
my $pretty_dt = DateTime->from_epoch( epoch => $validUntil )->strftime('%Y-%m-%d %H:%M:%S');
$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] Current date outside valid window end date: '".$pretty_dt."', rejecting");
# Date not within valid window, must be disconnected
return MOD_RES_NACK;
}
}
} else { } else {
$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] '".$user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='}->{'Value'}. $server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] No users_data 'global/FirstLogin' found for user '".$packet->attr('User-Name')."'");
"' is NOT an integer"); } # if (defined(my $res = $module->{'Users_data_get'}($server,$user,'global','FirstLogin'))) {
}
} else { } else {
$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] No valid operators for attribute '$VALID_WINDOW_KEY'"); $server->log(LOG_WARN,"[MOD_FEATURE_VALIDITY] UserDB module '".$user->{'_UserDB'}->{'Name'}.
} "' does not support 'users_data'. Therefore no support for Validity Window feature");
} } # if (defined($user->{'_UserDB'}->{'Users_data_get'})) {
# Loop with plugins to find anything supporting getting user data
my $user_data;
foreach my $module (@{$server->{'module_list'}}) {
# Do we have the correct plugin?
if ($module->{'Users_data_get'}) {
$server->log(LOG_INFO,"[MOD_FEATURE_VALIDITY] Found plugin: '".$module->{'Name'}."'");
# Fetch users data
my $res = $module->{'Users_data_get'}($server,$user,'global','FirstLogin');
if (!defined($res)) {
$server->log(LOG_ERR,"[MOD_FEATURE_VALIDITY] No user data found for user '".$packet->attr('User-Name')."'");
return MOD_RES_SKIP;
}
$user_data = $res;
}
}
# Check if this user should be disconnected
if (defined($validWindow) && defined($user_data)) {
my $validUntil = $validWindow + $user_data->{'Value'};
if (!defined($validUntil)) {
$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] Failed to calculate end of valid window using "
.niceUndef($validWindow)." and ".niceUndef($user_data->{'Value'}));
# If current time after start of valid pariod
} elsif ($now > $validUntil) {
my $pretty_dt = DateTime->from_epoch( epoch => $validUntil )->strftime('%Y-%m-%d %H:%M:%S');
$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] Current date outside valid window end date: '".$pretty_dt."', rejecting");
# Date not within valid window, must be disconnected
return MOD_RES_NACK;
}
} }
return MOD_RES_ACK; return MOD_RES_ACK;
......
...@@ -157,6 +157,7 @@ EOT ...@@ -157,6 +157,7 @@ EOT
modules=<<EOT modules=<<EOT
mod_feature_capping mod_feature_capping
mod_feature_user_stats mod_feature_user_stats
mod_feature_validity
EOT EOT
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment