@@ -38,19 +38,19 @@ void THandlerImpersonateStart::Bootstrap(const NActors::TActorContext& ctx) {
38
38
TStringBuf impersonatedCookieValue = GetCookie (cookies, CreateNameImpersonatedCookie (Settings.ClientId ));
39
39
40
40
if (sessionToken.empty ()) {
41
- return ReplyBadRequestAndDie (" Wrong impersonate parameter: session cookie not found" , ctx );
41
+ return ReplyBadRequestAndPassAway (" Wrong impersonate parameter: session cookie not found" );
42
42
}
43
43
if (!impersonatedCookieValue.empty ()) {
44
- return ReplyBadRequestAndDie (" Wrong impersonate parameter: impersonated cookie already exists" , ctx );
44
+ return ReplyBadRequestAndPassAway (" Wrong impersonate parameter: impersonated cookie already exists" );
45
45
}
46
46
if (serviceAccountId.empty ()) {
47
- return ReplyBadRequestAndDie (" Wrong impersonate parameter: service_account_id not found" , ctx );
47
+ return ReplyBadRequestAndPassAway (" Wrong impersonate parameter: service_account_id not found" );
48
48
}
49
49
50
50
RequestImpersonatedToken (sessionToken, serviceAccountId, ctx);
51
51
}
52
52
53
- void THandlerImpersonateStart::RequestImpersonatedToken (const TString& sessionToken, const TString& serviceAccountId, const NActors::TActorContext& ctx) {
53
+ void THandlerImpersonateStart::RequestImpersonatedToken (TString& sessionToken, TString& serviceAccountId, const NActors::TActorContext& ctx) {
54
54
BLOG_D (" Request impersonated token" );
55
55
NHttp::THttpOutgoingRequestPtr httpRequest = NHttp::THttpOutgoingRequest::CreateRequestPost (Settings.GetImpersonateEndpointURL ());
56
56
httpRequest->Set <&NHttp::THttpRequest::ContentType>(" application/x-www-form-urlencoded" );
@@ -62,18 +62,18 @@ void THandlerImpersonateStart::RequestImpersonatedToken(const TString& sessionTo
62
62
}
63
63
httpRequest->Set (" Authorization" , token); // Bearer included
64
64
65
+ CGIEscape (sessionToken);
66
+ CGIEscape (serviceAccountId);
65
67
TStringBuilder body;
66
68
body << " session=" << sessionToken
67
69
<< " &service_account_id=" << serviceAccountId;
68
- TString bodyStr = body;
69
- CGIEscape (bodyStr);
70
- httpRequest->Set <&NHttp::THttpRequest::Body>(bodyStr);
70
+ httpRequest->Set <&NHttp::THttpRequest::Body>(body);
71
71
72
72
ctx.Send (HttpProxyId, new NHttp::TEvHttpProxy::TEvHttpOutgoingRequest (httpRequest));
73
73
Become (&THandlerImpersonateStart::StateWork);
74
74
}
75
75
76
- void THandlerImpersonateStart::ProcessImpersonatedToken (const TString& impersonatedToken, const NActors::TActorContext& ctx ) {
76
+ void THandlerImpersonateStart::ProcessImpersonatedToken (const TString& impersonatedToken) {
77
77
TString impersonatedCookieName = CreateNameImpersonatedCookie (Settings.ClientId );
78
78
TString impersonatedCookieValue = Base64Encode (impersonatedToken);
79
79
BLOG_D (" Set impersonated cookie: (" << impersonatedCookieName << " : " << NKikimr::MaskTicket (impersonatedCookieValue) << " )" );
@@ -82,10 +82,10 @@ void THandlerImpersonateStart::ProcessImpersonatedToken(const TString& impersona
82
82
responseHeaders.Set (" Set-Cookie" , CreateSecureCookie (impersonatedCookieName, impersonatedCookieValue));
83
83
SetCORS (Request, &responseHeaders);
84
84
NHttp::THttpOutgoingResponsePtr httpResponse = Request->CreateResponse (" 200" , " OK" , responseHeaders);
85
- ReplyAndDie (httpResponse, ctx );
85
+ ReplyAndPassAway (httpResponse);
86
86
}
87
87
88
- void THandlerImpersonateStart::Handle (NHttp::TEvHttpProxy::TEvHttpIncomingResponse::TPtr event, const NActors::TActorContext& ctx ) {
88
+ void THandlerImpersonateStart::Handle (NHttp::TEvHttpProxy::TEvHttpIncomingResponse::TPtr event) {
89
89
NHttp::THttpOutgoingResponsePtr httpResponse;
90
90
if (event->Get ()->Error .empty () && event->Get ()->Response ) {
91
91
NHttp::THttpIncomingResponsePtr response = event->Get ()->Response ;
@@ -98,7 +98,7 @@ void THandlerImpersonateStart::Handle(NHttp::TEvHttpProxy::TEvHttpIncomingRespon
98
98
const NJson::TJsonValue* jsonImpersonatedToken;
99
99
if (jsonValue.GetValuePointer (" impersonation" , &jsonImpersonatedToken)) {
100
100
TString impersonatedToken = jsonImpersonatedToken->GetStringRobust ();
101
- ProcessImpersonatedToken (impersonatedToken, ctx );
101
+ ProcessImpersonatedToken (impersonatedToken);
102
102
return ;
103
103
} else {
104
104
errorMessage = " Wrong OIDC provider response: impersonated token not found" ;
@@ -109,35 +109,35 @@ void THandlerImpersonateStart::Handle(NHttp::TEvHttpProxy::TEvHttpIncomingRespon
109
109
NHttp::THeadersBuilder responseHeaders;
110
110
responseHeaders.Set (" Content-Type" , " text/plain" );
111
111
SetCORS (Request, &responseHeaders);
112
- return ReplyAndDie (Request->CreateResponse (" 400" , " Bad Request" , responseHeaders, errorMessage), ctx );
112
+ return ReplyAndPassAway (Request->CreateResponse (" 400" , " Bad Request" , responseHeaders, errorMessage));
113
113
} else {
114
114
NHttp::THeadersBuilder responseHeaders;
115
115
NHttp::THeaders headers (response->Headers );
116
116
if (headers.Has (" Content-Type" )) {
117
117
responseHeaders.Set (" Content-Type" , headers.Get (" Content-Type" ));
118
118
}
119
119
SetCORS (Request, &responseHeaders);
120
- return ReplyAndDie (Request->CreateResponse (response->Status , response->Message , responseHeaders, response->Body ), ctx );
120
+ return ReplyAndPassAway (Request->CreateResponse (response->Status , response->Message , responseHeaders, response->Body ));
121
121
}
122
122
} else {
123
123
NHttp::THeadersBuilder responseHeaders;
124
124
responseHeaders.Set (" Content-Type" , " text/plain" );
125
125
SetCORS (Request, &responseHeaders);
126
- return ReplyAndDie (Request->CreateResponse (" 400" , " Bad Request" , responseHeaders, event->Get ()->Error ), ctx );
126
+ return ReplyAndPassAway (Request->CreateResponse (" 400" , " Bad Request" , responseHeaders, event->Get ()->Error ));
127
127
}
128
128
}
129
129
130
- void THandlerImpersonateStart::ReplyAndDie (NHttp::THttpOutgoingResponsePtr httpResponse, const NActors::TActorContext& ctx ) {
131
- ctx. Send (Sender, new NHttp::TEvHttpProxy::TEvHttpOutgoingResponse (httpResponse));
132
- Die (ctx );
130
+ void THandlerImpersonateStart::ReplyAndPassAway (NHttp::THttpOutgoingResponsePtr httpResponse) {
131
+ Send (Sender, new NHttp::TEvHttpProxy::TEvHttpOutgoingResponse (httpResponse));
132
+ PassAway ( );
133
133
}
134
134
135
- void THandlerImpersonateStart::ReplyBadRequestAndDie (const TString& errorMessage, const NActors::TActorContext& ctx ) {
135
+ void THandlerImpersonateStart::ReplyBadRequestAndPassAway (const TString& errorMessage) {
136
136
NHttp::THeadersBuilder responseHeaders;
137
137
responseHeaders.Set (" Content-Type" , " text/plain" );
138
138
SetCORS (Request, &responseHeaders);
139
139
NHttp::THttpOutgoingResponsePtr httpResponse = Request->CreateResponse (" 400" , " Bad Request" , responseHeaders, errorMessage);
140
- ReplyAndDie (httpResponse, ctx );
140
+ ReplyAndPassAway (httpResponse);
141
141
}
142
142
143
143
TImpersonateStartPageHandler::TImpersonateStartPageHandler (const NActors::TActorId& httpProxyId, const TOpenIdConnectSettings& settings)
0 commit comments