@@ -21,24 +21,29 @@ class TWhoAmIRPC : public TActorBootstrapped<TWhoAmIRPC> {
21
21
: Request(request)
22
22
{}
23
23
24
- void Bootstrap (const TActorContext& ctx ) {
24
+ void Bootstrap () {
25
25
// TODO: Do we realy realy need to make call to the ticket parser here???
26
26
// we have done it already in grpc_request_proxy
27
27
auto req = dynamic_cast <TEvWhoAmIRequest*>(Request.get ());
28
28
Y_ABORT_UNLESS (req, " Unexpected request type for TWhoAmIRPC" );
29
- TMaybe<TString> authToken = req->GetYdbToken ();
30
- if (authToken) {
31
- TMaybe<TString> database = Request->GetDatabaseName ();
32
- ctx.Send (MakeTicketParserID (), new TEvTicketParser::TEvAuthorizeTicket ({
33
- .Database = database ? database.GetRef () : TString (),
34
- .Ticket = authToken.GetRef (),
35
- .PeerName = Request->GetPeerName ()
36
- }));
37
- Become (&TThis::StateWaitForTicket);
29
+ TString ticket;
30
+ if (TMaybe<TString> authToken = req->GetYdbToken ()) {
31
+ ticket = authToken.GetRef ();
32
+ } else if (TVector<TStringBuf> clientCert = Request->FindClientCert (); !clientCert.empty ()) {
33
+ ticket = TString (clientCert.front ());
38
34
} else {
39
35
ReplyError (" No token provided" );
40
36
PassAway ();
37
+ return ;
41
38
}
39
+
40
+ TMaybe<TString> database = Request->GetDatabaseName ();
41
+ Send (MakeTicketParserID (), new TEvTicketParser::TEvAuthorizeTicket ({
42
+ .Database = database ? database.GetRef () : TString (),
43
+ .Ticket = ticket,
44
+ .PeerName = Request->GetPeerName ()
45
+ }));
46
+ Become (&TThis::StateWaitForTicket);
42
47
}
43
48
44
49
STFUNC (StateWaitForTicket) {
0 commit comments