ONOS-1767 SM-ONOS implementation
22a363e ONOS-17767 SM-ONOS impl
Change-Id: Ifca8129f2266bada68af735cf81a1d39f1ec8506
diff --git a/core/common/pom.xml b/core/common/pom.xml
index 71eadbc..71c0fe4 100644
--- a/core/common/pom.xml
+++ b/core/common/pom.xml
@@ -33,6 +33,10 @@
<dependencies>
<dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-api</artifactId>
</dependency>
diff --git a/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java b/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
index 1b1c23b..54f0fb8 100644
--- a/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
+++ b/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
@@ -20,6 +20,7 @@
import com.google.common.io.ByteStreams;
import com.google.common.io.Files;
import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.configuration.XMLConfiguration;
import org.onlab.util.Tools;
import org.onosproject.app.ApplicationDescription;
@@ -28,9 +29,11 @@
import org.onosproject.app.ApplicationStoreDelegate;
import org.onosproject.app.DefaultApplicationDescription;
import org.onosproject.core.ApplicationRole;
-import org.onosproject.core.Permission;
import org.onosproject.core.Version;
+import org.onosproject.security.AppPermission;
+import org.onosproject.security.Permission;
import org.onosproject.store.AbstractStore;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -79,7 +82,9 @@
private static final String DESCRIPTION = "description";
private static final String ROLE = "security.role";
- private static final String PERMISSIONS = "security.permissions.permission";
+ private static final String APP_PERMISSIONS = "security.permissions.app-perm";
+ private static final String NET_PERMISSIONS = "security.permissions.net-perm";
+ private static final String JAVA_PERMISSIONS = "security.permissions.java-perm";
private static final String OAR = ".oar";
private static final String APP_XML = "app.xml";
@@ -386,13 +391,25 @@
// Returns the set of Permissions specified in the app.xml file
private ImmutableSet<Permission> getPermissions(XMLConfiguration cfg) {
List<Permission> permissionList = new ArrayList();
- for (Object o : cfg.getList(PERMISSIONS)) {
+
+ for (Object o : cfg.getList(APP_PERMISSIONS)) {
String name = (String) o;
- try {
- Permission perm = Permission.valueOf(name);
- permissionList.add(perm);
- } catch (IllegalArgumentException e) {
- log.debug("Unknown permission specified: %s", name);
+ permissionList.add(new Permission(AppPermission.class.getName(), name));
+ }
+ for (Object o : cfg.getList(NET_PERMISSIONS)) {
+ //TODO: TO BE FLESHED OUT WHEN NETWORK PERMISSIONS ARE SUPPORTED
+ break;
+ }
+
+ List<HierarchicalConfiguration> fields =
+ cfg.configurationsAt(JAVA_PERMISSIONS);
+ for (HierarchicalConfiguration sub : fields) {
+ String classname = sub.getString("classname");
+ String name = sub.getString("name");
+ String actions = sub.getString("actions");
+
+ if (classname != null && name != null) {
+ permissionList.add(new Permission(classname, name, actions));
}
}
return ImmutableSet.copyOf(permissionList);
diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleApplicationStore.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleApplicationStore.java
index d38b801..ea9a773 100644
--- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleApplicationStore.java
+++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleApplicationStore.java
@@ -31,7 +31,7 @@
import org.onosproject.core.ApplicationId;
import org.onosproject.core.ApplicationIdStore;
import org.onosproject.core.DefaultApplication;
-import org.onosproject.core.Permission;
+import org.onosproject.security.Permission;
import org.slf4j.Logger;
import java.io.InputStream;
diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleApplicationStoreTest.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleApplicationStoreTest.java
index 9631bd3..a1c7da3 100644
--- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleApplicationStoreTest.java
+++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleApplicationStoreTest.java
@@ -28,7 +28,8 @@
import org.onosproject.core.ApplicationId;
import org.onosproject.core.ApplicationIdStoreAdapter;
import org.onosproject.core.DefaultApplicationId;
-import org.onosproject.core.Permission;
+import org.onosproject.security.AppPermission;
+import org.onosproject.security.Permission;
import java.io.File;
import java.io.IOException;
@@ -114,7 +115,8 @@
@Test
public void permissions() {
Application app = createTestApp();
- ImmutableSet<Permission> permissions = ImmutableSet.of(Permission.FLOWRULE_WRITE);
+ ImmutableSet<Permission> permissions =
+ ImmutableSet.of(new Permission(AppPermission.class.getName(), "FLOWRULE_WRITE"));
store.setPermissions(app.id(), permissions);
assertEquals("incorrect app perms", 1, store.getPermissions(app.id()).size());
assertEquals("incorrect app state", INSTALLED, store.getState(app.id()));
diff --git a/core/common/src/test/resources/org/onosproject/common/app/app.xml b/core/common/src/test/resources/org/onosproject/common/app/app.xml
index 4a8d0f7..0d91a73 100644
--- a/core/common/src/test/resources/org/onosproject/common/app/app.xml
+++ b/core/common/src/test/resources/org/onosproject/common/app/app.xml
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2015 Open Networking Laboratory
~
@@ -21,8 +20,10 @@
<security>
<role>ADMIN</role>
<permissions>
- <permission>FLOWRULE_WRITE</permission>
- <permission>FLOWRULE_READ</permission>
+ <app-perm>FLOWRULE_WRITE</app-perm>
+ <app-perm>FLOWRULE_READ</app-perm>
</permissions>
+
</security>
+
</app>
diff --git a/core/common/src/test/resources/org/onosproject/common/app/app.zip b/core/common/src/test/resources/org/onosproject/common/app/app.zip
index 0313f50..436cd75 100644
--- a/core/common/src/test/resources/org/onosproject/common/app/app.zip
+++ b/core/common/src/test/resources/org/onosproject/common/app/app.zip
Binary files differ