示例#1
0
        /// <summary>SignedXml生成メソッド</summary>
        /// <param name="xmlDoc">XmlDocument</param>
        /// <param name="referenceId">署名対象ノードのID値(「#」は含まない)</param>
        /// <param name="preserveWhitespace">SignedXmlの空白・改行を保持する()・しない(false)</param>
        /// <returns>Signed XmlDocument</returns>
        public XmlDocument Create(XmlDocument xmlDoc, string referenceId, bool preserveWhitespace = false)
        {
            // - SignedXml
            SignedXml signedXml = new SignedXml(xmlDoc);

            signedXml.SigningKey = this._rsa;

            // Reference要素
            // - 署名対象ノードをポイント
            Reference reference = new Reference("#" + referenceId);

            // - Add Transform
            reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
            // - Add Transform
            reference.AddTransform(new XmlDsigExcC14NTransform());
            // - Add Reference
            signedXml.AddReference(reference);

            // 署名対象ノードのXML署名の生成
            // - 署名の計算
            signedXml.ComputeSignature();
            // - 署名対象ノードのXML署名を
            XmlNode signatureNode = xmlDoc.ImportNode(signedXml.GetXml(), true);

            // - 署名対象ノード直下に追加
            XmlLib.GetXmlNodeById(xmlDoc, referenceId).AppendChild(signatureNode);

            // Signed XmlDocumentを返す。
            return(xmlDoc);
        }
示例#2
0
        /// <summary>VerifyByXsd</summary>
        /// <param name="saml">string</param>
        /// <param name="schema">SAML2Enum.SamlSchema</param>
        /// <returns>bool</returns>
        /// <remarks>
        /// SAMLのXSDが作成できていないため書きかけ。
        /// - 現時点では、VerifyByXPath メソッドを使って XPath により検証しています。
        /// - XSD検証の方が明らかに良い場合は移行を検討します。
        /// </remarks>
        private static bool VerifyByXsd(string saml, SAML2Enum.SamlSchema schema)
        {
            string embeddedXsdFileName = "";
            string targetNamespace     = "";

            // どうも、OASISのXSDではダメで、
            // - https://docs.oasis-open.org/security/saml/v2.0/saml-schema-protocol-2.0.xsd
            // - https://docs.oasis-open.org/security/saml/v2.0/saml-schema-assertion-2.0.xsd
            // 個別にXSDを作成しないとダメっぽい。

            switch (schema)
            {
            case SAML2Enum.SamlSchema.Request:
                embeddedXsdFileName = "XXXX.xsd";     // RequestのSAML用のXSD
                targetNamespace     = "urn:oasis:names:tc:SAML:2.0:...";
                break;

            case SAML2Enum.SamlSchema.Response:
                embeddedXsdFileName = "XXXX.xsd";     // ResponseのSAML用のXSD
                targetNamespace     = "urn:oasis:names:tc:SAML:2.0:...";
                break;

                //case SAML2Enum.SamlSchema.Assertion:
                //    embeddedXsdFileName = "XXXX.xsd";
                //    targetNamespace = "urn:oasis:names:tc:SAML:2.0:...";
                //    break;
            }

            // 以下の関数は適切に動作するが、XSDに問題があるため動作しない。
            return(XmlLib.ValidateByEmbeddedXsd(
                       "OpenTouryo.Framework", saml, embeddedXsdFileName, targetNamespace));
        }
示例#3
0
        public virtual string GetXml()
        {
            bool   convertFlag = true;
            string xml         = "";

            xml = XmlLib.AddToXml(xml, "<detEntry>", 2);
            xml = XmlLib.AddToXml(xml, "<variants>", "</variants>", variants_, 3, convertFlag);
            xml = XmlLib.AddToXml(xml, "<interrogative/>", interrogative_, 3);
            xml = XmlLib.AddToXml(xml, "<demonstrative/>", demonstrative_, 3);
            xml = XmlLib.AddToXml(xml, "</detEntry>", 2);
            return(xml);
        }
示例#4
0
        /// <summary>Root</summary>
        public static void Root()
        {
            // Xmlロード
            string xml = EmbeddedResourceLoader.LoadXMLAsString(
                "OpenTouryo.Public", "Touryo.Infrastructure.Public.Xml.TestXml.xml");

            // Xsdによる検証
            if (XmlLib.ValidateByEmbeddedXsd(
                    xml, "OpenTouryo.Public", "Touryo.Infrastructure.Public.Xml.TestXsd.xsd", "urn:bookstore-schema"))
            {
                MyDebug.OutputDebugAndConsole("XmlLib", "is working properly.");
            }
            else
            {
                MyDebug.OutputDebugAndConsole("XmlLib", "is not working properly.");
            }
        }
示例#5
0
        /// <summary>GetNameIDInAssertion</summary>
        /// <param name="xmlDoc">XmlDocument</param>
        /// <param name="samlNsMgr">XmlNamespaceManager</param>
        /// <param name="format">out string</param>
        /// <param name="innerText">out string</param>
        /// <returns>NameID</returns>
        public static XmlNode GetNameIDInAssertion(
            XmlDocument xmlDoc, XmlNamespaceManager samlNsMgr,
            out string format, out string innerText)
        {
            format    = "";
            innerText = "";

            XmlNode nameID = xmlDoc.SelectSingleNode(
                SAML2Const.XPathNameIDInAssertion, samlNsMgr);

            if (nameID != null)
            {
                format    = XmlLib.GetAttributeFromXmlNode(nameID, "Format");
                innerText = nameID.InnerText;
            }

            return(nameID);
        }
示例#6
0
        /// <summary>SignedXml検証メソッド</summary>
        /// <param name="signedXmlString">SignedXml</param>
        /// <param name="referenceId">署名対象ノードのID値(「#」は含まない)</param>
        /// <param name="preserveWhitespace">SignedXmlの空白・改行を保持する()・しない(false)</param>
        /// <returns>署名の検証結果</returns>
        public bool Verify(string signedXmlString, string referenceId, bool preserveWhitespace = false)
        {
            // 初期処理
            // - XmlDocument
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.PreserveWhitespace = preserveWhitespace;
            xmlDoc.LoadXml(signedXmlString);

            // 子ノード のXML検証
            XmlNode targetNode = XmlLib.GetXmlNodeById(xmlDoc, referenceId);

            // 署名ノードの直下のSignatureを取り出して、signedXml.LoadXmlする。
            SignedXml signedXml = new SignedXml(targetNode.OwnerDocument);

            signedXml.LoadXml(targetNode["Signature"] as XmlElement);

            // XML検証
            return(signedXml.CheckSignature(this._rsa));
        }
示例#7
0
 /// <summary>GetConditionsNotOnOrAfterInAssertion</summary>
 /// <param name="xmlDoc">XmlDocument</param>
 /// <param name="samlNsMgr">XmlNamespaceManager</param>
 /// <returns>Conditions - NotOnOrAfter</returns>
 public static string GetConditionsNotOnOrAfterInAssertion(
     XmlDocument xmlDoc, XmlNamespaceManager samlNsMgr)
 {
     return(XmlLib.GetAttributeByXPath(
                xmlDoc, SAML2Const.XPathConditionsInAssertion, "NotOnOrAfter", samlNsMgr));
 }
示例#8
0
 /// <summary>GetSubjectConfirmationMethodInAssertion</summary>
 /// <param name="xmlDoc">XmlDocument</param>
 /// <param name="samlNsMgr">XmlNamespaceManager</param>
 /// <returns>SubjectConfirmation - Method</returns>
 public static string GetSubjectConfirmationMethodInAssertion(
     XmlDocument xmlDoc, XmlNamespaceManager samlNsMgr)
 {
     return(XmlLib.GetAttributeByXPath(
                xmlDoc, SAML2Const.XPathSubjectConfirmationInAssertion, "Method", samlNsMgr));
 }
示例#9
0
 /// <summary>GetStatusCodeInResponse</summary>
 /// <param name="xmlDoc">XmlDocument</param>
 /// <param name="samlNsMgr">XmlNamespaceManager</param>
 /// <returns>StatusCode</returns>
 public static string GetStatusCodeInResponse(
     XmlDocument xmlDoc, XmlNamespaceManager samlNsMgr)
 {
     return(XmlLib.GetAttributeByXPath(
                xmlDoc, SAML2Const.XPathStatusCodeInResponse, "Value", samlNsMgr));
 }
示例#10
0
 /// <summary>GetInResponseToInResponse</summary>
 /// <param name="xmlDoc">XmlDocument</param>
 /// <param name="samlNsMgr">XmlNamespaceManager</param>
 /// <returns>InResponseTo</returns>
 public static string GetInResponseToInResponse(
     XmlDocument xmlDoc, XmlNamespaceManager samlNsMgr)
 {
     return(XmlLib.GetAttributeFromXmlNode(
                xmlDoc.SelectSingleNode(SAML2Const.XPathResponse, samlNsMgr), "InResponseTo"));
 }
示例#11
0
 /// <summary>GetAssertionConsumerServiceURLInRequest</summary>
 /// <param name="xmlDoc">XmlDocument</param>
 /// <param name="samlNsMgr">XmlNamespaceManager</param>
 /// <returns>AssertionConsumerServiceURL</returns>
 public static string GetAssertionConsumerServiceURLInRequest(
     XmlDocument xmlDoc, XmlNamespaceManager samlNsMgr)
 {
     return(XmlLib.GetAttributeByXPath(
                xmlDoc, SAML2Const.XPathRequest, "AssertionConsumerServiceURL", samlNsMgr));
 }
示例#12
0
 /// <summary>GetNameIDPolicyFormatInRequest</summary>
 /// <param name="xmlDoc">XmlDocument</param>
 /// <param name="samlNsMgr">XmlNamespaceManager</param>
 /// <returns>NameIDPolicy - Format</returns>
 public static string GetNameIDPolicyFormatInRequest(
     XmlDocument xmlDoc, XmlNamespaceManager samlNsMgr)
 {
     return(XmlLib.GetAttributeByXPath(
                xmlDoc, SAML2Const.XPathNameIDPolicyInRequest, "Format", samlNsMgr));
 }
示例#13
0
 /// <summary>GetIdInAssertion</summary>
 /// <param name="xmlDoc">XmlDocument</param>
 /// <param name="samlNsMgr">XmlNamespaceManager</param>
 /// <returns>Id</returns>
 public static string GetIdInAssertion(
     XmlDocument xmlDoc, XmlNamespaceManager samlNsMgr)
 {
     return(XmlLib.GetAttributeByXPath(
                xmlDoc, @"/saml:Assertion", "ID", samlNsMgr));
 }
示例#14
0
        public static void getAllItems()
        {
            int             i          = 1;
            MySqlConnection connection = new MySqlConnection(globals.connectionString);
            MySqlDataReader reader     = null;

            try
            {
                string       dbCommand = "CREATE TABLE IF NOT EXISTS allItems (itemID INT PRIMARY KEY, itemName NVARCHAR(50), itemPrice NVARCHAR(50), itemBaseStrength INT(3));";
                MySqlCommand command   = new MySqlCommand(dbCommand, connection);
                connection.Open();
                command.ExecuteNonQuery();

                List <string> categories = new List <string>();
                command.CommandText = "SELECT categoryName FROM categories";
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    categories.Add(reader[0].ToString());
                }

                string html;

                command.CommandText = "REPLACE INTO allItems (itemID, itemName, itemPrice, itemBaseStrength) VALUES";
                int pageCount = Convert.ToInt32(XmlLib.getFromXml(globals.xmlFilePath, "int", "gameElementsNumber"));
                HtmlAgilityPack.HtmlDocument doc = null;
                while (i < pageCount)
                {
                    html = DwarRequest.getRequest("http://w1.dwar.ru/artifact_info.php?artikul_id=" + i, ref cookie);
                    doc  = new HtmlAgilityPack.HtmlDocument();
                    doc.LoadHtml(html);
                    HtmlNode itemPriceNode    = doc.DocumentNode.SelectSingleNode("//*[@title='Цена']");
                    HtmlNode itemStrengthNode = doc.DocumentNode.SelectSingleNode("//*[@title='Прочность предмета']");
                    if (isAddable(doc, categories, i, itemPriceNode, itemStrengthNode))
                    {
                        string nameItem = doc.DocumentNode.SelectNodes("//h1")[1].InnerText;
                        if (nameItem.Length < 51)
                        {
                            command.CommandText += "('" + i + "','" + MySqlHelper.EscapeString(nameItem) + "','" + getItemPrice(itemPriceNode) + "',";
                            if (itemStrengthNode != null)
                            {
                                command.CommandText += "'" + itemStrengthNode.InnerText.Remove(0, itemStrengthNode.InnerText.IndexOf('/') + 1) + "'";
                            }
                            else
                            {
                                command.CommandText += "NULL";
                            }
                            command.CommandText += "),";
                        }
                    }

                    i++;
                }
                reader.Close();
                command.CommandText = command.CommandText.TrimEnd(',') + ";";
                command.ExecuteNonQuery();
                MessageBox.Show("Предметы получены");
                globals.dwarLog.Trace("Предметы получены");
            }
            catch (Exception exception)
            {
                globals.dwarLog.Error(exception.ToString() + "i=" + i);
                MessageBox.Show(exception.Message);
            }
            finally
            {
                if (connection.State != System.Data.ConnectionState.Closed)
                {
                    connection.Close();
                }
                if (reader != null && reader.IsClosed == false)
                {
                    reader.Close();
                }
            }
        }
示例#15
0
 /// <summary>GetIdInRequest</summary>
 /// <param name="xmlDoc">XmlDocument</param>
 /// <param name="samlNsMgr">XmlNamespaceManager</param>
 /// <returns>Id</returns>
 public static string GetIdInRequest(
     XmlDocument xmlDoc, XmlNamespaceManager samlNsMgr)
 {
     return(XmlLib.GetAttributeByXPath(
                xmlDoc, @"/samlp:AuthnRequest", "ID", samlNsMgr));
 }
示例#16
0
 /// <summary>GetProtocolBindingInRequest</summary>
 /// <param name="xmlDoc">XmlDocument</param>
 /// <param name="samlNsMgr">XmlNamespaceManager</param>
 /// <returns>ProtocolBinding</returns>
 public static string GetProtocolBindingInRequest(
     XmlDocument xmlDoc, XmlNamespaceManager samlNsMgr)
 {
     return(XmlLib.GetAttributeByXPath(
                xmlDoc, SAML2Const.XPathRequest, "ProtocolBinding", samlNsMgr));
 }
        /// <summary>[埋め込まれたリソースXMLファイル]から文字列を読み込む。</summary>
        /// <param name="assemblyString">
        /// アセンブリ名("既定の名前空間"とは異なる)
        /// </param>
        /// <param name="loadfileName">[埋め込まれたリソースXMLファイル]の名前(名前空間付き)</param>
        /// <returns>[埋め込まれたリソースXMLファイル]から読み込んだ文字列</returns>
        /// <remarks>自由に利用できる。</remarks>
        public static string LoadXMLAsString(string assemblyString, string loadfileName)
        {
            // エントリのアセンブリ
            Assembly             thisAssembly         = null;
            ManifestResourceInfo manifestResourceInfo = null;

            // ストリーム
            StreamReader sr = null;
            // リーダ(XML)
            XmlTextReader xtr = null;

            // 例外処理
            try
            {
                thisAssembly         = MyAssemblies.GetAssembly(assemblyString);
                manifestResourceInfo = thisAssembly.GetManifestResourceInfo(loadfileName);
            }
            catch (Exception)
            {
                // なにもしない。
            }

            try
            {
                // 存在チェック
                if (manifestResourceInfo != null)
                {
                    if (0 != (manifestResourceInfo.ResourceLocation
                              & (ResourceLocation.ContainedInManifestFile | ResourceLocation.Embedded)))
                    {
                        // 存在する。
                    }
                    else
                    {
                        // 存在しない。
                        throw new ArgumentException(String.Format(
                                                        PublicExceptionMessage.RESOURCE_FILE_NOT_FOUND, loadfileName));
                    }
                }
                else
                {
                    // 存在しない。
                    throw new ArgumentException(String.Format(
                                                    PublicExceptionMessage.RESOURCE_FILE_NOT_FOUND, loadfileName));
                }

                // 既定のエンコーディングでロードして、
                sr = new StreamReader(thisAssembly.GetManifestResourceStream(loadfileName));

                // XML宣言を取得して、
                // <?xml version="1.0" encoding="xxxx" ?>
                string xmlDeclaration = sr.ReadLine();
                sr.Close();

                // エンコーディング オブジェクトの取得
                Encoding enc = XmlLib.GetEncodingFromXmlDeclaration(xmlDeclaration);

                // 指定のエンコーディングで再ロード
                sr = new StreamReader(thisAssembly.GetManifestResourceStream(loadfileName), enc);

                // 読む
                return(sr.ReadToEnd());
            }
            finally
            {
                // nullチェック
                if (xtr == null)
                {
                    // 何もしない。
                }
                else
                {
                    // 閉じる
                    xtr.Close();
                }

                // nullチェック
                if (sr == null)
                {
                    // 何もしない。
                }
                else
                {
                    // 閉じる
                    sr.Close();
                }
            }
        }