2
2
3
3
import com .appsmith .server .domains .User ;
4
4
import com .appsmith .server .helpers .LogHelper ;
5
+ import com .appsmith .server .helpers .UserOrganizationHelper ;
5
6
import lombok .extern .slf4j .Slf4j ;
6
- import org .apache .commons .lang3 .StringUtils ;
7
7
import org .slf4j .MDC ;
8
8
import org .springframework .http .server .reactive .ServerHttpRequest ;
9
9
import org .springframework .security .core .context .ReactiveSecurityContextHolder ;
10
10
import org .springframework .stereotype .Component ;
11
+ import org .springframework .util .StringUtils ;
11
12
import org .springframework .web .server .ServerWebExchange ;
12
13
import org .springframework .web .server .WebFilter ;
13
14
import org .springframework .web .server .WebFilterChain ;
17
18
import java .util .Map ;
18
19
19
20
import static com .appsmith .external .constants .MDCConstants .USER_EMAIL ;
21
+ import static com .appsmith .server .constants .ce .FieldNameCE .ORGANIZATION_ID ;
20
22
import static java .util .stream .Collectors .toMap ;
21
23
22
24
/**
27
29
@ Slf4j
28
30
public class MDCFilter implements WebFilter {
29
31
32
+ private final UserOrganizationHelper userOrganizationHelper ;
30
33
private static final String MDC_HEADER_PREFIX = "X-MDC-" ;
31
34
32
35
/**
@@ -38,23 +41,33 @@ public class MDCFilter implements WebFilter {
38
41
39
42
public static final String REQUEST_ID_HEADER = "X-Request-Id" ;
40
43
44
+ public MDCFilter (UserOrganizationHelper userOrganizationHelper ) {
45
+ this .userOrganizationHelper = userOrganizationHelper ;
46
+ }
47
+
41
48
@ Override
42
49
public Mono <Void > filter (ServerWebExchange exchange , WebFilterChain chain ) {
43
50
try {
44
51
return ReactiveSecurityContextHolder .getContext ()
45
52
.map (ctx -> ctx .getAuthentication ().getPrincipal ())
46
- .flatMap (principal -> {
53
+ .zipWith (userOrganizationHelper
54
+ .getCurrentUserOrganizationId ()
55
+ .defaultIfEmpty ("" ))
56
+ .flatMap (tuple2 -> {
57
+ final Object principal = tuple2 .getT1 ();
58
+ final String organizationId = tuple2 .getT2 ();
47
59
final User user = principal instanceof User ? (User ) principal : null ;
48
60
return chain .filter (exchange )
49
- .contextWrite (ctx -> addRequestHeadersToContext (exchange .getRequest (), ctx , user ));
61
+ .contextWrite (ctx ->
62
+ addRequestHeadersToContext (exchange .getRequest (), ctx , user , organizationId ));
50
63
});
51
64
} finally {
52
65
MDC .clear ();
53
66
}
54
67
}
55
68
56
69
private Context addRequestHeadersToContext (
57
- final ServerHttpRequest request , final Context context , final User user ) {
70
+ final ServerHttpRequest request , final Context context , final User user , final String organizationId ) {
58
71
final Map <String , String > contextMap = request .getHeaders ().toSingleValueMap ().entrySet ().stream ()
59
72
.filter (x -> x .getKey ().startsWith (MDC_HEADER_PREFIX ))
60
73
.collect (toMap (v -> v .getKey ().substring ((MDC_HEADER_PREFIX .length ())), Map .Entry ::getValue ));
@@ -63,6 +76,10 @@ private Context addRequestHeadersToContext(
63
76
contextMap .put (USER_EMAIL , user .getEmail ());
64
77
}
65
78
79
+ if (StringUtils .hasLength (organizationId )) {
80
+ contextMap .put (ORGANIZATION_ID , organizationId );
81
+ }
82
+
66
83
final String internalRequestId = request .getHeaders ().getFirst (INTERNAL_REQUEST_ID_HEADER );
67
84
contextMap .put (INTERNAL_REQUEST_ID_HEADER , internalRequestId );
68
85
0 commit comments