示例#1
0
        private void CreateAttributeSelector(object sender, EventArgs args)
        {
            pol.AttributeSelectorElement attr = new pol.AttributeSelectorElement(string.Empty, false, "TODO: Add XPath", XacmlVersion.Version11);
            AttributeSelector            node = new AttributeSelector(attr);

            tvwCondition.Nodes.Add(node);
            _condition.Arguments.Add(attr);
        }
示例#2
0
        private void CreateAttributeSelectorFromFunction(object sender, EventArgs args)
        {
            FunctionExecution func = (FunctionExecution)tvwCondition.SelectedNode;

            pol.ApplyBaseReadWrite parentApply = func.ApplyBaseDefinition;

            pol.AttributeSelectorElement attr = new pol.AttributeSelectorElement(string.Empty, false, "TODO: Add XPath", XacmlVersion.Version11);
            AttributeSelector            node = new AttributeSelector(attr);

            func.Nodes.Add(node);
            parentApply.Arguments.Add(attr);
        }
示例#3
0
        /// <summary>
        /// Evaluates the variable into a value.
        /// </summary>
        /// <param name="context">The contex of the evaluation.</param>
        /// <returns>The value of the function.</returns>
        public EvaluationValue Evaluate(EvaluationContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            context.Trace("Evaluating variable");
            context.AddIndent();

            try
            {
                if (_variableDefinition.Expression is pol.ApplyElement)
                {
                    context.Trace("Apply within condition.");

                    // There is a nested apply un this policy a new Apply will be created and also
                    // evaluated. It's return value will be used as the processed argument.
                    Apply _childApply = new Apply((pol.ApplyElement)_variableDefinition.Expression);

                    // Evaluate the Apply
                    _value = _childApply.Evaluate(context);

                    context.TraceContextValues();
                    return(_value);
                }
                else if (_variableDefinition.Expression is pol.FunctionElement)
                {
                    throw new NotImplementedException("FunctionElement");                       //TODO:
                }
                else if (_variableDefinition.Expression is pol.VariableReferenceElement)
                {
                    pol.VariableReferenceElement variableRef = _variableDefinition.Expression as pol.VariableReferenceElement;
                    VariableDefinition           variableDef = context.CurrentPolicy.VariableDefinition[variableRef.VariableId] as VariableDefinition;

                    context.TraceContextValues();

                    if (!variableDef.IsEvaluated)
                    {
                        return(variableDef.Evaluate(context));
                    }
                    else
                    {
                        return(variableDef.Value);
                    }
                }
                else if (_variableDefinition.Expression is pol.AttributeValueElementReadWrite)
                {
                    // The AttributeValue does not need to be processed
                    context.Trace("Attribute value {0}", _variableDefinition.Expression.ToString());

                    pol.AttributeValueElementReadWrite att            = (pol.AttributeValueElementReadWrite)_variableDefinition.Expression;
                    pol.AttributeValueElement          attributeValue = new pol.AttributeValueElement(att.DataType, att.Contents, att.SchemaVersion);

                    _value = new EvaluationValue(
                        attributeValue.GetTypedValue(attributeValue.GetType(context), 0),
                        attributeValue.GetType(context));
                    return(_value);
                }
                else if (_variableDefinition.Expression is pol.AttributeDesignatorBase)
                {
                    // Resolve the AttributeDesignator using the EvaluationEngine public methods.
                    context.Trace("Processing attribute designator: {0}", _variableDefinition.Expression.ToString());

                    pol.AttributeDesignatorBase attrDes = (pol.AttributeDesignatorBase)_variableDefinition.Expression;
                    BagValue bag = EvaluationEngine.Resolve(context, attrDes);

                    // If the attribute was not resolved by the EvaluationEngine search the
                    // attribute in the context document, also using the EvaluationEngine public
                    // methods.
                    if (bag.BagSize == 0)
                    {
                        if (_variableDefinition.Expression is pol.SubjectAttributeDesignatorElement)
                        {
                            ctx.AttributeElement attrib = EvaluationEngine.GetAttribute(context, attrDes);
                            if (attrib != null)
                            {
                                context.Trace("Adding subject attribute designator: {0}", attrib.ToString());
                                bag.Add(attrib);
                            }
                        }
                        else if (_variableDefinition.Expression is pol.ResourceAttributeDesignatorElement)
                        {
                            ctx.AttributeElement attrib = EvaluationEngine.GetAttribute(context, attrDes);
                            if (attrib != null)
                            {
                                context.Trace("Adding resource attribute designator {0}", attrib.ToString());
                                bag.Add(attrib);
                            }
                        }
                        else if (_variableDefinition.Expression is pol.ActionAttributeDesignatorElement)
                        {
                            ctx.AttributeElement attrib = EvaluationEngine.GetAttribute(context, attrDes);
                            if (attrib != null)
                            {
                                context.Trace("Adding action attribute designator {0}", attrib.ToString());
                                bag.Add(attrib);
                            }
                        }
                        else if (_variableDefinition.Expression is pol.EnvironmentAttributeDesignatorElement)
                        {
                            ctx.AttributeElement attrib = EvaluationEngine.GetAttribute(context, attrDes);
                            if (attrib != null)
                            {
                                context.Trace("Adding environment attribute designator {0}", attrib.ToString());
                                bag.Add(attrib);
                            }
                        }
                    }

                    // If the argument was not found and the attribute must be present this is
                    // a MissingAttribute situation so set the flag. Otherwise add the attribute
                    // to the processed arguments.
                    if (bag.BagSize == 0 && attrDes.MustBePresent)
                    {
                        context.Trace("Attribute is missing");
                        context.IsMissingAttribute = true;
                        context.AddMissingAttribute(attrDes);
                        _value = EvaluationValue.Indeterminate;
                    }
                    else
                    {
                        _value = new EvaluationValue(bag, bag.GetType(context));
                    }
                    return(_value);
                }
                else if (_variableDefinition.Expression is pol.AttributeSelectorElement)
                {
                    // Resolve the XPath query using the EvaluationEngine public methods.
                    context.Trace("Attribute selector");
                    try
                    {
                        pol.AttributeSelectorElement attributeSelector = (pol.AttributeSelectorElement)_variableDefinition.Expression;
                        BagValue bag = EvaluationEngine.Resolve(context, attributeSelector);
                        if (bag.Elements.Count == 0 && attributeSelector.MustBePresent)
                        {
                            context.Trace("Attribute is missing");
                            context.IsMissingAttribute = true;
                            context.AddMissingAttribute(attributeSelector);
                            _value = EvaluationValue.Indeterminate;
                        }
                        else
                        {
                            _value = new EvaluationValue(bag, bag.GetType(context));
                        }
                    }
                    catch (EvaluationException e)
                    {
                        context.Trace("ERR: {0}", e.Message);
                        context.ProcessingError = true;
                        _value = EvaluationValue.Indeterminate;
                    }
                    return(_value);
                }
                throw new NotSupportedException("internal error");
            }
            finally
            {
                _isEvaluated = true;
                context.RemoveIndent();
            }
        }
示例#4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="attributeSelector"></param>
        public AttributeSelector(pol.AttributeSelectorElement attributeSelector)
        {
            _attributeSelector = attributeSelector;

            this.Text = "XPath: " + attributeSelector.RequestContextPath;
        }
示例#5
0
		private void CreateAttributeSelectorFromFunction( object sender, EventArgs args )
		{
			FunctionExecution func = (FunctionExecution)tvwCondition.SelectedNode;
			pol.ApplyBaseReadWrite parentApply = func.ApplyBaseDefinition;

			pol.AttributeSelectorElement attr = new pol.AttributeSelectorElement( string.Empty, false, "TODO: Add XPath", XacmlVersion.Version11 );
			AttributeSelector node = new AttributeSelector( attr );

			func.Nodes.Add( node );
			parentApply.Arguments.Add( attr );
		}
示例#6
0
		private void CreateAttributeSelector( object sender, EventArgs args )
		{
			pol.AttributeSelectorElement attr = new pol.AttributeSelectorElement( string.Empty, false, "TODO: Add XPath", XacmlVersion.Version11 );
			AttributeSelector node = new AttributeSelector( attr );

			tvwCondition.Nodes.Add( node );
			_condition.Arguments.Add( attr );
		}
示例#7
0
        /// <summary>
        /// This method overrides the ApplyBase method in order to provide extra validations
        /// required in the condition evaluation, for example the final return value should be a
        /// boolean value.
        /// </summary>
        /// <param name="context">The evaluation context instance.</param>
        /// <returns>The EvaluationValue with the results of the condition evaluation.</returns>
        public override EvaluationValue Evaluate(EvaluationContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            context.Trace("Evaluating condition");
            context.AddIndent();
            try
            {
                // Iterate through the arguments, the IExpressionType is a mark interface
                foreach (inf.IExpression arg in ApplyDefinition.Arguments)
                {
                    if (arg is pol.ApplyElement)
                    {
                        context.Trace("Apply within condition.");

                        // There is a nested apply un this policy a new Apply will be created and also
                        // evaluated. It's return value will be used as the processed argument.
                        Apply _childApply = new Apply((pol.ApplyElement)arg);

                        // Evaluate the Apply
                        EvaluationValue retVal = _childApply.Evaluate(context);

                        return(retVal);
                    }
                    else if (arg is pol.FunctionElementReadWrite)
                    {
                        throw new NotImplementedException("FunctionElement");                           //TODO:
                    }
                    else if (arg is pol.VariableReferenceElement)
                    {
                        pol.VariableReferenceElement variableRef = arg as pol.VariableReferenceElement;
                        VariableDefinition           variableDef = context.CurrentPolicy.VariableDefinition[variableRef.VariableId] as VariableDefinition;

                        if (!variableDef.IsEvaluated)
                        {
                            return(variableDef.Evaluate(context));
                        }
                        else
                        {
                            return(variableDef.Value);
                        }
                    }
                    else if (arg is pol.AttributeValueElementReadWrite)
                    {
                        // The AttributeValue does not need to be processed
                        context.Trace("Attribute value {0}", arg.ToString());

                        pol.AttributeValueElement attributeValue = new pol.AttributeValueElement(((pol.AttributeValueElementReadWrite)arg).DataType, ((pol.AttributeValueElementReadWrite)arg).Contents, ((pol.AttributeValueElementReadWrite)arg).SchemaVersion);

                        return(new EvaluationValue(
                                   attributeValue.GetTypedValue(attributeValue.GetType(context), 0),
                                   attributeValue.GetType(context)));
                    }
                    else if (arg is pol.AttributeDesignatorBase)
                    {
                        // Returning an empty bag, since the condition is not supposed to work with a bag
                        context.Trace("Processing attribute designator: {0}", arg.ToString());

                        pol.AttributeDesignatorBase attrDes = (pol.AttributeDesignatorBase)arg;
                        BagValue bag = new BagValue(EvaluationEngine.GetDataType(attrDes.DataType));
                        return(new EvaluationValue(bag, bag.GetType(context)));
                    }
                    else if (arg is pol.AttributeSelectorElement)
                    {
                        // Returning an empty bag, since the condition is not supposed to work with a bag
                        context.Trace("Attribute selector");

                        pol.AttributeSelectorElement attrSel = (pol.AttributeSelectorElement)arg;
                        BagValue bag = new BagValue(EvaluationEngine.GetDataType(attrSel.DataType));
                        return(new EvaluationValue(bag, bag.GetType(context)));
                    }
                }
                throw new NotSupportedException("internal error");
            }
            finally
            {
                context.TraceContextValues();
                context.RemoveIndent();
            }
        }
示例#8
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="attributeSelector"></param>
		public AttributeSelector( pol.AttributeSelectorElement attributeSelector )
		{
			_attributeSelector = attributeSelector;

			this.Text = "XPath: " + attributeSelector.RequestContextPath;
		}