diff --git a/ui/app/serializers/transit-key.js b/ui/app/serializers/transit-key.js index 684f78906c2e..bf455162e526 100644 --- a/ui/app/serializers/transit-key.js +++ b/ui/app/serializers/transit-key.js @@ -16,6 +16,12 @@ export default DS.RESTSerializer.extend({ } assign(payload, payload.data); delete payload.data; + // timestamps for these two are in seconds... + if (payload.type === 'aes256-gcm96' || payload.type === 'chacha20-poly1305') { + for (let version in payload.keys) { + payload.keys[version] = payload.keys[version] * 1000; + } + } return [payload]; }, diff --git a/ui/tests/unit/serializers/transit-key-test.js b/ui/tests/unit/serializers/transit-key-test.js new file mode 100644 index 000000000000..d3c8a57ea678 --- /dev/null +++ b/ui/tests/unit/serializers/transit-key-test.js @@ -0,0 +1,78 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +const CHACHA = { + request_id: 'a5695685-584c-6b25-fada-35304d3d583d', + lease_id: '', + renewable: false, + lease_duration: 0, + data: { + allow_plaintext_backup: false, + deletion_allowed: false, + derived: false, + exportable: false, + keys: { + '1': 1559598610, + }, + latest_version: 1, + min_available_version: 0, + min_decryption_version: 1, + min_encryption_version: 0, + name: 'anewone', + supports_decryption: true, + supports_derivation: true, + supports_encryption: true, + supports_signing: false, + type: 'chacha20-poly1305', + }, + wrap_info: null, + warnings: null, + auth: null, +}; + +const AES = { + request_id: '90c327a8-9a68-6fab-13a1-f51b68cb24d7', + lease_id: '', + renewable: false, + lease_duration: 0, + data: { + allow_plaintext_backup: false, + deletion_allowed: false, + derived: false, + exportable: false, + keys: { + '1': 1559577523, + }, + latest_version: 1, + min_available_version: 0, + min_decryption_version: 1, + min_encryption_version: 0, + name: 'new', + supports_decryption: true, + supports_derivation: true, + supports_encryption: true, + supports_signing: false, + type: 'aes256-gcm96', + }, + wrap_info: null, + warnings: null, + auth: null, +}; + +module('Unit | Serializer | transit-key', function(hooks) { + setupTest(hooks); + test('it expands the timestamp for aes and chacha-poly keys', function(assert) { + let serializer = this.owner.lookup('serializer:transit-key'); + let aesExpected = AES.data.keys[1] * 1000; + let chachaExpected = CHACHA.data.keys[1] * 1000; + let aesData = serializer.normalizeSecrets(AES); + assert.equal(aesData.firstObject.keys[1], aesExpected, 'converts seconds to millis for aes keys'); + + let chachaData = serializer.normalizeSecrets(CHACHA); + assert.equal( + chachaData.firstObject.keys[1], + chachaExpected, + 'converts seconds to millis for chacha keys' + ); + }); +});