package eu.aniketos.spmm.impl; import java.util.HashMap; import java.util.Hashtable; import java.util.LinkedList; import java.util.List; import java.util.Map; import security.iit.pdp.PDP; import security.iit.pdp.PDP.WHEN; import security.iit.pdp.pdpResult; import eu.aniketos.data.*; import eu.aniketos.data.impl.*; import eu.aniketos.notification.IAlert; import eu.aniketos.notification.Notification; import eu.aniketos.notification.descriptions.ContractViolation; import eu.aniketos.pdplib.InvocationPDP; import eu.aniketos.pdplib.SpecificationPDP; import eu.aniketos.spmm.IPropertyMonitoringInterface; import eu.aniketos.spmm.event.ReceiveEvent; /** * This class is responsible for getting contract, extraction of monitoring rules, getting real data, check of the real data against the monitoring rules, * and notifying Notificaiton module about contract (policy) violations. * * @author Muhammad Asim, LJMU */ public class ContractMonitoring implements IPropertyMonitoringInterface{ private static final String String = null; private IAlert alertService; //private final List<SpecificationPDP> specContract = new LinkedList<SpecificationPDP>(); //private final List<PDP> pdp_instance = new LinkedList<PDP>(); //private String serviceId; //private IAgreementTemplate AT; Map<String, ServiceMonitor> serviceMap = new Hashtable<String, ServiceMonitor>(); //private String eventServiceId; public void monitorSecurityPolicy(IAgreementTemplate agTemp, String serviceID) { if(serviceMap.containsKey(serviceID)){ System.out.println("Service already exists!"); serviceMap.remove(serviceID); ServiceMonitor sm = new ServiceMonitor(agTemp, serviceID); serviceMap.put(serviceID, sm); System.out.println("Overridden!"); }else{ ServiceMonitor sm = new ServiceMonitor(agTemp, serviceID); serviceMap.put(serviceID, sm); System.out.println("Service added to the list!"); } } public void IMonitoringData(ReceiveEvent event) { System.out.println("\n\n\n\n-----------------------Event recieved---------------"+event.getEventType()+"-------------------"); String eventServiceId = event.getProcessInstanceId(); //Process Event if(event.getEventType().equals("processEvent")) { System.out.println("Event recieved: processInstanceID="+event.getProcessInstanceId()+", eventType="+event.getEventType()+", eventName="+event.getEventName()+",eventTime="+event.getEventTime()); } //UserTask event if(event.getEventType().equals("userTaskEvent")) { System.out.println("Event recieved: processInstanceID="+event.getProcessInstanceId()+", eventType="+event.getEventType()+",serviceId="+event.getServiceId()+", eventName="+event.getEventName()+", eventDate="+event.getEventDate()+ ", eventTime="+event.getEventTime()+", Assignee="+event.getAssignee()); } //ServiceTask event if(event.getEventType().equals("serviceTaskEvent")) { System.out.println("Event recieved: processID="+event.getProcessInstanceId()+", eventType="+event.getEventType()+", eventName="+event.getEventName()+ ", eventTime="+event.getEventTime()+", serviceType="+event.getServiceType()+", service Id="+event.getServiceId()+", serviceOperation="+event.getServiceOperation()+", serviceProvider="+event.getServiceProvider()); } System.out.println(" "); ServiceMonitor monitor = serviceMap.get(eventServiceId); if(monitor != null){ System.out.println("event passed to the monitor policy method!"); monitor.monitorPolicy(event); }else{ System.out.println("event NULL!"); } } public void sendContractViolationNotification(String serviceID,String ruleid) throws InterruptedException{ String property; property=ruleid.toLowerCase(); alertService = (IAlert) Activator.getDefault().getAlert(); if (alertService == null) { System.out.println("Alert Service is null"); } int intIndexSOD = property.indexOf("sod"); if(intIndexSOD == - 1){ }else{ System.out.println("seperation-of-duty property violated"); alertService.alert("https://www.chrispay.com/api/pay", Notification.CONTRACT_VIOLATION, ContractViolation.SEPARATION_OF_DUTY); } int intIndexBOD = property.indexOf("bod"); if(intIndexBOD == - 1){ }else{ System.out.println("binding-of-duty property violated"); alertService.alert("https://www.chrispay.com/api/pay", Notification.CONTRACT_VIOLATION, ContractViolation.BINDING_OF_DUTY); } int intIndexConf = property.indexOf("onf"); if(intIndexConf == - 1){ }else{ System.out.println("\n--------------------------------------------------------"); System.out.println(" Confidentiality Property Violated. Notification generated"); System.out.println("Service ID: "+serviceID); System.out.println("Rule ID: "+ruleid); System.out.println("--------------------------------------------------------\n"); alertService.alert("https://www.chrispay.com/api/pay", Notification.CONTRACT_VIOLATION, ContractViolation.CONFIDENTIALITY); } } @Override public void unmonitorSecurityPolicy(java.lang.String serviceID) { serviceMap.remove(serviceID); } }