3 // Copyright (c) Microsoft Corporation. All rights reserved.
6 // <OWNER>[....]</OWNER>
12 // Site is an IIdentity representing internet sites.
16 using System.Diagnostics.Contracts;
17 using System.Globalization;
18 using System.Security.Permissions;
19 using System.Security.Util;
21 namespace System.Security.Policy
24 [System.Runtime.InteropServices.ComVisible(true)]
25 public sealed class Site : EvidenceBase, IIdentityPermissionFactory
27 private SiteString m_name;
29 public Site(String name)
32 throw new ArgumentNullException("name");
33 Contract.EndContractBlock();
35 m_name = new SiteString( name );
38 private Site(SiteString name)
40 Contract.Assert(name != null);
44 public static Site CreateFromUrl( String url )
46 return new Site(ParseSiteFromUrl(url));
49 private static SiteString ParseSiteFromUrl( String name )
51 URLString urlString = new URLString( name );
53 if (String.Compare( urlString.Scheme, "file", StringComparison.OrdinalIgnoreCase) == 0)
54 throw new ArgumentException( Environment.GetResourceString( "Argument_InvalidSite" ) );
56 return new SiteString( new URLString( name ).Host );
61 get { return m_name.ToString(); }
64 internal SiteString GetSiteString()
69 public IPermission CreateIdentityPermission( Evidence evidence )
71 return new SiteIdentityPermission( Name );
74 public override bool Equals(Object o)
76 Site other = o as Site;
82 return String.Equals(Name, other.Name, StringComparison.OrdinalIgnoreCase);
85 public override int GetHashCode()
87 return Name.GetHashCode();
90 public override EvidenceBase Clone()
92 return new Site(m_name);
100 #if FEATURE_CAS_POLICY
101 internal SecurityElement ToXml()
103 SecurityElement elem = new SecurityElement( "System.Security.Policy.Site" );
104 // If you hit this assert then most likely you are trying to change the name of this class.
105 // This is ok as long as you change the hard coded string above and change the assert below.
106 Contract.Assert( this.GetType().FullName.Equals( "System.Security.Policy.Site" ), "Class name changed!" );
108 elem.AddAttribute( "version", "1" );
111 elem.AddChild( new SecurityElement( "Name", m_name.ToString() ) );
115 #endif // FEATURE_CAS_POLICY
117 #if FEATURE_CAS_POLICY
118 public override String ToString()
120 return ToXml().ToString();
122 #endif // FEATURE_CAS_POLICY
124 // INormalizeForIsolatedStorage is not implemented for startup perf
125 // equivalent to INormalizeForIsolatedStorage.Normalize()
126 internal Object Normalize()
128 return m_name.ToString().ToUpper(CultureInfo.InvariantCulture);