Beispiel #1
0
 protected override void OnWriteStartEnvelope(XmlDictionaryWriter writer)
 {
     writer.WriteStartDocument();
     writer.WriteStartElement("s", "Envelope", "http://schemas.xmlsoap.org/soap/envelope/");
     writer.WriteAttributeString("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
     writer.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
 }
Beispiel #2
0
        /// <summary>
        /// Called when the header content is serialized using the specified XML writer.
        /// </summary>
        /// <param name="writer">An <see cref="T:System.Xml.XmlDictionaryWriter" />.</param>
        /// <param name="messageVersion">Contains information related to the version of SOAP associated with a message and its exchange.</param>
        /// <exception cref="System.ArgumentNullException"></exception>
        protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }

            //TimeStamp Header
            writer.WriteStartElement(WSUtilityPrefix, TimeStamp, WSUtilityNamespace);
            writer.WriteAttributeString(WSUtilityPrefix, IdAttributeName, WSUtilityNamespace, "Timestamp-" + this.GUID.ToString());
            writer.WriteElementString(CreatedElementName, WSUtilityNamespace, Created);
            writer.WriteElementString(ExpiresElementName, WSUtilityNamespace, Expires);
            writer.WriteEndElement();

            //UserNameToken Header
            writer.WriteStartElement(UsernameTokenPrefix, UsernameTokenName, UsernameTokenNamespace);
            writer.WriteAttributeString(WSUtilityPrefix, IdAttributeName, WSUtilityNamespace, "SecurityToken-" + this.GUID.ToString());
            writer.WriteElementString(UsernameElementName, UsernameTokenNamespace, this.UserName);
            writer.WriteStartElement(UsernameTokenPrefix, PasswordElementName, UsernameTokenNamespace);
            writer.WriteAttributeString(TypeAttributeName, PasswordDigestType);
            writer.WriteValue(PasswordDigest);
            writer.WriteEndElement();
            writer.WriteElementString(NonceElementName, UsernameTokenNamespace, Nonce);
            writer.WriteElementString(CreatedElementName, WSUtilityNamespace, Created);
            writer.WriteEndElement();
        }
Beispiel #3
0
        public virtual void WriteXml(XmlDictionaryWriter writer,
                                     SamlSerializer samlSerializer,
                                     SecurityTokenSerializer keyInfoSerializer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (samlSerializer == null)
            {
                throw new ArgumentNullException("samlSerializer");
            }

            if (Name == null || Name.Length == 0)
            {
                throw new SecurityTokenException("non-zero length string must be set to Name of SAML Subject before being written.");
            }

            writer.WriteStartElement("saml", "Subject", SamlConstants.Namespace);
            writer.WriteStartElement("saml", "NameIdentifier", SamlConstants.Namespace);
            writer.WriteAttributeString("Format", NameFormat);
            writer.WriteAttributeString("NameQualifier", NameQualifier);
            writer.WriteString(Name);
            writer.WriteEndElement();
            writer.WriteEndElement();
        }
Beispiel #4
0
            public void WriteJson(XmlDictionaryWriter writer)
            {
                writer.WriteStartElement(MetadataStrings.TypeString);
                writer.WriteAttributeString("type", "string");
                writer.WriteString(String.Format("{0}{1}{2}", this.TypeName, MetadataStrings.NamespaceMarker, this.TypeNamespace));
                writer.WriteEndElement();

                writer.WriteStartElement(MetadataStrings.KeyString);
                writer.WriteAttributeString("type", "array");
                foreach (string keyitem in this.Key)
                {
                    writer.WriteStartElement("item");
                    writer.WriteAttributeString("type", "string");
                    writer.WriteValue(keyitem);
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();

                writer.WriteStartElement(MetadataStrings.FieldsString);
                writer.WriteAttributeString("type", "object");
                foreach (TypePropertyMetadata field in this.Properties)
                {
                    field.WriteJson(writer);
                }
                writer.WriteEndElement();

                this.WriteValidationRulesMetadata(writer);
            }
Beispiel #5
0
            private void WriteValidationRulesMetadata(XmlDictionaryWriter writer)
            {
                // The rules section is optional. Unless we encounter validation rules, we won't write it.
                bool ruleSectionStarted = false;

                foreach (TypePropertyMetadata field in this.Properties)
                {
                    if (field.ValidationRules.Any())
                    {
                        if (!ruleSectionStarted)
                        {
                            ruleSectionStarted = true;
                            writer.WriteStartElement(MetadataStrings.RulesString);
                            writer.WriteAttributeString("type", "object");
                        }
                        writer.WriteStartElement(field.Name);
                        writer.WriteAttributeString("type", "object");
                        foreach (TypePropertyValidationRuleMetadata rule in field.ValidationRules)
                        {
                            rule.WriteJson(writer);
                        }
                        writer.WriteEndElement();
                    }
                }

                //Close the rules section if it was opened, and add error message if any.
                if (ruleSectionStarted)
                {
                    writer.WriteEndElement();
                    this.WriteValidationErrorMessagesMetadata(writer);
                }
            }
Beispiel #6
0
 private void WriteReason(XmlDictionaryWriter writer,
                          EnvelopeVersion version)
 {
     if (version == EnvelopeVersion.Soap11)
     {
         foreach (FaultReasonText t in Reason.Translations)
         {
             writer.WriteStartElement("", "faultstring", String.Empty);
             if (t.XmlLang != null)
             {
                 writer.WriteAttributeString("xml", "lang", null, t.XmlLang);
             }
             writer.WriteString(t.Text);
             writer.WriteEndElement();
         }
     }
     else                 // Soap12
     {
         writer.WriteStartElement("Reason", version.Namespace);
         foreach (FaultReasonText t in Reason.Translations)
         {
             writer.WriteStartElement("Text", version.Namespace);
             if (t.XmlLang != null)
             {
                 writer.WriteAttributeString("xml", "lang", null, t.XmlLang);
             }
             writer.WriteString(t.Text);
             writer.WriteEndElement();
         }
         writer.WriteEndElement();
     }
 }
Beispiel #7
0
            public override void WriteContent(XmlDictionaryWriter writer, SecurityKeyIdentifierClause clause)
            {
                writer.WriteStartElement(CoreWCF.XD.SecurityJan2004Dictionary.Prefix.Value, CoreWCF.XD.SecurityJan2004Dictionary.KeyIdentifier, CoreWCF.XD.SecurityJan2004Dictionary.Namespace);
                writer.WriteAttributeString(CoreWCF.XD.SecurityJan2004Dictionary.ValueType, null, ValueTypeUri);
                if (EmitBspRequiredAttributes)
                {
                    // Emit the encodingType attribute.
                    writer.WriteAttributeString(CoreWCF.XD.SecurityJan2004Dictionary.EncodingType, null, DefaultEncodingType);
                }
                string encoding = DefaultEncodingType;
                BinaryKeyIdentifierClause binaryClause = clause as BinaryKeyIdentifierClause;

                byte[] keyIdentifier = binaryClause.GetBuffer();
                if (encoding == EncodingTypeValueBase64Binary)
                {
                    writer.WriteBase64(keyIdentifier, 0, keyIdentifier.Length);
                }
                else if (encoding == EncodingTypeValueHexBinary)
                {
                    writer.WriteBinHex(keyIdentifier, 0, keyIdentifier.Length);
                }
                else if (encoding == EncodingTypeValueText)
                {
                    writer.WriteString(new UTF8Encoding().GetString(keyIdentifier, 0, keyIdentifier.Length));
                }
                writer.WriteEndElement();
            }
Beispiel #8
0
        private void WriteHeader(XmlDictionaryWriter writer)
        {
            var nonce = new byte[64];

            RandomNumberGenerator.Create().GetBytes(nonce);
            //            string created = DateTime.Now.ToString("yyyy-MM-ddThh:mm:ssZ");
            string created = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ");

            writer.WriteStartElement("wsse", "UsernameToken", null);
            writer.WriteAttributeString("wsu:Id", "UsernameToken-1");
            writer.WriteStartElement("wsse", "Username", null);
            writer.WriteString(SystemUser);
            writer.WriteEndElement();//End Username
            writer.WriteStartElement("wsse", "Password", null);
            writer.WriteAttributeString("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest");
            writer.WriteString(ComputePasswordDigest(SystemPassword, nonce, created));
            writer.WriteEndElement();//End Password
            writer.WriteStartElement("wsse", "Nonce", null);
            writer.WriteAttributeString("EncodingType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
            writer.WriteBase64(nonce, 0, nonce.Length);
            writer.WriteEndElement();//End Nonce
            writer.WriteStartElement("wsu", "Created", null);
            writer.WriteString(created);
            writer.WriteEndElement(); //End Created
            writer.WriteEndElement(); //End UsernameToken
            writer.Flush();
            var test = writer.ToString();
        }
Beispiel #9
0
        public virtual void WriteXml(
            XmlDictionaryWriter writer,
            SamlSerializer samlSerializer,
            SecurityTokenSerializer keyInfoSerializer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (samlSerializer == null)
            {
                throw new ArgumentNullException("samlSerializer");
            }

            if (AuthorityKind == null)
            {
                throw new SecurityTokenException("AuthorityKind must be set to SAML AuthorityBinding before being written.");
            }
            if (Binding == null)
            {
                throw new SecurityTokenException("non-zero length Binding must be set to SAML AuthorityBinding before being written.");
            }
            if (Location == null)
            {
                throw new SecurityTokenException("non-zero length Location must be set to SAML AuthorityBinding before being written.");
            }

            writer.WriteStartElement("saml", "AuthorityBinding", SamlConstants.Namespace);
            writer.WriteXmlnsAttribute(String.Empty, AuthorityKind.Namespace);
            writer.WriteAttributeString("AuthorityKind", AuthorityKind.Name);
            writer.WriteAttributeString("Location", Location);
            writer.WriteAttributeString("Binding", Binding);
            writer.WriteEndElement();
        }
Beispiel #10
0
        static void SerializePrimaryIdentity(IIdentity identity, SctClaimDictionary dictionary, XmlDictionaryWriter writer, XmlObjectSerializer serializer)
        {
            if (identity != null && identity != SecurityUtils.AnonymousIdentity)
            {
                writer.WriteStartElement(dictionary.PrimaryIdentity, dictionary.EmptyString);
                if (identity is WindowsIdentity)
                {
                    WindowsIdentity wid = (WindowsIdentity)identity;
                    writer.WriteStartElement(dictionary.WindowsSidIdentity, dictionary.EmptyString);
                    WriteSidAttribute(wid.User, dictionary, writer);

                    // This is to work around WOW64 bug Windows OS 1491447
                    string authenticationType = null;
                    using (WindowsIdentity self = WindowsIdentity.GetCurrent())
                    {
                        // is owner or admin?  AuthenticationType could throw un-authorized exception
                        if ((self.User == wid.Owner) ||
                            (wid.Owner != null && self.Groups.Contains(wid.Owner)) ||
                            (wid.Owner != SecurityUtils.AdministratorsSid && self.Groups.Contains(SecurityUtils.AdministratorsSid)))
                        {
                            authenticationType = wid.AuthenticationType;
                        }
                    }
                    if (!String.IsNullOrEmpty(authenticationType))
                    {
                        writer.WriteAttributeString(dictionary.AuthenticationType, dictionary.EmptyString, authenticationType);
                    }
                    writer.WriteString(wid.Name);
                    writer.WriteEndElement();
                }
                else if (identity is WindowsSidIdentity)
                {
                    WindowsSidIdentity wsid = (WindowsSidIdentity)identity;
                    writer.WriteStartElement(dictionary.WindowsSidIdentity, dictionary.EmptyString);
                    WriteSidAttribute(wsid.SecurityIdentifier, dictionary, writer);
                    if (!String.IsNullOrEmpty(wsid.AuthenticationType))
                    {
                        writer.WriteAttributeString(dictionary.AuthenticationType, dictionary.EmptyString, wsid.AuthenticationType);
                    }
                    writer.WriteString(wsid.Name);
                    writer.WriteEndElement();
                }
                else if (identity is GenericIdentity)
                {
                    GenericIdentity genericIdentity = (GenericIdentity)identity;
                    writer.WriteStartElement(dictionary.GenericIdentity, dictionary.EmptyString);
                    if (!String.IsNullOrEmpty(genericIdentity.AuthenticationType))
                    {
                        writer.WriteAttributeString(dictionary.AuthenticationType, dictionary.EmptyString, genericIdentity.AuthenticationType);
                    }
                    writer.WriteString(genericIdentity.Name);
                    writer.WriteEndElement();
                }
                else
                {
                    serializer.WriteObject(writer, identity);
                }
                writer.WriteEndElement();
            }
        }
        private void WriteHeader(XmlDictionaryWriter writer)
        {
            writer.WriteStartElement("wsu", "Timestamp", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
            writer.WriteAttributeString("wsu", "id", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "Timestamp-6557466");

            writer.WriteStartElement("wsu", "Created", XmlConvert.ToString(DateTime.Now, "yyyy-MM-ddTHH:mm:sszzzzzz"));
            writer.WriteEndElement();   //End Created

            writer.WriteStartElement("wsu", "Expires", XmlConvert.ToString(DateTime.Now.AddDays(1), "yyyy-MM-ddTHH:mm:sszzzzzz"));
            writer.WriteEndElement();   //End Expires

            writer.WriteEndElement();   //End Timestamp

            writer.WriteStartElement("wsse", "UsernameToken", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
            writer.WriteXmlnsAttribute("wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");

            writer.WriteStartElement("wsse", "Username", null);
            writer.WriteString(SystemUser);
            writer.WriteEndElement();//End Username

            writer.WriteStartElement("wsse", "Password", null);
            writer.WriteAttributeString("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
            writer.WriteString(SystemPassword);
            writer.WriteEndElement(); //End Password

            writer.WriteEndElement(); //End UsernameToken
            writer.Flush();
        }
Beispiel #12
0
        protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
        {
            // Create the Nonce
            byte[] nonce = GenerateNonce();

            // Create the Created Date
            string created = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffZ");

            // Create the WSSE Security Header, starting with the Username Element
            writer.WriteStartElement("wsse", "UsernameToken", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
            writer.WriteXmlnsAttribute("wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
            writer.WriteStartElement("wsse", "Username", null);
            writer.WriteString(Username);
            writer.WriteEndElement();

            // Add the Password Element
            writer.WriteStartElement("wsse", "Password", null);
            writer.WriteAttributeString("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest");
            writer.WriteString(GeneratePasswordDigest(nonce, created, Password));
            writer.WriteEndElement();

            // Add the Nonce Element
            writer.WriteStartElement("wsse", "Nonce", null);
            writer.WriteAttributeString("EncodingType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
            writer.WriteBase64(nonce, 0, nonce.Length);
            writer.WriteEndElement();

            // Lastly, add the Created Element
            writer.WriteStartElement("wsu", "Created", null);
            writer.WriteString(created);
            writer.WriteEndElement();
            writer.WriteEndElement();
            writer.Flush();
        }
        protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
        {
            writer.WriteStartElement("wsse", "UsernameToken", Namespace);
            writer.WriteAttributeString("Id", "UsernameToken-10");
            writer.WriteAttributeString("wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");

            writer.WriteStartElement("wsse", "Username", Namespace);
            writer.WriteValue(_username);
            writer.WriteEndElement();

            writer.WriteStartElement("wsse", "Password", Namespace);
            writer.WriteAttributeString("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
            writer.WriteValue(_password);
            writer.WriteEndElement();

            writer.WriteStartElement("wsse", "Nonce", Namespace);
            writer.WriteAttributeString("EncodingType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
            writer.WriteValue(_nonce);
            writer.WriteEndElement();

            writer.WriteStartElement("wsse", "Created", Namespace);
            writer.WriteValue(_createdDate.ToString("YYYY-MM-DDThh:mm:ss"));
            writer.WriteEndElement();

            writer.WriteEndElement();
        }
Beispiel #14
0
            public override void WriteTokenCore(XmlDictionaryWriter writer, SecurityToken token)
            {
                string id;

                byte[] rawData;

                WriteBinaryCore(token, out id, out rawData);

                if (rawData == null)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(rawData));
                }

                writer.WriteStartElement(XD.SecurityJan2004Dictionary.Prefix.Value, ElementName, XD.SecurityJan2004Dictionary.Namespace);
                if (id != null)
                {
                    writer.WriteAttributeString(XD.UtilityDictionary.Prefix.Value, XD.UtilityDictionary.IdAttribute, XD.UtilityDictionary.Namespace, id);
                }
                if (_valueTypeUris != null)
                {
                    writer.WriteAttributeString(ValueTypeAttribute, null, _valueTypeUris[0]);
                }
                if (_tokenSerializer.EmitBspRequiredAttributes)
                {
                    writer.WriteAttributeString(EncodingTypeAttribute, null, EncodingTypeValueBase64Binary);
                }
                writer.WriteBase64(rawData, 0, rawData.Length);
                writer.WriteEndElement(); // BinarySecurityToken
            }
Beispiel #15
0
            protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
            {
                XmlDictionaryReader reader = this.originalMessage.GetReaderAtBodyContents();

                // Write root StartElement
                writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
                writer.WriteAttributes(reader, true);
                reader.ReadStartElement();

                // Write QueryResult StartElement
                writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
                writer.WriteAttributes(reader, true);

                // Write QueryResult content
                string nodeName = reader.LocalName;

                reader.Read();

                while (reader.NodeType != XmlNodeType.EndElement || reader.Name != nodeName)
                {
                    XmlReader subtree = reader.ReadSubtree();
                    writer.WriteNode(subtree, false);
                    reader.ReadEndElement();
                }

                // Insert metadata start
                writer.WriteStartElement("Metadata");
                writer.WriteAttributeString("type", "array");
                // This two foreach loops are to ensure we write the return entity of the query first, then all the rest.
                // This is a requirement of the RIA/JS client side implementation. If modifying this, client side needs update too.
                foreach (ServiceMetadataGenerator.TypeMetadata map in ServiceMetadataGenerator.EntitiesMetadata)
                {
                    if (map.Name == this.entityTypeName)
                    {
                        writer.WriteStartElement("item");
                        writer.WriteAttributeString("type", "object");
                        map.WriteJson(writer);
                        writer.WriteEndElement();
                        break;
                    }
                }
                foreach (ServiceMetadataGenerator.TypeMetadata map in ServiceMetadataGenerator.EntitiesMetadata)
                {
                    if (map.Name != this.entityTypeName)
                    {
                        writer.WriteStartElement("item");
                        writer.WriteAttributeString("type", "object");
                        map.WriteJson(writer);
                        writer.WriteEndElement();
                    }
                }
                writer.WriteEndElement();
                // Insert metadata end

                // Close QueryResult
                writer.WriteEndElement();
                // Close root
                writer.WriteEndElement();
            }
Beispiel #16
0
 private void WriteSerializationElement(XmlDictionaryWriter writer, string name, string type, bool nillable)
 {
     writer.WriteStartElement("xs:element");
     writer.WriteAttributeString("name", name);
     writer.WriteAttributeString("nillable", nillable ? "true" : "false");
     writer.WriteAttributeString("type", type);
     writer.WriteEndElement();
 }
        private void WriteTo11(XmlDictionaryWriter writer)
        {
            string name;
            string str2;

            writer.WriteStartElement(XD.MessageDictionary.Fault, XD.Message11Dictionary.Namespace);
            writer.WriteStartElement(XD.Message11Dictionary.FaultCode, XD.Message11Dictionary.FaultNamespace);
            FaultCode subCode = this.Code;

            if (subCode.SubCode != null)
            {
                subCode = subCode.SubCode;
            }
            if (subCode.IsSenderFault)
            {
                name = "Client";
            }
            else if (subCode.IsReceiverFault)
            {
                name = "Server";
            }
            else
            {
                name = subCode.Name;
            }
            if (subCode.IsPredefinedFault)
            {
                str2 = "http://schemas.xmlsoap.org/soap/envelope/";
            }
            else
            {
                str2 = subCode.Namespace;
            }
            if (writer.LookupPrefix(str2) == null)
            {
                writer.WriteAttributeString("xmlns", "a", "http://www.w3.org/2000/xmlns/", str2);
            }
            writer.WriteQualifiedName(name, str2);
            writer.WriteEndElement();
            FaultReasonText text = this.Reason.Translations[0];

            writer.WriteStartElement(XD.Message11Dictionary.FaultString, XD.Message11Dictionary.FaultNamespace);
            if (text.XmlLang.Length > 0)
            {
                writer.WriteAttributeString("xml", "lang", "http://www.w3.org/XML/1998/namespace", text.XmlLang);
            }
            writer.WriteString(text.Text);
            writer.WriteEndElement();
            if (this.Actor.Length > 0)
            {
                writer.WriteElementString(XD.Message11Dictionary.FaultActor, XD.Message11Dictionary.FaultNamespace, this.Actor);
            }
            if (this.HasDetail)
            {
                this.OnWriteDetail(writer, EnvelopeVersion.Soap11);
            }
            writer.WriteEndElement();
        }
Beispiel #18
0
    private static void SimulateWriteFragment(XmlDictionaryWriter writer, bool useFragmentAPI, int nestedLevelsLeft)
    {
        if (nestedLevelsLeft <= 0)
        {
            return;
        }

        Random rndGen       = new Random(nestedLevelsLeft);
        int    signatureLen = rndGen.Next(100, 200);

        byte[] signature = new byte[signatureLen];
        rndGen.NextBytes(signature);

        MemoryStream fragmentStream = new MemoryStream();

        if (!useFragmentAPI) // simulating in the writer itself
        {
            writer.WriteStartElement("SignatureValue_" + nestedLevelsLeft);
            writer.WriteBase64(signature, 0, signatureLen);
            writer.WriteEndElement();
        }

        if (useFragmentAPI)
        {
            FragmentHelper.Start(writer, fragmentStream);
        }

        writer.WriteStartElement("Fragment" + nestedLevelsLeft);
        for (int i = 0; i < 5; i++)
        {
            writer.WriteStartElement(string.Format("Element{0}_{1}", nestedLevelsLeft, i));
            writer.WriteAttributeString("attr1", "value1");
            writer.WriteAttributeString("attr2", "value2");
        }
        writer.WriteString("This is a text with unicode characters: <>&;\u0301\u2234");
        for (int i = 0; i < 5; i++)
        {
            writer.WriteEndElement();
        }

        // write other nested fragments...
        SimulateWriteFragment(writer, useFragmentAPI, nestedLevelsLeft - 1);

        writer.WriteEndElement(); // Fragment{nestedLevelsLeft}
        writer.Flush();

        if (useFragmentAPI)
        {
            FragmentHelper.End(writer);
            writer.WriteStartElement("SignatureValue_" + nestedLevelsLeft);
            writer.WriteBase64(signature, 0, signatureLen);
            writer.WriteEndElement();

            FragmentHelper.Write(writer, fragmentStream.GetBuffer(), 0, (int)fragmentStream.Length);

            writer.Flush();
        }
    }
Beispiel #19
0
 protected override void OnWriteStartEnvelope(XmlDictionaryWriter writer)
 {
     writer.WriteStartElement("s", "Envelope", "http://schemas.xmlsoap.org/soap/envelope/");
     writer.WriteAttributeString("xmlns", "v2", null, "http://www.royalmailgroup.com/api/ship/V2");
     writer.WriteAttributeString("xmlns", "v1", null, "http://www.royalmailgroup.com/integration/core/V1");
     writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
     writer.WriteAttributeString("xmlns", "xsd", null, "http://www.w3.org/2001/XMLSchema");
     writer.WriteAttributeString("xmlns", "xsd", null, "http://www.w3.org/2001/XMLSchema");
 }
Beispiel #20
0
 /// <summary>
 /// Writes header
 /// </summary>
 /// <param name="writer"></param>
 /// <param name="messageVersion"></param>
 protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
 {
     writer.WriteAttributeString("IsReferenceParameter", "http://www.w3.org/2005/08/addressing", "true");
     foreach (XmlAttribute attr in _element.Attributes)
     {
         writer.WriteAttributeString(attr.LocalName, attr.NamespaceURI, attr.Value);
     }
     writer.WriteValue(_element.InnerXml);
 }
 protected override void OnWriteStartEnvelope(XmlDictionaryWriter writer)
 {
     writer.WriteStartElement("soapenv", "Envelope", "http://schemas.xmlsoap.org/soap/envelope/");
     writer.WriteAttributeString("xmlns", "oas", null, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
     writer.WriteAttributeString("xmlns", "v2", null, "http://www.royalmailgroup.com/api/ship/V2");
     writer.WriteAttributeString("xmlns", "v1", null, "http://www.royalmailgroup.com/integration/core/V1");
     writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
     writer.WriteAttributeString("xmlns", "xsd", null, "http://www.w3.org/2001/XMLSchema");
 }
Beispiel #22
0
            public override void WriteContent(XmlDictionaryWriter writer, SecurityKeyIdentifierClause clause)
            {
                RelAssertionDirectKeyIdentifierClause relClause = clause as RelAssertionDirectKeyIdentifierClause;

                writer.WriteStartElement(XD.SecurityJan2004Dictionary.Prefix.Value, XD.SecurityJan2004Dictionary.Reference, XD.SecurityJan2004Dictionary.Namespace);
                writer.WriteAttributeString(XD.SecurityJan2004Dictionary.ValueType, null, SecurityJan2004Strings.RelAssertionValueType);
                writer.WriteAttributeString(XD.SecurityJan2004Dictionary.URI, null, relClause.AssertionId);
                writer.WriteEndElement();
            }
Beispiel #23
0
 protected override void OnWriteStartEnvelope(XmlDictionaryWriter writer)
 {
     writer.WriteStartElement("wsdl", "definitions", "http://schemas.xmlsoap.org/wsdl/");
     writer.WriteAttributeString("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
     writer.WriteAttributeString("xmlns:soap", "http://schemas.xmlsoap.org/wsdl/soap/");
     writer.WriteAttributeString("xmlns:tns", _service.Contracts.First().Namespace);
     writer.WriteAttributeString("targetNamespace", _service.Contracts.First().Namespace);
     writer.WriteAttributeString("name", _service.ServiceType.Name);
 }
Beispiel #24
0
        public virtual void WriteXml(XmlDictionaryWriter writer,
                                     SamlSerializer samlSerializer,
                                     SecurityTokenSerializer keyInfoTokenSerializer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }

            if (Issuer == null || Issuer.Length == 0)
            {
                throw new SecurityTokenException("Issuer must not be null or empty.");
            }
            if (Statements.Count == 0)
            {
                throw new SecurityTokenException("At least one assertion statement is required.");
            }

            if (samlSerializer == null)
            {
                throw new ArgumentNullException("samlSerializer");
            }
            CultureInfo invariant = CultureInfo.InvariantCulture;

            writer.WriteStartElement("saml", "Assertion", SamlConstants.Namespace);
            writer.WriteAttributeString("MajorVersion", MajorVersion.ToString(invariant));
            writer.WriteAttributeString("MinorVersion", MinorVersion.ToString(invariant));
            writer.WriteAttributeString("AssertionID", AssertionId);
            writer.WriteAttributeString("Issuer", Issuer);
            writer.WriteAttributeString("IssueInstant", IssueInstant.ToString(SamlConstants.DateFormat, invariant));

            try
            {
                if (Conditions != null)
                {
                    Conditions.WriteXml(writer, samlSerializer, keyInfoTokenSerializer);
                }
                if (Advice != null)
                {
                    Advice.WriteXml(writer, samlSerializer, keyInfoTokenSerializer);
                }
                foreach (SamlStatement statement in Statements)
                {
                    statement.WriteXml(writer, samlSerializer, keyInfoTokenSerializer);
                }
            }
            catch (NotImplementedException)
            {
                throw;
            }
            catch (Exception ex) // bad catch, eh?
            {
                throw new InvalidOperationException("There is an error on writing assertion statements.", ex);
            }
            writer.WriteEndElement();
        }
Beispiel #25
0
 protected override void WriteBodyAttributes(XmlDictionaryWriter writer, MessageVersion version)
 {
     if (isEncoded && version.Envelope == EnvelopeVersion.Soap11)
     {
         string encoding = GetEncoding(version.Envelope);
         writer.WriteAttributeString("encodingStyle", version.Envelope.Namespace, encoding);
     }
     writer.WriteAttributeString("xmlns", "xsi", null, XmlSchema.InstanceNamespace);
     writer.WriteAttributeString("xmlns", "xsd", null, XmlSchema.Namespace);
 }
Beispiel #26
0
 protected override void WriteBodyAttributes(XmlDictionaryWriter writer, MessageVersion version)
 {
     if (this.isEncoded && (version.Envelope == EnvelopeVersion.Soap11))
     {
         string encoding = GetEncoding(version.Envelope);
         writer.WriteAttributeString("encodingStyle", version.Envelope.Namespace, encoding);
     }
     writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
     writer.WriteAttributeString("xmlns", "xsd", null, "http://www.w3.org/2001/XMLSchema");
 }
Beispiel #27
0
        private void AddMessage(XmlDictionaryWriter writer)
        {
            foreach (var operation in _service.Operations)
            {
                // input
                writer.WriteStartElement("wsdl:message");
                writer.WriteAttributeString("name", $"{BindingType}_{operation.Name}_InputMessage");
                writer.WriteStartElement("wsdl:part");
                writer.WriteAttributeString("name", "parameters");
                writer.WriteAttributeString("element", "tns:" + operation.Name);
                writer.WriteEndElement();                 // wsdl:part
                writer.WriteEndElement();                 // wsdl:message
                // output
                writer.WriteStartElement("wsdl:message");
                writer.WriteAttributeString("name", $"{BindingType}_{operation.Name}_OutputMessage");
                writer.WriteStartElement("wsdl:part");
                writer.WriteAttributeString("name", "parameters");
                writer.WriteAttributeString("element", "tns:" + operation.Name + "Response");
                writer.WriteEndElement();                 // wsdl:part
                writer.WriteEndElement();                 // wsdl:message

                foreach (var fault in operation.Faults)
                {
                    writer.WriteStartElement("wsdl:message");
                    writer.WriteAttributeString("name", $"{BindingType}_{operation.Name}_{fault.Name}_FaultMessage");
                    writer.WriteStartElement("wsdl:part");
                    writer.WriteAttributeString("name", "detail");
                    writer.WriteAttributeString("element", $"tns:{fault.ElementName}");
                    writer.WriteEndElement();
                    writer.WriteEndElement();
                }
            }
        }
 private static void SerializePrimaryIdentity(IIdentity identity, SctClaimDictionary dictionary, XmlDictionaryWriter writer, XmlObjectSerializer serializer)
 {
     if ((identity != null) && (identity != System.ServiceModel.Security.SecurityUtils.AnonymousIdentity))
     {
         writer.WriteStartElement(dictionary.PrimaryIdentity, dictionary.EmptyString);
         if (identity is WindowsIdentity)
         {
             WindowsIdentity identity2 = (WindowsIdentity)identity;
             writer.WriteStartElement(dictionary.WindowsSidIdentity, dictionary.EmptyString);
             WriteSidAttribute(identity2.User, dictionary, writer);
             string authenticationType = null;
             using (WindowsIdentity identity3 = WindowsIdentity.GetCurrent())
             {
                 if (((identity3.User == identity2.Owner) || ((identity2.Owner != null) && identity3.Groups.Contains(identity2.Owner))) || ((identity2.Owner != System.ServiceModel.Security.SecurityUtils.AdministratorsSid) && identity3.Groups.Contains(System.ServiceModel.Security.SecurityUtils.AdministratorsSid)))
                 {
                     authenticationType = identity2.AuthenticationType;
                 }
             }
             if (!string.IsNullOrEmpty(authenticationType))
             {
                 writer.WriteAttributeString(dictionary.AuthenticationType, dictionary.EmptyString, authenticationType);
             }
             writer.WriteString(identity2.Name);
             writer.WriteEndElement();
         }
         else if (identity is WindowsSidIdentity)
         {
             WindowsSidIdentity identity4 = (WindowsSidIdentity)identity;
             writer.WriteStartElement(dictionary.WindowsSidIdentity, dictionary.EmptyString);
             WriteSidAttribute(identity4.SecurityIdentifier, dictionary, writer);
             if (!string.IsNullOrEmpty(identity4.AuthenticationType))
             {
                 writer.WriteAttributeString(dictionary.AuthenticationType, dictionary.EmptyString, identity4.AuthenticationType);
             }
             writer.WriteString(identity4.Name);
             writer.WriteEndElement();
         }
         else if (identity is GenericIdentity)
         {
             GenericIdentity identity5 = (GenericIdentity)identity;
             writer.WriteStartElement(dictionary.GenericIdentity, dictionary.EmptyString);
             if (!string.IsNullOrEmpty(identity5.AuthenticationType))
             {
                 writer.WriteAttributeString(dictionary.AuthenticationType, dictionary.EmptyString, identity5.AuthenticationType);
             }
             writer.WriteString(identity5.Name);
             writer.WriteEndElement();
         }
         else
         {
             serializer.WriteObject(writer, identity);
         }
         writer.WriteEndElement();
     }
 }
Beispiel #29
0
 protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
 {
     writer.WriteAttributeString("xmlns", "wsse", null, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
     writer.WriteStartElement("wsse:UsernameToken");
     writer.WriteElementString("wsse:Username", m_sUserName);
     writer.WriteStartElement("wsse:Password");
     writer.WriteAttributeString("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
     writer.WriteValue(m_sPassword);
     writer.WriteEndElement(); //wsse:Password
     writer.WriteEndElement(); //wsse:UsernameToken
 }
Beispiel #30
0
        protected String GeneratePolicy()
        {
            using (MemoryStream stream = new MemoryStream()) {
                XmlDictionaryWriter writer = JsonReaderWriterFactory.CreateJsonWriter(stream);

                writer.WriteStartElement("root");
                writer.WriteAttributeString("type", "object");

                // Expiration date
                writer.WriteStartElement("expiration");
                writer.WriteValue(DateTime.UtcNow.AddHours(3).ToString("yyyy-MM-ddTHH:00:00.000Z"));
                writer.WriteEndElement();

                // Conditions
                writer.WriteStartElement("conditions");
                writer.WriteAttributeString("type", "array");

                // ACL
                WriteCondition(writer, "acl", "public-read");

                // Bucket
                WriteCondition(writer, "bucket", _config["BucketName"]);

                // Cache-Control
                WriteCondition(writer, "Cache-Control", _config["CacheControl"]);

                // Content-Type condition
                WriteCondition(writer, "starts-with", "$Content-Type", String.Empty);

                // Key Condition
                WriteCondition(writer, "starts-with", "$key", VirtualPathUtility.AppendTrailingSlash(_config["Prefix"]));

                // success_action_redirect
                WriteCondition(writer, "success_action_redirect", SuccessRedirect);

                // x-amz-date
                WriteCondition(writer, "x-amz-date", Date);

                // x-amz-algorithm
                WriteCondition(writer, "x-amz-algorithm", "AWS4-HMAC-SHA256");

                // x-amz-credential
                WriteCondition(writer, "x-amz-credential", Credential);

                writer.WriteEndElement();
                writer.WriteEndElement();

                writer.Flush();

                // Return serialized JSON result
                return(Convert.ToBase64String(stream.ToArray()));
            }
        }
        protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
        {
            writer.WriteRaw(GetToken().OuterXml);

                writer.WriteStartElement("Timestamp");
                writer.WriteXmlnsAttribute("", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
                writer.WriteAttributeString("Id", "Timestamp-79");
                //Created
                writer.WriteStartElement("Created");
                writer.WriteString(this.token.ValidFrom.ToString("yyyy-MM-ddTHH:mm:ssZ"));
                writer.WriteEndElement();
                //Expires
                writer.WriteStartElement("Expires");
                writer.WriteString(this.token.ValidTo.ToString("yyyy-MM-ddTHH:mm:ssZ"));
                writer.WriteEndElement();
                writer.WriteEndElement();
        }