1// Copyright 2020 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// Code generated by protoc-gen-go_gapic. DO NOT EDIT.
16
17package recaptchaenterprise
18
19import (
20	"context"
21	"fmt"
22	"math"
23	"net/url"
24
25	"github.com/golang/protobuf/proto"
26	gax "github.com/googleapis/gax-go/v2"
27	"google.golang.org/api/iterator"
28	"google.golang.org/api/option"
29	gtransport "google.golang.org/api/transport/grpc"
30	recaptchaenterprisepb "google.golang.org/genproto/googleapis/cloud/recaptchaenterprise/v1beta1"
31	"google.golang.org/grpc"
32	"google.golang.org/grpc/metadata"
33)
34
35var newRecaptchaEnterpriseServiceV1Beta1ClientHook clientHook
36
37// RecaptchaEnterpriseServiceV1Beta1CallOptions contains the retry settings for each method of RecaptchaEnterpriseServiceV1Beta1Client.
38type RecaptchaEnterpriseServiceV1Beta1CallOptions struct {
39	CreateAssessment   []gax.CallOption
40	AnnotateAssessment []gax.CallOption
41	CreateKey          []gax.CallOption
42	ListKeys           []gax.CallOption
43	GetKey             []gax.CallOption
44	UpdateKey          []gax.CallOption
45	DeleteKey          []gax.CallOption
46}
47
48func defaultRecaptchaEnterpriseServiceV1Beta1ClientOptions() []option.ClientOption {
49	return []option.ClientOption{
50		option.WithEndpoint("recaptchaenterprise.googleapis.com:443"),
51		option.WithGRPCDialOption(grpc.WithDisableServiceConfig()),
52		option.WithScopes(DefaultAuthScopes()...),
53		option.WithGRPCDialOption(grpc.WithDefaultCallOptions(
54			grpc.MaxCallRecvMsgSize(math.MaxInt32))),
55	}
56}
57
58func defaultRecaptchaEnterpriseServiceV1Beta1CallOptions() *RecaptchaEnterpriseServiceV1Beta1CallOptions {
59	return &RecaptchaEnterpriseServiceV1Beta1CallOptions{
60		CreateAssessment:   []gax.CallOption{},
61		AnnotateAssessment: []gax.CallOption{},
62		CreateKey:          []gax.CallOption{},
63		ListKeys:           []gax.CallOption{},
64		GetKey:             []gax.CallOption{},
65		UpdateKey:          []gax.CallOption{},
66		DeleteKey:          []gax.CallOption{},
67	}
68}
69
70// RecaptchaEnterpriseServiceV1Beta1Client is a client for interacting with reCAPTCHA Enterprise API.
71//
72// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
73type RecaptchaEnterpriseServiceV1Beta1Client struct {
74	// Connection pool of gRPC connections to the service.
75	connPool gtransport.ConnPool
76
77	// The gRPC API client.
78	recaptchaEnterpriseServiceV1Beta1Client recaptchaenterprisepb.RecaptchaEnterpriseServiceV1Beta1Client
79
80	// The call options for this service.
81	CallOptions *RecaptchaEnterpriseServiceV1Beta1CallOptions
82
83	// The x-goog-* metadata to be sent with each request.
84	xGoogMetadata metadata.MD
85}
86
87// NewRecaptchaEnterpriseServiceV1Beta1Client creates a new recaptcha enterprise service v1 beta1 client.
88//
89// Service to determine the likelihood an event is legitimate.
90func NewRecaptchaEnterpriseServiceV1Beta1Client(ctx context.Context, opts ...option.ClientOption) (*RecaptchaEnterpriseServiceV1Beta1Client, error) {
91	clientOpts := defaultRecaptchaEnterpriseServiceV1Beta1ClientOptions()
92
93	if newRecaptchaEnterpriseServiceV1Beta1ClientHook != nil {
94		hookOpts, err := newRecaptchaEnterpriseServiceV1Beta1ClientHook(ctx, clientHookParams{})
95		if err != nil {
96			return nil, err
97		}
98		clientOpts = append(clientOpts, hookOpts...)
99	}
100
101	connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...)
102	if err != nil {
103		return nil, err
104	}
105	c := &RecaptchaEnterpriseServiceV1Beta1Client{
106		connPool:    connPool,
107		CallOptions: defaultRecaptchaEnterpriseServiceV1Beta1CallOptions(),
108
109		recaptchaEnterpriseServiceV1Beta1Client: recaptchaenterprisepb.NewRecaptchaEnterpriseServiceV1Beta1Client(connPool),
110	}
111	c.setGoogleClientInfo()
112
113	return c, nil
114}
115
116// Connection returns a connection to the API service.
117//
118// Deprecated.
119func (c *RecaptchaEnterpriseServiceV1Beta1Client) Connection() *grpc.ClientConn {
120	return c.connPool.Conn()
121}
122
123// Close closes the connection to the API service. The user should invoke this when
124// the client is no longer required.
125func (c *RecaptchaEnterpriseServiceV1Beta1Client) Close() error {
126	return c.connPool.Close()
127}
128
129// setGoogleClientInfo sets the name and version of the application in
130// the `x-goog-api-client` header passed on each request. Intended for
131// use by Google-written clients.
132func (c *RecaptchaEnterpriseServiceV1Beta1Client) setGoogleClientInfo(keyval ...string) {
133	kv := append([]string{"gl-go", versionGo()}, keyval...)
134	kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
135	c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
136}
137
138// CreateAssessment creates an Assessment of the likelihood an event is legitimate.
139func (c *RecaptchaEnterpriseServiceV1Beta1Client) CreateAssessment(ctx context.Context, req *recaptchaenterprisepb.CreateAssessmentRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.Assessment, error) {
140	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
141	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
142	opts = append(c.CallOptions.CreateAssessment[0:len(c.CallOptions.CreateAssessment):len(c.CallOptions.CreateAssessment)], opts...)
143	var resp *recaptchaenterprisepb.Assessment
144	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
145		var err error
146		resp, err = c.recaptchaEnterpriseServiceV1Beta1Client.CreateAssessment(ctx, req, settings.GRPC...)
147		return err
148	}, opts...)
149	if err != nil {
150		return nil, err
151	}
152	return resp, nil
153}
154
155// AnnotateAssessment annotates a previously created Assessment to provide additional information
156// on whether the event turned out to be authentic or fradulent.
157func (c *RecaptchaEnterpriseServiceV1Beta1Client) AnnotateAssessment(ctx context.Context, req *recaptchaenterprisepb.AnnotateAssessmentRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.AnnotateAssessmentResponse, error) {
158	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
159	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
160	opts = append(c.CallOptions.AnnotateAssessment[0:len(c.CallOptions.AnnotateAssessment):len(c.CallOptions.AnnotateAssessment)], opts...)
161	var resp *recaptchaenterprisepb.AnnotateAssessmentResponse
162	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
163		var err error
164		resp, err = c.recaptchaEnterpriseServiceV1Beta1Client.AnnotateAssessment(ctx, req, settings.GRPC...)
165		return err
166	}, opts...)
167	if err != nil {
168		return nil, err
169	}
170	return resp, nil
171}
172
173// CreateKey creates a new reCAPTCHA Enterprise key.
174func (c *RecaptchaEnterpriseServiceV1Beta1Client) CreateKey(ctx context.Context, req *recaptchaenterprisepb.CreateKeyRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.Key, error) {
175	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
176	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
177	opts = append(c.CallOptions.CreateKey[0:len(c.CallOptions.CreateKey):len(c.CallOptions.CreateKey)], opts...)
178	var resp *recaptchaenterprisepb.Key
179	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
180		var err error
181		resp, err = c.recaptchaEnterpriseServiceV1Beta1Client.CreateKey(ctx, req, settings.GRPC...)
182		return err
183	}, opts...)
184	if err != nil {
185		return nil, err
186	}
187	return resp, nil
188}
189
190// ListKeys returns the list of all keys that belong to a project.
191func (c *RecaptchaEnterpriseServiceV1Beta1Client) ListKeys(ctx context.Context, req *recaptchaenterprisepb.ListKeysRequest, opts ...gax.CallOption) *KeyIterator {
192	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
193	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
194	opts = append(c.CallOptions.ListKeys[0:len(c.CallOptions.ListKeys):len(c.CallOptions.ListKeys)], opts...)
195	it := &KeyIterator{}
196	req = proto.Clone(req).(*recaptchaenterprisepb.ListKeysRequest)
197	it.InternalFetch = func(pageSize int, pageToken string) ([]*recaptchaenterprisepb.Key, string, error) {
198		var resp *recaptchaenterprisepb.ListKeysResponse
199		req.PageToken = pageToken
200		if pageSize > math.MaxInt32 {
201			req.PageSize = math.MaxInt32
202		} else {
203			req.PageSize = int32(pageSize)
204		}
205		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
206			var err error
207			resp, err = c.recaptchaEnterpriseServiceV1Beta1Client.ListKeys(ctx, req, settings.GRPC...)
208			return err
209		}, opts...)
210		if err != nil {
211			return nil, "", err
212		}
213
214		it.Response = resp
215		return resp.Keys, resp.NextPageToken, nil
216	}
217	fetch := func(pageSize int, pageToken string) (string, error) {
218		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
219		if err != nil {
220			return "", err
221		}
222		it.items = append(it.items, items...)
223		return nextPageToken, nil
224	}
225	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
226	it.pageInfo.MaxSize = int(req.PageSize)
227	it.pageInfo.Token = req.PageToken
228	return it
229}
230
231// GetKey returns the specified key.
232func (c *RecaptchaEnterpriseServiceV1Beta1Client) GetKey(ctx context.Context, req *recaptchaenterprisepb.GetKeyRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.Key, error) {
233	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
234	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
235	opts = append(c.CallOptions.GetKey[0:len(c.CallOptions.GetKey):len(c.CallOptions.GetKey)], opts...)
236	var resp *recaptchaenterprisepb.Key
237	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
238		var err error
239		resp, err = c.recaptchaEnterpriseServiceV1Beta1Client.GetKey(ctx, req, settings.GRPC...)
240		return err
241	}, opts...)
242	if err != nil {
243		return nil, err
244	}
245	return resp, nil
246}
247
248// UpdateKey updates the specified key.
249func (c *RecaptchaEnterpriseServiceV1Beta1Client) UpdateKey(ctx context.Context, req *recaptchaenterprisepb.UpdateKeyRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.Key, error) {
250	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "key.name", url.QueryEscape(req.GetKey().GetName())))
251	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
252	opts = append(c.CallOptions.UpdateKey[0:len(c.CallOptions.UpdateKey):len(c.CallOptions.UpdateKey)], opts...)
253	var resp *recaptchaenterprisepb.Key
254	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
255		var err error
256		resp, err = c.recaptchaEnterpriseServiceV1Beta1Client.UpdateKey(ctx, req, settings.GRPC...)
257		return err
258	}, opts...)
259	if err != nil {
260		return nil, err
261	}
262	return resp, nil
263}
264
265// DeleteKey deletes the specified key.
266func (c *RecaptchaEnterpriseServiceV1Beta1Client) DeleteKey(ctx context.Context, req *recaptchaenterprisepb.DeleteKeyRequest, opts ...gax.CallOption) error {
267	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
268	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
269	opts = append(c.CallOptions.DeleteKey[0:len(c.CallOptions.DeleteKey):len(c.CallOptions.DeleteKey)], opts...)
270	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
271		var err error
272		_, err = c.recaptchaEnterpriseServiceV1Beta1Client.DeleteKey(ctx, req, settings.GRPC...)
273		return err
274	}, opts...)
275	return err
276}
277
278// KeyIterator manages a stream of *recaptchaenterprisepb.Key.
279type KeyIterator struct {
280	items    []*recaptchaenterprisepb.Key
281	pageInfo *iterator.PageInfo
282	nextFunc func() error
283
284	// Response is the raw response for the current page.
285	// It must be cast to the RPC response type.
286	// Calling Next() or InternalFetch() updates this value.
287	Response interface{}
288
289	// InternalFetch is for use by the Google Cloud Libraries only.
290	// It is not part of the stable interface of this package.
291	//
292	// InternalFetch returns results from a single call to the underlying RPC.
293	// The number of results is no greater than pageSize.
294	// If there are no more results, nextPageToken is empty and err is nil.
295	InternalFetch func(pageSize int, pageToken string) (results []*recaptchaenterprisepb.Key, nextPageToken string, err error)
296}
297
298// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
299func (it *KeyIterator) PageInfo() *iterator.PageInfo {
300	return it.pageInfo
301}
302
303// Next returns the next result. Its second return value is iterator.Done if there are no more
304// results. Once Next returns Done, all subsequent calls will return Done.
305func (it *KeyIterator) Next() (*recaptchaenterprisepb.Key, error) {
306	var item *recaptchaenterprisepb.Key
307	if err := it.nextFunc(); err != nil {
308		return item, err
309	}
310	item = it.items[0]
311	it.items = it.items[1:]
312	return item, nil
313}
314
315func (it *KeyIterator) bufLen() int {
316	return len(it.items)
317}
318
319func (it *KeyIterator) takeBuf() interface{} {
320	b := it.items
321	it.items = nil
322	return b
323}
324