예제 #1
0
        private static void processPolicyResponse(PolicyResponse policyResponse)
        {
            List<IExpressionResponse> expressionResponses = getRiskElements(policyResponse);

            _riskElements.OnPolicyBegin(policyResponse.Name);

			try
			{
				foreach (IExpressionResponse expresionResponse in expressionResponses)
				{
					string responseRisk = expresionResponse.Rating;
					string responseName = expresionResponse.Name;

					Dictionary<string, List<string>> expressionDetails =
						groupExpressionDetails(expresionResponse.ExpressionDetailCollection);

					if (expressionDetails.Count > 0)
					{
						foreach (string key in expressionDetails.Keys)
						{
							_riskElements.CheckRatingElement(responseRisk, key);

							List<string> details = expressionDetails[key];

                            if (details!= null && "ConditionSummary" == details.FirstOrDefault() && (responseName == "Cleans Microsoft Office documents of hidden data."))// || responseName == "Converts Microsoft Office document to PDF."))
						        continue;

							if (!_riskElements.SerializeDetails(key, details))
							{
								_riskElements.SerializeDISRule(
									responseName,
									responseRisk,
									key,
									details
									);
							}
						}
					}
				}

				_riskElements.OnPolicyEnd();
			}
			catch (System.Xml.XmlException ex)
			{
				/*
				 * This try/catch is used to catch the exception thrown from function: OnSerializeDISRulesContent(string obj).
				 * We store the Policy Name so that we can show it in the message box in:
				 * File: ProtectDialog.cs, Function: riskReportButton_Click(object sender, EventArgs e). 
				 */
				ex.Data["PolicyName"] = policyResponse.Name;
				throw ex;
			}
        }
예제 #2
0
		public void TestSkipVerified_GetPolicy()
		{
			PolicyResponse pr = new PolicyResponse();

			pr.SkipVerifiedMessages = true;

			Workshare.PolicyContent.Policy p = PolicyAdaptor.GetPolicy(pr);

			Assert.IsTrue(Array.Exists<CustomProperty>(p.Properties, delegate(CustomProperty cp)
			{
				return (PolicyConstants.SkipVerifiedMessages == cp.Name && bool.TrueString == cp.Value);
			}), "Expect to find a property with the specified name and value when SkipVerifiedMessages = true");
		}
예제 #3
0
 public void ReadXml(XmlReader reader)
 {
     if (reader.NodeType != XmlNodeType.Element)
         return;
     int iExpectedPolicyCount = Int32.Parse(reader.GetAttribute("NumPolicies"), CultureInfo.InvariantCulture);
     bool bIsMT = reader.IsEmptyElement;
     reader.ReadStartElement("PolicySetResponse");
     if (m_Policies == null)
         m_Policies = new Collection<IPolicyResponse>();
     else
         iExpectedPolicyCount += m_Policies.Count;
     while (reader.IsStartElement("PolicyResponse"))
     {
         PolicyResponse aPolicy = new PolicyResponse();
         aPolicy.ReadXml(reader);
         m_Policies.Add(aPolicy);
     }
     if (!bIsMT)
         reader.ReadEndElement();
     if (m_Policies.Count != iExpectedPolicyCount)
         throw new PolicyEngineException("Inconsistent XML");
 }
예제 #4
0
		internal static IPolicyResponse GetIPolicyResponse(Workshare.PolicyContent.Policy policyIn)
		{
			if (null == policyIn)
				throw new ArgumentException("policy");
			

			PolicyResponse policyOut = new PolicyResponse();

			policyOut.Audit = policyIn.Audit;
			policyOut.Description = policyIn.Description;
			policyOut.Name = policyIn.Name;
			policyOut.Triggered = policyIn.Triggered;
			policyOut.RoutingId = null;  //TODO: Include RoutingId. How/Why!
			policyOut.Routing = RoutingAdaptor.GetIRoutingResponse(policyIn.Routing);
			
			if ( policyIn.Properties != null)
			{
				foreach (CustomProperty property in policyIn.Properties)
				{
					switch (property.Name)
					{
						case PolicyAdaptor.ExecuteBlockProp:
							policyOut.BlockOnException = bool.TrueString == property.Value;
							break;

						case PolicyConstants.SkipVerifiedMessages:
							policyOut.SkipVerifiedMessages = bool.TrueString == property.Value;
							break;

						default:
							policyOut.Properties[property.Name] = property.Value;
							break;
					}
				}
			}

			policyOut.ActionCollection = new Collection<IPolicyResponseAction>();
			if ( policyIn.Actions != null)
			{
				foreach (Workshare.PolicyContent.Action action in policyIn.Actions)
				{
					policyOut.ActionCollection.Add( ActionAdaptor.GetIPolicyResponseAction(action) );
				}
			}

			policyOut.ExpressionCollection = new Collection<IExpressionResponse>();
			if ( policyIn.Expressions != null)
			{
				foreach (Expression expression in policyIn.Expressions)
				{
					policyOut.ExpressionCollection.Add(ExpressionAdaptor.GetIExpressionResponse(expression));
				}
			}

			return policyOut;
		}
예제 #5
0
		private object BeforeRuleHandler(IBRERuleContext aBrc, Hashtable aMap, object aStep)
		{
			if (m_CurrentFileInfo.PolicySetCollection == null || m_CurrentFileInfo.PolicySetCollection.Count == 0)
				throw new PolicyEngineException("Unable to audit policy information as no policy information has been audited");

			PolicyResponse policy = new PolicyResponse();

			policy.Name = GetName(aMap);

			if (aMap.ContainsKey("AuditLevel"))
				policy.Audit = (aMap["AuditLevel"] as string) != "None";
			else
				policy.Audit = true;

			if (aMap.ContainsKey("blockOnException"))
				policy.BlockOnException = Convert.ToBoolean(aMap["blockOnException"], CultureInfo.InvariantCulture);
			else
				policy.BlockOnException = true;

			if (aMap.ContainsKey(PolicyConstants.SkipVerifiedMessages))
				policy.SkipVerifiedMessages = Convert.ToBoolean(aMap[PolicyConstants.SkipVerifiedMessages], CultureInfo.InvariantCulture);
			else
				policy.SkipVerifiedMessages = false;

			if (aMap.ContainsKey("Description"))
				policy.Description = aMap["Description"] as string;

			GetLatestPolicyInfoSet().Add(policy);

			return null;
		}
예제 #6
0
		public void ProcessRouting(IContentItem file, IPolicySetResponse policySet)
		{
			PolicySetResponse policySetInfo = policySet as PolicySetResponse;
			m_CurrentFileInfo = file as ContentItem;
			foreach (PolicyResponse policyResponse in policySetInfo.PolicyReportCollection)
			{
				m_CurrentPolicyInfo = policyResponse;
				m_NxBre.Process(policyResponse.RoutingId);
			}
		}
예제 #7
0
		private bool shouldAllowPDFWithNoActions(IPolicyResponseObject upi, PolicyResponse policyResponse)
		{
			bool decision = false;

			if (upi.ContentCollection.Count > 0 && upi.ContentCollection[0].Type	== "PDFDocument")
			{
				if (policyResponse.Description == "Clean Policy."
					&& policyResponse.Name == "Hidden PDF Data Policy")
				{
					for (int i = 0; i < policyResponse.ExpressionCollection.Count; i++)
					{
						// policyResponse.ExpressionCollection[0].Name == "Cleans PDF documents of hidden data."
						if (policyResponse.ExpressionCollection[i].ExpressionDetailCollection.Count > 0)
						{
							decision = true;
							break;
						}
					}
				}
			}
			return decision;
		}
예제 #8
0
        private List<IExpressionResponse> GetRiskElements(PolicyResponse policyResponse, string rating)
        {
            List<IExpressionResponse> expressionDetails = new List<IExpressionResponse>();

            Collection<IExpressionResponse> expressions = policyResponse.ExpressionCollection;
            foreach (IExpressionResponse expresionResponse in expressions)
            {
                if (string.Compare(expresionResponse.Rating, rating, true) == 0)
                {                    
                    expressionDetails.Add(expresionResponse);
                }
            }
            return expressionDetails;
        }
예제 #9
0
        private static List<IExpressionResponse> getRiskElements(PolicyResponse policyResponse)
        {
            List<IExpressionResponse> expressionDetails = new List<IExpressionResponse>();
            Collection<IExpressionResponse> expressions = policyResponse.ExpressionCollection;

            foreach(IExpressionResponse expresionResponse in expressions) {
///             if(string.Compare(expresionResponse.Rating, rating, true) == 0)
///             {
                expressionDetails.Add(expresionResponse);
///             }
            }

            return expressionDetails;
        }