|
1 | 1 | package hirs.attestationca.persist.provision;
|
2 | 2 |
|
| 3 | +import com.fasterxml.jackson.databind.ser.Serializers; |
3 | 4 | import com.google.protobuf.ByteString;
|
4 | 5 | import hirs.attestationca.configuration.provisionerTpm2.ProvisionerTpm2;
|
5 | 6 | import hirs.attestationca.persist.entity.manager.CertificateRepository;
|
@@ -375,11 +376,18 @@ private DeviceInfoReport parseDeviceInfo(final ProvisionerTpm2.IdentityClaim cla
|
375 | 376 | support.getHexDecHash().length() - NUM_OF_VARIABLES)));
|
376 | 377 | support.setDeviceName(dv.getNw().getHostname());
|
377 | 378 | this.referenceManifestRepository.save(support);
|
378 |
| - } else { |
379 |
| - log.info("Client provided Support RIM already loaded in database."); |
| 379 | + } else if (support.isArchived()) { |
| 380 | + List<ReferenceManifest> rims = referenceManifestRepository.findByArchiveFlag(false); |
| 381 | + for (ReferenceManifest rim : rims) { |
| 382 | + if (rim.isSupport() && |
| 383 | + rim.getTagId().equals(support.getTagId()) && |
| 384 | + rim.getCreateTime().after(support.getCreateTime())) { |
| 385 | + support = (SupportReferenceManifest) rim; |
| 386 | + } |
| 387 | + } |
380 | 388 | if (support.isArchived()) {
|
381 |
| - support.restore(); |
382 |
| - support.resetCreateTime(); |
| 389 | + throw new Exception("Unable to locate an unarchived support RIM."); |
| 390 | + } else { |
383 | 391 | this.referenceManifestRepository.save(support);
|
384 | 392 | }
|
385 | 393 | }
|
@@ -408,21 +416,23 @@ private DeviceInfoReport parseDeviceInfo(final ProvisionerTpm2.IdentityClaim cla
|
408 | 416 | swidFile.toByteArray());
|
409 | 417 | dbBaseRim.setDeviceName(dv.getNw().getHostname());
|
410 | 418 | this.referenceManifestRepository.save(dbBaseRim);
|
411 |
| - } else { |
412 |
| - log.info("Client provided Base RIM already loaded in database."); |
413 |
| - /** |
414 |
| - * Leaving this as is for now, however can there be a condition |
415 |
| - * in which the provisioner sends swidtags without support rims? |
416 |
| - */ |
| 419 | + } else if (dbBaseRim.isArchived()) { |
| 420 | + List<ReferenceManifest> rims = referenceManifestRepository.findByArchiveFlag(false); |
| 421 | + for (ReferenceManifest rim : rims) { |
| 422 | + if (rim.isBase() && rim.getTagId().equals(dbBaseRim.getTagId()) && |
| 423 | + rim.getCreateTime().after(dbBaseRim.getCreateTime())) { |
| 424 | + dbBaseRim = (BaseReferenceManifest) rim; |
| 425 | + } |
| 426 | + } |
417 | 427 | if (dbBaseRim.isArchived()) {
|
418 |
| - dbBaseRim.restore(); |
419 |
| - dbBaseRim.resetCreateTime(); |
420 |
| - this.referenceManifestRepository.save(dbBaseRim); |
| 428 | + throw new Exception("Unable to locate an unarchived base RIM."); |
421 | 429 | }
|
422 | 430 | }
|
423 | 431 | tagId = dbBaseRim.getTagId();
|
424 | 432 | } catch (UnmarshalException e) {
|
425 | 433 | log.error(e);
|
| 434 | + } catch (Exception ex) { |
| 435 | + log.error(String.format("Failed to load base rim: %s", ex.getMessage())); |
426 | 436 | }
|
427 | 437 | }
|
428 | 438 | } else {
|
|
0 commit comments