forked from crossplane-contrib/provider-gcp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuser.go
84 lines (68 loc) · 2.68 KB
/
user.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
Copyright 2019 The Crossplane Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cloudsql
import (
"context"
"google.golang.org/api/option"
"golang.org/x/oauth2"
"golang.org/x/oauth2/google"
sqladmin "google.golang.org/api/sqladmin/v1beta4"
)
// UserService provides an interface for operations on cloudsql users
type UserService interface {
List(context.Context, string) ([]*sqladmin.User, error)
Create(context.Context, string, *sqladmin.User) error
Update(context.Context, string, string, *sqladmin.User) error
Delete(context.Context, string, string, string) error
}
// UserClient implements UserService interface
type UserClient struct {
service *sqladmin.UsersService
projectID string
}
// Interface validation
var _ UserService = &UserClient{}
// NewUserClient creates new instance of UserClient
func NewUserClient(ctx context.Context, creds *google.Credentials) (*UserClient, error) {
service, err := sqladmin.NewService(ctx, option.WithHTTPClient(oauth2.NewClient(ctx, creds.TokenSource)))
if err != nil {
return nil, err
}
return &UserClient{
service: service.Users,
projectID: creds.ProjectID,
}, nil
}
// List and return all users for a provided instance (name)
func (c *UserClient) List(ctx context.Context, instance string) ([]*sqladmin.User, error) {
res, err := c.service.List(c.projectID, instance).Context(ctx).Do()
if err != nil {
return nil, err
}
return res.Items, nil
}
// Create new user for a given instance with provided user definition
func (c *UserClient) Create(ctx context.Context, instance string, user *sqladmin.User) error {
_, err := c.service.Insert(c.projectID, instance, user).Context(ctx).Do()
return err
}
// Update existing user for a given instance with provided user definition
func (c *UserClient) Update(ctx context.Context, instance, userName string, user *sqladmin.User) error {
_, err := c.service.Update(c.projectID, instance, userName, user).Host(user.Host).Context(ctx).Do()
return err
}
// Delete existing user from a given instance database with matching name
func (c *UserClient) Delete(ctx context.Context, instance, database, user string) error {
_, err := c.service.Delete(c.projectID, instance, database, user).Context(ctx).Do()
return err
}