-
/*
* Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
*
import java.util.Map;
import java.util.Set;
+import javax.servlet.http.HttpServletRequest;
+
import org.opendaylight.controller.forwardingrulesmanager.FlowConfig;
import org.opendaylight.controller.forwardingrulesmanager.IForwardingRulesManager;
import org.opendaylight.controller.sal.authorization.UserLevel;
import org.opendaylight.controller.sal.core.Name;
import org.opendaylight.controller.sal.core.Node;
import org.opendaylight.controller.sal.core.NodeConnector;
+import org.opendaylight.controller.sal.utils.GlobalConstants;
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.switchmanager.Switch;
import org.opendaylight.controller.switchmanager.SwitchConfig;
import org.opendaylight.controller.usermanager.IUserManager;
-import org.opendaylight.controller.web.IOneWeb;
-import org.springframework.security.core.context.SecurityContextHolder;
+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;
@Controller
@RequestMapping("/")
-public class Flows implements IOneWeb {
- private static final UserLevel AUTH_LEVEL = UserLevel.CONTAINERUSER;
- private final String WEB_NAME = "Flows";
- private final String WEB_ID = "flows";
- private final short WEB_ORDER = 2;
+public class Flows implements IDaylightWeb {
+ private static final UserLevel AUTH_LEVEL = UserLevel.CONTAINERUSER;
+ private static final String WEB_NAME = "Flows";
+ private static final String WEB_ID = "flows";
+ private static final short WEB_ORDER = 2;
+ private final String containerName = GlobalConstants.DEFAULT.toString();
public Flows() {
- ServiceHelper.registerGlobalService(IOneWeb.class, this, null);
+ ServiceHelper.registerGlobalService(IDaylightWeb.class, this, null);
}
@Override
return WEB_ORDER;
}
- @Override
- public boolean isAuthorized(UserLevel userLevel) {
- return userLevel.ordinal() <= AUTH_LEVEL.ordinal();
- }
-
+ @Override
+ public boolean isAuthorized(UserLevel userLevel) {
+ return userLevel.ordinal() <= AUTH_LEVEL.ordinal();
+ }
+
@RequestMapping(value = "/main")
@ResponseBody
public Set<Map<String, Object>> getFlows() {
// fetch frm
IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper
- .getInstance(IForwardingRulesManager.class, "default", this);
- if (frm == null)
+ .getInstance(IForwardingRulesManager.class, containerName, this);
+ if (frm == null) {
return null;
+ }
// fetch sm
ISwitchManager switchManager = (ISwitchManager) ServiceHelper
- .getInstance(ISwitchManager.class, "default", this);
- if (switchManager == null)
+ .getInstance(ISwitchManager.class, containerName, this);
+ if (switchManager == null) {
return null;
-
+ }
+
// get static flow list
List<FlowConfig> staticFlowList = frm.getStaticFlows();
Set<Map<String, Object>> output = new HashSet<Map<String, Object>>();
for (FlowConfig flowConfig : staticFlowList) {
- Map<String, Object> entry = new HashMap<String, Object>();
- entry.put("flow", flowConfig);
- entry.put("name", flowConfig.getName());
-
- Node node = flowConfig.getNode();
- SwitchConfig switchConfig = switchManager.getSwitchConfig(node.getNodeIDString());
- String nodeName = node.toString();
- if (switchConfig != null) { nodeName = switchConfig.getNodeName(); }
- entry.put("node", nodeName);
- entry.put("nodeId", node.toString());
- output.add(entry);
- }
-
+ Map<String, Object> entry = new HashMap<String, Object>();
+ entry.put("flow", flowConfig);
+ entry.put("name", flowConfig.getName());
+ Node node = flowConfig.getNode();
+ String description = switchManager.getNodeDescription(node);
+ entry.put("node", (description.isEmpty() || description
+ .equalsIgnoreCase("none")) ? node.toString() : description);
+ entry.put("nodeId", node.toString());
+ output.add(entry);
+ }
+
return output;
}
@ResponseBody
public Map<String, Object> getNodePorts() {
ISwitchManager switchManager = (ISwitchManager) ServiceHelper
- .getInstance(ISwitchManager.class, "default", this);
- if (switchManager == null)
+ .getInstance(ISwitchManager.class, containerName, this);
+ if (switchManager == null) {
return null;
+ }
Map<String, Object> nodes = new HashMap<String, Object>();
Map<Short, String> port;
port = new HashMap<Short, String>(); // new port
Set<NodeConnector> nodeConnectorSet = node.getNodeConnectors();
- if (nodeConnectorSet != null)
+ if (nodeConnectorSet != null) {
for (NodeConnector nodeConnector : nodeConnectorSet) {
String nodeConnectorName = ((Name) switchManager
.getNodeConnectorProp(nodeConnector,
Name.NamePropName)).getValue();
- port.put((Short) nodeConnector.getID(),
- nodeConnectorName + "("
- + nodeConnector.getNodeConnectorIDString() + ")");
+ port.put((Short) nodeConnector.getID(), nodeConnectorName
+ + "(" + nodeConnector.getNodeConnectorIDString()
+ + ")");
}
-
+ }
+
// add ports
Map<String, Object> entry = new HashMap<String, Object>();
entry.put("ports", port);
-
+
// add name
- String nodeName = node.getNode().toString();
- SwitchConfig config = switchManager.getSwitchConfig(node.getNode().getNodeIDString());
- if (config != null) {
- nodeName = config.getNodeName();
- }
- entry.put("name", nodeName);
-
+ String description = switchManager.getNodeDescription(node
+ .getNode());
+ entry.put("name", (description.isEmpty() || description
+ .equalsIgnoreCase("none")) ? node.getNode().toString()
+ : description);
+
// add to the node
nodes.put(node.getNode().toString(), entry);
}
return nodes;
}
-
+
@RequestMapping(value = "/node-flows")
@ResponseBody
public Map<String, Object> getNodeFlows() {
ISwitchManager switchManager = (ISwitchManager) ServiceHelper
- .getInstance(ISwitchManager.class, "default", this);
- if (switchManager == null) { return null; }
+ .getInstance(ISwitchManager.class, containerName, this);
+ if (switchManager == null) {
+ return null;
+ }
IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper
.getInstance(IForwardingRulesManager.class, "default", this);
- if (frm == null) { return null; }
+ if (frm == null) {
+ return null;
+ }
Map<String, Object> nodes = new HashMap<String, Object>();
for (Switch sw : switchManager.getNetworkDevices()) {
Node node = sw.getNode();
-
+
List<FlowConfig> flows = frm.getStaticFlows(node);
-
- String nodeName = node.toString();
- SwitchConfig config = switchManager.getSwitchConfig(node.getNodeIDString());
+
+ String nodeDesc = node.toString();
+ SwitchConfig config = switchManager.getSwitchConfig(node
+ .toString());
if (config != null) {
- nodeName = config.getNodeName();
+ nodeDesc = config.getNodeDescription();
}
-
- nodes.put(nodeName, flows.size());
+
+ nodes.put(nodeDesc, flows.size());
}
return nodes;
@RequestMapping(value = "/flow", method = RequestMethod.POST)
@ResponseBody
public String actionFlow(@RequestParam(required = true) String action,
- @RequestParam(required = false) String body, @RequestParam(required = true) String nodeId) {
- if (!authorize(UserLevel.NETWORKADMIN)) {
- return "Operation not authorized";
- }
-
+ @RequestParam(required = false) String body,
+ @RequestParam(required = true) String nodeId,
+ HttpServletRequest request) {
+ if (!isUserAuthorized(UserLevel.NETWORKADMIN, request)) {
+ return "Operation not authorized";
+ }
+
IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper
- .getInstance(IForwardingRulesManager.class, "default", this);
- if (frm == null) { return null; }
+ .getInstance(IForwardingRulesManager.class, containerName, this);
+ if (frm == null) {
+ return null;
+ }
Gson gson = new Gson();
FlowConfig flow = gson.fromJson(body, FlowConfig.class);
Node node = Node.fromString(nodeId);
flow.setNode(node);
- Status result = null;
+ Status result = new Status(StatusCode.BADREQUEST, "Invalid request");
if (action.equals("add")) {
result = frm.addStaticFlow(flow, false);
}
- return result.getDescription();
+ return (result.isSuccess()) ? StatusCode.SUCCESS.toString() : result
+ .getDescription();
}
-
+
@RequestMapping(value = "/flow/{nodeId}/{name}", method = RequestMethod.POST)
@ResponseBody
- public String removeFlow(@PathVariable("nodeId") String nodeId, @PathVariable("name") String name,
- @RequestParam(required = true) String action) {
- if (!authorize(UserLevel.NETWORKADMIN)) { return "Operation not authorized"; }
-
- IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper
- .getInstance(IForwardingRulesManager.class, "default", this);
- if (frm == null) { return null; }
-
+ public String removeFlow(@PathVariable("nodeId") String nodeId,
+ @PathVariable("name") String name,
+ @RequestParam(required = true) String action,
+ HttpServletRequest request) {
+ if (!isUserAuthorized(UserLevel.NETWORKADMIN, request)) {
+
+ return "Operation not authorized";
+ }
+
+ IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper
+ .getInstance(IForwardingRulesManager.class, containerName, this);
+ if (frm == null) {
+ return null;
+ }
+
Status result = null;
Node node = Node.fromString(nodeId);
if (node == null) {
return null;
}
if (action.equals("remove")) {
- result = frm.removeStaticFlow(name, node);
+ result = frm.removeStaticFlow(name, node);
} else if (action.equals("toggle")) {
- FlowConfig config = frm.getStaticFlow(name, node);
- result = frm.toggleStaticFlowStatus(config);
+ result = frm.toggleStaticFlowStatus(name, node);
} else {
- result = new Status(StatusCode.BADREQUEST, "Unknown action");
+ result = new Status(StatusCode.BADREQUEST, "Unknown action");
}
-
- return result.getDescription();
+
+ return (result.isSuccess()) ? StatusCode.SUCCESS.toString() : result
+ .getDescription();
}
-
+
/**
- * Is the operation permitted for the given level
+ * Returns whether the current user's level is same or above the required
+ * authorization level.
*
- * @param level
+ * @param requiredLevel
+ * the authorization level required
*/
- private boolean authorize(UserLevel level) {
- IUserManager userManager = (IUserManager) ServiceHelper
+ private boolean isUserAuthorized(UserLevel requiredLevel,
+ 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 false;
+ return (userLevel.ordinal() <= requiredLevel.ordinal());
}
}