/* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is the Netscape security libraries. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 2000 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Ian McGreer * Javier Delgadillo * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "nsNSSCertValidity.h" #include "nsNSSCertHeader.h" #include "nsCOMPtr.h" #include "nsIDateTimeFormat.h" #include "nsDateTimeFormatCID.h" #include "nsComponentManagerUtils.h" #include "nsReadableUtils.h" #include "nsNSSShutDown.h" /* Implementation file */ NS_IMPL_THREADSAFE_ISUPPORTS1(nsX509CertValidity, nsIX509CertValidity) nsX509CertValidity::nsX509CertValidity() : mTimesInitialized(PR_FALSE) { /* member initializers and constructor code */ } nsX509CertValidity::nsX509CertValidity(CERTCertificate *cert) : mTimesInitialized(PR_FALSE) { nsNSSShutDownPreventionLock locker; if (cert) { SECStatus rv = CERT_GetCertTimes(cert, &mNotBefore, &mNotAfter); if (rv == SECSuccess) mTimesInitialized = PR_TRUE; } } nsX509CertValidity::~nsX509CertValidity() { /* destructor code */ } /* readonly attribute PRTime notBefore; */ NS_IMETHODIMP nsX509CertValidity::GetNotBefore(PRTime *aNotBefore) { NS_ENSURE_ARG(aNotBefore); nsresult rv = NS_ERROR_FAILURE; if (mTimesInitialized) { *aNotBefore = mNotBefore; rv = NS_OK; } return rv; } NS_IMETHODIMP nsX509CertValidity::GetNotBeforeLocalTime(nsAString &aNotBeforeLocalTime) { if (!mTimesInitialized) return NS_ERROR_FAILURE; nsresult rv; nsCOMPtr dateFormatter = do_CreateInstance(NS_DATETIMEFORMAT_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; nsAutoString date; PRExplodedTime explodedTime; PR_ExplodeTime(mNotBefore, PR_LocalTimeParameters, &explodedTime); dateFormatter->FormatPRExplodedTime(nsnull, kDateFormatShort, kTimeFormatSecondsForce24Hour, &explodedTime, date); aNotBeforeLocalTime = date; return NS_OK; } NS_IMETHODIMP nsX509CertValidity::GetNotBeforeLocalDay(nsAString &aNotBeforeLocalDay) { if (!mTimesInitialized) return NS_ERROR_FAILURE; nsresult rv; nsCOMPtr dateFormatter = do_CreateInstance(NS_DATETIMEFORMAT_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; nsAutoString date; PRExplodedTime explodedTime; PR_ExplodeTime(mNotBefore, PR_LocalTimeParameters, &explodedTime); dateFormatter->FormatPRExplodedTime(nsnull, kDateFormatShort, kTimeFormatNone, &explodedTime, date); aNotBeforeLocalDay = date; return NS_OK; } NS_IMETHODIMP nsX509CertValidity::GetNotBeforeGMT(nsAString &aNotBeforeGMT) { if (!mTimesInitialized) return NS_ERROR_FAILURE; nsresult rv; nsCOMPtr dateFormatter = do_CreateInstance(NS_DATETIMEFORMAT_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; nsAutoString date; PRExplodedTime explodedTime; PR_ExplodeTime(mNotBefore, PR_GMTParameters, &explodedTime); dateFormatter->FormatPRExplodedTime(nsnull, kDateFormatShort, kTimeFormatSecondsForce24Hour, &explodedTime, date); aNotBeforeGMT = date; return NS_OK; } /* readonly attribute PRTime notAfter; */ NS_IMETHODIMP nsX509CertValidity::GetNotAfter(PRTime *aNotAfter) { NS_ENSURE_ARG(aNotAfter); nsresult rv = NS_ERROR_FAILURE; if (mTimesInitialized) { *aNotAfter = mNotAfter; rv = NS_OK; } return rv; } NS_IMETHODIMP nsX509CertValidity::GetNotAfterLocalTime(nsAString &aNotAfterLocaltime) { if (!mTimesInitialized) return NS_ERROR_FAILURE; nsresult rv; nsCOMPtr dateFormatter = do_CreateInstance(NS_DATETIMEFORMAT_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; nsAutoString date; PRExplodedTime explodedTime; PR_ExplodeTime(mNotAfter, PR_LocalTimeParameters, &explodedTime); dateFormatter->FormatPRExplodedTime(nsnull, kDateFormatShort, kTimeFormatSecondsForce24Hour, &explodedTime, date); aNotAfterLocaltime = date; return NS_OK; } NS_IMETHODIMP nsX509CertValidity::GetNotAfterLocalDay(nsAString &aNotAfterLocalDay) { if (!mTimesInitialized) return NS_ERROR_FAILURE; nsresult rv; nsCOMPtr dateFormatter = do_CreateInstance(NS_DATETIMEFORMAT_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; nsAutoString date; PRExplodedTime explodedTime; PR_ExplodeTime(mNotAfter, PR_LocalTimeParameters, &explodedTime); dateFormatter->FormatPRExplodedTime(nsnull, kDateFormatShort, kTimeFormatNone, &explodedTime, date); aNotAfterLocalDay = date; return NS_OK; } NS_IMETHODIMP nsX509CertValidity::GetNotAfterGMT(nsAString &aNotAfterGMT) { if (!mTimesInitialized) return NS_ERROR_FAILURE; nsresult rv; nsCOMPtr dateFormatter = do_CreateInstance(NS_DATETIMEFORMAT_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; nsAutoString date; PRExplodedTime explodedTime; PR_ExplodeTime(mNotAfter, PR_GMTParameters, &explodedTime); dateFormatter->FormatPRExplodedTime(nsnull, kDateFormatShort, kTimeFormatSecondsForce24Hour, &explodedTime, date); aNotAfterGMT = date; return NS_OK; }