Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "context"
- "flag"
- "fmt"
- "google.golang.org/genproto/googleapis/ads/googleads/v1/resources"
- "google.golang.org/genproto/googleapis/ads/googleads/v1/services"
- "google.golang.org/genproto/protobuf/field_mask"
- "google.golang.org/grpc/metadata"
- "metricstory.com/examples/googleAds"
- "metricstory.com/ops/grpcutil"
- "google.golang.org/genproto/googleapis/ads/googleads/v1/enums"
- )
- var (
- customerID = flag.String("customerID", "6700108952", "customerID")
- managerID = flag.String("managerID", "9202423980", "managerID")
- )
- const customerClientLinkFields = "customer_client_link.manager_link_id"
- func main() {
- ctx := context.Background()
- flag.Parse()
- devToken := "*" //Left out on purpose
- // Setup Conn
- uri := "googleads.googleapis.com:443"
- conn, cleanup, err := grpcutil.NewSecureClientConn("NewCustomerClientLinkServiceClient", uri)
- defer cleanup.Run()
- callOp, err := googleAds.GetCallOptionFromKubeSecrets()
- if err != nil {
- panic(err)
- }
- md := metadata.Pairs(
- "developer-token", devToken,
- "login-customer-id", *managerID,
- )
- ctx = metadata.NewOutgoingContext(ctx, md)
- customerManagerLinkServiceClient := services.NewCustomerManagerLinkServiceClient(conn)
- customerClientLinkServiceClient := services.NewCustomerClientLinkServiceClient(conn)
- serviceClient := services.NewGoogleAdsServiceClient(conn)
- mutateCustomerClientLinkRequest := &services.MutateCustomerClientLinkRequest{
- CustomerId: *customerID,
- Operation: &services.CustomerClientLinkOperation{
- Operation: &services.CustomerClientLinkOperation_Create{
- Create: &resources.CustomerClientLink{
- Status: enums.ManagerLinkStatusEnum_PENDING,
- },
- },
- },
- }
- // Error: I get a permission denied by caller error here.
- createCustomerClientLinkReply, err := customerClientLinkServiceClient.MutateCustomerClientLink(ctx, mutateCustomerClientLinkRequest, callOp)
- if err != nil {
- panic(err)
- } else {
- fmt.Printf("Successfully created a pending account for client: %s from manager: %s", customerID, managerID)
- }
- getReq := &services.SearchGoogleAdsRequest{
- CustomerId: *customerID,
- Query: fmt.Sprintf(`
- SELECT %s FROM customer_client_link
- WHERE customer_client_link.resource_name = %s
- LIMIT 1`, customerClientLinkFields, createCustomerClientLinkReply.Result.ResourceName),
- PageSize: 100,
- }
- reply, err := serviceClient.Search(ctx, getReq, callOp)
- if err != nil {
- panic(err)
- } else {
- fmt.Printf("Successfully found the client link id: %d", reply.Results[0].CustomerClientLink.ManagerLinkId.Value)
- }
- managerLinkID := reply.Results[0].CustomerClientLink.ManagerLinkId.Value
- resourceName := fmt.Sprintf(
- "customers/%s/customerManagerLinks/%s~%d", customerID, managerID, managerLinkID)
- op := &services.CustomerManagerLinkOperation{
- UpdateMask: &field_mask.FieldMask{
- Paths: []string{"status"},
- },
- Operation: &services.CustomerManagerLinkOperation_Update{
- Update: &resources.CustomerManagerLink{
- ResourceName: resourceName,
- Status: enums.ManagerLinkStatusEnum_ACTIVE,
- },
- },
- }
- mutateCustomerManagerLinkStateToActiveReq := &services.MutateCustomerManagerLinkRequest{
- CustomerId: *customerID,
- Operations: []*services.CustomerManagerLinkOperation{op},
- }
- mutateCustomerClientLinkReply, err := customerManagerLinkServiceClient.MutateCustomerManagerLink(
- ctx, mutateCustomerManagerLinkStateToActiveReq, callOp)
- if err != nil {
- panic(err)
- } else {
- fmt.Printf("Successfully linked account for client with resource name: %s", mutateCustomerClientLinkReply.Results[0].ResourceName)
- }
- fmt.Println(reply)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement