Skip to content

Commit c086a62

Browse files
committed
Ref #33886: support SpEL in proxy.title
1 parent 19c3498 commit c086a62

1 file changed

Lines changed: 30 additions & 4 deletions

File tree

src/main/java/eu/openanalytics/containerproxy/api/BaseController.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,13 @@
2121
package eu.openanalytics.containerproxy.api;
2222

2323
import eu.openanalytics.containerproxy.service.IdentifierService;
24+
import eu.openanalytics.containerproxy.service.UserService;
25+
import eu.openanalytics.containerproxy.spec.expression.SpecExpressionContext;
26+
import eu.openanalytics.containerproxy.spec.expression.SpecExpressionResolver;
2427
import jakarta.servlet.http.HttpServletRequest;
2528
import jakarta.servlet.http.HttpServletResponse;
2629
import org.springframework.core.env.Environment;
30+
import org.springframework.security.core.Authentication;
2731
import org.springframework.ui.ModelMap;
2832
import org.springframework.web.context.request.RequestContextHolder;
2933
import org.springframework.web.context.request.ServletRequestAttributes;
@@ -39,27 +43,49 @@ public class BaseController {
3943
@Inject
4044
private IdentifierService identifierService;
4145

46+
@Inject
47+
protected SpecExpressionResolver expressionResolver;
48+
49+
@Inject
50+
private UserService userService;
51+
4252
private String title;
53+
private boolean titleContainsExpression;
4354

4455
@PostConstruct
4556
public void baseInit() {
4657
title = environment.getProperty("proxy.title", "ShinyProxy");
58+
titleContainsExpression = title.contains("#{");
4759
}
4860

4961
protected void prepareMap(ModelMap map) {
50-
map.put("title", title);
62+
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
63+
HttpServletRequest httpServletRequest = servletRequestAttributes.getRequest();
64+
HttpServletResponse httpServletResponse = servletRequestAttributes.getResponse();
65+
map.put("title", getTitle(userService.getCurrentAuth(), httpServletRequest.getServerName()));
5166
// no versioning (using instanceId) needed since paths already contain a version
5267
map.put("bootstrapCss", "/webjars/bootstrap/3.4.1/css/bootstrap.min.css");
5368
map.put("bootstrapJs", "/webjars/bootstrap/3.4.1/js/bootstrap.min.js");
5469
map.put("jqueryJs", "/webjars/jquery/3.7.1/jquery.min.js");
5570
map.put("fontAwesomeCss", "/webjars/fontawesome/4.7.0/css/font-awesome.min.css");
5671
map.put("resourcePrefix", "/" + identifierService.instanceId);
5772

58-
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
59-
HttpServletRequest httpServletRequest = servletRequestAttributes.getRequest();
60-
HttpServletResponse httpServletResponse = servletRequestAttributes.getResponse();
6173
map.put("request", httpServletRequest);
6274
map.put("response", httpServletResponse);
6375
}
6476

77+
private String getTitle(Authentication user, String serverName) {
78+
if (!titleContainsExpression) {
79+
return title;
80+
}
81+
SpecExpressionContext context = SpecExpressionContext.create(
82+
user,
83+
user.getPrincipal(),
84+
user.getCredentials()
85+
)
86+
.serverName(serverName)
87+
.build();
88+
return expressionResolver.evaluateToString(title, context);
89+
}
90+
6591
}

0 commit comments

Comments
 (0)