All files / src/domain/verifier/useCases parseIssuerKeys.ts

100% Statements 18/18
92.3% Branches 12/13
100% Functions 0/0
100% Lines 18/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45              90x 90x 90x   90x   88x 88x   90x         37x     31x 31x 88x 88x       6x 6x 2x   33x   4x 4x            
import { dateToUnixTimestamp } from '../../../helpers/date';
import { Key, VerifierError } from '../../../models';
import { getText } from '../../i18n/useCases';
import type { NullableNumber } from '../../../models/helpers';
import type { Issuer, IssuerPublicKeyList } from '../../../models/Issuer';
 
function createKeyObject (rawKeyObject, finalPublicKey = null): Key {
  const created: NullableNumber = rawKeyObject.created ? dateToUnixTimestamp(rawKeyObject.created) : null;
  const revoked: NullableNumber = rawKeyObject.revoked ? dateToUnixTimestamp(rawKeyObject.revoked) : null;
  const expires: NullableNumber = rawKeyObject.expires ? dateToUnixTimestamp(rawKeyObject.expires) : null;
  // backcompat for v2 alpha
  let publicKey: string = finalPublicKey;
  if (!finalPublicKey) {
    const publicKeyTemp: string = rawKeyObject.id || rawKeyObject.publicKey;
    publicKey = publicKeyTemp.replace('ecdsa-koblitz-pubkey:', '');
  }
  return new Key(publicKey, created, revoked, expires);
}
 
export default function parseIssuerKeys (issuerProfileJson: Issuer): IssuerPublicKeyList {
  try {
    const keyMap: IssuerPublicKeyList = {};
    if ('@context' in issuerProfileJson) {
      // backcompat for v2 alpha
      const responseKeys = issuerProfileJson.publicKey ?? issuerProfileJson.publicKeys;
      for (let i = 0; i < responseKeys.length; i++) {
        const key = createKeyObject(responseKeys[i]);
        keyMap[key.publicKey] = key;
      }
    } else {
      // This is a v2 certificate with a v1 issuer
      const issuerKeys = issuerProfileJson.issuerKeys ?? [];
      const key = createKeyObject({}, issuerKeys[0].key);
      keyMap[key.publicKey] = key;
    }
    return keyMap;
  } catch (e) {
    console.error(e);
    throw new VerifierError(
      'parseIssuerKeys',
      getText('errors', 'parseIssuerKeys')
    );
  }
}