Skip to content

YDB C++ SDK Import 4 #382

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/ydb-cpp-sdk/client/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
add_subdirectory(iam/common)
add_subdirectory(iam_private/common)
8 changes: 8 additions & 0 deletions include/ydb-cpp-sdk/client/iam_private/common/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
_ydb_sdk_add_library(client-iam_private-types INTERFACE)

target_link_libraries(client-iam_private-types
INTERFACE
client-iam-types
)

_ydb_sdk_install_targets(client-iam_private-types)
15 changes: 15 additions & 0 deletions include/ydb-cpp-sdk/client/iam_private/common/types.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#pragma once

#include <ydb-cpp-sdk/client/iam/common/types.h>

namespace NYdb::inline V3 {

struct TIamServiceParams : TIamEndpoint {
std::string ServiceId;
std::string MicroserviceId;
std::string ResourceId;
std::string ResourceType;
std::string TargetServiceAccountId;
};

}
5 changes: 5 additions & 0 deletions include/ydb-cpp-sdk/client/iam_private/iam.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#pragma once

#include "common/types.h"

#include <ydb-cpp-sdk/client/iam/common/types.h>

namespace NYdb::inline V3 {
Expand All @@ -10,4 +12,7 @@ TCredentialsProviderFactoryPtr CreateIamJwtFileCredentialsProviderFactoryPrivate
/// Acquire an IAM token using JSON Web Token (JWT) contents.
TCredentialsProviderFactoryPtr CreateIamJwtParamsCredentialsProviderFactoryPrivate(const TIamJwtContent& param);

/// Acquire an IAM token for system service account (SSA).
TCredentialsProviderFactoryPtr CreateIamServiceCredentialsProviderFactory(const TIamServiceParams& params);

} // namespace NYdb
11 changes: 11 additions & 0 deletions src/api/client/yc_private/iam/iam_token_service.proto
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ service IamTokenService {
// create iam token for service account
rpc CreateForServiceAccount (CreateIamTokenForServiceAccountRequest) returns (CreateIamTokenResponse);

// create iam token for service
rpc CreateForService (CreateIamTokenForServiceRequest) returns (CreateIamTokenResponse);

// create iam token for compute instance
rpc CreateForComputeInstance (CreateIamTokenForComputeInstanceRequest) returns (CreateIamTokenResponse);

Expand Down Expand Up @@ -50,6 +53,14 @@ message CreateIamTokenForServiceAccountRequest {
string service_account_id = 1;
}

message CreateIamTokenForServiceRequest {
string service_id = 1;
string microservice_id = 2;
string resource_id = 3;
string resource_type = 4;
string target_service_account_id = 5;
}

message CreateIamTokenForComputeInstanceRequest {
string service_account_id = 1;
string instance_id = 2;
Expand Down
21 changes: 14 additions & 7 deletions src/client/iam/common/iam.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,19 @@ class TGrpcIamCredentialsProvider : public ICredentialsProvider {
protected:
using TRequestFiller = std::function<void(TRequest&)>;

using TSimpleRpc =
typename NYdbGrpc::TSimpleRequestProcessor<
typename TService::Stub,
TRequest,
TResponse>::TAsyncRequest;

private:
class TImpl : public std::enable_shared_from_this<TGrpcIamCredentialsProvider<TRequest, TResponse, TService>::TImpl> {
public:
TImpl(const TIamEndpoint& iamEndpoint, const TRequestFiller& requestFiller)
TImpl(const TIamEndpoint& iamEndpoint, const TRequestFiller& requestFiller, TSimpleRpc rpc)
: Client(std::make_unique<NYdbGrpc::TGRpcClientLow>())
, Connection_(nullptr)
, Rpc_(rpc)
, Ticket_("")
, NextTicketUpdate_(TInstant::Zero())
, IamEndpoint_(iamEndpoint)
Expand Down Expand Up @@ -67,7 +74,7 @@ class TGrpcIamCredentialsProvider : public ICredentialsProvider {
Connection_->template DoRequest<TRequest, TResponse>(
std::move(req),
std::move(cb),
&TService::Stub::AsyncCreate,
Rpc_,
{ {}, {}, IamEndpoint_.RequestTimeout }
);

Expand Down Expand Up @@ -142,9 +149,9 @@ class TGrpcIamCredentialsProvider : public ICredentialsProvider {
}

private:

std::unique_ptr<NYdbGrpc::TGRpcClientLow> Client;
std::unique_ptr<NYdbGrpc::TServiceConnection<TService>> Connection_;
TSimpleRpc Rpc_;
std::string Ticket_;
TInstant NextTicketUpdate_;
const TIamEndpoint IamEndpoint_;
Expand All @@ -157,8 +164,8 @@ class TGrpcIamCredentialsProvider : public ICredentialsProvider {
};

public:
TGrpcIamCredentialsProvider(const TIamEndpoint& endpoint, const TRequestFiller& requestFiller)
: Impl_(std::make_shared<TImpl>(endpoint, requestFiller))
TGrpcIamCredentialsProvider(const TIamEndpoint& endpoint, const TRequestFiller& requestFiller, TSimpleRpc rpc)
: Impl_(std::make_shared<TImpl>(endpoint, requestFiller, rpc))
{
Impl_->UpdateTicket(true);
}
Expand Down Expand Up @@ -186,7 +193,7 @@ class TIamJwtCredentialsProvider : public TGrpcIamCredentialsProvider<TRequest,
: TGrpcIamCredentialsProvider<TRequest, TResponse, TService>(params,
[jwtParams = params.JwtParams](TRequest& req) {
req.set_jwt(MakeSignedJwt(jwtParams));
}) {}
}, &TService::Stub::AsyncCreate) {}
};

template<typename TRequest, typename TResponse, typename TService>
Expand All @@ -196,7 +203,7 @@ class TIamOAuthCredentialsProvider : public TGrpcIamCredentialsProvider<TRequest
: TGrpcIamCredentialsProvider<TRequest, TResponse, TService>(params,
[token = params.OAuthToken](TRequest& req) {
req.set_yandex_passport_oauth_token(TStringType{token});
}) {}
}, &TService::Stub::AsyncCreate) {}
};

template<typename TRequest, typename TResponse, typename TService>
Expand Down
4 changes: 3 additions & 1 deletion src/client/iam_private/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
add_subdirectory(common)

_ydb_sdk_add_library(client-iam_private)

target_link_libraries(client-iam_private
Expand All @@ -6,7 +8,7 @@ target_link_libraries(client-iam_private
yutil
PRIVATE
api-client-yc_private
client-iam-common
client-iam_private-common
)

target_sources(client-iam_private
Expand Down
9 changes: 9 additions & 0 deletions src/client/iam_private/common/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
_ydb_sdk_add_library(client-iam_private-common INTERFACE)

target_link_libraries(client-iam_private-common
INTERFACE
client-iam-common
client-iam_private-types
)

_ydb_sdk_install_targets(client-iam_private-common)
28 changes: 28 additions & 0 deletions src/client/iam_private/common/iam.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#include <ydb-cpp-sdk/client/iam_private/common/types.h>

#include <src/client/iam/common/iam.h>

namespace NYdb::inline V3 {

template<typename TRequest, typename TResponse, typename TService>

class TIamServiceCredentialsProviderFactory : public ICredentialsProviderFactory {
public:
TIamServiceCredentialsProviderFactory(const TIamServiceParams& params) : Params_(params) {}

TCredentialsProviderPtr CreateProvider() const final {
return std::make_shared<TGrpcIamCredentialsProvider<TRequest, TResponse, TService>>(Params_,
[params = Params_](TRequest& req) {
req.set_service_id(params.ServiceId);
req.set_microservice_id(params.MicroserviceId);
req.set_resource_id(params.ResourceId);
req.set_resource_type(params.ResourceType);
req.set_target_service_account_id(params.TargetServiceAccountId);
}, &TService::Stub::AsyncCreateForService);
}

private:
TIamServiceParams Params_;
};

}
20 changes: 15 additions & 5 deletions src/client/iam_private/iam.cpp
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
#include <ydb-cpp-sdk/client/iam_private/iam.h>
#include "common/iam.h"

#include <src/client/iam/common/iam.h>
#include <ydb-cpp-sdk/client/iam_private/iam.h>

#include <src/api/client/yc_private/iam/iam_token_service.pb.h>
#include <src/api/client/yc_private/iam/iam_token_service.grpc.pb.h>

using namespace yandex::cloud::priv::iam::v1;

namespace NYdb::inline V3 {

TCredentialsProviderFactoryPtr CreateIamJwtCredentialsProviderFactoryImplPrivate(TIamJwtParams&& jwtParams) {
return std::make_shared<TIamJwtCredentialsProviderFactory<
yandex::cloud::priv::iam::v1::CreateIamTokenRequest,
yandex::cloud::priv::iam::v1::CreateIamTokenResponse,
yandex::cloud::priv::iam::v1::IamTokenService
CreateIamTokenRequest,
CreateIamTokenResponse,
IamTokenService
>>(std::move(jwtParams));
}

Expand All @@ -25,4 +27,12 @@ TCredentialsProviderFactoryPtr CreateIamJwtParamsCredentialsProviderFactoryPriva
return CreateIamJwtCredentialsProviderFactoryImplPrivate(std::move(jwtParams));
}

TCredentialsProviderFactoryPtr CreateIamServiceCredentialsProviderFactory(const TIamServiceParams& params) {
return std::make_shared<TIamServiceCredentialsProviderFactory<
CreateIamTokenForServiceRequest,
CreateIamTokenResponse,
IamTokenService
>>(std::move(params));
}

}
2 changes: 1 addition & 1 deletion src/client/resources/ydb_sdk_version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.1.0
3.2.0
Loading
Loading