Commit 4029445a authored by Carolina's avatar Carolina
Browse files

Bug 1566797 - Handles more than one cert received in the URL (about:certificate).r=keeler

Differential Revision: https://phabricator.services.mozilla.com/D38388

--HG--
extra : moz-landing-system : lando
parent b2cd1171
Loading
Loading
Loading
Loading
+31 −25
Original line number Diff line number Diff line
@@ -13,12 +13,13 @@ let gElements = {};
document.addEventListener("DOMContentLoaded", async e => {
  gElements.certificateSection = document.querySelector("certificate-section");
  let url = new URL(document.URL);
  let certInfo = url.searchParams.get("cert");
  if (!certInfo) {
  let certInfo = url.searchParams.getAll("cert");
  if (certInfo.length === 0) {
    await render(true);
    return;
  }
  await buildChain(decodeURIComponent(certInfo));
  certInfo = certInfo.map(cert => decodeURIComponent(cert));
  await buildChain(certInfo);
});

export const updateSelectedItem = (() => {
@@ -42,26 +43,31 @@ const render = async error => {
  return Promise.resolve();
};

const buildChain = async certBase64 => {
  let certDER;
const buildChain = async chain => {
  await Promise.all(
    chain
      .map(cert => {
        try {
    certDER = pemToDER(certBase64);
          return pemToDER(cert);
        } catch (err) {
    await render(true);
    return;
  }

  if (certDER == null) {
    await render(true);
    return;
          return Promise.reject(err);
        }

      })
      .map(cert => {
        try {
    await parse(certDER);
          return parse(cert);
        } catch (err) {
    await render(true);
    return;
          return Promise.reject(err);
        }

  await render(false);
      })
  )
    .then(certs => {
      if (certs.length === 0) {
        return Promise.reject();
      }
      return render(false);
    })
    .catch(err => {
      render(true);
    });
};