diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e7e6141 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog for "auhtorization-service" + + +## \[v2.1.3] [r4.24.0] - 2020-06-22 + +### Fixes +- bug on ApiKey Management (https://support.d4science.org/issues/19487) + +This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). \ No newline at end of file diff --git a/descriptor.xml b/descriptor.xml index bb35e25..1ba1d57 100644 --- a/descriptor.xml +++ b/descriptor.xml @@ -15,7 +15,7 @@ README.md LICENSE.md - changelog.xml + CHANGELOG.md profile.xml 755 diff --git a/pom.xml b/pom.xml index d383998..3200c17 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ org.gcube.common authorization-service - 2.1.2-SNASPHOT + 2.1.3 authorization service war diff --git a/src/main/java/org/gcube/common/authorizationservice/AuthorizationService.java b/src/main/java/org/gcube/common/authorizationservice/AuthorizationService.java index b57d605..08b0ca0 100644 --- a/src/main/java/org/gcube/common/authorizationservice/AuthorizationService.java +++ b/src/main/java/org/gcube/common/authorizationservice/AuthorizationService.java @@ -7,7 +7,6 @@ import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; import org.gcube.common.authorizationservice.configuration.AuthorizationConfiguration; -import org.glassfish.jersey.server.ResourceConfig; @ApplicationPath("/gcube/service/*") public class AuthorizationService extends Application { @@ -22,6 +21,7 @@ public class AuthorizationService extends Application { classes.add(KeyRetriever.class); classes.add(PolicyManager.class); classes.add(TokenManager.class); + classes.add(ApiKeyManager.class); return classes; } diff --git a/src/main/java/org/gcube/common/authorizationservice/filters/AuthorizedCallFilter.java b/src/main/java/org/gcube/common/authorizationservice/filters/AuthorizedCallFilter.java index 48b39ad..07c3984 100644 --- a/src/main/java/org/gcube/common/authorizationservice/filters/AuthorizedCallFilter.java +++ b/src/main/java/org/gcube/common/authorizationservice/filters/AuthorizedCallFilter.java @@ -27,8 +27,6 @@ import org.gcube.common.authorizationservice.configuration.AuthorizationRule; import org.gcube.common.authorizationservice.configuration.ConfigurationHolder; import org.gcube.common.authorizationservice.util.TokenPersistence; import org.gcube.common.scope.api.ScopeProvider; -import org.jboss.weld.context.ApplicationContext; -import org.omg.PortableInterceptor.SUCCESSFUL; import lombok.extern.slf4j.Slf4j; @@ -51,7 +49,8 @@ public class AuthorizedCallFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - + + String token = request.getParameter(TOKEN_HEADER)==null?((HttpServletRequest)request).getHeader(TOKEN_HEADER): request.getParameter(TOKEN_HEADER); @@ -82,15 +81,20 @@ public class AuthorizedCallFilter implements Filter { pathInfo = servletPath.replace("/gcube/service", ""); log.info("called path info {} ", pathInfo); if (pathInfo==null || pathInfo.isEmpty()){ - log.info("call rejected from filters: invalid path"); + ((HttpServletResponse)response).sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + log.error("call rejected from filters: invalid path"); + generateAccounting("Unknown", "Unknown", callerIp, false, startTime, request.getLocalName()); return; } } + + if (requiresToken(pathInfo) && token==null ){ ((HttpServletResponse)response).sendError(HttpServletResponse.SC_UNAUTHORIZED); - log.info("call rejected from filters, call requires caller token"); + log.error("call rejected from filters, call requires caller token"); + generateAccounting("Unknown", "Unknown", callerIp, false, startTime, request.getLocalName()); return; } @@ -107,13 +111,15 @@ public class AuthorizedCallFilter implements Filter { if (!checkAllowed(pathInfo, callerIp, info)){ ((HttpServletResponse)response).sendError(HttpServletResponse.SC_UNAUTHORIZED); - log.info("call rejected from filters"); + log.error("call rejected from filters"); + generateAccounting("Unknown", "Unknown", callerIp, false, startTime, request.getLocalName()); return; } chain.doFilter(request, response); + + generateAccounting("Unknown", "Unknown", callerIp, true, startTime, request.getLocalName()); - //generateAccounting("Unknown", "Unknown", callerIp, true, startTime, request.getLocalName()); } private boolean requiresToken(String pathInfo) { @@ -188,7 +194,7 @@ public class AuthorizedCallFilter implements Filter { public void destroy() {} void generateAccounting(String caller, String callerQualifier, String remoteHost, boolean success, long startTime, String host){ - AuthorizationConfiguration conf = ConfigurationHolder.getConfiguration(); + /*AuthorizationConfiguration conf = ConfigurationHolder.getConfiguration(); AccountingPersistenceFactory.setFallbackLocation(conf.getAccountingDir()); AccountingPersistence persistence = AccountingPersistenceFactory.getPersistence(); ServiceUsageRecord serviceUsageRecord = new ServiceUsageRecord(); @@ -210,6 +216,8 @@ public class AuthorizedCallFilter implements Filter { }catch(Exception ex){ log.warn("invalid record passed to accounting ",ex); } + */ + log.info("REQUEST SERVED for method {} in {} ms with result {}", CalledMethodProvider.instance.get(), System.currentTimeMillis()-startTime, success?OperationResult.SUCCESS:OperationResult.FAILED); } }