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 <bhaisaab@apache.org>
This commit is contained in:
Rohit Yadav 2012-12-11 14:17:47 -08:00
parent 79b54e6ac1
commit c455cf9271
1 changed files with 17 additions and 7 deletions

View File

@ -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();