-
Notifications
You must be signed in to change notification settings - Fork 2k
/
vtaclcheck.go
78 lines (62 loc) · 1.98 KB
/
vtaclcheck.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
/*
Copyright 2019 The Vitess 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 vtaclcheck analyzes a set of sql statements and returns the
// corresponding vtgate and vttablet query plans that will be executed
// on the given statements
package vtaclcheck
import (
"fmt"
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/vt/tableacl"
"vitess.io/vitess/go/vt/tableacl/simpleacl"
)
// Options to control the explain process
type Options struct {
// AclFile is the file with the JSON acl configuration
ACLFile string
// StaticAuthFile is the file containing the mysql auth_server_static JSON
StaticAuthFile string
}
var options *Options
// Init sets up the fake execution environment
func Init(opts *Options) error {
// verify opts is defined
if opts == nil {
return fmt.Errorf("vtaclcheck.Init: opts is NULL")
}
// Verify options
if opts.ACLFile == "" && opts.StaticAuthFile == "" {
return fmt.Errorf("no options specified")
}
options = opts
return nil
}
// Run the check on the given file
func Run() error {
if options.ACLFile != "" {
tableacl.Register("simpleacl", &simpleacl.Factory{})
err := tableacl.Init(
options.ACLFile,
func() {},
)
if err != nil {
return fmt.Errorf("fail to initialize Table ACL: %v", err)
}
fmt.Printf("JSON ACL file %s looks good\n", options.ACLFile)
}
if options.StaticAuthFile != "" {
mysql.RegisterAuthServerStaticFromParams(options.StaticAuthFile, "", 0)
fmt.Printf("Static auth file %s looks good\n", options.StaticAuthFile)
}
return nil
}