**** Merged from MCS ****
[mono-project.git] / mcs / class / Microsoft.Web.Services / Microsoft.Web.Services.Security / SecurityTokenReference.cs
blobf5032a84020034e2aa06c115ebbb8dcd25dfb4b2
1 //
2 // SecurityTokenReference.cs: Handles WS-Security SecurityTokenReference
3 //
4 // Author:
5 // Sebastien Pouliot (spouliot@motus.com)
6 //
7 // (C) 2002, 2003 Motus Technologies Inc. (http://www.motus.com)
8 //
10 using System;
11 using System.Security.Cryptography.Xml;
12 using System.Xml;
13 using Microsoft.Web.Services;
14 #if !WSE1
15 using Microsoft.Web.Services.Xml;
16 #endif
18 namespace Microsoft.Web.Services.Security {
20 public class SecurityTokenReference : KeyInfoClause, IXmlElement {
21 // TODO WSE2 public class SecurityTokenReference : SecurityTokenReferenceType
23 private KeyIdentifier kid;
24 private string reference;
26 public SecurityTokenReference () : base () {}
28 public SecurityTokenReference (XmlElement element) : base ()
30 LoadXml (element);
33 public KeyIdentifier KeyIdentifier {
34 get { return kid; }
35 set { kid = value; }
38 public string Reference {
39 get { return reference; }
40 set { reference = value; }
43 // note: old format used by S.S.C.Xml
44 public override XmlElement GetXml ()
46 return GetXml (new XmlDocument ());
49 public XmlElement GetXml (XmlDocument document)
51 if (document == null)
52 throw new ArgumentNullException ("document");
54 XmlElement str = document.CreateElement (WSSecurity.Prefix, WSSecurity.ElementNames.SecurityTokenReference, WSSecurity.NamespaceURI);
55 if (kid != null)
56 str.AppendChild (kid.GetXml (document));
57 if (reference != null) {
58 XmlAttribute uri = document.CreateAttribute (WSSecurity.AttributeNames.Uri);
59 uri.InnerText = "#" + reference;
60 XmlElement r = document.CreateElement (WSSecurity.Prefix, WSSecurity.ElementNames.Reference, WSSecurity.NamespaceURI);
61 r.Attributes.Append (uri);
62 str.AppendChild (r);
64 return str;
67 public override void LoadXml (XmlElement element)
69 if (element == null)
70 throw new ArgumentNullException ("element");
71 if ((element.LocalName != WSSecurity.ElementNames.SecurityTokenReference) || (element.NamespaceURI != WSSecurity.NamespaceURI))
72 throw new System.ArgumentException ("invalid LocalName or NamespaceURI");
74 XmlNodeList xnl = element.GetElementsByTagName (WSSecurity.ElementNames.KeyIdentifier, WSSecurity.NamespaceURI);
75 if ((xnl != null) && (xnl.Count == 1)) {
76 kid = new KeyIdentifier ((xnl [0] as XmlElement));
79 xnl = element.GetElementsByTagName (WSSecurity.ElementNames.Reference, WSSecurity.NamespaceURI);
80 if ((xnl != null) && (xnl.Count == 1)) {
81 XmlAttribute uri = xnl [0].Attributes [WSSecurity.AttributeNames.Uri];
82 if (uri != null) {
83 reference = uri.InnerText;
84 if (reference [0] == '#')
85 reference = reference.Substring (1);