Move adsal into its own subdirectory.
[controller.git] / opendaylight / adsal / web / root / src / main / java / org / opendaylight / controller / web / DaylightWeb.java
diff --git a/opendaylight/adsal/web/root/src/main/java/org/opendaylight/controller/web/DaylightWeb.java b/opendaylight/adsal/web/root/src/main/java/org/opendaylight/controller/web/DaylightWeb.java
new file mode 100644 (file)
index 0000000..ca37f4b
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+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;
+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;
+
+@Controller
+@RequestMapping("/")
+public class DaylightWeb {
+    @RequestMapping(value = "")
+    public String index(Model model, HttpServletRequest request) {
+        IUserManager userManager = (IUserManager) ServiceHelper
+                .getGlobalInstance(IUserManager.class, this);
+        if (userManager == null) {
+            return "User Manager is not available";
+        }
+
+        String username = request.getUserPrincipal().getName();
+
+        model.addAttribute("username", username);
+        model.addAttribute("role", userManager.getUserLevel(username)
+                .toNumber());
+
+        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) {
+        Object[] instances = ServiceHelper.getGlobalInstances(
+                IDaylightWeb.class, this, null);
+        Map<String, Map<String, Object>> bundles = new HashMap<String, Map<String, Object>>();
+        Map<String, Object> entry;
+        IDaylightWeb bundle;
+        String username = request.getUserPrincipal().getName();
+        IUserManager userManger = (IUserManager) ServiceHelper
+                .getGlobalInstance(IUserManager.class, this);
+        for (Object instance : instances) {
+            bundle = (IDaylightWeb) instance;
+            if (userManger != null
+                    && bundle.isAuthorized(userManger.getUserLevel(username))) {
+                entry = new HashMap<String, Object>();
+                entry.put("name", bundle.getWebName());
+                entry.put("order", bundle.getWebOrder());
+                bundles.put(bundle.getWebId(), entry);
+            }
+        }
+        return bundles;
+    }
+
+    @RequestMapping(value = "save", method = RequestMethod.POST)
+    @ResponseBody
+    public String save(HttpServletRequest request) {
+        String username = request.getUserPrincipal().getName();
+        IUserManager userManager = (IUserManager) ServiceHelper.getGlobalInstance(IUserManager.class, this);
+        if (userManager == null) {
+            return "User Manager is not available";
+        }
+        UserLevel level = userManager.getUserLevel(username);
+        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 logout(Map<String, Object> model, final HttpServletRequest request) {
+
+        IUserManager userManager = (IUserManager) ServiceHelper
+                .getGlobalInstance(IUserManager.class, this);
+        if (userManager == null) {
+            return "User Manager is not available";
+        }
+        String username = request.getUserPrincipal().getName();
+        HttpSession session = request.getSession(false);
+        if (session != null) {
+            if (username != null) {
+                userManager.userLogout(username);
+            }
+            session.invalidate();
+
+        }
+        return "redirect:" + "/";
+    }
+
+    @RequestMapping(value = "login")
+    public String login(Model model, final HttpServletRequest request,
+            final HttpServletResponse response) {
+        // response.setHeader("X-Page-Location", "/login");
+        IUserManager userManager = (IUserManager) ServiceHelper
+                .getGlobalInstance(IUserManager.class, this);
+        if (userManager == null) {
+            return "User Manager is not available";
+        }
+
+        String username = request.getUserPrincipal().getName();
+
+        model.addAttribute("username", username);
+        model.addAttribute("role", userManager.getUserLevel(username)
+                .toNumber());
+        return "forward:" + "/";
+    }
+
+}