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