You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2012/12/11 23:19:36 UTC

[1/3] git commit: api: refactor common code to get classname for an api in ApiServer

Updated Branches:
  refs/heads/api_refactoring f4892fbb8 -> c455cf927


api: refactor common code to get classname for an api in ApiServer

- Refactor common code to get classname from apiname
- Fix search mechanism within api access checker adapter to:
  * check permissions
  * get class name for an apiname

Signed-off-by: Rohit Yadav <bh...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/c455cf92
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/c455cf92
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/c455cf92

Branch: refs/heads/api_refactoring
Commit: c455cf9271042b7897a55fc12e96cc8ce2640259
Parents: 79b54e6
Author: Rohit Yadav <bh...@apache.org>
Authored: Tue Dec 11 14:17:47 2012 -0800
Committer: Rohit Yadav <bh...@apache.org>
Committed: Tue Dec 11 14:17:47 2012 -0800

----------------------------------------------------------------------
 server/src/com/cloud/api/ApiServer.java |   24 +++++++++++++++++-------
 1 files changed, 17 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c455cf92/server/src/com/cloud/api/ApiServer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java
index 2719765..38bae13 100755
--- a/server/src/com/cloud/api/ApiServer.java
+++ b/server/src/com/cloud/api/ApiServer.java
@@ -310,7 +310,8 @@ public class ApiServer implements HttpRequestHandler {
                     }
                     paramMap.put(key, decodedValue);
                 }
-                String cmdClassName = _apiCommands.getProperty(command[0]);
+
+                String cmdClassName = getCmdClassName(command[0]);
                 if (cmdClassName != null) {
                     Class<?> cmdClass = Class.forName(cmdClassName);
                     BaseCmd cmdObj = (BaseCmd) cmdClass.newInstance();
@@ -768,13 +769,22 @@ public class ApiServer implements HttpRequestHandler {
     }
 
     private boolean isCommandAvailable(User user, String commandName) {
-        boolean isCommandAvailable = false;
-
-        for(APIAccessChecker apichecker : _apiAccessCheckers){
-        	isCommandAvailable = apichecker.canAccessAPI(user, commandName);
+        for(APIAccessChecker apichecker : _apiAccessCheckers) {
+            if (apichecker.canAccessAPI(user, commandName))
+                return true;
         }
+        return false;
+    }
 
-        return isCommandAvailable;
+    private String getCmdClassName(String cmdName) {
+        String cmdClassName = null;
+        for(APIAccessChecker apiChecker : _apiAccessCheckers){
+            cmdClassName = apiChecker.getApiCommands().getProperty(cmdName);
+            // Break on the first non-null value
+            if (cmdClassName != null)
+                return cmdClassName;
+        }
+        return null;
     }
 
     // FIXME: rather than isError, we might was to pass in the status code to give more flexibility
@@ -921,7 +931,7 @@ public class ApiServer implements HttpRequestHandler {
                 // cmd name can be null when "command" parameter is missing in the request
                 if (cmdObj != null) {
                     String cmdName = ((String[]) cmdObj)[0];
-                    cmdClassName = _apiCommands.getProperty(cmdName);
+                    cmdClassName = getCmdClassName(cmdName);
                     if (cmdClassName != null) {
                         Class<?> claz = Class.forName(cmdClassName);
                         responseName = ((BaseCmd) claz.newInstance()).getCommandName();