X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fweb%2Fflows%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fflows%2Fweb%2FFlows.java;h=4cd71a37640ba2f303c04570eb9549c845a82816;hp=4396c957bf86f96f37c8784967bc4b605f2196a7;hb=962f8fca2c071ea388f69d18e5a3b427f66120c3;hpb=fab5707429f1232b70ad1046a2c7abd854e74f72 diff --git a/opendaylight/web/flows/src/main/java/org/opendaylight/controller/flows/web/Flows.java b/opendaylight/web/flows/src/main/java/org/opendaylight/controller/flows/web/Flows.java index 4396c957bf..4cd71a3764 100644 --- a/opendaylight/web/flows/src/main/java/org/opendaylight/controller/flows/web/Flows.java +++ b/opendaylight/web/flows/src/main/java/org/opendaylight/controller/flows/web/Flows.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.flows.web; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -47,11 +48,15 @@ import com.google.gson.Gson; 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 Gson gson; + public Flows() { ServiceHelper.registerGlobalService(IDaylightWeb.class, this, null); + gson = new Gson(); } @Override @@ -76,13 +81,16 @@ public class Flows implements IDaylightWeb { @RequestMapping(value = "/main") @ResponseBody - public Map getFlows(HttpServletRequest request, @RequestParam(required = false) String container) { - String containerName = (container == null) ? GlobalConstants.DEFAULT.toString() : container; + public Map getFlows(HttpServletRequest request, + @RequestParam(required = false) String container) { + 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) { + Privilege privilege = DaylightWebUtil.getContainerPrivilege(userName, + containerName, this); + if (privilege == Privilege.NONE) { return null; } @@ -113,7 +121,7 @@ public class Flows implements IDaylightWeb { flowSet.add(entry); } - Map output = new HashMap(2); + Map output = new HashMap(2); output.put("flows", flowSet); output.put("privilege", privilege); return output; @@ -121,12 +129,15 @@ public class Flows implements IDaylightWeb { @RequestMapping(value = "/node-ports") @ResponseBody - public Map getNodePorts(HttpServletRequest request, @RequestParam(required = false) String container) { - String containerName = (container == null) ? GlobalConstants.DEFAULT.toString() : container; + public Map getNodePorts(HttpServletRequest request, + @RequestParam(required = false) String container) { + String containerName = (container == null) ? GlobalConstants.DEFAULT + .toString() : container; // Derive the privilege this user has on the current container String userName = request.getUserPrincipal().getName(); - if (DaylightWebUtil.getContainerPrivilege(userName, containerName, this) == Privilege.NONE) { + if (DaylightWebUtil + .getContainerPrivilege(userName, containerName, this) == Privilege.NONE) { return null; } @@ -170,12 +181,15 @@ public class Flows implements IDaylightWeb { @RequestMapping(value = "/node-flows") @ResponseBody - public Map getNodeFlows(HttpServletRequest request, @RequestParam(required = false) String container) { - String containerName = (container == null) ? GlobalConstants.DEFAULT.toString() : container; + public Map getNodeFlows(HttpServletRequest request, + @RequestParam(required = false) String container) { + String containerName = (container == null) ? GlobalConstants.DEFAULT + .toString() : container; // Derive the privilege this user has on the current container String userName = request.getUserPrincipal().getName(); - if (DaylightWebUtil.getContainerPrivilege(userName, containerName, this) == Privilege.NONE) { + if (DaylightWebUtil + .getContainerPrivilege(userName, containerName, this) == Privilege.NONE) { return null; } @@ -198,10 +212,12 @@ public class Flows implements IDaylightWeb { List flows = frm.getStaticFlows(node); String nodeDesc = node.toString(); - SwitchConfig config = switchManager.getSwitchConfig(node - .toString()); - if ((config != null) && (config.getProperty(Description.propertyName) != null)) { - nodeDesc = ((Description) config.getProperty(Description.propertyName)).getValue(); + SwitchConfig config = switchManager + .getSwitchConfig(node.toString()); + if ((config != null) + && (config.getProperty(Description.propertyName) != null)) { + nodeDesc = ((Description) config + .getProperty(Description.propertyName)).getValue(); } nodes.put(nodeDesc, flows.size()); @@ -215,12 +231,15 @@ public class Flows implements IDaylightWeb { public String actionFlow(@RequestParam(required = true) String action, @RequestParam(required = false) String body, @RequestParam(required = true) String nodeId, - HttpServletRequest request, @RequestParam(required = false) String container) { - String containerName = (container == null) ? GlobalConstants.DEFAULT.toString() : container; + HttpServletRequest request, + @RequestParam(required = false) String container) { + String containerName = (container == null) ? GlobalConstants.DEFAULT + .toString() : container; // Authorization check String userName = request.getUserPrincipal().getName(); - if (DaylightWebUtil.getContainerPrivilege(userName, containerName, this) != Privilege.WRITE) { + if (DaylightWebUtil + .getContainerPrivilege(userName, containerName, this) != Privilege.WRITE) { return "Operation not authorized"; } @@ -230,13 +249,15 @@ public class Flows implements IDaylightWeb { return null; } - Gson gson = new Gson(); FlowConfig flow = gson.fromJson(body, FlowConfig.class); + Node node = Node.fromString(nodeId); flow.setNode(node); Status result = new Status(StatusCode.BADREQUEST, "Invalid request"); if (action.equals("add")) { result = frm.addStaticFlow(flow); + DaylightWebUtil.auditlog("Flow", userName, "added", flow.getName(), + containerName); } return (result.isSuccess()) ? StatusCode.SUCCESS.toString() : result @@ -248,12 +269,15 @@ public class Flows implements IDaylightWeb { public String removeFlow(@PathVariable("nodeId") String nodeId, @PathVariable("name") String name, @RequestParam(required = true) String action, - HttpServletRequest request, @RequestParam(required = false) String container) { - String containerName = (container == null) ? GlobalConstants.DEFAULT.toString() : container; + HttpServletRequest request, + @RequestParam(required = false) String container) { + String containerName = (container == null) ? GlobalConstants.DEFAULT + .toString() : container; // Authorization check String userName = request.getUserPrincipal().getName(); - if (DaylightWebUtil.getContainerPrivilege(userName, containerName, this) != Privilege.WRITE) { + if (DaylightWebUtil + .getContainerPrivilege(userName, containerName, this) != Privilege.WRITE) { return "Operation not authorized"; } @@ -270,8 +294,16 @@ public class Flows implements IDaylightWeb { } if (action.equals("remove")) { result = frm.removeStaticFlow(name, node); + if (result.isSuccess()) { + DaylightWebUtil.auditlog("Flow", userName, "removed", name, + containerName); + } } else if (action.equals("toggle")) { result = frm.toggleStaticFlowStatus(name, node); + if (result.isSuccess()) { + DaylightWebUtil.auditlog("Flow", userName, "toggled", name, + containerName); + } } else { result = new Status(StatusCode.BADREQUEST, "Unknown action"); } @@ -280,10 +312,57 @@ public class Flows implements IDaylightWeb { .getDescription(); } + @SuppressWarnings("unchecked") + @RequestMapping(value = "/flow/deleteFlows", method = RequestMethod.POST) + @ResponseBody + public String removeSelectedFlows( + @RequestParam(required = false) String body, + HttpServletRequest request, + @RequestParam(required = false) String container) { + String containerName = (container == null) ? GlobalConstants.DEFAULT + .toString() : container; + + // Authorization check + String userName = request.getUserPrincipal().getName(); + if (DaylightWebUtil + .getContainerPrivilege(userName, containerName, this) != Privilege.WRITE) { + return "Operation not authorized"; + } + + IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper + .getInstance(IForwardingRulesManager.class, containerName, this); + if (frm == null) { + return "Forwarding Rules Manager is not available"; + } + + List> flowList = new ArrayList>(); + flowList = gson.fromJson(body, flowList.getClass()); + Status result = new Status(StatusCode.BADREQUEST, "Invalid request"); + String status = ""; + for (Map flowEntry : flowList) { + Node node = Node.fromString(flowEntry.get("node")); + result = frm.removeStaticFlow(flowEntry.get("name"), node); + if (result.isSuccess()) { + DaylightWebUtil.auditlog("Flow", userName, "removed", + flowEntry.get("name"), containerName); + } else { + status = flowEntry.get("name") + ", " + status; + } + } + if (!status.equals("")) { + return "Could not remove " + + status.substring(0, status.length() - 2) + " Flow(s)"; + } else { + return "Success"; + } + } + private String getNodeDesc(Node node, ISwitchManager switchManager) { - Description desc = (Description) switchManager.getNodeProp(node, Description.propertyName); + Description desc = (Description) switchManager.getNodeProp(node, + Description.propertyName); String description = (desc == null) ? "" : desc.getValue(); - return (description.isEmpty() || description.equalsIgnoreCase("none")) ? node.toString() : description; + return (description.isEmpty() || description.equalsIgnoreCase("none")) ? node + .toString() : description; } }