2003-10-13 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
[mono.git] / mcs / class / System.XML / System.Xml / XmlSecureResolver.cs
1 #if NET_1_0
2 #endif
3 #if NET_1_1
4 //
5 // System.Xml.XmlSecureResolver.cs
6 //
7 // Author: Atsushi Enomoto (ginga@kit.hi-ho.ne.jp)
8 //
9 // (C) 2003 Atsushi Enomoto
10 //
11 using System;
12 using System.Net;
13 using System.Security;
14 using System.Security.Policy;
15 using System.Security.Permissions;
16
17 namespace System.Xml
18 {
19         public class XmlSecureResolver : XmlResolver
20         {
21
22 #region Static Members
23
24                 public static Evidence CreateEvidenceForUrl (string securityUrl)
25                 {
26                         Evidence e = new Evidence ();
27                         Url url = null;
28                         Zone zone = null;
29                         Site site = null;
30
31                         try {
32                                 url = new Url (securityUrl);
33                         } catch (ArgumentException) {
34                         }
35
36                         try {
37                                 zone = Zone.CreateFromUrl (securityUrl);
38                         } catch (ArgumentException) {
39                         }
40
41                         try {
42                                 site = Site.CreateFromUrl (securityUrl);
43                         } catch (ArgumentException) {
44                         }
45
46                         if (url != null)
47                                 e.AddHost (url);
48                         if (zone != null)
49                                 e.AddHost (zone);
50                         if (site != null)
51                                 e.AddHost (site);
52
53                         return e;
54                 }
55 #endregion
56
57                 XmlResolver resolver;
58                 PermissionSet permissionSet;
59 //              Evidence evidence;
60
61 #region .ctor and Finalizer
62
63                 public XmlSecureResolver (
64                         XmlResolver resolver, Evidence evidence)
65                 {
66                         this.resolver = resolver;
67 //                      this.evidence = evidence;
68                         this.permissionSet = SecurityManager.ResolvePolicy (evidence);
69                 }
70
71                 public XmlSecureResolver (
72                         XmlResolver resolver, PermissionSet permissionSet)
73                 {
74                         this.resolver = resolver;
75                         this.permissionSet = permissionSet;
76                 }
77
78                 public XmlSecureResolver (
79                         XmlResolver resolver, string securityUrl)
80                         : this (resolver, CreateEvidenceForUrl (securityUrl))
81                 {
82                 }
83 #endregion
84
85 #region Property
86
87                 public override ICredentials Credentials {
88                         set { resolver.Credentials = value; }
89                 }
90
91 #endregion
92
93 #region Methods
94
95                 public override object GetEntity (
96                         Uri absoluteUri, string role, Type ofObjectToReturn)
97                 {
98                         permissionSet.PermitOnly ();
99                         return resolver.GetEntity (absoluteUri, role, ofObjectToReturn);
100                 }
101
102                 public override Uri ResolveUri (Uri baseUri, string relativeUri)
103                 {
104                         return resolver.ResolveUri (baseUri, relativeUri);
105                 }
106 #endregion
107
108         }
109 }
110 #endif