public void ReadRequest_11() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Path.Combine(TestCasePath, @"XACML_Samples\1.1\Example_1\Request.xml")); var serialize = new Xacml10ProtocolSerializer(); using (XmlReader reader = XmlReader.Create(new StringReader(xmlDoc.OuterXml))) { var data = serialize.ReadContextRequest(reader); Assert.IsNotNull(data); // Subject Assert.AreEqual(1, data.Subjects.Count); { var subject = data.Subjects.First(); Assert.AreEqual(new Uri("urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"), subject.SubjectCategory); Assert.AreEqual(1, subject.Attributes.Count); { var att = subject.Attributes.First(); Assert.AreEqual(new Uri("urn:oasis:names:tc:xacml:1.0:subject:subject-id"), att.AttributeId); Assert.AreEqual(new Uri("urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name"), att.DataType); Assert.AreEqual(1, att.AttributeValues.Count); Assert.AreEqual("*****@*****.**", att.AttributeValues.First().Value); } } // Resource Assert.AreEqual(1, data.Resources.Count); { var resource = data.Resources.First(); Assert.AreEqual(1, resource.Attributes.Count); { var att = resource.Attributes.First(); Assert.AreEqual(new Uri("urn:oasis:names:tc:xacml:1.0:resource:ufspath"), att.AttributeId); Assert.AreEqual(new Uri("http://www.w3.org/2001/XMLSchema#anyURI"), att.DataType); Assert.AreEqual(1, att.AttributeValues.Count); Assert.AreEqual("/medico/record/patient/BartSimpson", att.AttributeValues.First().Value); } } // Action var action = data.Action; Assert.AreEqual(1, action.Attributes.Count); { var att = action.Attributes.First(); Assert.AreEqual(new Uri("urn:oasis:names:tc:xacml:1.0:action:action-id"), att.AttributeId); Assert.AreEqual(new Uri("http://www.w3.org/2001/XMLSchema#string"), att.DataType); Assert.AreEqual(1, att.AttributeValues.Count); Assert.AreEqual("read", att.AttributeValues.First().Value); } } }
public void WritePolicy_11() { var subject = new XacmlSubject( new XacmlSubjectMatch[] { new XacmlSubjectMatch( new Uri("http://www.MatchId.www"), new XacmlAttributeValue(new Uri("http://www.DataType.www")), new XacmlSubjectAttributeDesignator(new Uri("http://www.AttributeId.www"), new Uri("http://www.DataType.www")) { Issuer = "String", MustBePresent = false, Category = new Uri("http://www.subjectCategory.www") }) }); var target = new XacmlTarget(subject, null, null); XacmlPolicySet xacmlPolicySet = new XacmlPolicySet(new Uri("http://www.PolicySetId.www"), new Uri("http://www.PolicyCombiningAlgId.www"), target); xacmlPolicySet.Description = "description string"; xacmlPolicySet.XPathVersion = Xacml10Constants.XPathVersions.Xpath10; XacmlPolicy xacmlPolicy = new XacmlPolicy(new Uri("http://www.PolicyId.www"), new Uri("http://www.RuleCombiningAlgId.www"), new XacmlTarget()) { Description = "description string", XPathVersion = Xacml10Constants.XPathVersions.Xpath10, }; XacmlRule xacmlRule = new XacmlRule("http://www.RuleId.www", XacmlEffectType.Permit) { Description = "xacmlRule description" }; xacmlPolicy.Rules.Add(xacmlRule); XacmlAttributeAssignment xacmlAttributeAssignment = new XacmlAttributeAssignment(new Uri("http://www.AttributeId.www"), new Uri("http://www.DataType.www")); XacmlObligation xacmlObligation = new XacmlObligation(new Uri("http://www.ObligationId.www"), XacmlEffectType.Permit, new XacmlAttributeAssignment[] { xacmlAttributeAssignment }); xacmlPolicy.Obligations.Add(xacmlObligation); xacmlPolicySet.Policies.Add(xacmlPolicy); StringBuilder builder = new StringBuilder(); using (XmlWriter writer = XmlWriter.Create(builder)) { var serializer = new Xacml10ProtocolSerializer(); serializer.WritePolicySet(writer, xacmlPolicySet); } string xml = builder.ToString(); ValidateMessage(xml, Path.Combine(TestCasePath, "cs-xacml-schema-context-01.xsd")); }
public void ReadPolicy_11() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Path.Combine(TestCasePath, @"XACML_Samples\1.1\Example_1\Rule_1.xml")); var serialize = new Xacml10ProtocolSerializer(); using (XmlReader reader = XmlReader.Create(new StringReader(xmlDoc.OuterXml))) { var data = serialize.ReadPolicy(reader); Assert.IsNotNull(data); } }
public static EvaluationEngine Create(XmlReader reader, IXacmlPolicyRepository ch) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } EvaluationEngine engine; if (reader.IsStartElement(XacmlConstants.ElementNames.Policy, Xacml10Constants.Namespaces.Policy)) { Xacml10ProtocolSerializer serializer = new Xacml10ProtocolSerializer(); engine = new EvaluationEngine(serializer.ReadPolicy(reader)); } else if (reader.IsStartElement(XacmlConstants.ElementNames.PolicySet, Xacml10Constants.Namespaces.Policy)) { Xacml10ProtocolSerializer serializer = new Xacml10ProtocolSerializer(); engine = new EvaluationEngine(serializer.ReadPolicySet(reader)); } else if (reader.IsStartElement(XacmlConstants.ElementNames.Policy, Xacml20Constants.Namespaces.Policy)) { Xacml20ProtocolSerializer serializer = new Xacml20ProtocolSerializer(); engine = new EvaluationEngine(serializer.ReadPolicy(reader)); } else if (reader.IsStartElement(XacmlConstants.ElementNames.PolicySet, Xacml20Constants.Namespaces.Policy)) { Xacml20ProtocolSerializer serializer = new Xacml20ProtocolSerializer(); engine = new EvaluationEngine(serializer.ReadPolicySet(reader)); } else if (reader.IsStartElement(XacmlConstants.ElementNames.Policy, Xacml30Constants.Namespaces.Policy)) { Xacml30ProtocolSerializer serializer = new Xacml30ProtocolSerializer(); engine = new EvaluationEngine30(serializer.ReadPolicy(reader)); } else if (reader.IsStartElement(XacmlConstants.ElementNames.PolicySet, Xacml30Constants.Namespaces.Policy)) { Xacml30ProtocolSerializer serializer = new Xacml30ProtocolSerializer(); engine = new EvaluationEngine30(serializer.ReadPolicySet(reader)); } else { throw new XmlException("Unknown XML"); } engine.ch = ch; return(engine); }
public void ReadResponse_11() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Path.Combine(TestCasePath, @"XACML_Samples\1.1\Example_1\Response.xml")); var serialize = new Xacml10ProtocolSerializer(); using (XmlReader reader = XmlReader.Create(new StringReader(xmlDoc.OuterXml))) { var data = serialize.ReadContextResponse(reader); Assert.IsNotNull(data); Assert.AreEqual(1, data.Results.Count); Assert.AreEqual(XacmlContextDecision.NotApplicable, data.Results.First().Decision); } }
public void WriteRequest_11() { var s = new XacmlContextSubject(new XacmlContextAttribute(new Uri("uri:action"), new Uri("uri:type"), new XacmlContextAttributeValue())); var r = new XacmlContextResource(new XacmlContextAttribute(new Uri("uri:action"), new Uri("uri:type"), new XacmlContextAttributeValue())); var a = new XacmlContextAction(new XacmlContextAttribute(new Uri("uri:action"), new Uri("uri:type"), new XacmlContextAttributeValue())); var request = new XacmlContextRequest(r, a, s); StringBuilder builder = new StringBuilder(); using (XmlWriter writer = XmlWriter.Create(builder)) { var serializer = new Xacml10ProtocolSerializer(); serializer.WriteContextRequest(writer, request); } string xml = builder.ToString(); ValidateMessage(xml, Path.Combine(TestCasePath, "cs-xacml-schema-context-01.xsd")); }
public static EvaluationEngine Create(XmlReader reader, IXacmlPolicyRepository ch) { Contract.Requires<ArgumentNullException>(reader != null); EvaluationEngine engine; if (reader.IsStartElement(XacmlConstants.ElementNames.Policy, Xacml10Constants.Namespaces.Policy)) { Xacml10ProtocolSerializer serializer = new Xacml10ProtocolSerializer(); engine = new EvaluationEngine(serializer.ReadPolicy(reader)); } else if (reader.IsStartElement(XacmlConstants.ElementNames.PolicySet, Xacml10Constants.Namespaces.Policy)) { Xacml10ProtocolSerializer serializer = new Xacml10ProtocolSerializer(); engine = new EvaluationEngine(serializer.ReadPolicySet(reader)); } else if (reader.IsStartElement(XacmlConstants.ElementNames.Policy, Xacml20Constants.Namespaces.Policy)) { Xacml20ProtocolSerializer serializer = new Xacml20ProtocolSerializer(); engine = new EvaluationEngine(serializer.ReadPolicy(reader)); } else if (reader.IsStartElement(XacmlConstants.ElementNames.PolicySet, Xacml20Constants.Namespaces.Policy)) { Xacml20ProtocolSerializer serializer = new Xacml20ProtocolSerializer(); engine = new EvaluationEngine(serializer.ReadPolicySet(reader)); } else if (reader.IsStartElement(XacmlConstants.ElementNames.Policy, Xacml30Constants.Namespaces.Policy)) { Xacml30ProtocolSerializer serializer = new Xacml30ProtocolSerializer(); engine = new EvaluationEngine30(serializer.ReadPolicy(reader)); } else if (reader.IsStartElement(XacmlConstants.ElementNames.PolicySet, Xacml30Constants.Namespaces.Policy)) { Xacml30ProtocolSerializer serializer = new Xacml30ProtocolSerializer(); engine = new EvaluationEngine30(serializer.ReadPolicySet(reader)); } else { throw Diagnostic.DiagnosticTools.ExceptionUtil.ThrowHelperError(new XmlException("Unknown XML")); } engine.ch = ch; return engine; }