Advertisement
Savvoy

Untitled

Nov 19th, 2019
647
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package main
  2.  
  3. import (
  4.     "context"
  5.     "flag"
  6.     "fmt"
  7.     "google.golang.org/genproto/googleapis/ads/googleads/v1/resources"
  8.     "google.golang.org/genproto/googleapis/ads/googleads/v1/services"
  9.     "google.golang.org/genproto/protobuf/field_mask"
  10.     "google.golang.org/grpc/metadata"
  11.     "metricstory.com/examples/googleAds"
  12.     "metricstory.com/ops/grpcutil"
  13.     "google.golang.org/genproto/googleapis/ads/googleads/v1/enums"
  14. )
  15.  
  16. var (
  17.     customerID  = flag.String("customerID", "6700108952", "customerID")
  18.     managerID   = flag.String("managerID", "9202423980", "managerID")
  19. )
  20.  
  21. const customerClientLinkFields = "customer_client_link.manager_link_id"
  22.  
  23. func main() {
  24.     ctx := context.Background()
  25.     flag.Parse()
  26.  
  27.     devToken := "*" //Left out on purpose
  28.  
  29.     // Setup Conn
  30.     uri := "googleads.googleapis.com:443"
  31.  
  32.     conn, cleanup, err := grpcutil.NewSecureClientConn("NewCustomerClientLinkServiceClient", uri)
  33.     defer cleanup.Run()
  34.  
  35.     callOp, err := googleAds.GetCallOptionFromKubeSecrets()
  36.     if err != nil {
  37.         panic(err)
  38.     }
  39.  
  40.     md := metadata.Pairs(
  41.         "developer-token", devToken,
  42.         "login-customer-id", *managerID,
  43.     )
  44.     ctx = metadata.NewOutgoingContext(ctx, md)
  45.  
  46.     customerManagerLinkServiceClient := services.NewCustomerManagerLinkServiceClient(conn)
  47.     customerClientLinkServiceClient := services.NewCustomerClientLinkServiceClient(conn)
  48.     serviceClient := services.NewGoogleAdsServiceClient(conn)
  49.  
  50.     mutateCustomerClientLinkRequest := &services.MutateCustomerClientLinkRequest{
  51.         CustomerId: *customerID,
  52.         Operation: &services.CustomerClientLinkOperation{
  53.             Operation: &services.CustomerClientLinkOperation_Create{
  54.                 Create: &resources.CustomerClientLink{
  55.                     Status: enums.ManagerLinkStatusEnum_PENDING,
  56.                 },
  57.             },
  58.         },
  59.     }
  60.     // Error: I get a permission denied by caller error here.
  61.     createCustomerClientLinkReply, err := customerClientLinkServiceClient.MutateCustomerClientLink(ctx, mutateCustomerClientLinkRequest, callOp)
  62.     if err != nil {
  63.         panic(err)
  64.     } else {
  65.         fmt.Printf("Successfully created a pending account for client: %s from manager: %s", customerID, managerID)
  66.     }
  67.  
  68.     getReq := &services.SearchGoogleAdsRequest{
  69.         CustomerId: *customerID,
  70.         Query: fmt.Sprintf(`
  71.             SELECT %s FROM customer_client_link
  72.             WHERE customer_client_link.resource_name = %s
  73.             LIMIT 1`, customerClientLinkFields, createCustomerClientLinkReply.Result.ResourceName),
  74.         PageSize: 100,
  75.     }
  76.  
  77.     reply, err := serviceClient.Search(ctx, getReq, callOp)
  78.     if err != nil {
  79.         panic(err)
  80.     } else {
  81.         fmt.Printf("Successfully found the client link id: %d", reply.Results[0].CustomerClientLink.ManagerLinkId.Value)
  82.     }
  83.  
  84.     managerLinkID := reply.Results[0].CustomerClientLink.ManagerLinkId.Value
  85.  
  86.     resourceName := fmt.Sprintf(
  87.         "customers/%s/customerManagerLinks/%s~%d", customerID, managerID, managerLinkID)
  88.  
  89.     op := &services.CustomerManagerLinkOperation{
  90.         UpdateMask: &field_mask.FieldMask{
  91.             Paths: []string{"status"},
  92.         },
  93.         Operation: &services.CustomerManagerLinkOperation_Update{
  94.             Update: &resources.CustomerManagerLink{
  95.                 ResourceName: resourceName,
  96.                 Status:       enums.ManagerLinkStatusEnum_ACTIVE,
  97.             },
  98.         },
  99.     }
  100.  
  101.     mutateCustomerManagerLinkStateToActiveReq := &services.MutateCustomerManagerLinkRequest{
  102.         CustomerId: *customerID,
  103.         Operations: []*services.CustomerManagerLinkOperation{op},
  104.     }
  105.  
  106.     mutateCustomerClientLinkReply, err := customerManagerLinkServiceClient.MutateCustomerManagerLink(
  107.         ctx, mutateCustomerManagerLinkStateToActiveReq, callOp)
  108.     if err != nil {
  109.         panic(err)
  110.     } else {
  111.         fmt.Printf("Successfully linked account for client with resource name: %s", mutateCustomerClientLinkReply.Results[0].ResourceName)
  112.     }
  113.  
  114.     fmt.Println(reply)
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement