credential_client.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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<std::vector<CredentialInfo>> CredentialClient::listCredentials(const std::string& workflow_id) {
  63. proto::ListCredentialsRequest request;
  64. request.set_workflow_id(workflow_id);
  65. proto::ListCredentialsResponse response;
  66. grpc::ClientContext context;
  67. auto deadline = std::chrono::system_clock::now() +
  68. std::chrono::milliseconds(config_.timeout_ms);
  69. context.set_deadline(deadline);
  70. grpc::Status status = stub_->ListCredentials(&context, request, &response);
  71. if (!status.ok()) {
  72. return Error(ErrorCode::Unavailable,
  73. "Credential service error: " + status.error_message());
  74. }
  75. std::vector<CredentialInfo> credentials;
  76. for (const auto& cred : response.credentials()) {
  77. CredentialInfo info;
  78. info.id = cred.id();
  79. info.name = cred.name();
  80. info.type = credentialTypeFromString(cred.type());
  81. info.description = cred.description();
  82. credentials.push_back(info);
  83. }
  84. return credentials;
  85. }
  86. bool CredentialClient::isConnected() const {
  87. if (!channel_) return false;
  88. auto state = channel_->GetState(false);
  89. return state == GRPC_CHANNEL_READY || state == GRPC_CHANNEL_IDLE;
  90. }
  91. } // namespace smartbotic::credentials