summaryrefslogtreecommitdiff
path: root/microservices/02-api-gateway/src/main/java/com/example/apigateway/security/controllers/UserRestController.java
blob: 5d6581caffa01feb2ae29ded4b961c692fd93738 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.example.apigateway.security.controllers;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import reactor.core.publisher.Mono;

@RestController
public class UserRestController {

    @GetMapping("/api/security/me")
    public Mono<Map<String, Object>> getLoggedInUser(@AuthenticationPrincipal OAuth2User principal) {
        if (principal == null) {
            return Mono.just(Map.of());
        }

        // Filter roles starting with "ROLE_"
        List<String> roles = principal.getAuthorities().stream()
                .map(grantedAuthority -> grantedAuthority.getAuthority())
                .filter(authority -> authority.startsWith("ROLE_"))
                .map(s -> s.substring(5)) // Cut ROLE_ part
                .collect(Collectors.toList());

        return Mono.just(Map.of(
                "username", principal.getAttribute("sub"),
                // "name", principal.getName(),
                // "email", principal.getEmail(),
                "roles", roles));
    }
}