API for accessing the controller version
[controller.git] / opendaylight / web / root / src / main / java / org / opendaylight / controller / web / DaylightWeb.java
index 24f0b4d80c77eb52cbff414f1900614b0521eaac..ca37f4b7c19658ca14facf9af29d6d83d2cd07cb 100644 (file)
@@ -8,14 +8,21 @@
 
 package org.opendaylight.controller.web;
 
+import java.io.FileInputStream;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
+import org.opendaylight.controller.configuration.IConfigurationContainerService;
 import org.opendaylight.controller.configuration.IConfigurationService;
+import org.opendaylight.controller.containermanager.IContainerAuthorization;
+import org.opendaylight.controller.sal.authorization.Privilege;
+import org.opendaylight.controller.sal.authorization.Resource;
 import org.opendaylight.controller.sal.authorization.UserLevel;
 import org.opendaylight.controller.sal.utils.ServiceHelper;
 import org.opendaylight.controller.sal.utils.Status;
@@ -23,6 +30,7 @@ import org.opendaylight.controller.sal.utils.StatusCode;
 import org.opendaylight.controller.usermanager.IUserManager;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -47,6 +55,23 @@ public class DaylightWeb {
         return "main";
     }
 
+    /**
+     * Read the version.properties file for the property
+     *
+     * @param request
+     * @return String value configured in the version.properties file
+     */
+    @RequestMapping(value="/versionProperty/{property}", method = RequestMethod.GET)
+    @ResponseBody
+    public String getVersion(HttpServletRequest request, @PathVariable("property") String property) {
+        Properties prop = new Properties();
+        try {
+            prop.load(new FileInputStream("version.properties"));
+            return prop.getProperty(property+".version");
+        } catch (Exception e) {
+            return null;
+        }
+    }
     @RequestMapping(value = "web.json")
     @ResponseBody
     public Map<String, Map<String, Object>> bundles(HttpServletRequest request) {
@@ -75,33 +100,68 @@ public class DaylightWeb {
     @ResponseBody
     public String save(HttpServletRequest request) {
         String username = request.getUserPrincipal().getName();
-        IUserManager userManager = (IUserManager) ServiceHelper
-                .getGlobalInstance(IUserManager.class, this);
+        IUserManager userManager = (IUserManager) ServiceHelper.getGlobalInstance(IUserManager.class, this);
         if (userManager == null) {
             return "User Manager is not available";
         }
-
         UserLevel level = userManager.getUserLevel(username);
-        if (level == UserLevel.NETWORKOPERATOR) {
-            return "Save not permitted for Operator";
-        }
-
-        Status status = new Status(StatusCode.UNAUTHORIZED,
-                "Operation not allowed for current user");
-        if (level == UserLevel.NETWORKADMIN || level == UserLevel.SYSTEMADMIN) {
-            IConfigurationService configService = (IConfigurationService) ServiceHelper
-                    .getGlobalInstance(IConfigurationService.class, this);
+        Status status;
+        switch (level) {
+        case SYSTEMADMIN:
+        case NETWORKADMIN:
+            IConfigurationService configService = (IConfigurationService) ServiceHelper.getGlobalInstance(
+                    IConfigurationService.class, this);
             if (configService != null) {
                 status = configService.saveConfigurations();
+            } else {
+                status = new Status(StatusCode.NOSERVICE, "Configuration Service is not available");
             }
+            break;
+        case NETWORKOPERATOR:
+        case CONTAINERUSER:
+            IContainerAuthorization containerAuth = (IContainerAuthorization) ServiceHelper.getGlobalInstance(
+                    IContainerAuthorization.class, this);
+            if (containerAuth != null) {
+                boolean oneSaved = false;
+                Set<Resource> authorizedContainers = containerAuth.getAllResourcesforUser(username);
+                if (authorizedContainers.isEmpty()) {
+                    status = new Status(StatusCode.UNAUTHORIZED, "User is not authorized for any container");
+                } else {
+                    for (Resource container : authorizedContainers) {
+                        if (container.getPrivilege() == Privilege.WRITE) {
+                            String containerName = (String)container.getResource();
+                            IConfigurationContainerService containerConfigService = (IConfigurationContainerService) ServiceHelper
+                                    .getInstance(IConfigurationContainerService.class, containerName, this);
+                            if (containerConfigService != null) {
+                                status = containerConfigService.saveConfigurations();
+                                if (status.isSuccess()) {
+                                    oneSaved = true;
+                                }
+                            }
+                        }
+                    }
+                    if (oneSaved) {
+                        status = new Status(StatusCode.SUCCESS);
+                    } else {
+                        status = new Status(StatusCode.UNAUTHORIZED, "Operation not allowed for current user");
+                    }
+                }
+            } else {
+                status = new Status(StatusCode.NOSERVICE, "Container Authorization Service is not available");
+            }
+            break;
+        case APPUSER:
+        case NOUSER:
+        default:
+            status = new Status(StatusCode.UNAUTHORIZED, "Operation not allowed for current user");
+            break;
         }
-
+        // This function will eventually return a Status
         return status.getDescription();
     }
 
     @RequestMapping(value = "logout")
-    public String login(Map<String, Object> model,
-            final HttpServletRequest request) {
+    public String logout(Map<String, Object> model, final HttpServletRequest request) {
 
         IUserManager userManager = (IUserManager) ServiceHelper
                 .getGlobalInstance(IUserManager.class, this);