Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / xsp / System / Web / Extensions / ApplicationServices / ApplicationServiceHelper.cs / 1 / ApplicationServiceHelper.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.ApplicationServices { using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Configuration; using System.Globalization; using System.Security.Principal; using System.Threading; using System.Web; using System.Web.Configuration; using System.Web.Profile; using System.Web.Resources; internal static class ApplicationServiceHelper { // store profile properties allowed for get/set over the webservice // a dictionary is used for perf, as .ContainsKey is called often // These dictionaries are used for concurrent reads, but all writes are done on a new instance one per thread // and isn't available for reading from other threads until the operation is complete. // So it is safe to use Dictionaryin this case. // We use Dictionary instead of Dictionary to avoid violating // FxCop Rule CA908: UseApprovedGenericsForPrecompiledAssemblies. private static Dictionary _profileAllowedGet; private static Dictionary _profileAllowedSet; private static bool? _profileServiceEnabled; private static bool? _roleServiceEnabled; private static bool? _authServiceEnabled; private static bool _authRequiresSSL; internal static Dictionary ProfileAllowedGet { get { EnsureProfileConfigLoaded(); return _profileAllowedGet; } } internal static Dictionary ProfileAllowedSet { get { EnsureProfileConfigLoaded(); return _profileAllowedSet; } } internal static bool AuthenticationServiceEnabled { get { EnsureAuthenticationConfigLoaded(); return _authServiceEnabled.Value; } } internal static bool ProfileServiceEnabled { get { EnsureProfileConfigLoaded(); return _profileServiceEnabled.Value; } } internal static bool RoleServiceEnabled { get { // Get the flag on demand from config if (_roleServiceEnabled == null) { ScriptingRoleServiceSection roleServiceSection = ScriptingRoleServiceSection.GetConfigurationSection(); _roleServiceEnabled = (roleServiceSection != null) && roleServiceSection.Enabled; } return _roleServiceEnabled.Value; } } internal static void EnsureAuthenticated(HttpContext context) { // bool authenticated = false; IPrincipal user = GetCurrentUser(context); if (user != null) { IIdentity userIdentity = user.Identity; if (userIdentity != null) { authenticated = userIdentity.IsAuthenticated; } } if (!authenticated) { throw new HttpException(AtlasWeb.UserIsNotAuthenticated); } } private static void EnsureAuthenticationConfigLoaded() { // DevDiv 52730: drop the unnecessary double checked lock if (_authServiceEnabled == null) { ScriptingAuthenticationServiceSection authServicesSection = ScriptingAuthenticationServiceSection.GetConfigurationSection(); if (authServicesSection != null) { _authRequiresSSL = authServicesSection.RequireSSL; _authServiceEnabled = authServicesSection.Enabled; } else { _authServiceEnabled = false; } } } // Fail if the Authentication Service is disabled or this is a non-ssl request and ssl is required internal static void EnsureAuthenticationServiceEnabled(HttpContext context, bool enforceSSL) { if (!AuthenticationServiceEnabled) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, AtlasWeb.AppService_Disabled, "AuthenticationService")); } if (enforceSSL && _authRequiresSSL && !context.Request.IsSecureConnection) { throw new HttpException(403, AtlasWeb.AppService_RequiredSSL); } } private static void EnsureProfileConfigLoaded() { if (_profileServiceEnabled == null) { #pragma warning disable 0436 ScriptingProfileServiceSection profileServiceSection = ScriptingProfileServiceSection.GetConfigurationSection(); #pragma warning restore 0436 Dictionary readAccessProperties = null; Dictionary writeAccessProperties = null; bool enabled = (profileServiceSection != null) && profileServiceSection.Enabled; if (enabled) { string[] enabledForRead = profileServiceSection.ReadAccessProperties; if (enabledForRead != null && enabledForRead.Length > 0) { readAccessProperties = new Dictionary (StringComparer.OrdinalIgnoreCase); ParseProfilePropertyList(readAccessProperties, enabledForRead); } string[] enabledForWriting = profileServiceSection.WriteAccessProperties; if (enabledForWriting != null && enabledForWriting.Length > 0) { writeAccessProperties = new Dictionary (StringComparer.OrdinalIgnoreCase); ParseProfilePropertyList(writeAccessProperties, enabledForWriting); } } _profileAllowedGet = readAccessProperties; _profileAllowedSet = writeAccessProperties; _profileServiceEnabled = enabled; } } // Fail if the Profile Service is disabled internal static void EnsureProfileServiceEnabled() { if (!ProfileServiceEnabled) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, AtlasWeb.AppService_Disabled, "ProfileService")); } } // Fail if the Role Service is disabled internal static void EnsureRoleServiceEnabled() { if (!RoleServiceEnabled) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, AtlasWeb.AppService_Disabled, "RoleService")); } } internal static IPrincipal GetCurrentUser(HttpContext context) { return (context != null) ? context.User : Thread.CurrentPrincipal; } internal static Collection GetProfilePropertiesMetadata() { EnsureProfileConfigLoaded(); if (ProfileBase.Properties == null) { return new Collection (); } Collection metadatas = new Collection (); foreach (SettingsProperty property in ProfileBase.Properties) { string propertyName = property.Name; // only return property metadata for properties that are allowed for Reading and/or Writing bool allowedReadOrWrite = _profileAllowedGet.ContainsKey(propertyName) || _profileAllowedSet.ContainsKey(propertyName); if (!allowedReadOrWrite) { continue; } string defaultValue = null; if (property.DefaultValue != null) { if (property.DefaultValue is string) { defaultValue = (string)property.DefaultValue; } else { defaultValue = Convert.ToBase64String((byte[])property.DefaultValue); } } ProfilePropertyMetadata metadata = new ProfilePropertyMetadata(); metadata.PropertyName = propertyName; metadata.DefaultValue = defaultValue; metadata.TypeName = property.PropertyType.AssemblyQualifiedName; metadata.AllowAnonymousAccess = (bool)property.Attributes["AllowAnonymous"]; metadata.SerializeAs = (int)property.SerializeAs; metadata.IsReadOnly = property.IsReadOnly; metadatas.Add(metadata); } return metadatas; } internal static string GetUserName(IPrincipal user) { if (user == null || user.Identity == null) { return String.Empty; } else { return user.Identity.Name; } } private static void ParseProfilePropertyList(Dictionary dictionary, string[] properties) { foreach (string property in properties) { string trimmed = property == null ? String.Empty : property.Trim(); if (property.Length > 0) { dictionary[trimmed] = true; } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.ApplicationServices { using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Configuration; using System.Globalization; using System.Security.Principal; using System.Threading; using System.Web; using System.Web.Configuration; using System.Web.Profile; using System.Web.Resources; internal static class ApplicationServiceHelper { // store profile properties allowed for get/set over the webservice // a dictionary is used for perf, as .ContainsKey is called often // These dictionaries are used for concurrent reads, but all writes are done on a new instance one per thread // and isn't available for reading from other threads until the operation is complete. // So it is safe to use Dictionaryin this case. // We use Dictionary instead of Dictionary to avoid violating // FxCop Rule CA908: UseApprovedGenericsForPrecompiledAssemblies. private static Dictionary _profileAllowedGet; private static Dictionary _profileAllowedSet; private static bool? _profileServiceEnabled; private static bool? _roleServiceEnabled; private static bool? _authServiceEnabled; private static bool _authRequiresSSL; internal static Dictionary ProfileAllowedGet { get { EnsureProfileConfigLoaded(); return _profileAllowedGet; } } internal static Dictionary ProfileAllowedSet { get { EnsureProfileConfigLoaded(); return _profileAllowedSet; } } internal static bool AuthenticationServiceEnabled { get { EnsureAuthenticationConfigLoaded(); return _authServiceEnabled.Value; } } internal static bool ProfileServiceEnabled { get { EnsureProfileConfigLoaded(); return _profileServiceEnabled.Value; } } internal static bool RoleServiceEnabled { get { // Get the flag on demand from config if (_roleServiceEnabled == null) { ScriptingRoleServiceSection roleServiceSection = ScriptingRoleServiceSection.GetConfigurationSection(); _roleServiceEnabled = (roleServiceSection != null) && roleServiceSection.Enabled; } return _roleServiceEnabled.Value; } } internal static void EnsureAuthenticated(HttpContext context) { // bool authenticated = false; IPrincipal user = GetCurrentUser(context); if (user != null) { IIdentity userIdentity = user.Identity; if (userIdentity != null) { authenticated = userIdentity.IsAuthenticated; } } if (!authenticated) { throw new HttpException(AtlasWeb.UserIsNotAuthenticated); } } private static void EnsureAuthenticationConfigLoaded() { // DevDiv 52730: drop the unnecessary double checked lock if (_authServiceEnabled == null) { ScriptingAuthenticationServiceSection authServicesSection = ScriptingAuthenticationServiceSection.GetConfigurationSection(); if (authServicesSection != null) { _authRequiresSSL = authServicesSection.RequireSSL; _authServiceEnabled = authServicesSection.Enabled; } else { _authServiceEnabled = false; } } } // Fail if the Authentication Service is disabled or this is a non-ssl request and ssl is required internal static void EnsureAuthenticationServiceEnabled(HttpContext context, bool enforceSSL) { if (!AuthenticationServiceEnabled) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, AtlasWeb.AppService_Disabled, "AuthenticationService")); } if (enforceSSL && _authRequiresSSL && !context.Request.IsSecureConnection) { throw new HttpException(403, AtlasWeb.AppService_RequiredSSL); } } private static void EnsureProfileConfigLoaded() { if (_profileServiceEnabled == null) { #pragma warning disable 0436 ScriptingProfileServiceSection profileServiceSection = ScriptingProfileServiceSection.GetConfigurationSection(); #pragma warning restore 0436 Dictionary readAccessProperties = null; Dictionary writeAccessProperties = null; bool enabled = (profileServiceSection != null) && profileServiceSection.Enabled; if (enabled) { string[] enabledForRead = profileServiceSection.ReadAccessProperties; if (enabledForRead != null && enabledForRead.Length > 0) { readAccessProperties = new Dictionary (StringComparer.OrdinalIgnoreCase); ParseProfilePropertyList(readAccessProperties, enabledForRead); } string[] enabledForWriting = profileServiceSection.WriteAccessProperties; if (enabledForWriting != null && enabledForWriting.Length > 0) { writeAccessProperties = new Dictionary (StringComparer.OrdinalIgnoreCase); ParseProfilePropertyList(writeAccessProperties, enabledForWriting); } } _profileAllowedGet = readAccessProperties; _profileAllowedSet = writeAccessProperties; _profileServiceEnabled = enabled; } } // Fail if the Profile Service is disabled internal static void EnsureProfileServiceEnabled() { if (!ProfileServiceEnabled) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, AtlasWeb.AppService_Disabled, "ProfileService")); } } // Fail if the Role Service is disabled internal static void EnsureRoleServiceEnabled() { if (!RoleServiceEnabled) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, AtlasWeb.AppService_Disabled, "RoleService")); } } internal static IPrincipal GetCurrentUser(HttpContext context) { return (context != null) ? context.User : Thread.CurrentPrincipal; } internal static Collection GetProfilePropertiesMetadata() { EnsureProfileConfigLoaded(); if (ProfileBase.Properties == null) { return new Collection (); } Collection metadatas = new Collection (); foreach (SettingsProperty property in ProfileBase.Properties) { string propertyName = property.Name; // only return property metadata for properties that are allowed for Reading and/or Writing bool allowedReadOrWrite = _profileAllowedGet.ContainsKey(propertyName) || _profileAllowedSet.ContainsKey(propertyName); if (!allowedReadOrWrite) { continue; } string defaultValue = null; if (property.DefaultValue != null) { if (property.DefaultValue is string) { defaultValue = (string)property.DefaultValue; } else { defaultValue = Convert.ToBase64String((byte[])property.DefaultValue); } } ProfilePropertyMetadata metadata = new ProfilePropertyMetadata(); metadata.PropertyName = propertyName; metadata.DefaultValue = defaultValue; metadata.TypeName = property.PropertyType.AssemblyQualifiedName; metadata.AllowAnonymousAccess = (bool)property.Attributes["AllowAnonymous"]; metadata.SerializeAs = (int)property.SerializeAs; metadata.IsReadOnly = property.IsReadOnly; metadatas.Add(metadata); } return metadatas; } internal static string GetUserName(IPrincipal user) { if (user == null || user.Identity == null) { return String.Empty; } else { return user.Identity.Name; } } private static void ParseProfilePropertyList(Dictionary dictionary, string[] properties) { foreach (string property in properties) { string trimmed = property == null ? String.Empty : property.Trim(); if (property.Length > 0) { dictionary[trimmed] = true; } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ListSortDescription.cs
- BounceEase.cs
- XmlNamespaceDeclarationsAttribute.cs
- GeneralTransformGroup.cs
- DataSourceControl.cs
- DataServiceKeyAttribute.cs
- Substitution.cs
- ProcessModuleCollection.cs
- GridViewPageEventArgs.cs
- CompositeControl.cs
- ApplicationManager.cs
- DetailsViewDeletedEventArgs.cs
- JsonDeserializer.cs
- ToolStripScrollButton.cs
- ImageSource.cs
- ApplicationServicesHostFactory.cs
- _emptywebproxy.cs
- CompilerState.cs
- MemberExpression.cs
- HttpEncoderUtility.cs
- AnimationException.cs
- WCFModelStrings.Designer.cs
- EdmToObjectNamespaceMap.cs
- AttributeAction.cs
- SecUtil.cs
- DoubleCollectionValueSerializer.cs
- SystemInfo.cs
- EventEntry.cs
- BrowserCapabilitiesFactory.cs
- _NegoState.cs
- SqlDataSourceConfigureSortForm.cs
- FieldAccessException.cs
- invalidudtexception.cs
- EventManager.cs
- NameNode.cs
- NullableConverter.cs
- ToolStripGrip.cs
- ParameterCollectionEditor.cs
- PropertyDescriptorComparer.cs
- LayoutSettings.cs
- RightsManagementEncryptedStream.cs
- ParamArrayAttribute.cs
- ExtensibleClassFactory.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- ObjectKeyFrameCollection.cs
- InputReferenceExpression.cs
- SingleBodyParameterMessageFormatter.cs
- SerializationInfo.cs
- CFStream.cs
- ColumnWidthChangedEvent.cs
- MenuStrip.cs
- GB18030Encoding.cs
- HttpModulesSection.cs
- GridItemCollection.cs
- TimeEnumHelper.cs
- DoubleLink.cs
- SystemEvents.cs
- PrivateFontCollection.cs
- TypedDataSourceCodeGenerator.cs
- FontEmbeddingManager.cs
- AnimationLayer.cs
- GridViewSortEventArgs.cs
- FunctionNode.cs
- XmlSchemaAttribute.cs
- WebScriptEnablingElement.cs
- ManifestResourceInfo.cs
- RealizationDrawingContextWalker.cs
- SqlCacheDependencySection.cs
- ByteKeyFrameCollection.cs
- ProjectionNode.cs
- Enum.cs
- XmlLoader.cs
- codemethodreferenceexpression.cs
- InstanceDescriptor.cs
- WebPartRestoreVerb.cs
- SyncOperationState.cs
- GradientBrush.cs
- SyndicationSerializer.cs
- OpCodes.cs
- CheckBoxList.cs
- CatalogPartCollection.cs
- CompositeActivityMarkupSerializer.cs
- AbsoluteQuery.cs
- XmlAttributes.cs
- IFlowDocumentViewer.cs
- GlyphShapingProperties.cs
- OptionUsage.cs
- _AutoWebProxyScriptWrapper.cs
- Label.cs
- HwndKeyboardInputProvider.cs
- TextFormatterHost.cs
- Parser.cs
- SspiWrapper.cs
- AnimationClockResource.cs
- StrokeSerializer.cs
- ComponentManagerBroker.cs
- ProxyElement.cs
- PropertyInfoSet.cs
- TimeSpanMinutesConverter.cs
- DesignColumn.cs