mharindu 9 years ago
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…
Cancel
Save