| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #include "credential_client.hpp"
- #include "logging/logger.hpp"
- namespace smartbotic::credentials {
- using namespace common;
- CredentialClient::CredentialClient(const CredentialClientConfig& config)
- : config_(config) {
- channel_ = grpc::CreateChannel(config_.address, grpc::InsecureChannelCredentials());
- stub_ = proto::CredentialService::NewStub(channel_);
- LOG_INFO("CredentialClient initialized with address: {}", config_.address);
- }
- Result<HttpAuth> CredentialClient::getHttpAuth(const std::string& credential_id,
- const std::string& workflow_id) {
- proto::GetCredentialAuthRequest request;
- request.set_credential_id(credential_id);
- request.set_workflow_id(workflow_id);
- proto::GetCredentialAuthResponse response;
- grpc::ClientContext context;
- // Set timeout
- auto deadline = std::chrono::system_clock::now() +
- std::chrono::milliseconds(config_.timeout_ms);
- context.set_deadline(deadline);
- grpc::Status status = stub_->GetCredentialAuth(&context, request, &response);
- if (!status.ok()) {
- return Error(ErrorCode::Unavailable,
- "Credential service error: " + status.error_message());
- }
- if (!response.success()) {
- return Error(ErrorCode::NotFound, response.error());
- }
- HttpAuth auth;
- auth.header_name = response.header_name();
- auth.header_value = response.header_value();
- return auth;
- }
- Result<ImapData> CredentialClient::getImapCredentials(const std::string& credential_id,
- const std::string& workflow_id) {
- proto::GetImapCredentialsRequest request;
- request.set_credential_id(credential_id);
- request.set_workflow_id(workflow_id);
- proto::GetImapCredentialsResponse response;
- grpc::ClientContext context;
- // Set timeout
- auto deadline = std::chrono::system_clock::now() +
- std::chrono::milliseconds(config_.timeout_ms);
- context.set_deadline(deadline);
- grpc::Status status = stub_->GetImapCredentials(&context, request, &response);
- if (!status.ok()) {
- return Error(ErrorCode::Unavailable,
- "Credential service error: " + status.error_message());
- }
- if (!response.success()) {
- return Error(ErrorCode::NotFound, response.error());
- }
- ImapData data;
- data.host = response.host();
- data.port = response.port();
- data.username = response.username();
- data.password = response.password();
- data.use_ssl = response.use_ssl();
- return data;
- }
- Result<std::vector<CredentialInfo>> CredentialClient::listCredentials(const std::string& workflow_id) {
- proto::ListCredentialsRequest request;
- request.set_workflow_id(workflow_id);
- proto::ListCredentialsResponse response;
- grpc::ClientContext context;
- auto deadline = std::chrono::system_clock::now() +
- std::chrono::milliseconds(config_.timeout_ms);
- context.set_deadline(deadline);
- grpc::Status status = stub_->ListCredentials(&context, request, &response);
- if (!status.ok()) {
- return Error(ErrorCode::Unavailable,
- "Credential service error: " + status.error_message());
- }
- std::vector<CredentialInfo> credentials;
- for (const auto& cred : response.credentials()) {
- CredentialInfo info;
- info.id = cred.id();
- info.name = cred.name();
- info.type = credentialTypeFromString(cred.type());
- info.description = cred.description();
- credentials.push_back(info);
- }
- return credentials;
- }
- bool CredentialClient::isConnected() const {
- if (!channel_) return false;
- auto state = channel_->GetState(false);
- return state == GRPC_CHANNEL_READY || state == GRPC_CHANNEL_IDLE;
- }
- } // namespace smartbotic::credentials
|