| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474 |
- //
- // System.Web.Configuration.WebConfigurationHost.cs
- //
- // Authors:
- // Lluis Sanchez Gual ([email protected])
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to
- // permit persons to whom the Software is furnished to do so, subject to
- // the following conditions:
- //
- // The above copyright notice and this permission notice shall be
- // included in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- //
- // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
- //
- #if NET_2_0
- using System;
- using System.IO;
- using System.Security;
- using System.Configuration;
- using System.Configuration.Internal;
- using System.Web.Util;
- using System.Reflection;
- /*
- * this class needs to be rewritten to support usage of the
- * IRemoteWebConfigurationHostServer interface. Once that's done, we
- * need an implementation of that interface that talks (through a web
- * service?) to a remote site..
- *
- * for now, though, just implement it as we do
- * System.Configuration.InternalConfigurationHost, i.e. the local
- * case.
- */
- namespace System.Web.Configuration
- {
- class WebConfigurationHost: IInternalConfigHost
- {
- WebConfigurationFileMap map;
- const string MachinePath = ":machine:";
- const string MachineWebPath = ":web:";
-
- public virtual object CreateConfigurationContext (string configPath, string locationSubPath)
- {
- return new WebContext (WebApplicationLevel.AtApplication /* XXX */,
- "" /* site XXX */,
- "" /* application path XXX */,
- configPath,
- locationSubPath);
- }
-
- public virtual object CreateDeprecatedConfigContext (string configPath)
- {
- throw new NotImplementedException ();
- }
-
- public virtual string DecryptSection (string encryptedXml, ProtectedConfigurationProvider protectionProvider,
- ProtectedConfigurationSection protectedSection)
- {
- throw new NotImplementedException ();
- }
-
- public virtual void DeleteStream (string streamName)
- {
- File.Delete (streamName);
- }
-
- public virtual string EncryptSection (string encryptedXml, ProtectedConfigurationProvider protectionProvider,
- ProtectedConfigurationSection protectedSection)
- {
- throw new NotImplementedException ();
- }
-
- public virtual string GetConfigPathFromLocationSubPath (string configPath, string locatinSubPath)
- {
- return configPath + "/" + locatinSubPath;
- }
- private static string privateBinPath;
- private static string PrivateBinPath {
- get {
- if (privateBinPath != null)
- return privateBinPath;
-
- AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
- privateBinPath = Path.Combine(setup.ApplicationBase, setup.PrivateBinPath);
- return privateBinPath;
- }
- }
-
- private Type LoadType(string typeName)
- {
- Type type = Type.GetType (typeName);
- if (type != null)
- return type;
- if (!Directory.Exists (PrivateBinPath))
- return null;
-
- string[] binDlls = Directory.GetFiles(PrivateBinPath, "*.dll");
- foreach (string s in binDlls) {
- Assembly binA = Assembly.LoadFrom (s);
- type = binA.GetType (typeName);
- if (type == null)
- continue;
-
- return type;
- }
-
- return null;
- }
-
- public virtual Type GetConfigType (string typeName, bool throwOnError)
- {
- Type type = LoadType(typeName);
- if (type == null && throwOnError)
- throw new ConfigurationErrorsException ("Type not found: '" + typeName + "'");
- return type;
- }
-
- public virtual string GetConfigTypeName (Type t)
- {
- return t.AssemblyQualifiedName;
- }
-
- public virtual void GetRestrictedPermissions (IInternalConfigRecord configRecord, out PermissionSet permissionSet,
- out bool isHostReady)
- {
- throw new NotImplementedException ();
- }
-
- public virtual string GetStreamName (string configPath)
- {
- if (configPath == MachinePath) {
- if (map == null)
- return System.Runtime.InteropServices.RuntimeEnvironment.SystemConfigurationFile;
- else
- return map.MachineConfigFilename;
- } else if (configPath == MachineWebPath) {
- string mdir;
- if (map == null)
- #if TARGET_J2EE
- return "/web.config";
- #else
- mdir = Path.GetDirectoryName (System.Runtime.InteropServices.RuntimeEnvironment.SystemConfigurationFile);
- #endif
- else
- mdir = Path.GetDirectoryName (map.MachineConfigFilename);
- return GetWebConfigFileName (mdir);
- }
-
- string dir = MapPath (configPath);
- return GetWebConfigFileName (dir);
- }
-
- public virtual string GetStreamNameForConfigSource (string streamName, string configSource)
- {
- throw new NotImplementedException ();
- }
-
- public virtual object GetStreamVersion (string streamName)
- {
- throw new NotImplementedException ();
- }
-
- public virtual IDisposable Impersonate ()
- {
- throw new NotImplementedException ();
- }
-
- public virtual void Init (IInternalConfigRoot root, params object[] hostInitParams)
- {
- }
-
- public virtual void InitForConfiguration (ref string locationSubPath, out string configPath,
- out string locationConfigPath, IInternalConfigRoot root,
- params object[] hostInitConfigurationParams)
- {
- string fullPath = (string) hostInitConfigurationParams [1];
- map = (WebConfigurationFileMap) hostInitConfigurationParams [0];
- if (locationSubPath == MachineWebPath) {
- locationSubPath = MachinePath;
- configPath = MachineWebPath;
- locationConfigPath = null;
- } else if (locationSubPath == MachinePath) {
- locationSubPath = null;
- configPath = MachinePath;
- locationConfigPath = null;
- } else {
- int i;
- if (locationSubPath == null)
- configPath = fullPath;
- else
- configPath = locationSubPath;
- if (configPath == HttpRuntime.AppDomainAppVirtualPath
- || configPath == "/")
- i = -1;
- else
- i = configPath.LastIndexOf ("/");
- if (i != -1) {
- locationConfigPath = configPath.Substring (i+1);
-
- if (i == 0)
- locationSubPath = "/";
- else
- locationSubPath = fullPath.Substring (0, i);
- } else {
- locationSubPath = MachineWebPath;
- locationConfigPath = null;
- }
- }
- }
-
- public string MapPath (string virtualPath)
- {
- if (map != null)
- return MapPathFromMapper (virtualPath);
- else if (HttpContext.Current != null
- && HttpContext.Current.Request != null)
- return HttpContext.Current.Request.MapPath (virtualPath);
- else if (HttpRuntime.AppDomainAppVirtualPath != null &&
- virtualPath.StartsWith (HttpRuntime.AppDomainAppVirtualPath)) {
- if (virtualPath == HttpRuntime.AppDomainAppVirtualPath)
- return HttpRuntime.AppDomainAppPath;
- return UrlUtils.Combine (HttpRuntime.AppDomainAppPath,
- virtualPath.Substring (HttpRuntime.AppDomainAppVirtualPath.Length));
- }
- else
- return virtualPath;
- }
-
- public string NormalizeVirtualPath (string virtualPath)
- {
- if (virtualPath == null || virtualPath.Length == 0)
- virtualPath = ".";
- else
- virtualPath = virtualPath.Trim ();
- if (virtualPath [0] == '~' && virtualPath.Length > 2 && virtualPath [1] == '/')
- virtualPath = virtualPath.Substring (1);
-
- if (System.IO.Path.DirectorySeparatorChar != '/')
- virtualPath = virtualPath.Replace (System.IO.Path.DirectorySeparatorChar, '/');
- if (UrlUtils.IsRooted (virtualPath)) {
- virtualPath = UrlUtils.Canonic (virtualPath);
- } else {
- if (map.VirtualDirectories.Count > 0) {
- string root = map.VirtualDirectories [0].VirtualDirectory;
- virtualPath = UrlUtils.Combine (root, virtualPath);
- virtualPath = UrlUtils.Canonic (virtualPath);
- }
- }
- return virtualPath;
- }
- public string MapPathFromMapper (string virtualPath)
- {
- string path = NormalizeVirtualPath (virtualPath);
-
- foreach (VirtualDirectoryMapping mapping in map.VirtualDirectories) {
- if (path.StartsWith (mapping.VirtualDirectory)) {
- int i = mapping.VirtualDirectory.Length;
- if (path.Length == i) {
- return mapping.PhysicalDirectory;
- }
- else if (path [i] == '/') {
- string pathPart = path.Substring (i + 1).Replace ('/', Path.DirectorySeparatorChar);
- return Path.Combine (mapping.PhysicalDirectory, pathPart);
- }
- }
- }
- throw new HttpException ("Invalid virtual directory: " + virtualPath);
- }
- string GetWebConfigFileName (string dir)
- {
- string[] filenames = new string[] {"Web.Config", "Web.config", "web.config" };
- foreach (string fn in filenames) {
- string file = Path.Combine (dir, fn);
- if (File.Exists (file))
- return file;
- }
- return null;
- }
-
- public virtual bool IsAboveApplication (string configPath)
- {
- throw new NotImplementedException ();
- }
-
- public virtual bool IsConfigRecordRequired (string configPath)
- {
- throw new NotImplementedException ();
- }
-
- public virtual bool IsDefinitionAllowed (string configPath, ConfigurationAllowDefinition allowDefinition,
- ConfigurationAllowExeDefinition allowExeDefinition)
- {
- switch (allowDefinition) {
- case ConfigurationAllowDefinition.MachineOnly:
- return configPath == MachinePath || configPath == MachineWebPath;
- case ConfigurationAllowDefinition.MachineToWebRoot:
- case ConfigurationAllowDefinition.MachineToApplication:
- return configPath == MachinePath || configPath == MachineWebPath || configPath == "/" ||
- configPath == HttpRuntime.AppDomainAppVirtualPath;
- default:
- return true;
- }
- }
-
- public virtual bool IsFile (string streamName)
- {
- throw new NotImplementedException ();
- }
-
- public virtual bool IsLocationApplicable (string configPath)
- {
- throw new NotImplementedException ();
- }
-
- public virtual Stream OpenStreamForRead (string streamName)
- {
- if (!File.Exists (streamName)) {
- #if TARGET_J2EE
- if (streamName != null && (streamName.EndsWith ("machine.config") ||
- streamName.EndsWith ("web.config"))) {
- if (streamName.StartsWith ("/"))
- streamName = streamName.Substring (1);
- java.lang.ClassLoader cl = (java.lang.ClassLoader) AppDomain.CurrentDomain.GetData ("GH_ContextClassLoader");
- if (cl != null) {
- java.io.InputStream inputStream = cl.getResourceAsStream (streamName);
- return (Stream) vmw.common.IOUtils.getStream (inputStream);
- }
- }
- #endif
- throw new ConfigurationException ("File '" + streamName + "' not found");
- }
-
- return new FileStream (streamName, FileMode.Open, FileAccess.Read);
- }
- [MonoTODO ("Not implemented")]
- public virtual Stream OpenStreamForRead (string streamName, bool assertPermissions)
- {
- throw new NotImplementedException ();
- }
- public virtual Stream OpenStreamForWrite (string streamName, string templateStreamName, ref object writeContext)
- {
- return new FileStream (streamName, FileMode.Create, FileAccess.Write);
- }
- [MonoTODO ("Not implemented")]
- public virtual Stream OpenStreamForWrite (string streamName, string templateStreamName, ref object writeContext,
- bool assertPermissions)
- {
- throw new NotImplementedException ();
- }
-
- public virtual bool PrefetchAll (string configPath, string streamName)
- {
- throw new NotImplementedException ();
- }
-
- public virtual bool PrefetchSection (string sectionGroupName, string sectionName)
- {
- throw new NotImplementedException ();
- }
- [MonoTODO ("Not implemented")]
- public virtual void RequireCompleteInit (IInternalConfigRecord configRecord)
- {
- throw new NotImplementedException ();
- }
- public virtual object StartMonitoringStreamForChanges (string streamName, StreamChangeCallback callback)
- {
- throw new NotImplementedException ();
- }
-
- public virtual void StopMonitoringStreamForChanges (string streamName, StreamChangeCallback callback)
- {
- throw new NotImplementedException ();
- }
-
- public virtual void VerifyDefinitionAllowed (string configPath, ConfigurationAllowDefinition allowDefinition,
- ConfigurationAllowExeDefinition allowExeDefinition,
- IConfigErrorInfo errorInfo)
- {
- if (!IsDefinitionAllowed (configPath, allowDefinition, allowExeDefinition))
- throw new ConfigurationErrorsException ("The section can't be defined in this file (the allowed definition context is '" + allowDefinition + "').", errorInfo.Filename, errorInfo.LineNumber);
- }
-
- [MonoTODO("Does nothing")]
- public virtual void WriteCompleted (string streamName, bool success, object writeContext)
- {
- }
-
- [MonoTODO("Does nothing")]
- public virtual void WriteCompleted (string streamName, bool success, object writeContext, bool assertPermissions)
- {
- }
- public virtual bool SupportsChangeNotifications {
- get { return false; }
- }
-
- public virtual bool SupportsLocation {
- get { return false; }
- }
-
- public virtual bool SupportsPath {
- get { return false; }
- }
-
- public virtual bool SupportsRefresh {
- get { return false; }
- }
- [MonoTODO("Always returns false")]
- public virtual bool IsRemote {
- get { return false; }
- }
- [MonoTODO ("Not implemented")]
- public virtual bool IsFullTrustSectionWithoutAptcaAllowed (IInternalConfigRecord configRecord)
- {
- throw new NotImplementedException ();
- }
- [MonoTODO ("Not implemented")]
- public virtual bool IsInitDelayed (IInternalConfigRecord configRecord)
- {
- throw new NotImplementedException ();
- }
- [MonoTODO ("Not implemented")]
- public virtual bool IsSecondaryRoot (string configPath)
- {
- throw new NotImplementedException ();
- }
- [MonoTODO ("Not implemented")]
- public virtual bool IsTrustedConfigPath (string configPath)
- {
- throw new NotImplementedException ();
- }
- }
- }
- #endif
|