Skip to content

Commit 71292e8

Browse files
committed
Fix #36577: add API endpoint to get current user
1 parent a8c29fe commit 71292e8

2 files changed

Lines changed: 30 additions & 1 deletion

File tree

src/main/java/eu/openanalytics/containerproxy/security/WebSecurityConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ public void handle(HttpServletRequest request, HttpServletResponse response, Acc
213213
.permitAll()
214214
.requestMatchers(
215215
new MvcRequestMatcher(handlerMappingIntrospector, "/login"),
216+
new MvcRequestMatcher(handlerMappingIntrospector, "/user/me"),
216217
new MvcRequestMatcher(handlerMappingIntrospector, "/signin/**"),
217218
new MvcRequestMatcher(handlerMappingIntrospector, "/auth-error"),
218219
new MvcRequestMatcher(handlerMappingIntrospector, "/error"),

src/main/java/eu/openanalytics/containerproxy/ui/AuthController.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
package eu.openanalytics.containerproxy.ui;
2222

2323
import eu.openanalytics.containerproxy.api.BaseController;
24+
import eu.openanalytics.containerproxy.api.dto.ApiResponse;
2425
import eu.openanalytics.containerproxy.auth.IAuthenticationBackend;
2526
import eu.openanalytics.containerproxy.auth.impl.OpenIDAuthenticationBackend;
2627
import eu.openanalytics.containerproxy.auth.impl.SAMLAuthenticationBackend;
@@ -30,16 +31,24 @@
3031
import org.springframework.context.MessageSource;
3132
import org.springframework.context.i18n.LocaleContextHolder;
3233
import org.springframework.core.env.Environment;
34+
import org.springframework.http.MediaType;
35+
import org.springframework.http.ResponseEntity;
36+
import org.springframework.security.authentication.AnonymousAuthenticationToken;
37+
import org.springframework.security.core.Authentication;
38+
import org.springframework.security.core.context.SecurityContextHolder;
3339
import org.springframework.stereotype.Controller;
3440
import org.springframework.ui.ModelMap;
41+
import org.springframework.web.bind.annotation.GetMapping;
3542
import org.springframework.web.bind.annotation.RequestMapping;
3643
import org.springframework.web.bind.annotation.RequestMethod;
3744
import org.springframework.web.bind.annotation.RequestParam;
45+
import org.springframework.web.bind.annotation.ResponseBody;
3846
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
3947
import org.springframework.web.servlet.view.RedirectView;
4048

4149
import javax.inject.Inject;
4250
import java.util.Locale;
51+
import java.util.Map;
4352
import java.util.Optional;
4453

4554
@Controller
@@ -68,7 +77,7 @@ public Object getLoginPage(@RequestParam Optional<String> error, ModelMap map) {
6877
if (error.get().equals("expired")) {
6978
map.put("error", messageSource.getMessage("auth.simple.expired_error", null, locale));
7079
} else {
71-
map.put("error", messageSource.getMessage("auth.simple.credentials_error", null, locale));
80+
map.put("error", messageSource.getMessage("auth.simple.credentials_error", null, locale));
7281
}
7382
}
7483

@@ -119,4 +128,23 @@ public String getLogoutSuccessPage(ModelMap map) {
119128
return "logout-success";
120129
}
121130

131+
132+
@ResponseBody
133+
@GetMapping(value = "/user/me", produces = MediaType.APPLICATION_JSON_VALUE)
134+
public ResponseEntity<ApiResponse<Map<String, Object>>> getUserMetadata() {
135+
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
136+
boolean isLoggedIn = authentication != null && !(authentication instanceof AnonymousAuthenticationToken) && authentication.isAuthenticated();
137+
if (!isLoggedIn) {
138+
return ApiResponse.success(
139+
Map.of("authenticated", false)
140+
);
141+
}
142+
return ApiResponse.success(
143+
Map.of(
144+
"authenticated", true,
145+
"username", authentication.getName()
146+
)
147+
);
148+
}
149+
122150
}

0 commit comments

Comments
 (0)