X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fweb%2Fdevices%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fdevices%2Fweb%2FDevices.java;h=ec59ab740b76e14ca69b6e39643b4a20761fc1ae;hb=3de02c0d3a9fad575f326f022a562042e3034fbe;hp=5be771af9636967e9e076de98bfc7b60a2895ab2;hpb=f69c674bc091ea5f70bde33fc45ca7e181c2f6e0;p=controller.git diff --git a/opendaylight/web/devices/src/main/java/org/opendaylight/controller/devices/web/Devices.java b/opendaylight/web/devices/src/main/java/org/opendaylight/controller/devices/web/Devices.java index 5be771af96..ec59ab740b 100644 --- a/opendaylight/web/devices/src/main/java/org/opendaylight/controller/devices/web/Devices.java +++ b/opendaylight/web/devices/src/main/java/org/opendaylight/controller/devices/web/Devices.java @@ -16,11 +16,13 @@ import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; import java.util.concurrent.ConcurrentMap; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.codehaus.jackson.map.ObjectMapper; import org.opendaylight.controller.usermanager.IUserManager; -import org.opendaylight.controller.web.IOneWeb; -import org.springframework.security.core.context.SecurityContextHolder; +import org.opendaylight.controller.web.DaylightWebUtil; +import org.opendaylight.controller.web.IDaylightWeb; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -29,6 +31,7 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.opendaylight.controller.forwarding.staticrouting.IForwardingStaticRouting; import org.opendaylight.controller.forwarding.staticrouting.StaticRouteConfig; import org.opendaylight.controller.sal.authorization.UserLevel; +import org.opendaylight.controller.sal.core.Config; import org.opendaylight.controller.sal.core.Name; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.core.NodeConnector; @@ -48,15 +51,14 @@ import com.google.gson.Gson; @Controller @RequestMapping("/") -public class Devices implements IOneWeb { +public class Devices implements IDaylightWeb { private static final UserLevel AUTH_LEVEL = UserLevel.CONTAINERUSER; private final String WEB_NAME = "Devices"; private final String WEB_ID = "devices"; private final short WEB_ORDER = 1; - private final String containerName = GlobalConstants.DEFAULT.toString(); public Devices() { - ServiceHelper.registerGlobalService(IOneWeb.class, this, null); + ServiceHelper.registerGlobalService(IDaylightWeb.class, this, null); } @Override @@ -81,8 +83,9 @@ public class Devices implements IOneWeb { @RequestMapping(value = "/nodesLearnt", method = RequestMethod.GET) @ResponseBody - public DevicesJsonBean getNodesLearnt() { + public DevicesJsonBean getNodesLearnt(HttpServletRequest request, @RequestParam(required = false) String container) { Gson gson = new Gson(); + String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); ISwitchManager switchManager = (ISwitchManager) ServiceHelper .getInstance(ISwitchManager.class, containerName, this); List> nodeData = new ArrayList>(); @@ -94,14 +97,14 @@ public class Devices implements IOneWeb { nodeDatum.put("containerName", containerName); nodeDatum.put("nodeName", switchManager.getNodeDescription(node)); - nodeDatum.put("nodeId", node.getNodeIDString()); + nodeDatum.put("nodeId", node.toString()); int tierNumber = (tier == null) ? TierHelper.unknownTierNumber : tier.getValue(); nodeDatum.put("tierName", TierHelper.getTierName(tierNumber) + " (Tier-" + tierNumber + ")"); nodeDatum.put("tier", tierNumber + ""); SwitchConfig sc = switchManager.getSwitchConfig(device.getNode() - .getNodeIDString()); + .toString()); String modeStr = (sc != null) ? sc.getMode() : "0"; nodeDatum.put("mode", modeStr); @@ -110,23 +113,36 @@ public class Devices implements IOneWeb { HexEncode.bytesToHexString(device.getDataLayerAddress())); StringBuffer sb1 = new StringBuffer(); Set nodeConnectorSet = device.getNodeConnectors(); - String nodeConnectorName; - String nodeConnectorNumberToStr; if (nodeConnectorSet != null && nodeConnectorSet.size() > 0) { Map portList = new HashMap(); for (NodeConnector nodeConnector : nodeConnectorSet) { - nodeConnectorNumberToStr = nodeConnector.getID().toString(); - Name ncName = ((Name) switchManager + String nodeConnectorNumberToStr = nodeConnector.getID().toString(); + Name ncName = ((Name) switchManager.getNodeConnectorProp( + nodeConnector, Name.NamePropName)); + Config portStatus = ((Config) switchManager .getNodeConnectorProp(nodeConnector, - Name.NamePropName)); - nodeConnectorName = (ncName != null) ? ncName.getValue() : ""; + Config.ConfigPropName)); + + String nodeConnectorName = (ncName != null) ? ncName.getValue() + : ""; + nodeConnectorName += " ("+nodeConnector.getID()+")"; + + if (portStatus != null) { + if (portStatus.getValue() == Config.ADMIN_UP) { + nodeConnectorName = ""+nodeConnectorName+""; + } else if (portStatus.getValue() == Config.ADMIN_DOWN) { + nodeConnectorName = ""+nodeConnectorName+""; + } + } + portList.put(Short.parseShort(nodeConnectorNumberToStr), nodeConnectorName); } - Map sortedPortList = new TreeMap( - portList); + + Map sortedPortList = new TreeMap(portList); + for (Entry e : sortedPortList.entrySet()) { - sb1.append(e.getValue() + "(" + e.getKey() + ")"); + sb1.append(e.getValue()); sb1.append("
"); } } @@ -141,7 +157,8 @@ public class Devices implements IOneWeb { columnNames.add("Tier"); columnNames.add("Mac Address"); columnNames.add("Ports"); - + columnNames.add("Port Status"); + result.setColumnNames(columnNames); return result; } @@ -151,19 +168,21 @@ public class Devices implements IOneWeb { public List getTiers() { return TierHelper.getTiers(); } - + @RequestMapping(value = "/nodesLearnt/update", method = RequestMethod.GET) @ResponseBody public StatusJsonBean updateLearntNode( @RequestParam("nodeName") String nodeName, @RequestParam("nodeId") String nodeId, @RequestParam("tier") String tier, - @RequestParam("operationMode") String operationMode) { - if (!authorize(UserLevel.NETWORKADMIN)) { - return unauthorizedMessage(); - } - - StatusJsonBean resultBean = new StatusJsonBean(); + @RequestParam("operationMode") String operationMode, + HttpServletRequest request, @RequestParam(required = false) String container) { + if (!authorize(UserLevel.NETWORKADMIN, request)) { + return unauthorizedMessage(); + } + + StatusJsonBean resultBean = new StatusJsonBean(); + String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); try { ISwitchManager switchManager = (ISwitchManager) ServiceHelper .getInstance(ISwitchManager.class, containerName, this); @@ -182,10 +201,15 @@ public class Devices implements IOneWeb { @RequestMapping(value = "/staticRoutes", method = RequestMethod.GET) @ResponseBody - public DevicesJsonBean getStaticRoutes() { + public DevicesJsonBean getStaticRoutes(HttpServletRequest request, @RequestParam(required = false) String container) { Gson gson = new Gson(); + String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); IForwardingStaticRouting staticRouting = (IForwardingStaticRouting) ServiceHelper - .getInstance(IForwardingStaticRouting.class, containerName, this); + .getInstance(IForwardingStaticRouting.class, containerName, + this); + if (staticRouting == null) { + return null; + } List> staticRoutes = new ArrayList>(); ConcurrentMap routeConfigs = staticRouting .getStaticRouteConfigs(); @@ -212,12 +236,14 @@ public class Devices implements IOneWeb { public StatusJsonBean addStaticRoute( @RequestParam("routeName") String routeName, @RequestParam("staticRoute") String staticRoute, - @RequestParam("nextHop") String nextHop) { - if (!authorize(UserLevel.NETWORKADMIN)) { - return unauthorizedMessage(); - } - + @RequestParam("nextHop") String nextHop, + HttpServletRequest request, @RequestParam(required = false) String container) { + if (!authorize(UserLevel.NETWORKADMIN, request)) { + return unauthorizedMessage(); + } + StatusJsonBean result = new StatusJsonBean(); + String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); try { IForwardingStaticRouting staticRouting = (IForwardingStaticRouting) ServiceHelper .getInstance(IForwardingStaticRouting.class, containerName, @@ -244,12 +270,14 @@ public class Devices implements IOneWeb { @RequestMapping(value = "/staticRoute/delete", method = RequestMethod.GET) @ResponseBody public StatusJsonBean deleteStaticRoute( - @RequestParam("routesToDelete") String routesToDelete) { - if (!authorize(UserLevel.NETWORKADMIN)) { - return unauthorizedMessage(); - } - + @RequestParam("routesToDelete") String routesToDelete, + HttpServletRequest request, @RequestParam(required = false) String container) { + if (!authorize(UserLevel.NETWORKADMIN, request)) { + return unauthorizedMessage(); + } + StatusJsonBean resultBean = new StatusJsonBean(); + String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); try { IForwardingStaticRouting staticRouting = (IForwardingStaticRouting) ServiceHelper .getInstance(IForwardingStaticRouting.class, containerName, @@ -278,9 +306,10 @@ public class Devices implements IOneWeb { @RequestMapping(value = "/subnets", method = RequestMethod.GET) @ResponseBody - public DevicesJsonBean getSubnetGateways() { + public DevicesJsonBean getSubnetGateways(HttpServletRequest request, @RequestParam(required = false) String container) { Gson gson = new Gson(); List> subnets = new ArrayList>(); + String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); ISwitchManager switchManager = (ISwitchManager) ServiceHelper .getInstance(ISwitchManager.class, containerName, this); for (SubnetConfig conf : switchManager.getSubnetsConfigList()) { @@ -295,17 +324,19 @@ public class Devices implements IOneWeb { result.setNodeData(subnets); return result; } - + @RequestMapping(value = "/subnetGateway/add", method = RequestMethod.GET) @ResponseBody public StatusJsonBean addSubnetGateways( @RequestParam("gatewayName") String gatewayName, - @RequestParam("gatewayIPAddress") String gatewayIPAddress) { - if (!authorize(UserLevel.NETWORKADMIN)) { - return unauthorizedMessage(); - } + @RequestParam("gatewayIPAddress") String gatewayIPAddress, + HttpServletRequest request, @RequestParam(required = false) String container) { + if (!authorize(UserLevel.NETWORKADMIN, request)) { + return unauthorizedMessage(); + } StatusJsonBean resultBean = new StatusJsonBean(); + String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); try { ISwitchManager switchManager = (ISwitchManager) ServiceHelper .getInstance(ISwitchManager.class, containerName, this); @@ -329,12 +360,14 @@ public class Devices implements IOneWeb { @RequestMapping(value = "/subnetGateway/delete", method = RequestMethod.GET) @ResponseBody public StatusJsonBean deleteSubnetGateways( - @RequestParam("gatewaysToDelete") String gatewaysToDelete) { - if (!authorize(UserLevel.NETWORKADMIN)) { - return unauthorizedMessage(); - } - + @RequestParam("gatewaysToDelete") String gatewaysToDelete, + HttpServletRequest request, @RequestParam(required = false) String container) { + if (!authorize(UserLevel.NETWORKADMIN, request)) { + return unauthorizedMessage(); + } + StatusJsonBean resultBean = new StatusJsonBean(); + String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); try { ISwitchManager switchManager = (ISwitchManager) ServiceHelper .getInstance(ISwitchManager.class, containerName, this); @@ -361,12 +394,14 @@ public class Devices implements IOneWeb { public StatusJsonBean addSubnetGatewayPort( @RequestParam("portsName") String portsName, @RequestParam("ports") String ports, - @RequestParam("nodeId") String nodeId) { - if (!authorize(UserLevel.NETWORKADMIN)) { - return unauthorizedMessage(); - } - + @RequestParam("nodeId") String nodeId, + HttpServletRequest request, @RequestParam(required = false) String container) { + if (!authorize(UserLevel.NETWORKADMIN, request)) { + return unauthorizedMessage(); + } + StatusJsonBean resultBean = new StatusJsonBean(); + String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); try { ISwitchManager switchManager = (ISwitchManager) ServiceHelper .getInstance(ISwitchManager.class, containerName, this); @@ -392,12 +427,14 @@ public class Devices implements IOneWeb { @ResponseBody public StatusJsonBean deleteSubnetGatewayPort( @RequestParam("gatewayName") String gatewayName, - @RequestParam("nodePort") String nodePort) { - if (!authorize(UserLevel.NETWORKADMIN)) { - return unauthorizedMessage(); - } - + @RequestParam("nodePort") String nodePort, + HttpServletRequest request, @RequestParam(required = false) String container) { + if (!authorize(UserLevel.NETWORKADMIN, request)) { + return unauthorizedMessage(); + } + StatusJsonBean resultBean = new StatusJsonBean(); + String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); try { ISwitchManager switchManager = (ISwitchManager) ServiceHelper .getInstance(ISwitchManager.class, containerName, this); @@ -421,9 +458,10 @@ public class Devices implements IOneWeb { @RequestMapping(value = "/spanPorts", method = RequestMethod.GET) @ResponseBody - public DevicesJsonBean getSpanPorts() { + public DevicesJsonBean getSpanPorts(HttpServletRequest request, @RequestParam(required = false) String container) { Gson gson = new Gson(); List spanConfigs_json = new ArrayList(); + String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); ISwitchManager switchManager = (ISwitchManager) ServiceHelper .getInstance(ISwitchManager.class, containerName, this); for (SpanConfig conf : switchManager.getSpanConfigList()) { @@ -441,7 +479,7 @@ public class Devices implements IOneWeb { config.put(name, config_data.get(name)); // Add switch name value (non-configuration field) config.put("nodeName", - getNodeDesc(config_data.get("nodeId"))); + getNodeDesc(config_data.get("nodeId"), containerName)); } config.put("json", config_json); spanConfigs.add(config); @@ -457,7 +495,8 @@ public class Devices implements IOneWeb { @RequestMapping(value = "/nodeports") @ResponseBody - public Map getNodePorts() { + public Map getNodePorts(HttpServletRequest request, @RequestParam(required = false) String container) { + String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); ISwitchManager switchManager = (ISwitchManager) ServiceHelper .getInstance(ISwitchManager.class, containerName, this); if (switchManager == null) @@ -487,14 +526,17 @@ public class Devices implements IOneWeb { @RequestMapping(value = "/spanPorts/add", method = RequestMethod.GET) @ResponseBody - public StatusJsonBean addSpanPort(@RequestParam("jsonData") String jsonData) { - if (!authorize(UserLevel.NETWORKADMIN)) { - return unauthorizedMessage(); - } - + public StatusJsonBean addSpanPort( + @RequestParam("jsonData") String jsonData, + HttpServletRequest request, @RequestParam(required = false) String container) { + if (!authorize(UserLevel.NETWORKADMIN, request)) { + return unauthorizedMessage(); + } + StatusJsonBean resultBean = new StatusJsonBean(); try { Gson gson = new Gson(); + String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); ISwitchManager switchManager = (ISwitchManager) ServiceHelper .getInstance(ISwitchManager.class, containerName, this); SpanConfig cfgObject = gson.fromJson(jsonData, SpanConfig.class); @@ -517,14 +559,16 @@ public class Devices implements IOneWeb { @RequestMapping(value = "/spanPorts/delete", method = RequestMethod.GET) @ResponseBody public StatusJsonBean deleteSpanPorts( - @RequestParam("spanPortsToDelete") String spanPortsToDelete) { - if (!authorize(UserLevel.NETWORKADMIN)) { - return unauthorizedMessage(); - } - + @RequestParam("spanPortsToDelete") String spanPortsToDelete, + HttpServletRequest request, @RequestParam(required = false) String container) { + if (!authorize(UserLevel.NETWORKADMIN, request)) { + return unauthorizedMessage(); + } + StatusJsonBean resultBean = new StatusJsonBean(); try { Gson gson = new Gson(); + String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); ISwitchManager switchManager = (ISwitchManager) ServiceHelper .getInstance(ISwitchManager.class, containerName, this); String[] spans = spanPortsToDelete.split("###"); @@ -550,44 +594,61 @@ public class Devices implements IOneWeb { return resultBean; } - private String getNodeDesc(String nodeId) { + private String getNodeDesc(String nodeId, String containerName) { ISwitchManager switchManager = (ISwitchManager) ServiceHelper .getInstance(ISwitchManager.class, containerName, this); String description = ""; if (switchManager != null) { - description = switchManager - .getNodeDescription(Node.fromString(nodeId)); + description = switchManager.getNodeDescription(Node + .fromString(nodeId)); } - return (description.isEmpty() || description.equalsIgnoreCase("none"))? - nodeId : description; + return (description.isEmpty() || description.equalsIgnoreCase("none")) ? nodeId + : description; } - /** * Is the operation permitted for the given level * * @param level */ - private boolean authorize(UserLevel level) { - IUserManager userManager = (IUserManager) ServiceHelper + private boolean authorize(UserLevel level, HttpServletRequest request) { + IUserManager userManager = (IUserManager) ServiceHelper .getGlobalInstance(IUserManager.class, this); if (userManager == null) { - return false; + return false; } - - String username = SecurityContextHolder.getContext().getAuthentication().getName(); + + String username = request.getUserPrincipal().getName(); UserLevel userLevel = userManager.getUserLevel(username); if (userLevel.toNumber() <= level.toNumber()) { - return true; + return true; } return false; } - + private StatusJsonBean unauthorizedMessage() { - StatusJsonBean message = new StatusJsonBean(); - message.setStatus(false); - message.setMessage("Operation not authorized"); - return message; + StatusJsonBean message = new StatusJsonBean(); + message.setStatus(false); + message.setMessage("Operation not authorized"); + return message; + } + + @RequestMapping(value = "login") + public String login(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:" + "/"; } }