bit-twiddler 0.2.0

Cross-platform developer toolbox: bit manipulation, hashing, YAML/JSON/SQL, QR, Markdown, cron, and 40+ more tools — Tauri v2, no Node.js
$(document).ready(function() {
  const $input = $('#cert-input');
  const $details = $('#cert-details');
  const $empty = $('#cert-empty-state');
  const $error = $('#cert-error');

  let lastInfo = null;

  const process = async () => {
    const val = $input.val().trim();
    if (!val) {
      $details.addClass('hidden');
      $empty.removeClass('hidden');
      $error.addClass('hidden');
      lastInfo = null;
      return;
    }

    try {
      const info = await window.tauriApi.inspectCertificate(val);
      lastInfo = info;

      $('#cert-out-subject').text(info.subject);
      $('#cert-out-issuer').text(info.issuer);
      $('#cert-out-not-before').text(info.not_before);
      $('#cert-out-not-after').text(info.not_after);
      $('#cert-out-serial').text(info.serial);
      $('#cert-out-san').text(info.san.length ? info.san.join(', ') : '');
      $('#cert-out-key-alg').text(info.key_algorithm);
      $('#cert-out-sig-alg').text(info.sig_algorithm);
      $('#cert-out-sha256').text(info.fingerprint_sha256);
      $('#cert-out-sha1').text(info.fingerprint_sha1);
      $('#cert-out-ca-badge').text('Is CA: ' + (info.is_ca ? 'Yes' : 'No'))
        .toggleClass('bg-amber-500/20 text-amber-400 border-amber-500/40', info.is_ca)
        .toggleClass('bg-gray-700/40 text-gray-400 border-gray-600/40', !info.is_ca);
      $('#cert-expired-badge').toggleClass('hidden', !info.is_expired);

      $details.removeClass('hidden');
      $empty.addClass('hidden');
      $error.addClass('hidden');
    } catch (e) {
      lastInfo = null;
      $error.removeClass('hidden').text('Error: ' + e);
      $details.addClass('hidden');
      $empty.removeClass('hidden');
    }
  };

  $input.on('input', process);

  $('#cert-clear-btn').on('click', () => {
    $input.val('').focus();
    process();
  });

  $('#cert-file-btn').on('click', async () => {
    try {
      const filePath = await window.tauriApi.openFileDialog();
      if (filePath) {
        const text = await window.tauriApi.readTextFile(filePath);
        $input.val(text);
        process();
      }
    } catch (e) {
      console.error('Certificate file open error', e);
      $error.removeClass('hidden').text('File error: ' + e);
    }
  });

  $('#cert-copy-btn').on('click', function() {
    if (!lastInfo) return;
    const text = [
      'Subject: ' + lastInfo.subject,
      'Issuer: ' + lastInfo.issuer,
      'Serial: ' + lastInfo.serial,
      'Valid From: ' + lastInfo.not_before,
      'Valid Until: ' + lastInfo.not_after,
      'SANs: ' + (lastInfo.san.join(', ') || ''),
      'Key Algorithm: ' + lastInfo.key_algorithm,
      'Signature Algorithm: ' + lastInfo.sig_algorithm,
      'SHA-256: ' + lastInfo.fingerprint_sha256,
      'SHA-1: ' + lastInfo.fingerprint_sha1,
      'Is CA: ' + (lastInfo.is_ca ? 'Yes' : 'No'),
    ].join('\n');
    window.copyToClipboard(text, $(this));
  });
});