home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 December / PCWorld_2005-12_cd.bin / komunikace / netscape / nsb-install-8-0.exe / chrome / pippki.jar / content / pippki / viewCertDetails.js < prev    next >
Text File  |  2005-09-26  |  9KB  |  253 lines

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  *
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  *
  12.  * The Original Code is mozilla.org code.
  13.  *
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are
  16.  * Copyright (C) 2001 Netscape Communications Corporation. All
  17.  * Rights Reserved.
  18.  *
  19.  * Contributor(s):
  20.  *  Bob Lord <lord@netscape.com>
  21.  *  Ian McGreer <mcgreer@netscape.com>
  22.  *  Javier Delgadillo <javi@netscape.com>
  23.  */
  24.  
  25. const nsIX509Cert = Components.interfaces.nsIX509Cert;
  26. const nsX509CertDB = "@mozilla.org/security/x509certdb;1";
  27. const nsIX509CertDB = Components.interfaces.nsIX509CertDB;
  28. const nsPK11TokenDB = "@mozilla.org/security/pk11tokendb;1";
  29. const nsIPK11TokenDB = Components.interfaces.nsIPK11TokenDB;
  30. const nsIPKIParamBlock = Components.interfaces.nsIPKIParamBlock;
  31. const nsIASN1Object = Components.interfaces.nsIASN1Object;
  32. const nsIASN1Sequence = Components.interfaces.nsIASN1Sequence;
  33. const nsIASN1PrintableItem = Components.interfaces.nsIASN1PrintableItem;
  34. const nsIASN1Tree = Components.interfaces.nsIASN1Tree;
  35. const nsASN1Tree = "@mozilla.org/security/nsASN1Tree;1"
  36.  
  37. var bundle;
  38.  
  39. function AddCertChain(node, chain, idPrefix)
  40. {
  41.   var idfier = idPrefix+"chain_";
  42.   var child = document.getElementById(node);
  43.   var numCerts = chain.length;
  44.   var currCert;
  45.   var displayVal;
  46.   var addTwistie;
  47.   for (var i=numCerts-1; i>=0; i--) {
  48.     currCert = chain.queryElementAt(i, nsIX509Cert);
  49.     if (currCert.commonName) {
  50.       displayVal = currCert.commonName;
  51.     } else {
  52.       displayVal = currCert.windowTitle;
  53.     }
  54.     if (0 == i) {
  55.       addTwistie = false;
  56.     } else {
  57.       addTwistie = true;
  58.     }
  59.     child = addChildrenToTree(child, displayVal, currCert.dbKey,addTwistie);
  60.   }
  61. }
  62.  
  63. function AddUsage(usage,verifyInfoBox)
  64. {
  65.   var text  = document.createElement("textbox");
  66.   text.setAttribute("value", usage);
  67.   text.setAttribute("style", "margin: 2px 5px");
  68.   text.setAttribute("readonly", "true");
  69.   text.setAttribute("class", "scrollfield");
  70.   verifyInfoBox.appendChild(text);
  71. }
  72.  
  73. function setWindowName()
  74. {
  75.   //  Get the cert from the cert database
  76.   var certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
  77.   var windowReference=document.getElementById('certDetails');
  78.   var myName = self.name;
  79.   bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
  80.   var cert;
  81.  
  82.   var certDetails = bundle.GetStringFromName('certDetails');
  83.   if (myName != "") {
  84.     windowReference.setAttribute("title",certDetails+'"'+myName+'"');
  85.     //  Get the token
  86.     //  XXX ignore this for now.  NSS will find the cert on a token
  87.     //      by "tokenname:certname", which is what we have.
  88.     //var tokenName = "";
  89.     //var pk11db = Components.classes[nsPK11TokenDB].getService(nsIPK11TokenDB);
  90.     //var token = pk11db.findTokenByName(tokenName);
  91.  
  92.     //var cert = certdb.findCertByNickname(token, myName);
  93.     cert = certdb.findCertByNickname(null, myName);
  94.   } else {
  95.     var pkiParams = window.arguments[0].QueryInterface(nsIPKIParamBlock);
  96.     var isupport = pkiParams.getISupportAtIndex(1);
  97.     cert = isupport.QueryInterface(nsIX509Cert);
  98.     windowReference.setAttribute("title", 
  99.                                  certDetails+'"'+cert.windowTitle+'"');
  100.   }
  101.  
  102.   //
  103.   //  Set the cert attributes for viewing
  104.   //
  105.  
  106.   //  The chain of trust
  107.   var chain = cert.getChain();
  108.   AddCertChain("treesetDump", chain, "dump_");
  109.   DisplayGeneralDataFromCert(cert);
  110.   BuildPrettyPrint(cert);
  111. }
  112.  
  113.  
  114. function addChildrenToTree(parentTree,label,value,addTwistie)
  115. {
  116.   var treeChild1 = document.createElement("treechildren");
  117.   var treeElement = addTreeItemToTreeChild(treeChild1,label,value,addTwistie);
  118.   parentTree.appendChild(treeChild1);
  119.   return treeElement;
  120. }
  121.  
  122. function addTreeItemToTreeChild(treeChild,label,value,addTwistie)
  123. {
  124.   var treeElem1 = document.createElement("treeitem");
  125.   if (addTwistie) {
  126.     treeElem1.setAttribute("container","true");
  127.     treeElem1.setAttribute("open","true");
  128.   }
  129.   var treeRow = document.createElement("treerow");
  130.   var treeCell = document.createElement("treecell");
  131.   treeCell.setAttribute("label",label);
  132.   if (value)
  133.     treeCell.setAttribute("display",value);
  134.   treeRow.appendChild(treeCell);
  135.   treeElem1.appendChild(treeRow);
  136.   treeChild.appendChild(treeElem1);
  137.   return treeElem1;
  138. }
  139.  
  140. function displaySelected() {
  141.   var asn1Tree = document.getElementById('prettyDumpTree').
  142.                      treeBoxObject.view.QueryInterface(nsIASN1Tree);
  143.   var items = asn1Tree.selection;
  144.   var certDumpVal = document.getElementById('certDumpVal');
  145.   if (items.currentIndex != -1) {
  146.     var value = asn1Tree.getDisplayData(items.currentIndex);
  147.     certDumpVal.value = value;
  148.   } else {
  149.     certDumpVal.value ="";
  150.   }
  151. }
  152.  
  153. function BuildPrettyPrint(cert)
  154. {
  155.   var certDumpTree = Components.classes[nsASN1Tree].
  156.                           createInstance(nsIASN1Tree);
  157.   certDumpTree.loadASN1Structure(cert.ASN1Structure);
  158.   document.getElementById('prettyDumpTree').
  159.            treeBoxObject.view =  certDumpTree;
  160. }
  161.  
  162. function addAttributeFromCert(nodeName, value)
  163. {
  164.   var node = document.getElementById(nodeName);
  165.   if (!value) {
  166.     value = bundle.GetStringFromName('notPresent');  
  167.   }
  168.   node.setAttribute('value',value)
  169. }
  170.  
  171. function DisplayGeneralDataFromCert(cert)
  172. {
  173.   //  Verification and usage
  174.   var verifystr = "";
  175.   var o1 = {};
  176.   var o2 = {};
  177.   var o3 = {};
  178.   cert.getUsagesArray(false, o1, o2, o3); // do not ignore OCSP when checking
  179.   var verifystate = o1.value;
  180.   var count = o2.value;
  181.   var usageList = o3.value;
  182.   if (verifystate == cert.VERIFIED_OK) {
  183.     verifystr = bundle.GetStringFromName('certVerified');
  184.   } else if (verifystate == cert.CERT_REVOKED) {
  185.     verifystr = bundle.GetStringFromName('certNotVerified_CertRevoked');
  186.   } else if (verifystate == cert.CERT_EXPIRED) {
  187.     verifystr = bundle.GetStringFromName('certNotVerified_CertExpired');
  188.   } else if (verifystate == cert.CERT_NOT_TRUSTED) {
  189.     verifystr = bundle.GetStringFromName('certNotVerified_CertNotTrusted');
  190.   } else if (verifystate == cert.ISSUER_NOT_TRUSTED) {
  191.     verifystr = bundle.GetStringFromName('certNotVerified_IssuerNotTrusted');
  192.   } else if (verifystate == cert.ISSUER_UNKNOWN) {
  193.     verifystr = bundle.GetStringFromName('certNotVerified_IssuerUnknown');
  194.   } else if (verifystate == cert.INVALID_CA) {
  195.     verifystr = bundle.GetStringFromName('certNotVerified_CAInvalid');
  196.   } else { /* if (verifystate == cert.NOT_VERIFIED_UNKNOWN || == USAGE_NOT_ALLOWED) */
  197.     verifystr = bundle.GetStringFromName('certNotVerified_Unknown');
  198.   }
  199.   var verified=document.getElementById('verified');
  200.   verified.setAttribute("value", verifystr);
  201.   if (count > 0) {
  202.     var verifyInfoBox = document.getElementById('verify_info_box');
  203.     for (var i=0; i<count; i++) {
  204.       AddUsage(usageList[i],verifyInfoBox);
  205.     }
  206.   }
  207.  
  208.   //  Common Name
  209.   addAttributeFromCert('commonname', cert.commonName);
  210.   //  Organization
  211.   addAttributeFromCert('organization', cert.organization);
  212.   //  Organizational Unit
  213.   addAttributeFromCert('orgunit', cert.organizationalUnit);
  214.   //  Serial Number
  215.   addAttributeFromCert('serialnumber',cert.serialNumber);
  216.   //  SHA1 Fingerprint
  217.   addAttributeFromCert('sha1fingerprint',cert.sha1Fingerprint);
  218.   //  MD5 Fingerprint
  219.   addAttributeFromCert('md5fingerprint',cert.md5Fingerprint);
  220.   // Validity start
  221.   addAttributeFromCert('validitystart', cert.validity.notBeforeLocalDay);
  222.   // Validity end
  223.   addAttributeFromCert('validityend', cert.validity.notAfterLocalDay);
  224.   
  225.   //Now to populate the fields that correspond to the issuer.
  226.   var issuerCommonname, issuerOrg, issuerOrgUnit;
  227.   issuerCommonname = cert.issuerCommonName;
  228.   issuerOrg = cert.issuerOrganization;
  229.   issuerOrgUnit = cert.issuerOrganizationUnit;
  230.   addAttributeFromCert('issuercommonname', issuerCommonname);
  231.   addAttributeFromCert('issuerorganization', issuerOrg);
  232.   addAttributeFromCert('issuerorgunit', issuerOrgUnit);
  233. }
  234.  
  235. function updateCertDump()
  236. {
  237.   var asn1Tree = document.getElementById('prettyDumpTree').
  238.                      treeBoxObject.view.QueryInterface(nsIASN1Tree);
  239.  
  240.   var tree = document.getElementById('treesetDump');
  241.   if (tree.currentIndex < 0) {
  242.     alert("No items are selected."); //This should never happen.
  243.   } else {
  244.     var item = tree.contentView.getItemAtIndex(tree.currentIndex);
  245.     var dbKey = item.firstChild.firstChild.getAttribute('display');
  246.     //  Get the cert from the cert database
  247.     var certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
  248.     var cert = certdb.findCertByDBKey(dbKey,null);
  249.     asn1Tree.loadASN1Structure(cert.ASN1Structure);
  250.   }
  251.   displaySelected();
  252. }
  253.