Skip to content

Commit 2526300

Browse files
committed
Ref #26332: configure per app whether app should be stopped on logout
1 parent 6a4902a commit 2526300

4 files changed

Lines changed: 38 additions & 50 deletions

File tree

src/main/java/eu/openanalytics/containerproxy/backend/strategy/impl/DefaultProxyLogoutStrategy.java

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,31 +20,50 @@
2020
*/
2121
package eu.openanalytics.containerproxy.backend.strategy.impl;
2222

23-
import javax.inject.Inject;
24-
25-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
26-
import org.springframework.context.annotation.Lazy;
27-
import org.springframework.stereotype.Component;
28-
2923
import eu.openanalytics.containerproxy.backend.strategy.IProxyLogoutStrategy;
3024
import eu.openanalytics.containerproxy.model.runtime.Proxy;
3125
import eu.openanalytics.containerproxy.service.ProxyService;
26+
import org.springframework.core.env.Environment;
27+
import org.springframework.stereotype.Component;
28+
29+
import javax.annotation.PostConstruct;
30+
import javax.inject.Inject;
3231

3332
/**
34-
* Default logout behaviour: stop all proxies owned by the user.
33+
* Default logout behaviour.
3534
*/
3635
@Component
37-
@ConditionalOnProperty(name = "proxy.stop-proxies-on-logout", havingValue = "true", matchIfMissing = true)
3836
public class DefaultProxyLogoutStrategy implements IProxyLogoutStrategy {
3937

38+
private static final String PROP_DEFAULT_STOP_PROXIES_ON_LOGOUT = "proxy.default-stop-proxy-on-logout";
39+
4040
@Inject
4141
private ProxyService proxyService;
42-
42+
43+
@Inject
44+
private Environment environment;
45+
46+
private boolean defaultStopProxyOnLogout;
47+
48+
@PostConstruct
49+
public void init() {
50+
defaultStopProxyOnLogout = environment.getProperty(PROP_DEFAULT_STOP_PROXIES_ON_LOGOUT, Boolean.class, true);
51+
}
52+
4353
@Override
4454
public void onLogout(String userId) {
4555
for (Proxy proxy: proxyService.getProxies(p -> p.getUserId().equals(userId), true)) {
46-
proxyService.stopProxy(proxy, true, true);
56+
if (shouldBeStopped(proxy)) {
57+
proxyService.stopProxy(proxy, true, true);
58+
}
59+
}
60+
}
61+
62+
public boolean shouldBeStopped(Proxy proxy) {
63+
if (proxy.getSpec().stopOnLogout() != null) {
64+
return proxy.getSpec().stopOnLogout();
4765
}
66+
return defaultStopProxyOnLogout;
4867
}
4968

5069
}

src/main/java/eu/openanalytics/containerproxy/backend/strategy/impl/NoOpProxyLogoutStrategy.java

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/main/java/eu/openanalytics/containerproxy/model/spec/ProxySpec.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public class ProxySpec {
4444
private List<String> kubernetesAdditionalPersistentManifests = new ArrayList<>();
4545

4646
private Long maxLifeTime;
47+
private Boolean stopOnLogout;
4748

4849
public ProxySpec() {
4950
settings = new HashMap<>();
@@ -162,13 +163,21 @@ public void setMaxLifeTime(Long maxLifeTime) {
162163
this.maxLifeTime = maxLifeTime;
163164
}
164165

166+
public Boolean stopOnLogout() {
167+
return stopOnLogout;
168+
}
169+
170+
public void setStopOnLogout(Boolean stopOnLogout) {
171+
this.stopOnLogout = stopOnLogout;
172+
}
165173

166174
public void copy(ProxySpec target) {
167175
target.setId(id);
168176
target.setDisplayName(displayName);
169177
target.setDescription(description);
170178
target.setLogoURL(logoURL);
171179
target.setMaxLifeTime(maxLifeTime);
180+
target.setStopOnLogout(stopOnLogout);
172181

173182
if (accessControl != null) {
174183
if (target.getAccessControl() == null) target.setAccessControl(new ProxyAccessControl());

src/main/java/eu/openanalytics/containerproxy/service/UserService.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import eu.openanalytics.containerproxy.event.UserLogoutEvent;
2828
import eu.openanalytics.containerproxy.model.runtime.Proxy;
2929
import eu.openanalytics.containerproxy.model.spec.ProxySpec;
30-
import eu.openanalytics.containerproxy.util.SessionHelper;
3130
import org.apache.logging.log4j.LogManager;
3231
import org.apache.logging.log4j.Logger;
3332
import org.springframework.context.ApplicationEventPublisher;

0 commit comments

Comments
 (0)