X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fweb%2Ftopology%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Ftopology%2Fweb%2FTopology.java;h=31d743ee2308712d2b5df3d174b7e8ebdb89748c;hb=d705a30688edd834d8e27ef411b0eff847764ee0;hp=62b64a51849ea2ee08c4b9f43cffca8439bd5cad;hpb=8398f3adb544427642694be13abe9c3bc1a4e192;p=controller.git diff --git a/opendaylight/web/topology/src/main/java/org/opendaylight/controller/topology/web/Topology.java b/opendaylight/web/topology/src/main/java/org/opendaylight/controller/topology/web/Topology.java index 62b64a5184..31d743ee23 100644 --- a/opendaylight/web/topology/src/main/java/org/opendaylight/controller/topology/web/Topology.java +++ b/opendaylight/web/topology/src/main/java/org/opendaylight/controller/topology/web/Topology.java @@ -25,12 +25,11 @@ import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.opendaylight.controller.configuration.IConfigurationAware; -import org.opendaylight.controller.containermanager.IContainerAuthorization; -import org.opendaylight.controller.sal.authorization.Resource; -import org.opendaylight.controller.sal.authorization.UserLevel; +import org.opendaylight.controller.sal.authorization.Privilege; import org.opendaylight.controller.sal.core.Bandwidth; import org.opendaylight.controller.sal.core.Edge; import org.opendaylight.controller.sal.core.Host; +import org.opendaylight.controller.sal.core.Name; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.core.Node.NodeIDType; import org.opendaylight.controller.sal.core.NodeConnector; @@ -47,9 +46,7 @@ import org.opendaylight.controller.switchmanager.ISwitchManager; import org.opendaylight.controller.switchmanager.Switch; import org.opendaylight.controller.switchmanager.SwitchConfig; import org.opendaylight.controller.topologymanager.ITopologyManager; -import org.opendaylight.controller.usermanager.IUserManager; import org.opendaylight.controller.web.DaylightWebUtil; -import org.opendaylight.controller.web.IDaylightWeb; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -92,7 +89,15 @@ public class Topology implements IObjectReader, IConfigurationAware { @RequestMapping(value = "/visual.json", method = RequestMethod.GET) @ResponseBody public Collection> getLinkData(@RequestParam(required = false) String container, HttpServletRequest request) { - String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this); + String containerName = (container == null) ? GlobalConstants.DEFAULT.toString() : container; + + // Derive the privilege this user has on the current container + String userName = request.getUserPrincipal().getName(); + Privilege privilege = DaylightWebUtil.getContainerPrivilege(userName, containerName, this); + + if (privilege == Privilege.NONE) { + return null; + } ITopologyManager topologyManager = (ITopologyManager) ServiceHelper .getInstance(ITopologyManager.class, containerName, this); @@ -191,7 +196,14 @@ public class Topology implements IObjectReader, IConfigurationAware { break; } } - EdgeBean edge = new EdgeBean(link, bandwidth); + NodeConnector headNodeConnector = link.getHeadNodeConnector(); + NodeConnector tailNodeConnector = link.getTailNodeConnector(); + + String headDescription = this.getNodeConnectorDescription(headNodeConnector, switchManager); + String tailDescription = this.getNodeConnectorDescription(tailNodeConnector, switchManager); + String headPortDescription = this.getNodeConnectorPortDescription(headNodeConnector, switchManager); + String tailPortDescription = this.getNodeConnectorPortDescription(tailNodeConnector, switchManager); + EdgeBean edge = new EdgeBean(link, bandwidth, headDescription, tailDescription, headPortDescription, tailPortDescription); adjacencies.add(edge.out()); } @@ -254,11 +266,32 @@ public class Topology implements IObjectReader, IConfigurationAware { } protected NodeBean createNodeBean(String description, Node node) { + String name = this.getDescription(description, node); + return new NodeBean(node.toString(), name, NodeType.NODE); + } + + private String getDescription(String description, Node node) { String name = (description == null || - description.trim().isEmpty() || - description.equalsIgnoreCase("none"))? - node.toString() : description; - return new NodeBean(node.toString(), name, NodeType.NODE); + description.trim().isEmpty() || + description.equalsIgnoreCase("none"))? + node.toString() : description; + return name; + } + + private String getNodeConnectorDescription(NodeConnector nodeConnector, ISwitchManager switchManager) { + Node node = nodeConnector.getNode(); + String description = switchManager.getNodeDescription(node); + String name = this.getDescription(description, node); + return name; + } + + private String getNodeConnectorPortDescription(NodeConnector nodeConnector, ISwitchManager switchManager) { + Name ncName = (Name) switchManager.getNodeConnectorProp(nodeConnector, Name.NamePropName); + String nodeConnectorName = nodeConnector.getNodeConnectorIDString(); + if (ncName != null) { + nodeConnectorName = ncName.getValue(); + } + return nodeConnectorName; } @SuppressWarnings("unchecked") @@ -384,11 +417,15 @@ public class Topology implements IObjectReader, IConfigurationAware { public Map post(@PathVariable String nodeId, @RequestParam(required = true) String x, @RequestParam(required = true) String y, @RequestParam(required = false) String container, HttpServletRequest request) { - if (!authorize(UserLevel.NETWORKADMIN, request)) { - return new HashMap(); // silently disregard new node position - } + String containerName = (container == null) ? GlobalConstants.DEFAULT.toString() : container; + + // Derive the privilege this user has on the current container + String userName = request.getUserPrincipal().getName(); + Privilege privilege = DaylightWebUtil.getContainerPrivilege(userName, containerName, this); - String containerName = getAuthorizedContainer(request, container); + if (privilege != Privilege.WRITE) { + return new HashMap(); // silently disregard new node position + } String id = new String(nodeId); @@ -465,36 +502,47 @@ public class Topology implements IObjectReader, IConfigurationAware { data = new HashMap(); } - public EdgeBean(Edge link, Bandwidth bandwidth) { - this(); - this.source = link.getHeadNodeConnector(); - this.destination = link.getTailNodeConnector(); - - // data - data.put("$bandwidth", bandwidth.toString()); - data.put("$color", bandwidthColor(bandwidth)); - data.put("$nodeToPort", destination.getID().toString()); - data.put("$nodeFromPort", source.getID().toString()); - data.put("$descFrom", source.getNode().toString()); - data.put("$descTo", destination.getNode().toString()); - data.put("$nodeFromPortName", source.toString()); - data.put("$nodeToPortName", destination.toString()); + /** + * EdgeBean object that includes complete node description + * + * @param link + * @param bandwidth + * @param headDescription + * @param tailDescription + */ + public EdgeBean(Edge link, Bandwidth bandwidth, String headDescription, + String tailDescription, String headPortDescription, String tailPortDescription) { + this(); + this.source = link.getHeadNodeConnector(); + this.destination = link.getTailNodeConnector(); + + // data + data.put("$bandwidth", bandwidth.toString()); + data.put("$color", bandwidthColor(bandwidth)); + data.put("$nodeToPort", destination.getID().toString()); + data.put("$nodeFromPort", source.getID().toString()); + data.put("$descFrom", headDescription); + data.put("$descTo", tailDescription); + data.put("$nodeFromPortName", source.toString()); + data.put("$nodeToPortName", destination.toString()); + data.put("$nodeFromPortDescription", headPortDescription); + data.put("$nodeToPortDescription", tailPortDescription); } public EdgeBean(NodeConnector connector, Long hostId) { - this(); - this.source = null; - this.destination = connector; - this.hostId = hostId; - - data.put("$bandwidth", "N/A"); - data.put("$color", bandwidthColor(new Bandwidth(0))); - data.put("$nodeToPort", connector.getNodeConnectorIDString()); - data.put("$nodeFromPort", connector.getNodeConnectorIDString()); - data.put("$descTo", ""); - data.put("$descFrom", ""); - data.put("$nodeToPortName", ""); - data.put("$nodeFromPortName", ""); + this(); + this.source = null; + this.destination = connector; + this.hostId = hostId; + + data.put("$bandwidth", "N/A"); + data.put("$color", bandwidthColor(new Bandwidth(0))); + data.put("$nodeToPort", connector.getNodeConnectorIDString()); + data.put("$nodeFromPort", connector.getNodeConnectorIDString()); + data.put("$descTo", ""); + data.put("$descFrom", ""); + data.put("$nodeToPortName", ""); + data.put("$nodeFromPortName", ""); } public Map out() { @@ -539,51 +587,13 @@ public class Topology implements IObjectReader, IConfigurationAware { public static final String HOST = "host"; } - private boolean authorize(UserLevel level, HttpServletRequest request) { - IUserManager userManager = (IUserManager) ServiceHelper - .getGlobalInstance(IUserManager.class, this); - if (userManager == null) { - return false; - } - - String username = request.getUserPrincipal().getName(); - UserLevel userLevel = userManager.getUserLevel(username); - if (userLevel.toNumber() <= level.toNumber()) { - return true; - } - return false; - } - - private String getAuthorizedContainer(HttpServletRequest request, String container) { - String username = request.getUserPrincipal().getName(); - IContainerAuthorization containerAuthorization = (IContainerAuthorization) ServiceHelper. - getGlobalInstance(IContainerAuthorization.class, this); - if (containerAuthorization != null) { - Set resources = containerAuthorization.getAllResourcesforUser(username); - if (authorizeContainer(container, resources)) { - return container; - } - } - - return GlobalConstants.DEFAULT.toString(); - } - - private boolean authorizeContainer(String container, Set resources) { - for(Resource resource : resources) { - String containerName = (String) resource.getResource(); - if (containerName.equals(container)) { - return true; - } - } - - return false; - } - @SuppressWarnings("unchecked") private void loadConfiguration() { ObjectReader objReader = new ObjectReader(); metaCache = (Map>>) objReader.read(this, topologyWebFileName); - if (metaCache == null) metaCache = new HashMap>>(); + if (metaCache == null) { + metaCache = new HashMap>>(); + } } @Override