mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge branch 'master' of https://github.com/wso2/carbon-device-mgt
This commit is contained in:
commit
1903b375f3
@ -184,7 +184,7 @@ public class OperationManagerImpl implements OperationManager {
|
|||||||
} finally {
|
} finally {
|
||||||
DeviceManagementDAOFactory.closeConnection();
|
DeviceManagementDAOFactory.closeConnection();
|
||||||
}
|
}
|
||||||
|
|
||||||
OperationManagementDAOFactory.openConnection();
|
OperationManagementDAOFactory.openConnection();
|
||||||
if (enrolmentId < 0) {
|
if (enrolmentId < 0) {
|
||||||
throw new OperationManagementException("Device not found for the given device Identifier:" +
|
throw new OperationManagementException("Device not found for the given device Identifier:" +
|
||||||
|
|||||||
@ -71,7 +71,8 @@
|
|||||||
org.wso2.carbon.user.api.*,
|
org.wso2.carbon.user.api.*,
|
||||||
org.wso2.carbon.device.mgt.core.*,
|
org.wso2.carbon.device.mgt.core.*,
|
||||||
org.wso2.carbon.device.mgt.common.*,
|
org.wso2.carbon.device.mgt.common.*,
|
||||||
org.wso2.carbon.ntask.*
|
org.wso2.carbon.ntask.*,
|
||||||
|
org.wso2.carbon.caching.*
|
||||||
</Import-Package>
|
</Import-Package>
|
||||||
<Export-Package>
|
<Export-Package>
|
||||||
!org.wso2.carbon.policy.mgt.core.internal,
|
!org.wso2.carbon.policy.mgt.core.internal,
|
||||||
|
|||||||
@ -21,26 +21,28 @@ package org.wso2.carbon.policy.mgt.core.cache.impl;
|
|||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
|
||||||
import org.wso2.carbon.policy.mgt.common.Policy;
|
import org.wso2.carbon.policy.mgt.common.Policy;
|
||||||
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
|
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
|
||||||
import org.wso2.carbon.policy.mgt.core.cache.PolicyCacheManager;
|
import org.wso2.carbon.policy.mgt.core.cache.PolicyCacheManager;
|
||||||
import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager;
|
import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager;
|
||||||
import org.wso2.carbon.policy.mgt.core.mgt.impl.PolicyManagerImpl;
|
import org.wso2.carbon.policy.mgt.core.mgt.impl.PolicyManagerImpl;
|
||||||
|
import org.wso2.carbon.policy.mgt.core.util.PolicyManagementConstants;
|
||||||
|
import org.wso2.carbon.policy.mgt.core.util.PolicyManagerUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import javax.cache.Cache;
|
||||||
import java.util.HashMap;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class PolicyCacheManagerImpl implements PolicyCacheManager {
|
public class PolicyCacheManagerImpl implements PolicyCacheManager {
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(PolicyCacheManagerImpl.class);
|
private static final Log log = LogFactory.getLog(PolicyCacheManagerImpl.class);
|
||||||
|
|
||||||
private static HashMap<Integer, HashMap<Integer, Policy>> tenantedPolicyMap = new HashMap<>();
|
|
||||||
|
|
||||||
private static PolicyCacheManagerImpl policyCacheManager;
|
private static PolicyCacheManagerImpl policyCacheManager;
|
||||||
|
|
||||||
|
private static Cache<Integer, List<Policy>> getPolicyListCache() {
|
||||||
|
return PolicyManagerUtil.getPolicyListCache(PolicyManagementConstants.DM_CACHE_LIST);
|
||||||
|
}
|
||||||
|
|
||||||
private PolicyCacheManagerImpl() {
|
private PolicyCacheManagerImpl() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,43 +59,36 @@ public class PolicyCacheManagerImpl implements PolicyCacheManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addAllPolicies(List<Policy> policies) {
|
public void addAllPolicies(List<Policy> policies) {
|
||||||
HashMap<Integer, Policy> map = this.getTenantRelatedMap();
|
|
||||||
if (map.isEmpty()) {
|
|
||||||
for (Policy policy : policies) {
|
|
||||||
map.put(policy.getId(), policy);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
Cache<Integer, List<Policy>> lCache = getPolicyListCache();
|
||||||
|
lCache.put(1, policies);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateAllPolicies(List<Policy> policies) {
|
public void updateAllPolicies(List<Policy> policies) {
|
||||||
HashMap<Integer, Policy> map = this.getTenantRelatedMap();
|
|
||||||
map.clear();
|
Cache<Integer, List<Policy>> lCache = getPolicyListCache();
|
||||||
if (map.isEmpty()) {
|
lCache.removeAll();
|
||||||
for (Policy policy : policies) {
|
lCache.put(1, policies);
|
||||||
map.put(policy.getId(), policy);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Policy> getAllPolicies() throws PolicyManagementException {
|
public List<Policy> getAllPolicies() throws PolicyManagementException {
|
||||||
HashMap<Integer, Policy> map = this.getTenantRelatedMap();
|
|
||||||
if (map.isEmpty()) {
|
Cache<Integer, List<Policy>> lCache = getPolicyListCache();
|
||||||
|
if (!lCache.containsKey(1)) {
|
||||||
PolicyManager policyManager = new PolicyManagerImpl();
|
PolicyManager policyManager = new PolicyManagerImpl();
|
||||||
this.addAllPolicies(policyManager.getPolicies());
|
this.addAllPolicies(policyManager.getPolicies());
|
||||||
}
|
}
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
log.debug("No of policies stored in the cache .. : " + map.size());
|
List<Policy> cachedPolicy = lCache.get(1);
|
||||||
|
for (Policy policy : cachedPolicy) {
|
||||||
Set<Integer> keySet = map.keySet();
|
log.debug("Policy id in cache .. : " + policy.getId() + " policy name : " + policy.
|
||||||
for (Integer x : keySet) {
|
getPolicyName() + " Activated : " + policy.isActive());
|
||||||
log.debug("Policy id in maps .. : " + map.get(x).getId() + " policy name : " + map.get(x).
|
|
||||||
getPolicyName() + " Activated : " + map.get(x).isActive());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new ArrayList<>(map.values());
|
return lCache.get(1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -105,59 +100,97 @@ public class PolicyCacheManagerImpl implements PolicyCacheManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeAllPolicies() {
|
public void removeAllPolicies() {
|
||||||
HashMap<Integer, Policy> map = this.getTenantRelatedMap();
|
|
||||||
map.clear();
|
Cache<Integer, List<Policy>> lCache = getPolicyListCache();
|
||||||
|
lCache.removeAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addPolicy(Policy policy) {
|
public void addPolicy(Policy policy) {
|
||||||
HashMap<Integer, Policy> map = this.getTenantRelatedMap();
|
|
||||||
if (!map.containsKey(policy.getId())) {
|
Cache<Integer, List<Policy>> lCache = getPolicyListCache();
|
||||||
map.put(policy.getId(), policy);
|
if (lCache.containsKey(1)) {
|
||||||
} else {
|
List<Policy> cachedPolicy = lCache.get(1);
|
||||||
log.warn("Policy id (" + policy.getId() + ") already exist in the map. hence not attempted to store.");
|
|
||||||
|
for (Policy pol : cachedPolicy) {
|
||||||
|
if (pol.getId() == policy.getId()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cachedPolicy.add(policy);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updatePolicy(Policy policy) {
|
public void updatePolicy(Policy policy) {
|
||||||
HashMap<Integer, Policy> map = this.getTenantRelatedMap();
|
|
||||||
if (map.containsKey(policy.getId())) {
|
Cache<Integer, List<Policy>> lCache = getPolicyListCache();
|
||||||
map.remove(policy.getId());
|
if (lCache.containsKey(1)) {
|
||||||
map.put(policy.getId(), policy);
|
List<Policy> cachedPolicy = lCache.get(1);
|
||||||
|
Iterator iterator = cachedPolicy.iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Policy pol = (Policy) iterator.next();
|
||||||
|
if (pol.getId() == policy.getId()) {
|
||||||
|
iterator.remove();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cachedPolicy.add(policy);
|
||||||
|
lCache.replace(1, cachedPolicy);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updatePolicy(int policyId) throws PolicyManagementException {
|
public void updatePolicy(int policyId) throws PolicyManagementException {
|
||||||
HashMap<Integer, Policy> map = this.getTenantRelatedMap();
|
|
||||||
if (map.containsKey(policyId)) {
|
Cache<Integer, List<Policy>> lCache = getPolicyListCache();
|
||||||
this.removePolicy(policyId);
|
if (lCache.containsKey(1)) {
|
||||||
|
PolicyManager policyManager = new PolicyManagerImpl();
|
||||||
|
Policy policy = policyManager.getPolicy(policyId);
|
||||||
|
this.updatePolicy(policy);
|
||||||
}
|
}
|
||||||
PolicyManager policyManager = new PolicyManagerImpl();
|
|
||||||
Policy policy = policyManager.getPolicy(policyId);
|
|
||||||
map.put(policyId, policy);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removePolicy(int policyId) {
|
public void removePolicy(int policyId) {
|
||||||
HashMap<Integer, Policy> map = this.getTenantRelatedMap();
|
|
||||||
if (map.containsKey(policyId)) {
|
Cache<Integer, List<Policy>> lCache = getPolicyListCache();
|
||||||
map.remove(policyId);
|
if (lCache.containsKey(1)) {
|
||||||
} else {
|
List<Policy> cachedPolicy = lCache.get(1);
|
||||||
log.warn("Policy id (" + policyId + ") does not exist in the cache. Hence not removed.");
|
Iterator iterator = cachedPolicy.iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Policy pol = (Policy) iterator.next();
|
||||||
|
if (pol.getId() == policyId) {
|
||||||
|
iterator.remove();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lCache.replace(1, cachedPolicy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Policy getPolicy(int policyId) throws PolicyManagementException {
|
public Policy getPolicy(int policyId) throws PolicyManagementException {
|
||||||
HashMap<Integer, Policy> map = this.getTenantRelatedMap();
|
|
||||||
if (!map.containsKey(policyId)) {
|
Cache<Integer, List<Policy>> lCache = getPolicyListCache();
|
||||||
|
if (!lCache.containsKey(1)) {
|
||||||
this.removeAllPolicies();
|
this.removeAllPolicies();
|
||||||
this.getAllPolicies();
|
this.getAllPolicies();
|
||||||
}
|
}
|
||||||
return map.get(policyId);
|
|
||||||
|
|
||||||
|
Policy policy = null;
|
||||||
|
List<Policy> cachedPolicy = lCache.get(1);
|
||||||
|
Iterator iterator = cachedPolicy.iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Policy pol = (Policy) iterator.next();
|
||||||
|
if (pol.getId() == policyId) {
|
||||||
|
policy = pol;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return policy;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -175,13 +208,4 @@ public class PolicyCacheManagerImpl implements PolicyCacheManager {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private HashMap<Integer, Policy> getTenantRelatedMap(){
|
|
||||||
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
|
||||||
if(!tenantedPolicyMap.containsKey(tenantId)){
|
|
||||||
HashMap<Integer, Policy> policyMap = new HashMap<>();
|
|
||||||
tenantedPolicyMap.put(tenantId, policyMap);
|
|
||||||
}
|
|
||||||
return tenantedPolicyMap.get(tenantId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,6 +39,7 @@ public final class PolicyManagementConstants {
|
|||||||
|
|
||||||
public static final String DM_CACHE_MANAGER = "DM_CACHE_MANAGER";
|
public static final String DM_CACHE_MANAGER = "DM_CACHE_MANAGER";
|
||||||
public static final String DM_CACHE = "DM_CACHE";
|
public static final String DM_CACHE = "DM_CACHE";
|
||||||
|
public static final String DM_CACHE_LIST = "DM_CACHE_LIST";
|
||||||
|
|
||||||
|
|
||||||
public static final String DELEGATION_TASK_TYPE = "DELEGATION__TASK";
|
public static final String DELEGATION_TASK_TYPE = "DELEGATION__TASK";
|
||||||
|
|||||||
@ -152,10 +152,28 @@ public class PolicyManagerUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static Cache getCacheManagerImpl() {
|
// public static Cache getCacheManagerImpl() {
|
||||||
return Caching.getCacheManagerFactory()
|
// return Caching.getCacheManagerFactory()
|
||||||
.getCacheManager(PolicyManagementConstants.DM_CACHE_MANAGER).getCache(PolicyManagementConstants
|
// .getCacheManager(PolicyManagementConstants.DM_CACHE_MANAGER).getCache(PolicyManagementConstants
|
||||||
.DM_CACHE);
|
// .DM_CACHE);
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
public static Cache<Integer, Policy> getPolicyCache(String name){
|
||||||
|
CacheManager manager = getCacheManager();
|
||||||
|
return (manager != null) ? manager.<Integer, Policy>getCache(name) :
|
||||||
|
Caching.getCacheManager().<Integer, Policy>getCache(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Cache<Integer, List<Policy>> getPolicyListCache(String name){
|
||||||
|
CacheManager manager = getCacheManager();
|
||||||
|
return (manager != null) ? manager.<Integer, List<Policy>>getCache(name) :
|
||||||
|
Caching.getCacheManager().<Integer, List<Policy>>getCache(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static CacheManager getCacheManager() {
|
||||||
|
return Caching.getCacheManagerFactory().getCacheManager(
|
||||||
|
PolicyManagementConstants.DM_CACHE_MANAGER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,24 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* WSO2 Inc. 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 org.wso2.carbon.webapp.authenticator.framework;
|
|
||||||
|
|
||||||
public class APIInfo {
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* WSO2 Inc. 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 org.wso2.carbon.webapp.authenticator.framework;
|
|
||||||
|
|
||||||
import org.apache.catalina.Lifecycle;
|
|
||||||
import org.apache.catalina.LifecycleEvent;
|
|
||||||
import org.apache.catalina.LifecycleListener;
|
|
||||||
|
|
||||||
public class APIMapperContextListener implements LifecycleListener {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void lifecycleEvent(LifecycleEvent lifecycleEvent) {
|
|
||||||
if (Lifecycle.AFTER_INIT_EVENT.equals(lifecycleEvent.getType())) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. 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 org.wso2.carbon.webapp.authenticator.framework;
|
||||||
|
|
||||||
|
import org.apache.catalina.connector.Request;
|
||||||
|
import org.apache.catalina.connector.Response;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve;
|
||||||
|
import org.wso2.carbon.tomcat.ext.valves.CompositeValve;
|
||||||
|
import org.wso2.carbon.webapp.authenticator.framework.authenticator.WebappAuthenticator;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
public class WebappAuthenticationHandler extends CarbonTomcatValve {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(WebappAuthenticationHandler.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void invoke(Request request, Response response, CompositeValve compositeValve) {
|
||||||
|
if (this.isNonAdminService(request) || this.skipAuthentication(request) || this.isContextSkipped(request)) {
|
||||||
|
this.getNext().invoke(request, response, compositeValve);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
WebappAuthenticator authenticator = WebappAuthenticatorFactory.getAuthenticator(request);
|
||||||
|
if (authenticator == null) {
|
||||||
|
String msg = "Failed to load an appropriate authenticator to authenticate the request";
|
||||||
|
AuthenticationFrameworkUtil.handleResponse(request, response, HttpServletResponse.SC_UNAUTHORIZED, msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
WebappAuthenticator.Status status = authenticator.authenticate(request, response);
|
||||||
|
this.processResponse(request, response, compositeValve, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isNonAdminService(Request request) {
|
||||||
|
String param = request.getContext().findParameter("isAdminService");
|
||||||
|
return !(param != null && Boolean.parseBoolean(param));
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean skipAuthentication(Request request) {
|
||||||
|
String param = request.getContext().findParameter("doAuthentication");
|
||||||
|
return (param == null || !Boolean.parseBoolean(param));
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isContextSkipped(Request request) {
|
||||||
|
String ctx = request.getContext().getPath();
|
||||||
|
if (ctx == null) {
|
||||||
|
ctx = request.getContextPath();
|
||||||
|
if (ctx == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ctx.equals("/Carbon") || ctx.equals("/Services");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processResponse(Request request, Response response, CompositeValve compositeValve,
|
||||||
|
WebappAuthenticator.Status status) {
|
||||||
|
switch (status) {
|
||||||
|
case SUCCESS:
|
||||||
|
case CONTINUE:
|
||||||
|
this.getNext().invoke(request, response, compositeValve);
|
||||||
|
break;
|
||||||
|
case FAILURE:
|
||||||
|
String msg = "Failed to authorize incoming request";
|
||||||
|
log.error(msg);
|
||||||
|
AuthenticationFrameworkUtil.handleResponse(request, response, HttpServletResponse.SC_UNAUTHORIZED, msg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -18,9 +18,26 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.webapp.authenticator.framework;
|
package org.wso2.carbon.webapp.authenticator.framework;
|
||||||
|
|
||||||
|
import org.apache.catalina.connector.Request;
|
||||||
|
import org.wso2.carbon.webapp.authenticator.framework.authenticator.WebappAuthenticator;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class WebappAuthenticatorFactory {
|
public class WebappAuthenticatorFactory {
|
||||||
|
|
||||||
public static WebappAuthenticator getAuthenticator(String authScheme) {
|
public static WebappAuthenticator getAuthenticator(String authScheme) {
|
||||||
return DataHolder.getInstance().getWebappAuthenticatorRepository().getAuthenticator(authScheme);
|
return DataHolder.getInstance().getWebappAuthenticatorRepository().getAuthenticator(authScheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static WebappAuthenticator getAuthenticator(Request request) {
|
||||||
|
Map<String, WebappAuthenticator> authenticators =
|
||||||
|
DataHolder.getInstance().getWebappAuthenticatorRepository().getAuthenticators();
|
||||||
|
for (WebappAuthenticator authenticator : authenticators.values()) {
|
||||||
|
if (authenticator.canHandle(request)) {
|
||||||
|
return authenticator;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,6 +24,7 @@ import org.apache.commons.logging.Log;
|
|||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve;
|
import org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve;
|
||||||
import org.wso2.carbon.tomcat.ext.valves.CompositeValve;
|
import org.wso2.carbon.tomcat.ext.valves.CompositeValve;
|
||||||
|
import org.wso2.carbon.webapp.authenticator.framework.authenticator.WebappAuthenticator;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
|||||||
@ -18,15 +18,18 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.webapp.authenticator.framework;
|
package org.wso2.carbon.webapp.authenticator.framework;
|
||||||
|
|
||||||
|
import org.wso2.carbon.webapp.authenticator.framework.authenticator.WebappAuthenticator;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
public class WebappAuthenticatorRepository {
|
public class WebappAuthenticatorRepository {
|
||||||
|
|
||||||
private Map<String, WebappAuthenticator> authenticators;
|
private Map<String, WebappAuthenticator> authenticators;
|
||||||
|
|
||||||
public WebappAuthenticatorRepository() {
|
public WebappAuthenticatorRepository() {
|
||||||
this.authenticators = new HashMap<String, WebappAuthenticator>();
|
this.authenticators = new ConcurrentHashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addAuthenticator(WebappAuthenticator authenticator) {
|
public void addAuthenticator(WebappAuthenticator authenticator) {
|
||||||
@ -37,4 +40,8 @@ public class WebappAuthenticatorRepository {
|
|||||||
return authenticators.get(name);
|
return authenticators.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, WebappAuthenticator> getAuthenticators() {
|
||||||
|
return authenticators;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,15 +24,25 @@ import org.apache.catalina.util.Base64;
|
|||||||
import org.apache.tomcat.util.buf.ByteChunk;
|
import org.apache.tomcat.util.buf.ByteChunk;
|
||||||
import org.apache.tomcat.util.buf.CharChunk;
|
import org.apache.tomcat.util.buf.CharChunk;
|
||||||
import org.apache.tomcat.util.buf.MessageBytes;
|
import org.apache.tomcat.util.buf.MessageBytes;
|
||||||
import org.wso2.carbon.webapp.authenticator.framework.WebappAuthenticator;
|
import org.wso2.carbon.webapp.authenticator.framework.Constants;
|
||||||
|
|
||||||
public class BasicAuthAuthenticator implements WebappAuthenticator {
|
public class BasicAuthAuthenticator implements WebappAuthenticator {
|
||||||
|
|
||||||
private static final String BASIC_AUTH_AUTHENTICATOR = "BasicAuth";
|
private static final String BASIC_AUTH_AUTHENTICATOR = "BasicAuth";
|
||||||
|
private static final String HEADER_BASIC_AUTH = "authorization";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAuthenticated(Request request) {
|
public boolean canHandle(Request request) {
|
||||||
return false;
|
MessageBytes authorization =
|
||||||
|
request.getCoyoteRequest().getMimeHeaders().getValue(Constants.HTTPHeaders.HEADER_HTTP_AUTHORIZATION);
|
||||||
|
if (authorization != null) {
|
||||||
|
authorization.toBytes();
|
||||||
|
ByteChunk authBC = authorization.getByteChunk();
|
||||||
|
if (authBC.startsWithIgnoreCase("basic ", 0)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -47,7 +57,8 @@ public class BasicAuthAuthenticator implements WebappAuthenticator {
|
|||||||
|
|
||||||
private Credentials getCredentials(Request request) {
|
private Credentials getCredentials(Request request) {
|
||||||
Credentials credentials = null;
|
Credentials credentials = null;
|
||||||
MessageBytes authorization = request.getCoyoteRequest().getMimeHeaders().getValue("authorization");
|
MessageBytes authorization =
|
||||||
|
request.getCoyoteRequest().getMimeHeaders().getValue(Constants.HTTPHeaders.HEADER_HTTP_AUTHORIZATION);
|
||||||
if (authorization != null) {
|
if (authorization != null) {
|
||||||
authorization.toBytes();
|
authorization.toBytes();
|
||||||
ByteChunk authBC = authorization.getByteChunk();
|
ByteChunk authBC = authorization.getByteChunk();
|
||||||
|
|||||||
@ -36,7 +36,6 @@ import org.wso2.carbon.user.api.UserStoreManager;
|
|||||||
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
|
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
|
||||||
import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
|
import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
|
||||||
import org.wso2.carbon.webapp.authenticator.framework.DataHolder;
|
import org.wso2.carbon.webapp.authenticator.framework.DataHolder;
|
||||||
import org.wso2.carbon.webapp.authenticator.framework.WebappAuthenticator;
|
|
||||||
|
|
||||||
import java.security.interfaces.RSAPublicKey;
|
import java.security.interfaces.RSAPublicKey;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
@ -51,12 +50,12 @@ public class JWTAuthenticator implements WebappAuthenticator {
|
|||||||
public static final String SIGNED_JWT_AUTH_USERNAME = "Username";
|
public static final String SIGNED_JWT_AUTH_USERNAME = "Username";
|
||||||
private static final String JWT_AUTHENTICATOR = "JWT";
|
private static final String JWT_AUTHENTICATOR = "JWT";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAuthenticated(Request request) {
|
public boolean canHandle(Request request) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Status authenticate(Request request, Response response) {
|
public Status authenticate(Request request, Response response) {
|
||||||
String requestUri = request.getRequestURI();
|
String requestUri = request.getRequestURI();
|
||||||
if (requestUri == null || "".equals(requestUri)) {
|
if (requestUri == null || "".equals(requestUri)) {
|
||||||
|
|||||||
@ -30,7 +30,6 @@ import org.wso2.carbon.apimgt.core.gateway.APITokenAuthenticator;
|
|||||||
import org.wso2.carbon.webapp.authenticator.framework.AuthenticationException;
|
import org.wso2.carbon.webapp.authenticator.framework.AuthenticationException;
|
||||||
import org.wso2.carbon.webapp.authenticator.framework.AuthenticationFrameworkUtil;
|
import org.wso2.carbon.webapp.authenticator.framework.AuthenticationFrameworkUtil;
|
||||||
import org.wso2.carbon.webapp.authenticator.framework.Constants;
|
import org.wso2.carbon.webapp.authenticator.framework.Constants;
|
||||||
import org.wso2.carbon.webapp.authenticator.framework.WebappAuthenticator;
|
|
||||||
|
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
@ -39,13 +38,28 @@ import java.util.regex.Pattern;
|
|||||||
public class OAuthAuthenticator implements WebappAuthenticator {
|
public class OAuthAuthenticator implements WebappAuthenticator {
|
||||||
|
|
||||||
private static final String OAUTH_AUTHENTICATOR = "OAuth";
|
private static final String OAUTH_AUTHENTICATOR = "OAuth";
|
||||||
private static APITokenAuthenticator authenticator = new APITokenAuthenticator();
|
|
||||||
private static final String REGEX_BEARER_PATTERN = "[B|b]earer\\s";
|
private static final String REGEX_BEARER_PATTERN = "[B|b]earer\\s";
|
||||||
|
private static final Pattern PATTERN = Pattern.compile(REGEX_BEARER_PATTERN);
|
||||||
|
|
||||||
|
private static APITokenAuthenticator authenticator = new APITokenAuthenticator();
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(OAuthAuthenticator.class);
|
private static final Log log = LogFactory.getLog(OAuthAuthenticator.class);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAuthenticated(Request request) {
|
public boolean canHandle(Request request) {
|
||||||
|
MessageBytes authorization =
|
||||||
|
request.getCoyoteRequest().getMimeHeaders().
|
||||||
|
getValue(Constants.HTTPHeaders.HEADER_HTTP_AUTHORIZATION);
|
||||||
|
String tokenValue = null;
|
||||||
|
if (authorization != null) {
|
||||||
|
authorization.toBytes();
|
||||||
|
ByteChunk authBC = authorization.getByteChunk();
|
||||||
|
tokenValue = authBC.toString();
|
||||||
|
Matcher matcher = PATTERN.matcher(tokenValue);
|
||||||
|
if (matcher.find()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,19 +107,15 @@ public class OAuthAuthenticator implements WebappAuthenticator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getBearerToken(Request request) {
|
private String getBearerToken(Request request) {
|
||||||
|
|
||||||
MessageBytes authorization =
|
MessageBytes authorization =
|
||||||
request.getCoyoteRequest().getMimeHeaders().
|
request.getCoyoteRequest().getMimeHeaders().
|
||||||
getValue(Constants.HTTPHeaders.HEADER_HTTP_AUTHORIZATION);
|
getValue(Constants.HTTPHeaders.HEADER_HTTP_AUTHORIZATION);
|
||||||
String tokenValue = null;
|
String tokenValue = null;
|
||||||
|
|
||||||
if (authorization != null) {
|
if (authorization != null) {
|
||||||
|
|
||||||
authorization.toBytes();
|
authorization.toBytes();
|
||||||
ByteChunk authBC = authorization.getByteChunk();
|
ByteChunk authBC = authorization.getByteChunk();
|
||||||
tokenValue = authBC.toString();
|
tokenValue = authBC.toString();
|
||||||
Pattern pattern = Pattern.compile(REGEX_BEARER_PATTERN);
|
Matcher matcher = PATTERN.matcher(tokenValue);
|
||||||
Matcher matcher = pattern.matcher(tokenValue);
|
|
||||||
if (matcher.find()) {
|
if (matcher.find()) {
|
||||||
tokenValue = tokenValue.substring(matcher.end());
|
tokenValue = tokenValue.substring(matcher.end());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package org.wso2.carbon.webapp.authenticator.framework;
|
package org.wso2.carbon.webapp.authenticator.framework.authenticator;
|
||||||
|
|
||||||
import org.apache.catalina.connector.Request;
|
import org.apache.catalina.connector.Request;
|
||||||
import org.apache.catalina.connector.Response;
|
import org.apache.catalina.connector.Response;
|
||||||
@ -27,7 +27,7 @@ public interface WebappAuthenticator {
|
|||||||
SUCCESS, FAILURE, CONTINUE
|
SUCCESS, FAILURE, CONTINUE
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isAuthenticated(Request request);
|
boolean canHandle(Request request);
|
||||||
|
|
||||||
Status authenticate(Request request, Response response);
|
Status authenticate(Request request, Response response);
|
||||||
|
|
||||||
@ -25,7 +25,8 @@ import org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve;
|
|||||||
import org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer;
|
import org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer;
|
||||||
import org.wso2.carbon.user.core.service.RealmService;
|
import org.wso2.carbon.user.core.service.RealmService;
|
||||||
import org.wso2.carbon.webapp.authenticator.framework.DataHolder;
|
import org.wso2.carbon.webapp.authenticator.framework.DataHolder;
|
||||||
import org.wso2.carbon.webapp.authenticator.framework.WebappAuthenticator;
|
import org.wso2.carbon.webapp.authenticator.framework.WebappAuthenticationHandler;
|
||||||
|
import org.wso2.carbon.webapp.authenticator.framework.authenticator.WebappAuthenticator;
|
||||||
import org.wso2.carbon.webapp.authenticator.framework.WebappAuthenticatorFrameworkValve;
|
import org.wso2.carbon.webapp.authenticator.framework.WebappAuthenticatorFrameworkValve;
|
||||||
import org.wso2.carbon.webapp.authenticator.framework.WebappAuthenticatorRepository;
|
import org.wso2.carbon.webapp.authenticator.framework.WebappAuthenticatorRepository;
|
||||||
import org.wso2.carbon.webapp.authenticator.framework.config.AuthenticatorConfig;
|
import org.wso2.carbon.webapp.authenticator.framework.config.AuthenticatorConfig;
|
||||||
@ -64,7 +65,7 @@ public class WebappAuthenticatorFrameworkServiceComponent {
|
|||||||
DataHolder.getInstance().setWebappAuthenticatorRepository(repository);
|
DataHolder.getInstance().setWebappAuthenticatorRepository(repository);
|
||||||
|
|
||||||
List<CarbonTomcatValve> valves = new ArrayList<CarbonTomcatValve>();
|
List<CarbonTomcatValve> valves = new ArrayList<CarbonTomcatValve>();
|
||||||
valves.add(new WebappAuthenticatorFrameworkValve());
|
valves.add(new WebappAuthenticationHandler());
|
||||||
TomcatValveContainer.addValves(valves);
|
TomcatValveContainer.addValves(valves);
|
||||||
|
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
|
|||||||
@ -4,5 +4,13 @@
|
|||||||
<Name>OAuth</Name>
|
<Name>OAuth</Name>
|
||||||
<ClassName>org.wso2.carbon.webapp.authenticator.framework.authenticator.OAuthAuthenticator</ClassName>
|
<ClassName>org.wso2.carbon.webapp.authenticator.framework.authenticator.OAuthAuthenticator</ClassName>
|
||||||
</Authenticator>
|
</Authenticator>
|
||||||
|
<Authenticator>
|
||||||
|
<Name>BasicAuth</Name>
|
||||||
|
<ClassName>org.wso2.carbon.webapp.authenticator.framework.authenticator.BasicAuthAuthenticator</ClassName>
|
||||||
|
</Authenticator>
|
||||||
|
<Authenticator>
|
||||||
|
<Name>JWT</Name>
|
||||||
|
<ClassName>org.wso2.carbon.webapp.authenticator.framework.authenticator.JWTAuthenticator</ClassName>
|
||||||
|
</Authenticator>
|
||||||
</Authenticators>
|
</Authenticators>
|
||||||
</WebappAuthenticatorConfig>
|
</WebappAuthenticatorConfig>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user