--- loncom/configuration/SSL.pm 2016/07/25 19:50:16 1.1 +++ loncom/configuration/SSL.pm 2016/08/07 04:18:21 1.4 @@ -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.4 2016/08/07 04:18:21 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,16 @@ sub print_certstatus { 'host' => 'Connections Certificate', 'hostname' => 'Replication Certificate', 'ca' => 'LON-CAPA CA Certificate', + 'expired' => 'Expired', + 'future' => 'Future validity', ); 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 +87,74 @@ 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'}.','; } + 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) { + $dateinvalid = $lt{'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) { + $dateinvalid = $lt{'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 ($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,"; @@ -111,13 +172,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 +189,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"; } } }