yql_token_builder.cpp 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. #include "yql_token_builder.h"
  2. namespace NYql {
  3. TStructuredTokenBuilder::TStructuredTokenBuilder() {
  4. }
  5. TStructuredTokenBuilder::TStructuredTokenBuilder(const TStructuredToken& data)
  6. : Data(data)
  7. {
  8. }
  9. TStructuredTokenBuilder& TStructuredTokenBuilder::SetServiceAccountIdAuth(const TString& accountId, const TString& accountIdSignature) {
  10. Data.SetField("sa_id", accountId);
  11. Data.SetField("sa_id_signature", accountIdSignature);
  12. return *this;
  13. }
  14. TStructuredTokenBuilder& TStructuredTokenBuilder::SetServiceAccountIdAuthWithSecret(const TString& accountId, const TString& accountIdSignatureReference, const TString& accountIdSignature) {
  15. Data.SetField("sa_id", accountId);
  16. Data.SetField("sa_id_signature_ref", accountIdSignatureReference);
  17. Data.SetField("sa_id_signature", accountIdSignature);
  18. return *this;
  19. }
  20. TStructuredTokenBuilder& TStructuredTokenBuilder::SetBasicAuth(const TString& login, const TString& password) {
  21. Data.SetField("basic_login", login);
  22. Data.SetField("basic_password", password);
  23. return *this;
  24. }
  25. TStructuredTokenBuilder& TStructuredTokenBuilder::SetBasicAuthWithSecret(const TString& login, const TString& passwordReference) {
  26. Data.SetField("basic_login", login);
  27. Data.SetField("basic_password_ref", passwordReference);
  28. return *this;
  29. }
  30. TStructuredTokenBuilder& TStructuredTokenBuilder::SetTokenAuthWithSecret(const TString& tokenReference, const TString& token) {
  31. Data.SetField("token_ref", tokenReference);
  32. Data.SetField("token", token);
  33. return *this;
  34. }
  35. TStructuredTokenBuilder& TStructuredTokenBuilder::SetIAMToken(const TString& token) {
  36. Data.SetField("token", token);
  37. return *this;
  38. }
  39. TStructuredTokenBuilder& TStructuredTokenBuilder::SetNoAuth() {
  40. Data.SetField("no_auth", {});
  41. return *this;
  42. }
  43. TStructuredTokenBuilder& TStructuredTokenBuilder::ReplaceReferences(const std::map<TString, TString>& secrets) {
  44. if (Data.HasField("basic_password_ref")) {
  45. auto reference = Data.GetField("basic_password_ref");
  46. Data.ClearField("basic_password_ref");
  47. Data.SetField("basic_password", secrets.at(reference));
  48. }
  49. if (Data.HasField("sa_id_signature_ref")) {
  50. auto reference = Data.GetField("sa_id_signature_ref");
  51. Data.ClearField("sa_id_signature_ref");
  52. Data.SetField("sa_id_signature", secrets.at(reference));
  53. }
  54. if (Data.HasField("token_ref")) {
  55. auto reference = Data.GetField("token_ref");
  56. Data.ClearField("token_ref");
  57. Data.SetField("token", secrets.at(reference));
  58. }
  59. return *this;
  60. }
  61. TStructuredTokenBuilder& TStructuredTokenBuilder::RemoveSecrets() {
  62. Data.ClearField("basic_password");
  63. Data.ClearField("sa_id_signature");
  64. Data.ClearField("token");
  65. return *this;
  66. }
  67. TString TStructuredTokenBuilder::ToJson() const {
  68. return Data.ToJson();
  69. }
  70. ///////////////////////////////////////////////////////////////////
  71. TStructuredTokenParser::TStructuredTokenParser(TStructuredToken&& data)
  72. : Data(std::move(data))
  73. {
  74. }
  75. bool TStructuredTokenParser::HasServiceAccountIdAuth() const {
  76. return Data.HasField("sa_id");
  77. }
  78. bool TStructuredTokenParser::GetServiceAccountIdAuth(TString& accountId, TString& accountIdSignature) const {
  79. TString accountIdSignatureReference;
  80. return GetServiceAccountIdAuth(accountId, accountIdSignature, accountIdSignatureReference);
  81. }
  82. bool TStructuredTokenParser::GetServiceAccountIdAuth(TString& accountId, TString& accountIdSignature, TString& accountIdSignatureReference) const {
  83. accountId = Data.GetField("sa_id");
  84. accountIdSignature = Data.GetFieldOrDefault("sa_id_signature", "");
  85. accountIdSignatureReference = Data.GetFieldOrDefault("sa_id_signature_ref", "");
  86. return true;
  87. }
  88. bool TStructuredTokenParser::HasBasicAuth() const {
  89. return Data.HasField("basic_login");
  90. }
  91. bool TStructuredTokenParser::GetBasicAuth(TString& login, TString& password) const {
  92. TString passwordReference;
  93. return GetBasicAuth(login, password, passwordReference);
  94. }
  95. bool TStructuredTokenParser::GetBasicAuth(TString& login, TString& password, TString& passwordReference) const {
  96. login = Data.GetField("basic_login");
  97. password = Data.GetFieldOrDefault("basic_password", "");
  98. passwordReference = Data.GetFieldOrDefault("basic_password_ref", "");
  99. return true;
  100. }
  101. bool TStructuredTokenParser::HasIAMToken() const {
  102. return Data.HasField("token");
  103. }
  104. TString TStructuredTokenParser::GetIAMToken() const {
  105. return Data.GetField("token");
  106. }
  107. bool TStructuredTokenParser::IsNoAuth() const {
  108. return Data.HasField("no_auth");
  109. }
  110. void TStructuredTokenParser::ListReferences(TSet<TString>& references) const {
  111. if (Data.HasField("basic_password_ref")) {
  112. references.insert(Data.GetField("basic_password_ref"));
  113. }
  114. if (Data.HasField("sa_id_signature_ref")) {
  115. references.insert(Data.GetField("sa_id_signature_ref"));
  116. }
  117. if (Data.HasField("token_ref")) {
  118. references.insert(Data.GetField("token_ref"));
  119. }
  120. }
  121. TStructuredTokenBuilder TStructuredTokenParser::ToBuilder() const {
  122. return TStructuredTokenBuilder(Data);
  123. }
  124. TStructuredTokenParser CreateStructuredTokenParser(const TString& content = {}) {
  125. return content ? TStructuredTokenParser(ParseStructuredToken(content)) : TStructuredTokenParser(TStructuredToken({}));
  126. }
  127. TString ComposeStructuredTokenJsonForServiceAccount(const TString& serviceAccountId, const TString& serviceAccountIdSignature, const TString& token) {
  128. TStructuredTokenBuilder result;
  129. if (serviceAccountId && serviceAccountIdSignature) {
  130. result.SetServiceAccountIdAuth(serviceAccountId, serviceAccountIdSignature);
  131. return result.ToJson();
  132. }
  133. if (token) {
  134. result.SetIAMToken(token);
  135. return result.ToJson();
  136. }
  137. result.SetNoAuth();
  138. return result.ToJson();
  139. }
  140. TString ComposeStructuredTokenJsonForServiceAccountWithSecret(const TString& serviceAccountId, const TString& serviceAccountIdSignatureSecretName, const TString& serviceAccountIdSignature) {
  141. TStructuredTokenBuilder result;
  142. if (serviceAccountId && serviceAccountIdSignatureSecretName && serviceAccountIdSignature) {
  143. result.SetServiceAccountIdAuthWithSecret(serviceAccountId, serviceAccountIdSignatureSecretName, serviceAccountIdSignature);
  144. return result.ToJson();
  145. }
  146. result.SetNoAuth();
  147. return result.ToJson();
  148. }
  149. TString ComposeStructuredTokenJsonForBasicAuthWithSecret(const TString& login, const TString& passwordSecretName, const TString& password) {
  150. TStructuredTokenBuilder result;
  151. if (login && passwordSecretName && password) {
  152. result.SetBasicAuth(login, password).SetBasicAuthWithSecret(login, passwordSecretName);
  153. return result.ToJson();
  154. }
  155. result.SetNoAuth();
  156. return result.ToJson();
  157. }
  158. TString ComposeStructuredTokenJsonForTokenAuthWithSecret(const TString& tokenSecretName, const TString& token) {
  159. TStructuredTokenBuilder result;
  160. if (tokenSecretName && token) {
  161. result.SetTokenAuthWithSecret(tokenSecretName, token);
  162. return result.ToJson();
  163. }
  164. result.SetNoAuth();
  165. return result.ToJson();
  166. }
  167. }