credential_client.cpp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. #include "credential_client.hpp"
  2. #include "logging/logger.hpp"
  3. namespace smartbotic::credentials {
  4. using namespace common;
  5. CredentialClient::CredentialClient(const CredentialClientConfig& config)
  6. : config_(config) {
  7. channel_ = grpc::CreateChannel(config_.address, grpc::InsecureChannelCredentials());
  8. stub_ = proto::CredentialService::NewStub(channel_);
  9. LOG_INFO("CredentialClient initialized with address: {}", config_.address);
  10. }
  11. Result<HttpAuth> CredentialClient::getHttpAuth(const std::string& credential_id,
  12. const std::string& workflow_id) {
  13. proto::GetCredentialAuthRequest request;
  14. request.set_credential_id(credential_id);
  15. request.set_workflow_id(workflow_id);
  16. proto::GetCredentialAuthResponse response;
  17. grpc::ClientContext context;
  18. // Set timeout
  19. auto deadline = std::chrono::system_clock::now() +
  20. std::chrono::milliseconds(config_.timeout_ms);
  21. context.set_deadline(deadline);
  22. grpc::Status status = stub_->GetCredentialAuth(&context, request, &response);
  23. if (!status.ok()) {
  24. return Error(ErrorCode::Unavailable,
  25. "Credential service error: " + status.error_message());
  26. }
  27. if (!response.success()) {
  28. return Error(ErrorCode::NotFound, response.error());
  29. }
  30. HttpAuth auth;
  31. auth.header_name = response.header_name();
  32. auth.header_value = response.header_value();
  33. return auth;
  34. }
  35. Result<ImapData> CredentialClient::getImapCredentials(const std::string& credential_id,
  36. const std::string& workflow_id) {
  37. proto::GetImapCredentialsRequest request;
  38. request.set_credential_id(credential_id);
  39. request.set_workflow_id(workflow_id);
  40. proto::GetImapCredentialsResponse response;
  41. grpc::ClientContext context;
  42. // Set timeout
  43. auto deadline = std::chrono::system_clock::now() +
  44. std::chrono::milliseconds(config_.timeout_ms);
  45. context.set_deadline(deadline);
  46. grpc::Status status = stub_->GetImapCredentials(&context, request, &response);
  47. if (!status.ok()) {
  48. return Error(ErrorCode::Unavailable,
  49. "Credential service error: " + status.error_message());
  50. }
  51. if (!response.success()) {
  52. return Error(ErrorCode::NotFound, response.error());
  53. }
  54. ImapData data;
  55. data.host = response.host();
  56. data.port = response.port();
  57. data.username = response.username();
  58. data.password = response.password();
  59. data.use_ssl = response.use_ssl();
  60. return data;
  61. }
  62. Result<MysqlData> CredentialClient::getMysqlCredentials(const std::string& credential_id,
  63. const std::string& workflow_id) {
  64. proto::GetMysqlCredentialsRequest request;
  65. request.set_credential_id(credential_id);
  66. request.set_workflow_id(workflow_id);
  67. proto::GetMysqlCredentialsResponse response;
  68. grpc::ClientContext context;
  69. // Set timeout
  70. auto deadline = std::chrono::system_clock::now() +
  71. std::chrono::milliseconds(config_.timeout_ms);
  72. context.set_deadline(deadline);
  73. grpc::Status status = stub_->GetMysqlCredentials(&context, request, &response);
  74. if (!status.ok()) {
  75. return Error(ErrorCode::Unavailable,
  76. "Credential service error: " + status.error_message());
  77. }
  78. if (!response.success()) {
  79. return Error(ErrorCode::NotFound, response.error());
  80. }
  81. MysqlData data;
  82. data.host = response.host();
  83. data.port = response.port();
  84. data.username = response.username();
  85. data.password = response.password();
  86. data.database = response.database();
  87. data.use_ssl = response.use_ssl();
  88. return data;
  89. }
  90. Result<std::vector<CredentialInfo>> CredentialClient::listCredentials(const std::string& workflow_id) {
  91. proto::ListCredentialsRequest request;
  92. request.set_workflow_id(workflow_id);
  93. proto::ListCredentialsResponse response;
  94. grpc::ClientContext context;
  95. auto deadline = std::chrono::system_clock::now() +
  96. std::chrono::milliseconds(config_.timeout_ms);
  97. context.set_deadline(deadline);
  98. grpc::Status status = stub_->ListCredentials(&context, request, &response);
  99. if (!status.ok()) {
  100. return Error(ErrorCode::Unavailable,
  101. "Credential service error: " + status.error_message());
  102. }
  103. std::vector<CredentialInfo> credentials;
  104. for (const auto& cred : response.credentials()) {
  105. CredentialInfo info;
  106. info.id = cred.id();
  107. info.name = cred.name();
  108. info.type = credentialTypeFromString(cred.type());
  109. info.description = cred.description();
  110. credentials.push_back(info);
  111. }
  112. return credentials;
  113. }
  114. bool CredentialClient::isConnected() const {
  115. if (!channel_) return false;
  116. auto state = channel_->GetState(false);
  117. return state == GRPC_CHANNEL_READY || state == GRPC_CHANNEL_IDLE;
  118. }
  119. } // namespace smartbotic::credentials