@@ -73,14 +73,9 @@ class THandlerSessionServiceCheck : public NActors::TActorBootstrapped<THandlerS
73
73
if (event->Get ()->Response != nullptr ) {
74
74
NHttp::THttpIncomingResponsePtr response = event->Get ()->Response ;
75
75
LOG_DEBUG_S (ctx, EService::MVP, " Incoming response for protected resource: " << response->Status );
76
- if ((response->Status == " 400" || response->Status .empty ()) && RequestedPageScheme.empty ()) {
77
- NHttp::THttpOutgoingRequestPtr request = response->GetRequest ();
78
- if (!request->Secure ) {
79
- LOG_DEBUG_S (ctx, EService::MVP, " Try to send request to HTTPS port" );
80
- NHttp::THeadersBuilder headers {request->Headers };
81
- ForwardUserRequest (headers.Get (AUTH_HEADER_NAME), ctx, true );
82
- return ;
83
- }
76
+ if (NeedSendSecureHttpRequest (response)) {
77
+ SendSecureHttpRequest (response, ctx);
78
+ return ;
84
79
}
85
80
NHttp::THeadersBuilder headers = GetResponseHeaders (response);
86
81
TStringBuf contentType = headers.Get (" Content-Type" ).NextTok (' ;' );
@@ -117,7 +112,7 @@ class THandlerSessionServiceCheck : public NActors::TActorBootstrapped<THandlerS
117
112
return it != Settings.AllowedProxyHosts .cend ();
118
113
}
119
114
120
- bool IsAuthorizedRequest (TStringBuf authHeader) {
115
+ static bool IsAuthorizedRequest (TStringBuf authHeader) {
121
116
if (authHeader.empty ()) {
122
117
return false ;
123
118
}
@@ -142,7 +137,9 @@ class THandlerSessionServiceCheck : public NActors::TActorBootstrapped<THandlerS
142
137
ctx.Send (HttpProxyId, new NHttp::TEvHttpProxy::TEvHttpOutgoingRequest (httpRequest));
143
138
}
144
139
145
- TString FixReferenceInHtml (TStringBuf html, TStringBuf host, TStringBuf findStr) {
140
+ virtual bool NeedSendSecureHttpRequest (const NHttp::THttpIncomingResponsePtr& response) const = 0;
141
+
142
+ static TString FixReferenceInHtml (TStringBuf html, TStringBuf host, TStringBuf findStr) {
146
143
TStringBuilder result;
147
144
size_t n = html.find (findStr);
148
145
if (n == TStringBuf::npos) {
@@ -166,14 +163,14 @@ class THandlerSessionServiceCheck : public NActors::TActorBootstrapped<THandlerS
166
163
return result;
167
164
}
168
165
169
- TString FixReferenceInHtml (TStringBuf html, TStringBuf host) {
166
+ static TString FixReferenceInHtml (TStringBuf html, TStringBuf host) {
170
167
TStringBuf findString = " href=" ;
171
168
auto result = FixReferenceInHtml (html, host, findString);
172
169
findString = " src=" ;
173
170
return FixReferenceInHtml (result, host, findString);
174
171
}
175
172
176
- void ForwardRequestHeaders (NHttp::THttpOutgoingRequestPtr& request) {
173
+ void ForwardRequestHeaders (NHttp::THttpOutgoingRequestPtr& request) const {
177
174
static const TVector<TStringBuf> HEADERS_WHITE_LIST = {
178
175
" Connection" ,
179
176
" Accept-Language" ,
@@ -195,7 +192,7 @@ class THandlerSessionServiceCheck : public NActors::TActorBootstrapped<THandlerS
195
192
request->Set (" Accept-Encoding" , " deflate" );
196
193
}
197
194
198
- NHttp::THeadersBuilder GetResponseHeaders (const NHttp::THttpIncomingResponsePtr& response) {
195
+ static NHttp::THeadersBuilder GetResponseHeaders (const NHttp::THttpIncomingResponsePtr& response) {
199
196
static const TVector<TStringBuf> HEADERS_WHITE_LIST = {
200
197
" Content-Type" ,
201
198
" Connection" ,
@@ -216,6 +213,14 @@ class THandlerSessionServiceCheck : public NActors::TActorBootstrapped<THandlerS
216
213
}
217
214
return resultHeaders;
218
215
}
216
+
217
+ private:
218
+ void SendSecureHttpRequest (const NHttp::THttpIncomingResponsePtr& response, const NActors::TActorContext& ctx) {
219
+ NHttp::THttpOutgoingRequestPtr request = response->GetRequest ();
220
+ LOG_DEBUG_S (ctx, EService::MVP, " Try to send request to HTTPS port" );
221
+ NHttp::THeadersBuilder headers {request->Headers };
222
+ ForwardUserRequest (headers.Get (AUTH_HEADER_NAME), ctx, true );
223
+ }
219
224
};
220
225
221
226
} // NMVP
0 commit comments