--- loncom/configuration/SSL.pm 2016/07/25 19:50:16 1.1 +++ loncom/configuration/SSL.pm 2017/05/18 22:13:57 1.5 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Checksum installed LON-CAPA modules and some configuration files # -# $Id: SSL.pm,v 1.1 2016/07/25 19:50:16 raeburn Exp $ +# $Id: SSL.pm,v 1.5 2017/05/18 22:13:57 raeburn Exp $ # # The LearningOnline Network with CAPA # @@ -35,6 +35,8 @@ use Apache::lonlocal(); use Apache::lonnet(); use Apache::loncommon(); use Apache::lonhtmlcommon(); +use DateTime; +use DateTime::Format::x509; use LONCAPA; sub print_certstatus { @@ -57,14 +59,18 @@ sub print_certstatus { 'host' => 'Connections Certificate', 'hostname' => 'Replication Certificate', 'ca' => 'LON-CAPA CA Certificate', + 'expired' => 'Expired', + 'future' => 'Future validity', + 'nokey' => 'No key', + 'otherkey' => 'No matching key', ); my @files = qw(key host hostname ca); my @fields = qw(status cn start end alg size email); foreach my $server (sort(keys(%{$servers}))) { - my $hostname = &Apache::lonnet::hostname($server); my ($result,$hashref) = &Apache::lonnet::get_servercerts_info($server,$context); if ($result eq 'ok' && ref($hashref) eq 'HASH') { if ($target eq 'web') { + my $hostname = &Apache::lonnet::hostname($server); $message .= "
$hostname ($server)". &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_header_row()."\n"; @@ -83,17 +89,86 @@ sub print_certstatus { $message .= $file.'='; } if (ref($hashref->{$file}) eq 'HASH') { + my ($starttime,$endtime,$dateinvalid); if ($target eq 'web') { $message .= ''.$lt{'yes'}.''; } else { - $message .= $lt{'yes'}.','; + $message .= 'yes,'; + } + unless ($file eq 'key') { + if ($hashref->{$file}->{'end'} ne '') { + my $dt = DateTime::Format::x509->parse_datetime($hashref->{$file}->{'end'}); + if (ref($dt)) { + $endtime = $dt->epoch; + if ($endtime < time) { + if ($target eq 'web') { + $dateinvalid = $lt{'expired'}; + } else { + $dateinvalid = 'expired'; + } + } + } + } + if ($hashref->{$file}->{'start'} ne '') { + my $dt = DateTime::Format::x509->parse_datetime($hashref->{$file}->{'start'}); + if (ref($dt)) { + $starttime = $dt->epoch; + if ($starttime > time) { + unless ($dateinvalid) { + if ($target eq 'web') { + $dateinvalid = $lt{'future'}; + } else { + $dateinvalid = 'future'; + } + } + } + } + } } foreach my $item (@fields) { my $display = $hashref->{$file}->{$item}; - if ($target eq 'web') { - if ($item eq 'status') { - $display = &Apache::lonhtmlcommon::confirm_success($display); + if ($item eq 'status') { + if ($file eq 'key') { + if ($display =~ /ok$/) { + if ($target eq 'web') { + $display = &Apache::lonhtmlcommon::confirm_success($display); + } + } + } elsif ($file eq 'ca') { + if ($dateinvalid) { + $display = $dateinvalid; + } elsif ($target eq 'web') { + $display = &Apache::lonhtmlcommon::confirm_success($display); + } + } elsif ($display =~ /^ok/) { + if ($dateinvalid) { + $display = $dateinvalid; + } elsif ($target eq 'web') { + $display = &Apache::lonhtmlcommon::confirm_success($display); + } + } elsif (($display eq 'nokey') || ($display eq 'otherkey')) { + if ($target eq 'web') { + $display = $lt{$display}; + } + } + } elsif ($item eq 'start') { + if ($starttime) { + if ($target eq 'web') { + $display = &Apache::lonlocal::locallocaltime($starttime); + } else { + $display = $starttime; + } } + } elsif ($item eq 'end') { + if ($endtime) { + if ($target eq 'web') { + $display = &Apache::lonlocal::locallocaltime($endtime); + } else { + $display = $endtime; + } + } + } + if ($target eq 'web') { $message .= "$display"; } else { $message .= "$display,"; @@ -103,7 +178,7 @@ sub print_certstatus { if ($target eq 'web') { $message .= ''.$lt{'no'}.''; } else { - $message .= $lt{'no'}.','; + $message .= 'no,'; } foreach my $item (@fields) { if ($target eq 'web') { @@ -111,13 +186,13 @@ sub print_certstatus { } else { $message .= ','; } - } - if ($target eq 'web') { - $message .= &Apache::loncommon::end_data_table_row()."\n"; - } else { - $message =~ s/,$//; - $message .= '&'; - } + } + } + if ($target eq 'web') { + $message .= &Apache::loncommon::end_data_table_row()."\n"; + } else { + $message =~ s/,$//; + $message .= '&'; } } if ($target eq 'web') { @@ -128,9 +203,9 @@ sub print_certstatus { $message .= "\n"; } else { if ($target eq 'web') { - $message .= "$server error\n"; + $message .= "$server:error\n"; } else { - $message .= "$server error\n"; + $message .= "$server:error\n"; } } }