31
31
import io .scalecube .services .transport .api .DataCodec ;
32
32
import java .io .IOException ;
33
33
import java .util .List ;
34
+ import java .util .Map ;
34
35
import java .util .function .BiFunction ;
35
36
import java .util .function .Consumer ;
36
37
import org .reactivestreams .Publisher ;
@@ -53,14 +54,17 @@ public class HttpGatewayAcceptor
53
54
private final ServiceCall serviceCall ;
54
55
private final ServiceRegistry serviceRegistry ;
55
56
private final ServiceProviderErrorMapper errorMapper ;
57
+ private final HttpGatewayAuthenticator authenticator ;
56
58
57
59
public HttpGatewayAcceptor (
58
60
ServiceCall serviceCall ,
59
61
ServiceRegistry serviceRegistry ,
60
- ServiceProviderErrorMapper errorMapper ) {
62
+ ServiceProviderErrorMapper errorMapper ,
63
+ HttpGatewayAuthenticator authenticator ) {
61
64
this .serviceCall = serviceCall ;
62
65
this .serviceRegistry = serviceRegistry ;
63
66
this .errorMapper = errorMapper ;
67
+ this .authenticator = authenticator ;
64
68
}
65
69
66
70
@ Override
@@ -77,15 +81,22 @@ public Publisher<Void> apply(HttpServerRequest httpRequest, HttpServerResponse h
77
81
return methodNotAllowed (httpResponse );
78
82
}
79
83
80
- if (httpRequest .isMultipart ()) {
81
- return handleFileUploadRequest (httpRequest , httpResponse );
82
- } else {
83
- return handleServiceRequest (httpRequest , httpResponse );
84
- }
84
+ return authenticator
85
+ .authenticate (httpRequest )
86
+ .flatMap (
87
+ principal -> {
88
+ if (httpRequest .isMultipart ()) {
89
+ return handleFileUploadRequest (principal , httpRequest , httpResponse );
90
+ } else {
91
+ return handleServiceRequest (principal , httpRequest , httpResponse );
92
+ }
93
+ });
85
94
}
86
95
87
96
private Mono <Void > handleFileUploadRequest (
88
- HttpServerRequest httpRequest , HttpServerResponse httpResponse ) {
97
+ Map <String , String > principal ,
98
+ HttpServerRequest httpRequest ,
99
+ HttpServerResponse httpResponse ) {
89
100
return httpRequest
90
101
.receiveForm ()
91
102
.flatMap (
@@ -100,8 +111,10 @@ private Mono<Void> handleFileUploadRequest(
100
111
builder -> {
101
112
final var filename =
102
113
((FileUpload ) httpData ).getFilename ();
103
- builder .header (HEADER_UPLOAD_FILENAME , filename );
104
- builder .data (data );
114
+ builder
115
+ .headers (principal )
116
+ .header (HEADER_UPLOAD_FILENAME , filename )
117
+ .data (data );
105
118
})))
106
119
.last ()
107
120
.flatMap (
@@ -115,7 +128,9 @@ private Mono<Void> handleFileUploadRequest(
115
128
}
116
129
117
130
private Mono <Void > handleServiceRequest (
118
- HttpServerRequest httpRequest , HttpServerResponse httpResponse ) {
131
+ Map <String , String > principal ,
132
+ HttpServerRequest httpRequest ,
133
+ HttpServerResponse httpResponse ) {
119
134
return httpRequest
120
135
.receive ()
121
136
.reduceWith (
@@ -132,7 +147,8 @@ private Mono<Void> handleServiceRequest(
132
147
.defaultIfEmpty (Unpooled .EMPTY_BUFFER )
133
148
.flatMap (
134
149
data -> {
135
- final var message = toMessage (httpRequest , builder -> builder .data (data ));
150
+ final var message =
151
+ toMessage (httpRequest , builder -> builder .headers (principal ).data (data ));
136
152
137
153
// Match and handle file request
138
154
0 commit comments