| package org.onosproject.security.impl; |
| |
| |
| import com.google.common.collect.ImmutableSet; |
| import com.google.common.collect.Sets; |
| import org.apache.commons.collections.FastHashMap; |
| import org.onosproject.core.Permission; |
| import org.onosproject.security.AppPermission; |
| import org.osgi.service.permissionadmin.PermissionInfo; |
| |
| import org.onosproject.app.ApplicationAdminService; |
| import org.onosproject.app.ApplicationService; |
| import org.onosproject.cfg.ComponentConfigService; |
| import org.onosproject.cluster.ClusterAdminService; |
| import org.onosproject.cluster.ClusterService; |
| import org.onosproject.core.CoreService; |
| import org.onosproject.cluster.LeadershipService; |
| import org.onosproject.mastership.MastershipAdminService; |
| import org.onosproject.mastership.MastershipService; |
| import org.onosproject.net.device.DeviceAdminService; |
| import org.onosproject.net.device.DeviceService; |
| import org.onosproject.net.device.DeviceClockService; |
| import org.onosproject.net.driver.DriverAdminService; |
| import org.onosproject.net.driver.DriverService; |
| import org.onosproject.net.flow.FlowRuleService; |
| import org.onosproject.net.flowobjective.FlowObjectiveService; |
| import org.onosproject.net.group.GroupService; |
| import org.onosproject.net.host.HostAdminService; |
| import org.onosproject.net.host.HostService; |
| import org.onosproject.net.intent.IntentService; |
| import org.onosproject.net.intent.IntentExtensionService; |
| import org.onosproject.net.intent.IntentClockService; |
| import org.onosproject.net.intent.PartitionService; |
| import org.onosproject.net.link.LinkAdminService; |
| import org.onosproject.net.link.LinkService; |
| import org.onosproject.net.packet.PacketService; |
| import org.onosproject.net.proxyarp.ProxyArpService; |
| import org.onosproject.net.resource.link.LinkResourceService; |
| import org.onosproject.net.statistic.StatisticService; |
| import org.onosproject.net.topology.PathService; |
| import org.onosproject.net.topology.TopologyService; |
| import org.onosproject.store.service.StorageAdminService; |
| import org.onosproject.store.service.StorageService; |
| import org.osgi.framework.ServicePermission; |
| import org.osgi.framework.PackagePermission; |
| import org.osgi.framework.AdaptPermission; |
| |
| |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.Set; |
| import java.util.stream.Collectors; |
| |
| public final class PolicyBuilder { |
| |
| private PolicyBuilder(){ |
| } |
| |
| public static PermissionInfo[] getApplicationPermissions(HashMap<Permission, Set<String>> serviceDirectory, |
| Set<Permission> permissions) { |
| Set<PermissionInfo> permSet = Sets.newHashSet(); |
| Collections.addAll(permSet, getDefaultPerms()); |
| for (Permission perm : permissions) { |
| permSet.add(new PermissionInfo(AppPermission.class.getName(), perm.name(), "")); |
| permSet.addAll(serviceDirectory.get(perm).stream().map(service -> new PermissionInfo( |
| ServicePermission.class.getName(), service, ServicePermission.GET)).collect(Collectors.toList())); |
| } |
| PermissionInfo[] permissionInfos = new PermissionInfo[permSet.size()]; |
| return permSet.toArray(permissionInfos); |
| } |
| |
| public static PermissionInfo[] getAdminApplicationPermissions(HashMap<Permission, Set<String>> serviceDirectory) { |
| Set<PermissionInfo> permSet = Sets.newHashSet(); |
| Collections.addAll(permSet, getDefaultPerms()); |
| Collections.addAll(permSet, getAdminDefaultPerms()); |
| permSet.addAll(serviceDirectory.keySet().stream().map(perm -> |
| new PermissionInfo(AppPermission.class.getName(), perm.name(), "")).collect(Collectors.toList())); |
| PermissionInfo[] permissionInfos = new PermissionInfo[permSet.size()]; |
| return permSet.toArray(permissionInfos); |
| } |
| |
| public static PermissionInfo[] getDefaultPerms() { |
| return new PermissionInfo[]{ |
| new PermissionInfo(PackagePermission.class.getName(), "*", PackagePermission.EXPORTONLY), |
| new PermissionInfo(PackagePermission.class.getName(), "*", PackagePermission.IMPORT), |
| new PermissionInfo(AdaptPermission.class.getName(), "*", AdaptPermission.ADAPT), |
| }; |
| } |
| public static PermissionInfo[] getAdminDefaultPerms() { |
| return new PermissionInfo[]{ |
| new PermissionInfo(ServicePermission.class.getName(), |
| ApplicationAdminService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| ClusterAdminService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| MastershipAdminService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| DeviceAdminService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| HostAdminService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| LinkAdminService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| DriverAdminService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| StorageAdminService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // LabelResourceAdminService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // TunnelAdminService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| ApplicationService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| ComponentConfigService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| CoreService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| ClusterService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| LeadershipService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| MastershipService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| DeviceService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| DeviceClockService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| DriverService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| FlowRuleService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| FlowObjectiveService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| GroupService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| HostService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| IntentService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| IntentClockService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| IntentExtensionService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| PartitionService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| LinkService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| LinkResourceService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // LabelResourceService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| PacketService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| ProxyArpService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| StatisticService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| PathService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| TopologyService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // TunnelService.class.getName(), ServicePermission.GET), |
| new PermissionInfo(ServicePermission.class.getName(), |
| StorageService.class.getName(), ServicePermission.GET), |
| }; |
| } |
| |
| |
| public static HashMap<Permission, Set<String>> getServiceDirectory() { |
| |
| HashMap<Permission, Set<String>> serviceDirectory = new FastHashMap(); |
| |
| serviceDirectory.put(Permission.APP_READ, ImmutableSet.of( |
| ApplicationService.class.getName(), CoreService.class.getName())); |
| serviceDirectory.put(Permission.APP_EVENT, ImmutableSet.of( |
| ApplicationService.class.getName(), CoreService.class.getName())); |
| serviceDirectory.put(Permission.CONFIG_READ, ImmutableSet.of( |
| ComponentConfigService.class.getName())); |
| serviceDirectory.put(Permission.CONFIG_WRITE, ImmutableSet.of( |
| ComponentConfigService.class.getName())); |
| serviceDirectory.put(Permission.CLUSTER_READ, ImmutableSet.of( |
| ClusterService.class.getName(), LeadershipService.class.getName(), |
| MastershipService.class.getName())); |
| serviceDirectory.put(Permission.CLUSTER_WRITE, ImmutableSet.of( |
| LeadershipService.class.getName(), MastershipService.class.getName())); |
| serviceDirectory.put(Permission.CLUSTER_EVENT, ImmutableSet.of( |
| ClusterService.class.getName(), LeadershipService.class.getName(), |
| MastershipService.class.getName())); |
| serviceDirectory.put(Permission.DEVICE_READ, ImmutableSet.of( |
| DeviceService.class.getName(), DeviceClockService.class.getName())); |
| serviceDirectory.put(Permission.DEVICE_EVENT, ImmutableSet.of( |
| DeviceService.class.getName())); |
| serviceDirectory.put(Permission.DRIVER_READ, ImmutableSet.of( |
| DriverService.class.getName())); |
| serviceDirectory.put(Permission.DRIVER_WRITE, ImmutableSet.of( |
| DriverService.class.getName())); |
| serviceDirectory.put(Permission.FLOWRULE_READ, ImmutableSet.of( |
| FlowRuleService.class.getName())); |
| serviceDirectory.put(Permission.FLOWRULE_WRITE, ImmutableSet.of( |
| FlowRuleService.class.getName(), FlowObjectiveService.class.getName())); |
| serviceDirectory.put(Permission.FLOWRULE_EVENT, ImmutableSet.of( |
| FlowRuleService.class.getName())); |
| serviceDirectory.put(Permission.GROUP_READ, ImmutableSet.of( |
| GroupService.class.getName())); |
| serviceDirectory.put(Permission.GROUP_WRITE, ImmutableSet.of( |
| GroupService.class.getName())); |
| serviceDirectory.put(Permission.GROUP_EVENT, ImmutableSet.of( |
| GroupService.class.getName())); |
| serviceDirectory.put(Permission.HOST_WRITE, ImmutableSet.of( |
| HostService.class.getName())); |
| serviceDirectory.put(Permission.HOST_EVENT, ImmutableSet.of( |
| HostService.class.getName())); |
| serviceDirectory.put(Permission.INTENT_READ, ImmutableSet.of( |
| IntentService.class.getName(), PartitionService.class.getName(), |
| IntentClockService.class.getName())); |
| serviceDirectory.put(Permission.INTENT_WRITE, ImmutableSet.of( |
| IntentService.class.getName())); |
| serviceDirectory.put(Permission.INTENT_EVENT, ImmutableSet.of( |
| IntentService.class.getName())); |
| // serviceDirectory.put(Permission.LINK_READ, ImmutableSet.of( |
| // LinkService.class.getName(), LinkResourceService.class.getName(), |
| // LabelResourceService.class.getName())); |
| // serviceDirectory.put(Permission.LINK_WRITE, ImmutableSet.of( |
| // LinkResourceService.class.getName(), LabelResourceService.class.getName())); |
| // serviceDirectory.put(Permission.LINK_EVENT, ImmutableSet.of( |
| // LinkService.class.getName(), LinkResourceService.class.getName(), |
| // LabelResourceService.class.getName())); |
| serviceDirectory.put(Permission.PACKET_READ, ImmutableSet.of( |
| PacketService.class.getName(), ProxyArpService.class.getName())); |
| serviceDirectory.put(Permission.PACKET_WRITE, ImmutableSet.of( |
| PacketService.class.getName(), ProxyArpService.class.getName())); |
| serviceDirectory.put(Permission.PACKET_EVENT, ImmutableSet.of( |
| PacketService.class.getName())); |
| serviceDirectory.put(Permission.STATISTIC_READ, ImmutableSet.of( |
| StatisticService.class.getName())); |
| serviceDirectory.put(Permission.TOPOLOGY_READ, ImmutableSet.of( |
| TopologyService.class.getName(), PathService.class.getName())); |
| serviceDirectory.put(Permission.TOPOLOGY_EVENT, ImmutableSet.of( |
| TopologyService.class.getName())); |
| // serviceDirectory.put(Permission.TUNNEL_READ, ImmutableSet.of( |
| // TunnelService.class.getName())); |
| // serviceDirectory.put(Permission.TUNNEL_WRITE, ImmutableSet.of( |
| // TunnelService.class.getName())); |
| // serviceDirectory.put(Permission.TUNNEL_EVENT, ImmutableSet.of( |
| // TunnelService.class.getName())); |
| serviceDirectory.put(Permission.STORAGE_WRITE, ImmutableSet.of( |
| StorageService.class.getName())); |
| |
| return serviceDirectory; |
| } |
| } |
| |
| |
| // public static PermissionInfo[] getNonAdminPerms() { |
| // return new PermissionInfo[]{ |
| // new PermissionInfo(PackagePermission.class.getName(), "*", PackagePermission.EXPORTONLY), |
| // new PermissionInfo(PackagePermission.class.getName(), "*", PackagePermission.IMPORT), |
| // new PermissionInfo(AdaptPermission.class.getName(), "*", AdaptPermission.ADAPT), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // ApplicationService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // ComponentConfigService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // CoreService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // ClusterService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // LeadershipService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // MastershipService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // DeviceService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // DeviceClockService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // DriverService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // FlowRuleService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // FlowObjectiveService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // GroupService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // HostService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // HostClockService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // IntentService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // IntentClockService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // IntentExtensionService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // PartitionService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // LinkService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // LinkResourceService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // LabelResourceService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // PacketService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // ProxyArpService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // StatisticService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // PathService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // TopologyService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // TunnelService.class.getName(), ServicePermission.GET), |
| // new PermissionInfo(ServicePermission.class.getName(), |
| // StorageService.class.getName(), ServicePermission.GET), |
| // }; |
| // } |