Fix missing expiring/expired icons and warnning messages in certificate table
- Confirmed with backend developer that we should be checking certificate expiration date with bmc date/time set
- Converted both certificate expiration date and bmc date/time to EPOCH time to fix the bug
Tested: Go to Date and Time settings and change BMC time to be after or 30 days before a certificate expiration date.
Then either a warning or expiration icon and message will be displayed next to the date and message on top of the table.
To remove the expiration or warning date, upload a certificate that has an expiration date greater than 30 days after bmc time
set. The icon and warning message should now disappear.
Signed-off-by: Mira Murali <miramurali23@gmail.com>
Change-Id: I9389fe3cce5a555945adf9c56180897a6be047bf
diff --git a/app/configuration/controllers/certificate-controller.html b/app/configuration/controllers/certificate-controller.html
index c388670..4226262 100644
--- a/app/configuration/controllers/certificate-controller.html
+++ b/app/configuration/controllers/certificate-controller.html
@@ -5,8 +5,9 @@
</div>
<div ng-repeat="certificate in certificates | filter:{isExpiring:true}" class="row column">
<div class="small-12 alert alert-warning" role="alert">
- <icon aria-hidden="true" file="icon-warning.svg" /> The uploaded {{certificate.name}} is expiring in {{getDays(certificate.ValidNotAfter) === 0 ? 'less than one
- day!' : getDays(certificate.ValidNotAfter) + ' days!'}}. Consider replacing it with a new certificate.
+ <icon file="icon-warning.svg" aria-hidden="true"></icon>
+ The uploaded {{certificate.name}} is expiring in {{getDays(certificate.ValidNotAfter) === 0 ? 'less than one day!' : getDays(certificate.ValidNotAfter)
+ + ' days!'}} Consider replacing it with a new certificate.
</div>
</div>
<div ng-repeat="certificate in certificates|filter:{isExpired:true}" class="row column">
@@ -144,8 +145,7 @@
<select class="add-csr__select" id="cert__type" name="cert__type" ng-model="newCSR.certificateCollection" required>
<option class="courier-bold" ng-value="default" ng-model="selectOption">Select an option</option>
<!-- Do not show CA certificate as an option. Only a certificate authority can generate a CA certificate (known as TrustStore Certificate in Redfish) -->
- <option class="courier-bold" ng-value="type" ng-repeat="type in allCertificateTypes"
- ng-if="type.Description !== 'TrustStore Certificate'">
+ <option class="courier-bold" ng-value="type" ng-repeat="type in allCertificateTypes" ng-if="type.Description !== 'TrustStore Certificate'">
{{type.name}}</option>
</select>
<div ng-messages="add__csr__form.cert__type.$error" class="form-error" ng-class="{'visible' : add__csr__form.cert__type.$touched}">
diff --git a/app/configuration/controllers/certificate-controller.js b/app/configuration/controllers/certificate-controller.js
index cb22ac7..06b2fff 100644
--- a/app/configuration/controllers/certificate-controller.js
+++ b/app/configuration/controllers/certificate-controller.js
@@ -30,6 +30,10 @@
$scope.countryList = Constants.COUNTRIES;
+ $scope.$on('$viewContentLoaded', () => {
+ getBmcTime();
+ })
+
$scope.loadCertificates = function() {
$scope.certificates = [];
$scope.availableCertificateTypes = Constants.CERTIFICATE_TYPES;
@@ -97,9 +101,12 @@
};
var isExpiring = function(certificate) {
- // if ValidNotAfter is less than or equal to 30 days from today
+ // convert certificate time to epoch time
+ // if ValidNotAfter is less than or equal to 30 days from bmc time
// (2592000000), isExpiring. If less than or equal to 0, is expired.
- var difference = certificate.ValidNotAfter - new Date();
+ // dividing bmc time by 1000 converts epoch milliseconds to seconds
+ var difference = (new Date(certificate.ValidNotAfter).getTime()) -
+ ($scope.bmcTime) / 1000;
if (difference <= 0) {
certificate.isExpired = true;
} else if (difference <= 2592000000) {
@@ -200,6 +207,14 @@
};
+ var getBmcTime = function() {
+ APIUtils.getBMCTime().then(function(data) {
+ $scope.bmcTime = data.data.Elapsed;
+ });
+
+ return $scope.bmcTime;
+ };
+
var updateAvailableTypes = function(certificate) {
// TODO: at this time only one of each type of certificate is allowed.
// When this changes, this will need to be updated.
@@ -212,7 +227,8 @@
$scope.getDays = function(endDate) {
// finds number of days until certificate expiration
- var ms = endDate - new Date();
+ // dividing bmc time by 1000 converts milliseconds to seconds
+ var ms = (new Date(endDate).getTime()) - ($scope.bmcTime) / 1000;
return Math.floor(ms / (24 * 60 * 60 * 1000));
};
diff --git a/app/configuration/styles/certificate.scss b/app/configuration/styles/certificate.scss
index 650465f..0eaa7c0 100644
--- a/app/configuration/styles/certificate.scss
+++ b/app/configuration/styles/certificate.scss
@@ -115,6 +115,10 @@
bottom: 1rem;
left: 2rem;
}
+.certificate__table__icon {
+ margin-left: 1.5em;
+ margin-bottom: .4em;
+}
.add__certificate__modal {
select {