APIAuthenticationManagerImpl: add the auth manager and bean entry in spring xmls

- This implements ManageBase, is a pluggable service
- Has a mechanism to return commands, useful for apidocs etc.
- Has a method to return APIAuthenticator based on API command name

Signed-off-by: Rohit Yadav <rohit.ya...@shapeblue.com>


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

Branch: refs/heads/master
Commit: bd2898e4917727311cb76dc66b689e10ed264e1d
Parents: f7821ec
Author: Rohit Yadav <rohit.ya...@shapeblue.com>
Authored: Tue Aug 12 07:30:25 2014 +0200
Committer: Rohit Yadav <rohit.ya...@shapeblue.com>
Committed: Tue Aug 12 12:01:30 2014 +0200

----------------------------------------------------------------------
 .../spring-server-core-managers-context.xml     |  2 +
 .../api/auth/APIAuthenticationManagerImpl.java  | 79 ++++++++++++++++++++
 2 files changed, 81 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bd2898e4/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
----------------------------------------------------------------------
diff --git 
a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
 
b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
index 1eba0b2..17681f7 100644
--- 
a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
+++ 
b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
@@ -32,6 +32,8 @@
                       
http://www.springframework.org/schema/util/spring-util-3.0.xsd";
                       >
 
+    <bean id="authenticationManagerImpl" 
class="com.cloud.api.auth.APIAuthenticationManagerImpl" />
+
     <bean id="accountManagerImpl" class="com.cloud.user.AccountManagerImpl">
         <property name="userAuthenticators"
             value="#{userAuthenticatorsRegistry.registered}" />

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bd2898e4/server/src/com/cloud/api/auth/APIAuthenticationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/auth/APIAuthenticationManagerImpl.java 
b/server/src/com/cloud/api/auth/APIAuthenticationManagerImpl.java
new file mode 100644
index 0000000..886d277
--- /dev/null
+++ b/server/src/com/cloud/api/auth/APIAuthenticationManagerImpl.java
@@ -0,0 +1,79 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.api.auth;
+
+import com.cloud.utils.component.ComponentContext;
+import com.cloud.utils.component.ManagerBase;
+import org.apache.cloudstack.api.APICommand;
+import org.apache.log4j.Logger;
+
+import javax.ejb.Local;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Local(value = APIAuthenticationManager.class)
+@SuppressWarnings("unchecked")
+public class APIAuthenticationManagerImpl extends ManagerBase implements 
APIAuthenticationManager {
+    public static final Logger s_logger = 
Logger.getLogger(APIAuthenticationManagerImpl.class.getName());
+
+    private static Map<String, Class<?>> s_authenticators = null;
+    private static List<Class<?>> s_commandList = null;
+
+    public APIAuthenticationManagerImpl() {
+    }
+
+    @Override
+    public boolean start() {
+        s_authenticators = new HashMap<String, Class<?>>();
+        for (Class<?> authenticator: getCommands()) {
+            APICommand command = authenticator.getAnnotation(APICommand.class);
+            if (command != null && !command.name().isEmpty()
+                    && APIAuthenticator.class.isAssignableFrom(authenticator)) 
{
+                s_authenticators.put(command.name(), authenticator);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public List<Class<?>> getCommands() {
+        if (s_commandList == null) {
+            s_commandList = new ArrayList<Class<?>>();
+            s_commandList.add(DefaultLoginAPIAuthenticatorCmd.class);
+            s_commandList.add(DefaultLogoutAPIAuthenticatorCmd.class);
+        }
+        return s_commandList;
+    }
+
+    @Override
+    public APIAuthenticator getAPIAuthenticator(String name) {
+        APIAuthenticator apiAuthenticator = null;
+        if (s_authenticators != null && s_authenticators.containsKey(name)) {
+            try {
+                apiAuthenticator = (APIAuthenticator) 
s_authenticators.get(name).newInstance();
+                apiAuthenticator = ComponentContext.inject(apiAuthenticator);
+            } catch (InstantiationException | IllegalAccessException e) {
+                if (s_logger.isDebugEnabled()) {
+                    
s_logger.debug("APIAuthenticationManagerImpl::getAPIAuthenticator failed: " + 
e.getMessage());
+                }
+            }
+        }
+        return apiAuthenticator;
+    }
+}

Reply via email to