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);
}