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