2121package eu .openanalytics .containerproxy .api ;
2222
2323import 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 ;
2427import jakarta .servlet .http .HttpServletRequest ;
2528import jakarta .servlet .http .HttpServletResponse ;
2629import org .springframework .core .env .Environment ;
30+ import org .springframework .security .core .Authentication ;
2731import org .springframework .ui .ModelMap ;
2832import org .springframework .web .context .request .RequestContextHolder ;
2933import 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