Skip to content

Commit bd2898e

Browse files
committed
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.yadav@shapeblue.com>
1 parent f7821ec commit bd2898e

2 files changed

Lines changed: 81 additions & 0 deletions

File tree

server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
http://www.springframework.org/schema/util/spring-util-3.0.xsd"
3333
>
3434

35+
<bean id="authenticationManagerImpl" class="com.cloud.api.auth.APIAuthenticationManagerImpl" />
36+
3537
<bean id="accountManagerImpl" class="com.cloud.user.AccountManagerImpl">
3638
<property name="userAuthenticators"
3739
value="#{userAuthenticatorsRegistry.registered}" />
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// Licensed to the Apache Software Foundation (ASF) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The ASF licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
package com.cloud.api.auth;
18+
19+
import com.cloud.utils.component.ComponentContext;
20+
import com.cloud.utils.component.ManagerBase;
21+
import org.apache.cloudstack.api.APICommand;
22+
import org.apache.log4j.Logger;
23+
24+
import javax.ejb.Local;
25+
import java.util.ArrayList;
26+
import java.util.HashMap;
27+
import java.util.List;
28+
import java.util.Map;
29+
30+
@Local(value = APIAuthenticationManager.class)
31+
@SuppressWarnings("unchecked")
32+
public class APIAuthenticationManagerImpl extends ManagerBase implements APIAuthenticationManager {
33+
public static final Logger s_logger = Logger.getLogger(APIAuthenticationManagerImpl.class.getName());
34+
35+
private static Map<String, Class<?>> s_authenticators = null;
36+
private static List<Class<?>> s_commandList = null;
37+
38+
public APIAuthenticationManagerImpl() {
39+
}
40+
41+
@Override
42+
public boolean start() {
43+
s_authenticators = new HashMap<String, Class<?>>();
44+
for (Class<?> authenticator: getCommands()) {
45+
APICommand command = authenticator.getAnnotation(APICommand.class);
46+
if (command != null && !command.name().isEmpty()
47+
&& APIAuthenticator.class.isAssignableFrom(authenticator)) {
48+
s_authenticators.put(command.name(), authenticator);
49+
}
50+
}
51+
return true;
52+
}
53+
54+
@Override
55+
public List<Class<?>> getCommands() {
56+
if (s_commandList == null) {
57+
s_commandList = new ArrayList<Class<?>>();
58+
s_commandList.add(DefaultLoginAPIAuthenticatorCmd.class);
59+
s_commandList.add(DefaultLogoutAPIAuthenticatorCmd.class);
60+
}
61+
return s_commandList;
62+
}
63+
64+
@Override
65+
public APIAuthenticator getAPIAuthenticator(String name) {
66+
APIAuthenticator apiAuthenticator = null;
67+
if (s_authenticators != null && s_authenticators.containsKey(name)) {
68+
try {
69+
apiAuthenticator = (APIAuthenticator) s_authenticators.get(name).newInstance();
70+
apiAuthenticator = ComponentContext.inject(apiAuthenticator);
71+
} catch (InstantiationException | IllegalAccessException e) {
72+
if (s_logger.isDebugEnabled()) {
73+
s_logger.debug("APIAuthenticationManagerImpl::getAPIAuthenticator failed: " + e.getMessage());
74+
}
75+
}
76+
}
77+
return apiAuthenticator;
78+
}
79+
}

0 commit comments

Comments
 (0)