Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / TrustUi / MS / Internal / documents / SignatureResourceHelper.cs / 1 / SignatureResourceHelper.cs
//---------------------------------------------------------------------------------------- //// Copyright (C) Microsoft Corporation. All rights reserved. // // Description: // SignatureResourceHelper is a helper class used to get resources. // // History: // 05/03/05 - [....] created // 07/26/05 - [....] refactored to reduce code and complexity // added support for rendering Image from DrawingBrush //--------------------------------------------------------------------------------------- using System; using System.Collections; using Drawing = System.Drawing; using System.Globalization; using System.IO; using System.Security.Cryptography.X509Certificates; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.TrustUI; using System.Security.Permissions; using System.Security; using MS.Internal.Documents.Application; namespace MS.Internal.Documents { internal static class SignatureResourceHelper { #region Internal Methods //------------------------------------------------------------------------------- // Internal Methods //------------------------------------------------------------------------------- ////// This will return the resources based on the overall status of the document. /// /// The overall status of the document. ///The document level resources. internal static DocumentStatusResources GetDocumentLevelResources( SignatureStatus status) { DocumentStatusResources docSigStatusResources = new DocumentStatusResources(); // Set the text representation for the status. switch (status) { case SignatureStatus.Valid: docSigStatusResources.Text = SR.Get(SRID.DocumentSignatureManagerValid); docSigStatusResources.ToolTip = SR.Get(SRID.DocumentSignatureManagerAppliedToolTip); break; case SignatureStatus.Invalid: docSigStatusResources.Text = SR.Get(SRID.DocumentSignatureManagerInvalid); docSigStatusResources.ToolTip = SR.Get(SRID.DocumentSignatureManagerAppliedToolTip); break; case SignatureStatus.NotSigned: docSigStatusResources.Text = String.Empty; docSigStatusResources.ToolTip = SR.Get(SRID.DocumentSignatureManagerDefaultToolTip); break; default: // SignatureStatus.Unknown or SignatureStatus.Undetermined // In this case signatures have been applied to the document, but // the validity of the signatures is not yet known. docSigStatusResources.Text = SR.Get(SRID.DocumentSignatureManagerUndetermined); docSigStatusResources.ToolTip = SR.Get(SRID.DocumentSignatureManagerAppliedToolTip); break; } // Set the image representation for the status. docSigStatusResources.Image = GetDrawingBrushFromStatus(status); return docSigStatusResources; } ////// Get the Image icon for the status. /// /// Requested signature status /// Requested certificate status ///A Image on success (valid status, DrawingBrush found), null /// otherwise. internal static Drawing.Image GetImageFromStatus( int height, int width, SignatureStatus sigStatus, CertificatePriorityStatus certStatus) { // // If the signature is okay, but the certificate cannot be trusted then display // invalid signature image. if ((sigStatus == SignatureStatus.Valid) && (certStatus != CertificatePriorityStatus.Ok)) { sigStatus = SignatureStatus.Invalid; } string resourceName = string.Format( CultureInfo.InvariantCulture, @"{0}_{1}x{2}", sigStatus.ToString(), height, width); return (Drawing.Image)Resources.ResourceManager.GetObject(resourceName); } ////// Will return the resources for the provided digital signature. /// /// The signature to get resources for. ///The signature resources. internal static SignatureResources GetResources(DigitalSignature signature, CertificatePriorityStatus certStatus) { const int defaultHeight = 35; const int defaultWidth = 35; SignatureResources resources = new SignatureResources(); string none = SR.Get(SRID.SignatureResourceHelperNone); resources._displayImage = GetImageFromStatus( defaultHeight, defaultWidth, signature.SignatureState, certStatus); resources._location = string.IsNullOrEmpty(signature.Location) ? none : signature.Location; resources._reason = string.IsNullOrEmpty(signature.Reason) ? none : signature.Reason; resources._signBy = GetFormattedDate(signature.SignedOn); resources._subjectName = signature.SubjectName; resources._summaryMessage = GetSummaryMessage(signature, certStatus); Trace.SafeWrite( Trace.Rights, "Resources generated for {0} summary: {1}", resources._subjectName, resources._summaryMessage); return resources; } #endregion Internal Methods #region Private Methods ////// Get the DrawingBrush icon for the status. /// /// Requested status ///A DrawingBrush on success (valid status, DrawingBrush found), null /// otherwise. private static DrawingBrush GetDrawingBrushFromStatus(SignatureStatus sigStatus) { if (_brushResources == null) { // Get the entire list of SignatureStatus values. Array statusList = Enum.GetValues(typeof(SignatureStatus)); // Construct the array to hold brush references. _brushResources = new DrawingBrush[statusList.Length]; // To find the DrawingBrushes in the theme resources we need a // FrameworkElement. TextBlock was used as it appears to have a very small // footprint, and won't take long to construct. The actual // FrameworkElement doesn't matter as long as we have an instance to one _frameworkElement = new TextBlock(); } if ((_brushResources != null) && (_frameworkElement != null)) { int index = (int)sigStatus; // If there is no cached value of the requested DrawingBrush, then find // it in the Resources. if (_brushResources[index] == null) { // Determine resource name. string resourceName = "PUISignatureStatus" + Enum.GetName(typeof(SignatureStatus), sigStatus) + "BrushKey"; // Acquire reference to the brush. object resource = _frameworkElement.FindResource( new ComponentResourceKey( typeof(PresentationUIStyleResources), resourceName)); // Set cache value for the brush. _brushResources[index] = resource as DrawingBrush; } return _brushResources[index]; } return null; } ////// Builds the summary message. /// /// A DigitalSignature ///A summary message. private static string GetSummaryMessage(DigitalSignature signature, CertificatePriorityStatus certStatus) { if (signature == null) { return string.Empty; } // Setup the location text. If not currently set, replace with the // string "" to denote that no value was set. string location = (String.IsNullOrEmpty(signature.Location)) ? SR.Get(SRID.SignatureResourceHelperNone) : signature.Location; string result = String.Empty; switch (signature.SignatureState) { case SignatureStatus.Valid: case SignatureStatus.Invalid: case SignatureStatus.Unverifiable: // Verify that if the signature is valid, it has a certificate Invariant.Assert( !(signature.SignatureState == SignatureStatus.Valid && signature.Certificate == null), SR.Get(SRID.SignatureResourceHelperMissingCertificate)); // Create the signature status message string sigSummary = string.Format(CultureInfo.CurrentCulture, SR.Get(SRID.SignatureResourceHelperSummaryBreakLine), GetSignatureSummaryMessage(signature.SignatureState, certStatus)); // Create the certificate status message (if required) string certSummary = String.Empty; if (certStatus != CertificatePriorityStatus.Ok) { certSummary = string.Format(CultureInfo.CurrentCulture, SR.Get(SRID.SignatureResourceHelperSummaryBreakLine), GetCertificateSummaryMessage(certStatus)); } // Create the summary message using the signature and certificate messages // along with details from the current signature. result = string.Format(CultureInfo.CurrentCulture, SR.Get(SRID.SignatureResourceHelperSummaryFormat), sigSummary, certSummary, signature.SubjectName, signature.SignedOn, location); break; case SignatureStatus.NotSigned: // Create the summary message using signature information result = string.Format(CultureInfo.CurrentCulture, SR.Get(SRID.SignatureResourceHelperValidSigSummaryPending), signature.SubjectName, GetFormattedDate(signature.SignedOn), location); break; } return result; } /// /// Acquire the UI message associated with the certificate status /// /// The status to represent ///The string associated with the status, otherwise String.Empty. private static string GetCertificateSummaryMessage(CertificatePriorityStatus certStatus) { string message = String.Empty; switch (certStatus) { case CertificatePriorityStatus.Ok : message = SR.Get(SRID.SignatureResourceHelperCertificateStatusOk); break; case CertificatePriorityStatus.Corrupted : message = SR.Get(SRID.SignatureResourceHelperCertificateStatusCorrupted); break; case CertificatePriorityStatus.CannotBeVerified : message = SR.Get(SRID.SignatureResourceHelperCertificateStatusCannotBeVerified); break; case CertificatePriorityStatus.IssuerNotTrusted : message = SR.Get(SRID.SignatureResourceHelperCertificateStatusIssuerNotTrusted); break; case CertificatePriorityStatus.Revoked : message = SR.Get(SRID.SignatureResourceHelperCertificateStatusRevoked); break; case CertificatePriorityStatus.Expired : message = SR.Get(SRID.SignatureResourceHelperCertificateStatusExpired); break; case CertificatePriorityStatus.NoCertificate : message = SR.Get(SRID.SignatureResourceHelperCertificateStatusNoCertificate); break; case CertificatePriorityStatus.Verifying : message = SR.Get(SRID.SignatureResourceHelperCertificateStatusVerifying); break; } return message; } ////// Acquire the UI message associated with the signature status /// /// The signature status to represent /// The certificate status for the signature ///The string associated with the status, otherwise String.Empty. private static string GetSignatureSummaryMessage(SignatureStatus sigStatus, CertificatePriorityStatus certStatus) { string message = String.Empty; if (sigStatus == SignatureStatus.Valid) { message = (certStatus == CertificatePriorityStatus.Ok) ? SR.Get(SRID.SignatureResourceHelperSignatureStatusValid) : // Cert valid SR.Get(SRID.SignatureResourceHelperSignatureStatusValidCertInvalid); // Cert invalid } else if (sigStatus == SignatureStatus.Unverifiable) { message = SR.Get(SRID.SignatureResourceHelperSignatureStatusUnverifiable); } else { message = SR.Get(SRID.SignatureResourceHelperSignatureStatusInvalid); } return message; } ////// Will format the date for display. /// /// Either null or a valid date. ///The short date or 'none' if the value was null. private static string GetFormattedDate(Nullabledate) { string none = SR.Get(SRID.SignatureResourceHelperNone); return date == null ? none : String.Format( CultureInfo.CurrentCulture, ((DateTime)date).ToShortDateString()); } #endregion Private Methods #region Private Fields /// /// Caches DrawingBrushes loaded from styles. /// private static DrawingBrush[] _brushResources; ////// Used to search resources. /// private static FrameworkElement _frameworkElement; #endregion } ////// Internal representation of the document's signature status /// internal struct SignatureResources { public System.Drawing.Image _displayImage; public string _subjectName; public string _summaryMessage; public string _reason; public string _location; public string _signBy; ////// Provide a ToString implementation so that the ListItems in the /// SignatureSummary dialog provide text information for UIAutomation. /// ///public override string ToString() { return String.Format( CultureInfo.CurrentCulture, SR.Get(SRID.SignatureResourcesFormatForAccessibility), _summaryMessage, _subjectName, _reason, _location, _signBy); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StreamHelper.cs
- RuntimeHandles.cs
- AudienceUriMode.cs
- FileClassifier.cs
- XmlDeclaration.cs
- AssociationEndMember.cs
- UserPreferenceChangingEventArgs.cs
- ConnectionOrientedTransportManager.cs
- WebPartZoneBase.cs
- Avt.cs
- RadioButton.cs
- FormViewCommandEventArgs.cs
- ListViewItemSelectionChangedEvent.cs
- CompositionTarget.cs
- MasterPageCodeDomTreeGenerator.cs
- CachedFontFamily.cs
- GZipStream.cs
- BasicHttpSecurityElement.cs
- TabControlEvent.cs
- SchemaConstraints.cs
- CellConstant.cs
- Pair.cs
- TextDecorationCollectionConverter.cs
- SqlClientWrapperSmiStream.cs
- DataGridCaption.cs
- BitmapEffectCollection.cs
- PageTheme.cs
- ActiveXSerializer.cs
- ValidationHelper.cs
- ViewStateException.cs
- LinkClickEvent.cs
- HiddenField.cs
- EdmRelationshipRoleAttribute.cs
- GradientBrush.cs
- Win32Exception.cs
- SrgsText.cs
- PropertyRecord.cs
- PrivateFontCollection.cs
- SystemTcpStatistics.cs
- PatternMatchRules.cs
- ListSortDescriptionCollection.cs
- Timer.cs
- TypeLoadException.cs
- DataStreams.cs
- _HeaderInfoTable.cs
- DataSetUtil.cs
- RegexCharClass.cs
- ListItem.cs
- HtmlEncodedRawTextWriter.cs
- DbParameterHelper.cs
- RestClientProxyHandler.cs
- LayoutTable.cs
- SessionParameter.cs
- OperatingSystemVersionCheck.cs
- ZipIOCentralDirectoryBlock.cs
- SelectiveScrollingGrid.cs
- Win32.cs
- EntityParameter.cs
- StrokeIntersection.cs
- FlowNode.cs
- IteratorFilter.cs
- DialogResultConverter.cs
- XmlSchemaAttributeGroup.cs
- TypeConverterHelper.cs
- HttpModuleCollection.cs
- arabicshape.cs
- _DomainName.cs
- PackageProperties.cs
- OrderPreservingPipeliningMergeHelper.cs
- PointF.cs
- TraversalRequest.cs
- XmlLanguageConverter.cs
- FontDialog.cs
- EdmToObjectNamespaceMap.cs
- ToolStripOverflowButton.cs
- HiddenFieldPageStatePersister.cs
- Point3DCollectionValueSerializer.cs
- WebPartAuthorizationEventArgs.cs
- MemberHolder.cs
- SystemIcmpV4Statistics.cs
- ChannelServices.cs
- MenuScrollingVisibilityConverter.cs
- OracleSqlParser.cs
- ArgumentOutOfRangeException.cs
- ApplicationGesture.cs
- HtmlAnchor.cs
- Line.cs
- WmlPageAdapter.cs
- wgx_commands.cs
- ConditionalAttribute.cs
- SQLSingle.cs
- HtmlInputSubmit.cs
- WindowsFormsHostAutomationPeer.cs
- Popup.cs
- ValueUtilsSmi.cs
- Source.cs
- MediaScriptCommandRoutedEventArgs.cs
- Console.cs
- DbProviderFactories.cs
- TypeAccessException.cs