From ef7c65e0fb98cd2a9f7a929098b7c73ac99058d0 Mon Sep 17 00:00:00 2001 From: lucio Date: Thu, 23 Jan 2020 15:24:19 +0100 Subject: [PATCH] multiple token generation in one call added --- pom.xml | 2 +- .../managers/ApplicationManager.java | 53 ++++++++++++------- .../smartgears/managers/ContainerManager.java | 27 ++++++---- 3 files changed, 51 insertions(+), 31 deletions(-) diff --git a/pom.xml b/pom.xml index 3df69c0..8f26f8b 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ org.gcube.core common-smartgears - 2.1.9 + 2.1.9-SNAPSHOT SmartGears diff --git a/src/main/java/org/gcube/smartgears/managers/ApplicationManager.java b/src/main/java/org/gcube/smartgears/managers/ApplicationManager.java index fd3cc03..c4b4b74 100644 --- a/src/main/java/org/gcube/smartgears/managers/ApplicationManager.java +++ b/src/main/java/org/gcube/smartgears/managers/ApplicationManager.java @@ -17,6 +17,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map.Entry; import java.util.Set; +import java.util.stream.Collectors; import javax.servlet.FilterRegistration; import javax.servlet.ServletContext; @@ -71,20 +72,20 @@ public class ApplicationManager { try { context = provider().contextFor(container, application); - + for (Entry servlet : application.getServletRegistrations().entrySet()) log.trace("servlet {} : {} {} ", application.getServletContextName(),servlet.getKey(), servlet.getValue().getMappings()); - - + + context.configuration().validate(); - -/* if (context.configuration().secure() && + + /* if (context.configuration().secure() && container.configuration().securePort()==null) throw new IllegalStateException( String.format("Application %s cannot be managed because is declared as secure without a secure connector port declared in the container", context.application().getContextPath())); -*/ + */ - context.configuration().startTokens(generateTokensForApplication(container)); + context.configuration().startTokens(generateTokensForApplication(container).stream().collect(Collectors.toSet())); saveApplicationState(); @@ -128,8 +129,8 @@ public class ApplicationManager { return context; } catch (RuntimeException e) { - - + + if (context != null) { log.error("error starting application {}",context.name(), e); @@ -142,13 +143,25 @@ public class ApplicationManager { } - private Set generateTokensForApplication(ContainerContext container){ + private List generateTokensForApplication(ContainerContext container){ log.info("generating token for app {}",context.configuration().name()); - Set tokens = new HashSet(); - AuthorizationProxy authProxy = provider().authorizationProxy(); - for (String containerToken :container.configuration().startTokens()) - tokens.add(generateApplicationToken(containerToken, authProxy)); - return tokens; + + SecurityTokenProvider.instance.set(container.configuration().startTokens().get(0)); + try { + AuthorizationProxy authProxy = provider().authorizationProxy(); + try { + return authProxy.generateServiceToken(Utils.getServiceInfo(context), container.configuration().startTokens()); + }catch (Exception e) { + log.error("error generating service token",e); + throw new RuntimeException(e); + } + } catch (Exception e) { + throw new RuntimeException("error contacting authorization service",e); + } finally{ + SecurityTokenProvider.instance.reset(); + } + + } private String generateApplicationToken(String containerToken, AuthorizationProxy authProxy){ @@ -161,7 +174,7 @@ public class ApplicationManager { } finally{ SecurityTokenProvider.instance.reset(); } - + } @@ -243,12 +256,12 @@ public class ApplicationManager { extension.init(context); - + if (context.configuration().includes().isEmpty()) { //register excludes for extension in case of includes they are excluded by default context.configuration().excludes().addAll(extension.excludes()); } - + String mapping = extension.mapping(); application.addServlet(context.configuration().name() + "-" + extension.name(), extension) @@ -315,6 +328,7 @@ public class ApplicationManager { log.trace("app token created : {} ", appToken); context.events().fire(appToken, ProfileEvents.addToContext); context.events().fire(appToken, Constants.token_registered); + saveApplicationState(); } @Observes(value = ContextEvents.REMOVE_TOKEN_FROM_APPLICATION, kind = critical) @@ -325,8 +339,9 @@ public class ApplicationManager { log.trace("app token removed : {} ", appToken); context.events().fire(appToken, ProfileEvents.removeFromContext); context.events().fire(appToken, Constants.token_removed); + saveApplicationState(); } - + }; context.container().events().subscribe(observer); diff --git a/src/main/java/org/gcube/smartgears/managers/ContainerManager.java b/src/main/java/org/gcube/smartgears/managers/ContainerManager.java index 675a74a..7e99092 100644 --- a/src/main/java/org/gcube/smartgears/managers/ContainerManager.java +++ b/src/main/java/org/gcube/smartgears/managers/ContainerManager.java @@ -112,24 +112,29 @@ public class ContainerManager { } private void validateContainer(ContainerContext context) { - List tokensToRemove = new ArrayList(); + //List tokensToRemove = new ArrayList(); Set foundContexts= new HashSet(); - - for (String token : context.configuration().startTokens()){ - String tokenContext = resolveTokenForAdd(foundContexts, token); - if (tokenContext!=null){ - log.info("the container will be started in context {}",tokenContext); - foundContexts.add(tokenContext); - } else - tokensToRemove.add(token); - } + + try { + List entries = authProvider.get(context.configuration().startTokens()); + + log.info("requesting auth on {} tokens returned {} entries", context.configuration().startTokens().size(),entries.size()); + + for (AuthorizationEntry entry : entries ) { + log.info("the container will be started in context {}",entry.getContext()); + foundContexts.add(entry.getContext()); + } + + } catch (Exception e) { + log.error("error contacting auth service on container",e); + } if (foundContexts.isEmpty()){ log.error("no valid starting token are specified, moving the container to failed"); throw new RuntimeException("no valid starting token are specified"); } - context.configuration().startTokens().removeAll(tokensToRemove); + //context.configuration().startTokens().removeAll(tokensToRemove); context.configuration().allowedContexts(foundContexts); }