1// Copyright 2021 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	"time"
25
26	"github.com/golang/protobuf/proto"
27	gax "github.com/googleapis/gax-go/v2"
28	"google.golang.org/api/iterator"
29	"google.golang.org/api/option"
30	"google.golang.org/api/option/internaloption"
31	gtransport "google.golang.org/api/transport/grpc"
32	recaptchaenterprisepb "google.golang.org/genproto/googleapis/cloud/recaptchaenterprise/v1beta1"
33	"google.golang.org/grpc"
34	"google.golang.org/grpc/metadata"
35)
36
37var newRecaptchaEnterpriseServiceV1Beta1ClientHook clientHook
38
39// RecaptchaEnterpriseServiceV1Beta1CallOptions contains the retry settings for each method of RecaptchaEnterpriseServiceV1Beta1Client.
40type RecaptchaEnterpriseServiceV1Beta1CallOptions struct {
41	CreateAssessment   []gax.CallOption
42	AnnotateAssessment []gax.CallOption
43	CreateKey          []gax.CallOption
44	ListKeys           []gax.CallOption
45	GetKey             []gax.CallOption
46	UpdateKey          []gax.CallOption
47	DeleteKey          []gax.CallOption
48}
49
50func defaultRecaptchaEnterpriseServiceV1Beta1GRPCClientOptions() []option.ClientOption {
51	return []option.ClientOption{
52		internaloption.WithDefaultEndpoint("recaptchaenterprise.googleapis.com:443"),
53		internaloption.WithDefaultMTLSEndpoint("recaptchaenterprise.mtls.googleapis.com:443"),
54		internaloption.WithDefaultAudience("https://recaptchaenterprise.googleapis.com/"),
55		internaloption.WithDefaultScopes(DefaultAuthScopes()...),
56		option.WithGRPCDialOption(grpc.WithDisableServiceConfig()),
57		option.WithGRPCDialOption(grpc.WithDefaultCallOptions(
58			grpc.MaxCallRecvMsgSize(math.MaxInt32))),
59	}
60}
61
62func defaultRecaptchaEnterpriseServiceV1Beta1CallOptions() *RecaptchaEnterpriseServiceV1Beta1CallOptions {
63	return &RecaptchaEnterpriseServiceV1Beta1CallOptions{
64		CreateAssessment:   []gax.CallOption{},
65		AnnotateAssessment: []gax.CallOption{},
66		CreateKey:          []gax.CallOption{},
67		ListKeys:           []gax.CallOption{},
68		GetKey:             []gax.CallOption{},
69		UpdateKey:          []gax.CallOption{},
70		DeleteKey:          []gax.CallOption{},
71	}
72}
73
74// internalRecaptchaEnterpriseServiceV1Beta1Client is an interface that defines the methods availaible from reCAPTCHA Enterprise API.
75type internalRecaptchaEnterpriseServiceV1Beta1Client interface {
76	Close() error
77	setGoogleClientInfo(...string)
78	Connection() *grpc.ClientConn
79	CreateAssessment(context.Context, *recaptchaenterprisepb.CreateAssessmentRequest, ...gax.CallOption) (*recaptchaenterprisepb.Assessment, error)
80	AnnotateAssessment(context.Context, *recaptchaenterprisepb.AnnotateAssessmentRequest, ...gax.CallOption) (*recaptchaenterprisepb.AnnotateAssessmentResponse, error)
81	CreateKey(context.Context, *recaptchaenterprisepb.CreateKeyRequest, ...gax.CallOption) (*recaptchaenterprisepb.Key, error)
82	ListKeys(context.Context, *recaptchaenterprisepb.ListKeysRequest, ...gax.CallOption) *KeyIterator
83	GetKey(context.Context, *recaptchaenterprisepb.GetKeyRequest, ...gax.CallOption) (*recaptchaenterprisepb.Key, error)
84	UpdateKey(context.Context, *recaptchaenterprisepb.UpdateKeyRequest, ...gax.CallOption) (*recaptchaenterprisepb.Key, error)
85	DeleteKey(context.Context, *recaptchaenterprisepb.DeleteKeyRequest, ...gax.CallOption) error
86}
87
88// RecaptchaEnterpriseServiceV1Beta1Client is a client for interacting with reCAPTCHA Enterprise API.
89// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
90//
91// Service to determine the likelihood an event is legitimate.
92type RecaptchaEnterpriseServiceV1Beta1Client struct {
93	// The internal transport-dependent client.
94	internalClient internalRecaptchaEnterpriseServiceV1Beta1Client
95
96	// The call options for this service.
97	CallOptions *RecaptchaEnterpriseServiceV1Beta1CallOptions
98}
99
100// Wrapper methods routed to the internal client.
101
102// Close closes the connection to the API service. The user should invoke this when
103// the client is no longer required.
104func (c *RecaptchaEnterpriseServiceV1Beta1Client) Close() error {
105	return c.internalClient.Close()
106}
107
108// setGoogleClientInfo sets the name and version of the application in
109// the `x-goog-api-client` header passed on each request. Intended for
110// use by Google-written clients.
111func (c *RecaptchaEnterpriseServiceV1Beta1Client) setGoogleClientInfo(keyval ...string) {
112	c.internalClient.setGoogleClientInfo(keyval...)
113}
114
115// Connection returns a connection to the API service.
116//
117// Deprecated.
118func (c *RecaptchaEnterpriseServiceV1Beta1Client) Connection() *grpc.ClientConn {
119	return c.internalClient.Connection()
120}
121
122// CreateAssessment creates an Assessment of the likelihood an event is legitimate.
123func (c *RecaptchaEnterpriseServiceV1Beta1Client) CreateAssessment(ctx context.Context, req *recaptchaenterprisepb.CreateAssessmentRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.Assessment, error) {
124	return c.internalClient.CreateAssessment(ctx, req, opts...)
125}
126
127// AnnotateAssessment annotates a previously created Assessment to provide additional information
128// on whether the event turned out to be authentic or fradulent.
129func (c *RecaptchaEnterpriseServiceV1Beta1Client) AnnotateAssessment(ctx context.Context, req *recaptchaenterprisepb.AnnotateAssessmentRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.AnnotateAssessmentResponse, error) {
130	return c.internalClient.AnnotateAssessment(ctx, req, opts...)
131}
132
133// CreateKey creates a new reCAPTCHA Enterprise key.
134func (c *RecaptchaEnterpriseServiceV1Beta1Client) CreateKey(ctx context.Context, req *recaptchaenterprisepb.CreateKeyRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.Key, error) {
135	return c.internalClient.CreateKey(ctx, req, opts...)
136}
137
138// ListKeys returns the list of all keys that belong to a project.
139func (c *RecaptchaEnterpriseServiceV1Beta1Client) ListKeys(ctx context.Context, req *recaptchaenterprisepb.ListKeysRequest, opts ...gax.CallOption) *KeyIterator {
140	return c.internalClient.ListKeys(ctx, req, opts...)
141}
142
143// GetKey returns the specified key.
144func (c *RecaptchaEnterpriseServiceV1Beta1Client) GetKey(ctx context.Context, req *recaptchaenterprisepb.GetKeyRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.Key, error) {
145	return c.internalClient.GetKey(ctx, req, opts...)
146}
147
148// UpdateKey updates the specified key.
149func (c *RecaptchaEnterpriseServiceV1Beta1Client) UpdateKey(ctx context.Context, req *recaptchaenterprisepb.UpdateKeyRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.Key, error) {
150	return c.internalClient.UpdateKey(ctx, req, opts...)
151}
152
153// DeleteKey deletes the specified key.
154func (c *RecaptchaEnterpriseServiceV1Beta1Client) DeleteKey(ctx context.Context, req *recaptchaenterprisepb.DeleteKeyRequest, opts ...gax.CallOption) error {
155	return c.internalClient.DeleteKey(ctx, req, opts...)
156}
157
158// recaptchaEnterpriseServiceV1Beta1GRPCClient is a client for interacting with reCAPTCHA Enterprise API over gRPC transport.
159//
160// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
161type recaptchaEnterpriseServiceV1Beta1GRPCClient struct {
162	// Connection pool of gRPC connections to the service.
163	connPool gtransport.ConnPool
164
165	// flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE
166	disableDeadlines bool
167
168	// Points back to the CallOptions field of the containing RecaptchaEnterpriseServiceV1Beta1Client
169	CallOptions **RecaptchaEnterpriseServiceV1Beta1CallOptions
170
171	// The gRPC API client.
172	recaptchaEnterpriseServiceV1Beta1Client recaptchaenterprisepb.RecaptchaEnterpriseServiceV1Beta1Client
173
174	// The x-goog-* metadata to be sent with each request.
175	xGoogMetadata metadata.MD
176}
177
178// NewRecaptchaEnterpriseServiceV1Beta1Client creates a new recaptcha enterprise service v1 beta1 client based on gRPC.
179// The returned client must be Closed when it is done being used to clean up its underlying connections.
180//
181// Service to determine the likelihood an event is legitimate.
182func NewRecaptchaEnterpriseServiceV1Beta1Client(ctx context.Context, opts ...option.ClientOption) (*RecaptchaEnterpriseServiceV1Beta1Client, error) {
183	clientOpts := defaultRecaptchaEnterpriseServiceV1Beta1GRPCClientOptions()
184	if newRecaptchaEnterpriseServiceV1Beta1ClientHook != nil {
185		hookOpts, err := newRecaptchaEnterpriseServiceV1Beta1ClientHook(ctx, clientHookParams{})
186		if err != nil {
187			return nil, err
188		}
189		clientOpts = append(clientOpts, hookOpts...)
190	}
191
192	disableDeadlines, err := checkDisableDeadlines()
193	if err != nil {
194		return nil, err
195	}
196
197	connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...)
198	if err != nil {
199		return nil, err
200	}
201	client := RecaptchaEnterpriseServiceV1Beta1Client{CallOptions: defaultRecaptchaEnterpriseServiceV1Beta1CallOptions()}
202
203	c := &recaptchaEnterpriseServiceV1Beta1GRPCClient{
204		connPool:                                connPool,
205		disableDeadlines:                        disableDeadlines,
206		recaptchaEnterpriseServiceV1Beta1Client: recaptchaenterprisepb.NewRecaptchaEnterpriseServiceV1Beta1Client(connPool),
207		CallOptions:                             &client.CallOptions,
208	}
209	c.setGoogleClientInfo()
210
211	client.internalClient = c
212
213	return &client, nil
214}
215
216// Connection returns a connection to the API service.
217//
218// Deprecated.
219func (c *recaptchaEnterpriseServiceV1Beta1GRPCClient) Connection() *grpc.ClientConn {
220	return c.connPool.Conn()
221}
222
223// setGoogleClientInfo sets the name and version of the application in
224// the `x-goog-api-client` header passed on each request. Intended for
225// use by Google-written clients.
226func (c *recaptchaEnterpriseServiceV1Beta1GRPCClient) setGoogleClientInfo(keyval ...string) {
227	kv := append([]string{"gl-go", versionGo()}, keyval...)
228	kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
229	c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
230}
231
232// Close closes the connection to the API service. The user should invoke this when
233// the client is no longer required.
234func (c *recaptchaEnterpriseServiceV1Beta1GRPCClient) Close() error {
235	return c.connPool.Close()
236}
237
238func (c *recaptchaEnterpriseServiceV1Beta1GRPCClient) CreateAssessment(ctx context.Context, req *recaptchaenterprisepb.CreateAssessmentRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.Assessment, error) {
239	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
240		cctx, cancel := context.WithTimeout(ctx, 600000*time.Millisecond)
241		defer cancel()
242		ctx = cctx
243	}
244	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
245	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
246	opts = append((*c.CallOptions).CreateAssessment[0:len((*c.CallOptions).CreateAssessment):len((*c.CallOptions).CreateAssessment)], opts...)
247	var resp *recaptchaenterprisepb.Assessment
248	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
249		var err error
250		resp, err = c.recaptchaEnterpriseServiceV1Beta1Client.CreateAssessment(ctx, req, settings.GRPC...)
251		return err
252	}, opts...)
253	if err != nil {
254		return nil, err
255	}
256	return resp, nil
257}
258
259func (c *recaptchaEnterpriseServiceV1Beta1GRPCClient) AnnotateAssessment(ctx context.Context, req *recaptchaenterprisepb.AnnotateAssessmentRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.AnnotateAssessmentResponse, error) {
260	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
261		cctx, cancel := context.WithTimeout(ctx, 600000*time.Millisecond)
262		defer cancel()
263		ctx = cctx
264	}
265	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
266	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
267	opts = append((*c.CallOptions).AnnotateAssessment[0:len((*c.CallOptions).AnnotateAssessment):len((*c.CallOptions).AnnotateAssessment)], opts...)
268	var resp *recaptchaenterprisepb.AnnotateAssessmentResponse
269	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
270		var err error
271		resp, err = c.recaptchaEnterpriseServiceV1Beta1Client.AnnotateAssessment(ctx, req, settings.GRPC...)
272		return err
273	}, opts...)
274	if err != nil {
275		return nil, err
276	}
277	return resp, nil
278}
279
280func (c *recaptchaEnterpriseServiceV1Beta1GRPCClient) CreateKey(ctx context.Context, req *recaptchaenterprisepb.CreateKeyRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.Key, error) {
281	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
282		cctx, cancel := context.WithTimeout(ctx, 600000*time.Millisecond)
283		defer cancel()
284		ctx = cctx
285	}
286	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
287	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
288	opts = append((*c.CallOptions).CreateKey[0:len((*c.CallOptions).CreateKey):len((*c.CallOptions).CreateKey)], opts...)
289	var resp *recaptchaenterprisepb.Key
290	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
291		var err error
292		resp, err = c.recaptchaEnterpriseServiceV1Beta1Client.CreateKey(ctx, req, settings.GRPC...)
293		return err
294	}, opts...)
295	if err != nil {
296		return nil, err
297	}
298	return resp, nil
299}
300
301func (c *recaptchaEnterpriseServiceV1Beta1GRPCClient) ListKeys(ctx context.Context, req *recaptchaenterprisepb.ListKeysRequest, opts ...gax.CallOption) *KeyIterator {
302	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
303	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
304	opts = append((*c.CallOptions).ListKeys[0:len((*c.CallOptions).ListKeys):len((*c.CallOptions).ListKeys)], opts...)
305	it := &KeyIterator{}
306	req = proto.Clone(req).(*recaptchaenterprisepb.ListKeysRequest)
307	it.InternalFetch = func(pageSize int, pageToken string) ([]*recaptchaenterprisepb.Key, string, error) {
308		var resp *recaptchaenterprisepb.ListKeysResponse
309		req.PageToken = pageToken
310		if pageSize > math.MaxInt32 {
311			req.PageSize = math.MaxInt32
312		} else {
313			req.PageSize = int32(pageSize)
314		}
315		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
316			var err error
317			resp, err = c.recaptchaEnterpriseServiceV1Beta1Client.ListKeys(ctx, req, settings.GRPC...)
318			return err
319		}, opts...)
320		if err != nil {
321			return nil, "", err
322		}
323
324		it.Response = resp
325		return resp.GetKeys(), resp.GetNextPageToken(), nil
326	}
327	fetch := func(pageSize int, pageToken string) (string, error) {
328		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
329		if err != nil {
330			return "", err
331		}
332		it.items = append(it.items, items...)
333		return nextPageToken, nil
334	}
335	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
336	it.pageInfo.MaxSize = int(req.GetPageSize())
337	it.pageInfo.Token = req.GetPageToken()
338	return it
339}
340
341func (c *recaptchaEnterpriseServiceV1Beta1GRPCClient) GetKey(ctx context.Context, req *recaptchaenterprisepb.GetKeyRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.Key, error) {
342	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
343		cctx, cancel := context.WithTimeout(ctx, 600000*time.Millisecond)
344		defer cancel()
345		ctx = cctx
346	}
347	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
348	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
349	opts = append((*c.CallOptions).GetKey[0:len((*c.CallOptions).GetKey):len((*c.CallOptions).GetKey)], opts...)
350	var resp *recaptchaenterprisepb.Key
351	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
352		var err error
353		resp, err = c.recaptchaEnterpriseServiceV1Beta1Client.GetKey(ctx, req, settings.GRPC...)
354		return err
355	}, opts...)
356	if err != nil {
357		return nil, err
358	}
359	return resp, nil
360}
361
362func (c *recaptchaEnterpriseServiceV1Beta1GRPCClient) UpdateKey(ctx context.Context, req *recaptchaenterprisepb.UpdateKeyRequest, opts ...gax.CallOption) (*recaptchaenterprisepb.Key, error) {
363	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
364		cctx, cancel := context.WithTimeout(ctx, 600000*time.Millisecond)
365		defer cancel()
366		ctx = cctx
367	}
368	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "key.name", url.QueryEscape(req.GetKey().GetName())))
369	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
370	opts = append((*c.CallOptions).UpdateKey[0:len((*c.CallOptions).UpdateKey):len((*c.CallOptions).UpdateKey)], opts...)
371	var resp *recaptchaenterprisepb.Key
372	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
373		var err error
374		resp, err = c.recaptchaEnterpriseServiceV1Beta1Client.UpdateKey(ctx, req, settings.GRPC...)
375		return err
376	}, opts...)
377	if err != nil {
378		return nil, err
379	}
380	return resp, nil
381}
382
383func (c *recaptchaEnterpriseServiceV1Beta1GRPCClient) DeleteKey(ctx context.Context, req *recaptchaenterprisepb.DeleteKeyRequest, opts ...gax.CallOption) error {
384	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
385		cctx, cancel := context.WithTimeout(ctx, 600000*time.Millisecond)
386		defer cancel()
387		ctx = cctx
388	}
389	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
390	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
391	opts = append((*c.CallOptions).DeleteKey[0:len((*c.CallOptions).DeleteKey):len((*c.CallOptions).DeleteKey)], opts...)
392	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
393		var err error
394		_, err = c.recaptchaEnterpriseServiceV1Beta1Client.DeleteKey(ctx, req, settings.GRPC...)
395		return err
396	}, opts...)
397	return err
398}
399
400// KeyIterator manages a stream of *recaptchaenterprisepb.Key.
401type KeyIterator struct {
402	items    []*recaptchaenterprisepb.Key
403	pageInfo *iterator.PageInfo
404	nextFunc func() error
405
406	// Response is the raw response for the current page.
407	// It must be cast to the RPC response type.
408	// Calling Next() or InternalFetch() updates this value.
409	Response interface{}
410
411	// InternalFetch is for use by the Google Cloud Libraries only.
412	// It is not part of the stable interface of this package.
413	//
414	// InternalFetch returns results from a single call to the underlying RPC.
415	// The number of results is no greater than pageSize.
416	// If there are no more results, nextPageToken is empty and err is nil.
417	InternalFetch func(pageSize int, pageToken string) (results []*recaptchaenterprisepb.Key, nextPageToken string, err error)
418}
419
420// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
421func (it *KeyIterator) PageInfo() *iterator.PageInfo {
422	return it.pageInfo
423}
424
425// Next returns the next result. Its second return value is iterator.Done if there are no more
426// results. Once Next returns Done, all subsequent calls will return Done.
427func (it *KeyIterator) Next() (*recaptchaenterprisepb.Key, error) {
428	var item *recaptchaenterprisepb.Key
429	if err := it.nextFunc(); err != nil {
430		return item, err
431	}
432	item = it.items[0]
433	it.items = it.items[1:]
434	return item, nil
435}
436
437func (it *KeyIterator) bufLen() int {
438	return len(it.items)
439}
440
441func (it *KeyIterator) takeBuf() interface{} {
442	b := it.items
443	it.items = nil
444	return b
445}
446