planetscale 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/ci.yml +24 -0
- data/.github/workflows/gem-push.yml +38 -0
- data/.github/workflows/licensed.yml +43 -0
- data/.gitignore +10 -0
- data/.licensed.yml +9 -0
- data/.licenses/go/github.com/armon/circbuf.dep.yml +31 -0
- data/.licenses/go/github.com/gorilla/mux.dep.yml +41 -0
- data/.licenses/go/github.com/hashicorp/go-cleanhttp.dep.yml +375 -0
- data/.licenses/go/github.com/mitchellh/go-homedir.dep.yml +32 -0
- data/.licenses/go/github.com/pkg/errors.dep.yml +36 -0
- data/.licenses/go/github.com/planetscale/planetscale-go/planetscale.dep.yml +160 -0
- data/.licenses/go/github.com/planetscale/sql-proxy/proxy.dep.yml +180 -0
- data/.licenses/go/go.uber.org/atomic.dep.yml +31 -0
- data/.licenses/go/go.uber.org/multierr.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap/buffer.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap/internal/bufferpool.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap/internal/color.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap/internal/exit.dep.yml +31 -0
- data/.licenses/go/go.uber.org/zap/zapcore.dep.yml +31 -0
- data/.licenses/go/golang.org/x/net/context/ctxhttp.dep.yml +63 -0
- data/.licenses/go/golang.org/x/oauth2.dep.yml +44 -0
- data/.licenses/go/golang.org/x/oauth2/internal.dep.yml +38 -0
- data/.ruby_version +1 -0
- data/Gemfile +8 -0
- data/LICENSE +201 -0
- data/README.md +88 -0
- data/Rakefile +10 -0
- data/bin/console +15 -0
- data/bin/setup +17 -0
- data/controller.go +255 -0
- data/go.mod +16 -0
- data/go.sum +428 -0
- data/lib/generators/planetscale/install_generator.rb +58 -0
- data/lib/planetscale.rb +137 -0
- data/lib/planetscale/version.rb +5 -0
- data/planetscale.gemspec +44 -0
- data/proxy.go +128 -0
- data/vendor/github.com/armon/circbuf/.gitignore +22 -0
- data/vendor/github.com/armon/circbuf/LICENSE +20 -0
- data/vendor/github.com/armon/circbuf/README.md +28 -0
- data/vendor/github.com/armon/circbuf/circbuf.go +92 -0
- data/vendor/github.com/armon/circbuf/go.mod +1 -0
- data/vendor/github.com/golang/protobuf/AUTHORS +3 -0
- data/vendor/github.com/golang/protobuf/CONTRIBUTORS +3 -0
- data/vendor/github.com/golang/protobuf/LICENSE +28 -0
- data/vendor/github.com/golang/protobuf/proto/buffer.go +324 -0
- data/vendor/github.com/golang/protobuf/proto/defaults.go +63 -0
- data/vendor/github.com/golang/protobuf/proto/deprecated.go +113 -0
- data/vendor/github.com/golang/protobuf/proto/discard.go +58 -0
- data/vendor/github.com/golang/protobuf/proto/extensions.go +356 -0
- data/vendor/github.com/golang/protobuf/proto/properties.go +306 -0
- data/vendor/github.com/golang/protobuf/proto/proto.go +167 -0
- data/vendor/github.com/golang/protobuf/proto/registry.go +317 -0
- data/vendor/github.com/golang/protobuf/proto/text_decode.go +801 -0
- data/vendor/github.com/golang/protobuf/proto/text_encode.go +560 -0
- data/vendor/github.com/golang/protobuf/proto/wire.go +78 -0
- data/vendor/github.com/golang/protobuf/proto/wrappers.go +34 -0
- data/vendor/github.com/gorilla/mux/AUTHORS +8 -0
- data/vendor/github.com/gorilla/mux/LICENSE +27 -0
- data/vendor/github.com/gorilla/mux/README.md +805 -0
- data/vendor/github.com/gorilla/mux/doc.go +306 -0
- data/vendor/github.com/gorilla/mux/go.mod +3 -0
- data/vendor/github.com/gorilla/mux/middleware.go +74 -0
- data/vendor/github.com/gorilla/mux/mux.go +606 -0
- data/vendor/github.com/gorilla/mux/regexp.go +388 -0
- data/vendor/github.com/gorilla/mux/route.go +736 -0
- data/vendor/github.com/gorilla/mux/test_helpers.go +19 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/LICENSE +363 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/README.md +30 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go +58 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/doc.go +20 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/go.mod +3 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/handlers.go +48 -0
- data/vendor/github.com/mitchellh/go-homedir/LICENSE +21 -0
- data/vendor/github.com/mitchellh/go-homedir/README.md +14 -0
- data/vendor/github.com/mitchellh/go-homedir/go.mod +1 -0
- data/vendor/github.com/mitchellh/go-homedir/homedir.go +167 -0
- data/vendor/github.com/pkg/errors/.gitignore +24 -0
- data/vendor/github.com/pkg/errors/.travis.yml +10 -0
- data/vendor/github.com/pkg/errors/LICENSE +23 -0
- data/vendor/github.com/pkg/errors/Makefile +44 -0
- data/vendor/github.com/pkg/errors/README.md +59 -0
- data/vendor/github.com/pkg/errors/appveyor.yml +32 -0
- data/vendor/github.com/pkg/errors/errors.go +288 -0
- data/vendor/github.com/pkg/errors/go113.go +38 -0
- data/vendor/github.com/pkg/errors/stack.go +177 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/backups.go +139 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/branches.go +258 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/certs.go +142 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/client.go +305 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/databases.go +131 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/deploy_requests.go +368 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/organizations.go +78 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/service_tokens.go +163 -0
- data/vendor/github.com/planetscale/sql-proxy/proxy/client.go +467 -0
- data/vendor/github.com/planetscale/sql-proxy/proxy/tls_cache.go +73 -0
- data/vendor/go.uber.org/atomic/.codecov.yml +19 -0
- data/vendor/go.uber.org/atomic/.gitignore +12 -0
- data/vendor/go.uber.org/atomic/.travis.yml +27 -0
- data/vendor/go.uber.org/atomic/CHANGELOG.md +76 -0
- data/vendor/go.uber.org/atomic/LICENSE.txt +19 -0
- data/vendor/go.uber.org/atomic/Makefile +78 -0
- data/vendor/go.uber.org/atomic/README.md +63 -0
- data/vendor/go.uber.org/atomic/bool.go +81 -0
- data/vendor/go.uber.org/atomic/bool_ext.go +53 -0
- data/vendor/go.uber.org/atomic/doc.go +23 -0
- data/vendor/go.uber.org/atomic/duration.go +82 -0
- data/vendor/go.uber.org/atomic/duration_ext.go +40 -0
- data/vendor/go.uber.org/atomic/error.go +51 -0
- data/vendor/go.uber.org/atomic/error_ext.go +39 -0
- data/vendor/go.uber.org/atomic/float64.go +76 -0
- data/vendor/go.uber.org/atomic/float64_ext.go +47 -0
- data/vendor/go.uber.org/atomic/gen.go +26 -0
- data/vendor/go.uber.org/atomic/go.mod +8 -0
- data/vendor/go.uber.org/atomic/go.sum +9 -0
- data/vendor/go.uber.org/atomic/int32.go +102 -0
- data/vendor/go.uber.org/atomic/int64.go +102 -0
- data/vendor/go.uber.org/atomic/nocmp.go +35 -0
- data/vendor/go.uber.org/atomic/string.go +54 -0
- data/vendor/go.uber.org/atomic/string_ext.go +43 -0
- data/vendor/go.uber.org/atomic/uint32.go +102 -0
- data/vendor/go.uber.org/atomic/uint64.go +102 -0
- data/vendor/go.uber.org/atomic/value.go +31 -0
- data/vendor/go.uber.org/multierr/.codecov.yml +15 -0
- data/vendor/go.uber.org/multierr/.gitignore +4 -0
- data/vendor/go.uber.org/multierr/.travis.yml +23 -0
- data/vendor/go.uber.org/multierr/CHANGELOG.md +60 -0
- data/vendor/go.uber.org/multierr/LICENSE.txt +19 -0
- data/vendor/go.uber.org/multierr/Makefile +42 -0
- data/vendor/go.uber.org/multierr/README.md +23 -0
- data/vendor/go.uber.org/multierr/error.go +449 -0
- data/vendor/go.uber.org/multierr/glide.yaml +8 -0
- data/vendor/go.uber.org/multierr/go.mod +8 -0
- data/vendor/go.uber.org/multierr/go.sum +11 -0
- data/vendor/go.uber.org/multierr/go113.go +52 -0
- data/vendor/go.uber.org/zap/.codecov.yml +17 -0
- data/vendor/go.uber.org/zap/.gitignore +32 -0
- data/vendor/go.uber.org/zap/.readme.tmpl +109 -0
- data/vendor/go.uber.org/zap/.travis.yml +23 -0
- data/vendor/go.uber.org/zap/CHANGELOG.md +432 -0
- data/vendor/go.uber.org/zap/CODE_OF_CONDUCT.md +75 -0
- data/vendor/go.uber.org/zap/CONTRIBUTING.md +81 -0
- data/vendor/go.uber.org/zap/FAQ.md +156 -0
- data/vendor/go.uber.org/zap/LICENSE.txt +19 -0
- data/vendor/go.uber.org/zap/Makefile +63 -0
- data/vendor/go.uber.org/zap/README.md +134 -0
- data/vendor/go.uber.org/zap/array.go +320 -0
- data/vendor/go.uber.org/zap/buffer/buffer.go +123 -0
- data/vendor/go.uber.org/zap/buffer/pool.go +49 -0
- data/vendor/go.uber.org/zap/checklicense.sh +17 -0
- data/vendor/go.uber.org/zap/config.go +264 -0
- data/vendor/go.uber.org/zap/doc.go +113 -0
- data/vendor/go.uber.org/zap/encoder.go +79 -0
- data/vendor/go.uber.org/zap/error.go +80 -0
- data/vendor/go.uber.org/zap/field.go +539 -0
- data/vendor/go.uber.org/zap/flag.go +39 -0
- data/vendor/go.uber.org/zap/glide.yaml +34 -0
- data/vendor/go.uber.org/zap/global.go +168 -0
- data/vendor/go.uber.org/zap/global_go112.go +26 -0
- data/vendor/go.uber.org/zap/global_prego112.go +26 -0
- data/vendor/go.uber.org/zap/go.mod +13 -0
- data/vendor/go.uber.org/zap/go.sum +56 -0
- data/vendor/go.uber.org/zap/http_handler.go +81 -0
- data/vendor/go.uber.org/zap/internal/bufferpool/bufferpool.go +31 -0
- data/vendor/go.uber.org/zap/internal/color/color.go +44 -0
- data/vendor/go.uber.org/zap/internal/exit/exit.go +64 -0
- data/vendor/go.uber.org/zap/level.go +132 -0
- data/vendor/go.uber.org/zap/logger.go +344 -0
- data/vendor/go.uber.org/zap/options.go +140 -0
- data/vendor/go.uber.org/zap/sink.go +161 -0
- data/vendor/go.uber.org/zap/stacktrace.go +85 -0
- data/vendor/go.uber.org/zap/sugar.go +304 -0
- data/vendor/go.uber.org/zap/time.go +27 -0
- data/vendor/go.uber.org/zap/writer.go +99 -0
- data/vendor/go.uber.org/zap/zapcore/console_encoder.go +161 -0
- data/vendor/go.uber.org/zap/zapcore/core.go +113 -0
- data/vendor/go.uber.org/zap/zapcore/doc.go +24 -0
- data/vendor/go.uber.org/zap/zapcore/encoder.go +443 -0
- data/vendor/go.uber.org/zap/zapcore/entry.go +264 -0
- data/vendor/go.uber.org/zap/zapcore/error.go +115 -0
- data/vendor/go.uber.org/zap/zapcore/field.go +227 -0
- data/vendor/go.uber.org/zap/zapcore/hook.go +68 -0
- data/vendor/go.uber.org/zap/zapcore/increase_level.go +66 -0
- data/vendor/go.uber.org/zap/zapcore/json_encoder.go +534 -0
- data/vendor/go.uber.org/zap/zapcore/level.go +175 -0
- data/vendor/go.uber.org/zap/zapcore/level_strings.go +46 -0
- data/vendor/go.uber.org/zap/zapcore/marshaler.go +61 -0
- data/vendor/go.uber.org/zap/zapcore/memory_encoder.go +179 -0
- data/vendor/go.uber.org/zap/zapcore/sampler.go +208 -0
- data/vendor/go.uber.org/zap/zapcore/tee.go +81 -0
- data/vendor/go.uber.org/zap/zapcore/write_syncer.go +123 -0
- data/vendor/golang.org/x/net/AUTHORS +3 -0
- data/vendor/golang.org/x/net/CONTRIBUTORS +3 -0
- data/vendor/golang.org/x/net/LICENSE +27 -0
- data/vendor/golang.org/x/net/PATENTS +22 -0
- data/vendor/golang.org/x/net/context/context.go +56 -0
- data/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go +71 -0
- data/vendor/golang.org/x/net/context/go17.go +73 -0
- data/vendor/golang.org/x/net/context/go19.go +21 -0
- data/vendor/golang.org/x/net/context/pre_go17.go +301 -0
- data/vendor/golang.org/x/net/context/pre_go19.go +110 -0
- data/vendor/golang.org/x/oauth2/.travis.yml +13 -0
- data/vendor/golang.org/x/oauth2/AUTHORS +3 -0
- data/vendor/golang.org/x/oauth2/CONTRIBUTING.md +26 -0
- data/vendor/golang.org/x/oauth2/CONTRIBUTORS +3 -0
- data/vendor/golang.org/x/oauth2/LICENSE +27 -0
- data/vendor/golang.org/x/oauth2/README.md +36 -0
- data/vendor/golang.org/x/oauth2/go.mod +9 -0
- data/vendor/golang.org/x/oauth2/go.sum +361 -0
- data/vendor/golang.org/x/oauth2/internal/client_appengine.go +14 -0
- data/vendor/golang.org/x/oauth2/internal/doc.go +6 -0
- data/vendor/golang.org/x/oauth2/internal/oauth2.go +37 -0
- data/vendor/golang.org/x/oauth2/internal/token.go +294 -0
- data/vendor/golang.org/x/oauth2/internal/transport.go +33 -0
- data/vendor/golang.org/x/oauth2/oauth2.go +381 -0
- data/vendor/golang.org/x/oauth2/token.go +178 -0
- data/vendor/golang.org/x/oauth2/transport.go +89 -0
- data/vendor/google.golang.org/appengine/LICENSE +202 -0
- data/vendor/google.golang.org/appengine/internal/api.go +678 -0
- data/vendor/google.golang.org/appengine/internal/api_classic.go +169 -0
- data/vendor/google.golang.org/appengine/internal/api_common.go +123 -0
- data/vendor/google.golang.org/appengine/internal/app_id.go +28 -0
- data/vendor/google.golang.org/appengine/internal/base/api_base.pb.go +308 -0
- data/vendor/google.golang.org/appengine/internal/base/api_base.proto +33 -0
- data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go +4367 -0
- data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto +551 -0
- data/vendor/google.golang.org/appengine/internal/identity.go +55 -0
- data/vendor/google.golang.org/appengine/internal/identity_classic.go +61 -0
- data/vendor/google.golang.org/appengine/internal/identity_flex.go +11 -0
- data/vendor/google.golang.org/appengine/internal/identity_vm.go +134 -0
- data/vendor/google.golang.org/appengine/internal/internal.go +110 -0
- data/vendor/google.golang.org/appengine/internal/log/log_service.pb.go +1313 -0
- data/vendor/google.golang.org/appengine/internal/log/log_service.proto +150 -0
- data/vendor/google.golang.org/appengine/internal/main.go +16 -0
- data/vendor/google.golang.org/appengine/internal/main_common.go +7 -0
- data/vendor/google.golang.org/appengine/internal/main_vm.go +69 -0
- data/vendor/google.golang.org/appengine/internal/metadata.go +60 -0
- data/vendor/google.golang.org/appengine/internal/net.go +56 -0
- data/vendor/google.golang.org/appengine/internal/regen.sh +40 -0
- data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go +361 -0
- data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto +44 -0
- data/vendor/google.golang.org/appengine/internal/transaction.go +115 -0
- data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go +527 -0
- data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +64 -0
- data/vendor/google.golang.org/appengine/urlfetch/urlfetch.go +210 -0
- data/vendor/google.golang.org/protobuf/AUTHORS +3 -0
- data/vendor/google.golang.org/protobuf/CONTRIBUTORS +3 -0
- data/vendor/google.golang.org/protobuf/LICENSE +27 -0
- data/vendor/google.golang.org/protobuf/PATENTS +22 -0
- data/vendor/google.golang.org/protobuf/encoding/prototext/decode.go +773 -0
- data/vendor/google.golang.org/protobuf/encoding/prototext/doc.go +7 -0
- data/vendor/google.golang.org/protobuf/encoding/prototext/encode.go +371 -0
- data/vendor/google.golang.org/protobuf/encoding/protowire/wire.go +538 -0
- data/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go +318 -0
- data/vendor/google.golang.org/protobuf/internal/descopts/options.go +29 -0
- data/vendor/google.golang.org/protobuf/internal/detrand/rand.go +69 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go +213 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go +241 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go +207 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go +665 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go +190 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go +161 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go +373 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go +29 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go +265 -0
- data/vendor/google.golang.org/protobuf/internal/errors/errors.go +89 -0
- data/vendor/google.golang.org/protobuf/internal/errors/is_go112.go +39 -0
- data/vendor/google.golang.org/protobuf/internal/errors/is_go113.go +12 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/build.go +158 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc.go +631 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go +471 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go +704 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go +450 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go +356 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go +107 -0
- data/vendor/google.golang.org/protobuf/internal/filetype/build.go +297 -0
- data/vendor/google.golang.org/protobuf/internal/flags/flags.go +24 -0
- data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go +9 -0
- data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go +9 -0
- data/vendor/google.golang.org/protobuf/internal/genid/any_gen.go +34 -0
- data/vendor/google.golang.org/protobuf/internal/genid/api_gen.go +106 -0
- data/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +829 -0
- data/vendor/google.golang.org/protobuf/internal/genid/doc.go +11 -0
- data/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go +34 -0
- data/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go +19 -0
- data/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go +31 -0
- data/vendor/google.golang.org/protobuf/internal/genid/goname.go +25 -0
- data/vendor/google.golang.org/protobuf/internal/genid/map_entry.go +16 -0
- data/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go +31 -0
- data/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go +116 -0
- data/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go +34 -0
- data/vendor/google.golang.org/protobuf/internal/genid/type_gen.go +184 -0
- data/vendor/google.golang.org/protobuf/internal/genid/wrappers.go +13 -0
- data/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go +175 -0
- data/vendor/google.golang.org/protobuf/internal/impl/api_export.go +177 -0
- data/vendor/google.golang.org/protobuf/internal/impl/checkinit.go +141 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go +223 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_field.go +830 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go +5637 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_map.go +388 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go +37 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go +11 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_message.go +217 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go +123 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go +209 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go +557 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go +17 -0
- data/vendor/google.golang.org/protobuf/internal/impl/convert.go +496 -0
- data/vendor/google.golang.org/protobuf/internal/impl/convert_list.go +141 -0
- data/vendor/google.golang.org/protobuf/internal/impl/convert_map.go +121 -0
- data/vendor/google.golang.org/protobuf/internal/impl/decode.go +276 -0
- data/vendor/google.golang.org/protobuf/internal/impl/encode.go +201 -0
- data/vendor/google.golang.org/protobuf/internal/impl/enum.go +21 -0
- data/vendor/google.golang.org/protobuf/internal/impl/extension.go +156 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go +219 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go +92 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go +176 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go +81 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go +558 -0
- data/vendor/google.golang.org/protobuf/internal/impl/merge.go +176 -0
- data/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go +209 -0
- data/vendor/google.golang.org/protobuf/internal/impl/message.go +276 -0
- data/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go +465 -0
- data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go +543 -0
- data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go +249 -0
- data/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go +178 -0
- data/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go +174 -0
- data/vendor/google.golang.org/protobuf/internal/impl/validate.go +576 -0
- data/vendor/google.golang.org/protobuf/internal/impl/weak.go +74 -0
- data/vendor/google.golang.org/protobuf/internal/order/order.go +89 -0
- data/vendor/google.golang.org/protobuf/internal/order/range.go +115 -0
- data/vendor/google.golang.org/protobuf/internal/pragma/pragma.go +29 -0
- data/vendor/google.golang.org/protobuf/internal/set/ints.go +58 -0
- data/vendor/google.golang.org/protobuf/internal/strs/strings.go +196 -0
- data/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go +27 -0
- data/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go +94 -0
- data/vendor/google.golang.org/protobuf/internal/version/version.go +79 -0
- data/vendor/google.golang.org/protobuf/proto/checkinit.go +71 -0
- data/vendor/google.golang.org/protobuf/proto/decode.go +278 -0
- data/vendor/google.golang.org/protobuf/proto/decode_gen.go +603 -0
- data/vendor/google.golang.org/protobuf/proto/doc.go +94 -0
- data/vendor/google.golang.org/protobuf/proto/encode.go +319 -0
- data/vendor/google.golang.org/protobuf/proto/encode_gen.go +97 -0
- data/vendor/google.golang.org/protobuf/proto/equal.go +167 -0
- data/vendor/google.golang.org/protobuf/proto/extension.go +92 -0
- data/vendor/google.golang.org/protobuf/proto/merge.go +139 -0
- data/vendor/google.golang.org/protobuf/proto/messageset.go +93 -0
- data/vendor/google.golang.org/protobuf/proto/proto.go +43 -0
- data/vendor/google.golang.org/protobuf/proto/proto_methods.go +19 -0
- data/vendor/google.golang.org/protobuf/proto/proto_reflect.go +19 -0
- data/vendor/google.golang.org/protobuf/proto/reset.go +43 -0
- data/vendor/google.golang.org/protobuf/proto/size.go +97 -0
- data/vendor/google.golang.org/protobuf/proto/size_gen.go +55 -0
- data/vendor/google.golang.org/protobuf/proto/wrappers.go +29 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go +276 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go +248 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go +286 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go +374 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go +252 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go +77 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go +504 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go +128 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +461 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go +665 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go +285 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go +59 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go +411 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go +98 -0
- data/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go +869 -0
- data/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go +15 -0
- data/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go +167 -0
- data/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go +44 -0
- data/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go +56 -0
- data/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go +4039 -0
- data/vendor/modules.txt +79 -0
- metadata +495 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
package planetscale
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"context"
|
|
5
|
+
"fmt"
|
|
6
|
+
"net/http"
|
|
7
|
+
"time"
|
|
8
|
+
|
|
9
|
+
"github.com/pkg/errors"
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
type Backup struct {
|
|
13
|
+
Name string `json:"name"`
|
|
14
|
+
State string `json:"state"`
|
|
15
|
+
Size int64 `json:"size"`
|
|
16
|
+
CreatedAt time.Time `json:"created_at"`
|
|
17
|
+
UpdatedAt time.Time `json:"updated_at"`
|
|
18
|
+
StartedAt time.Time `json:"started_at"`
|
|
19
|
+
ExpiresAt time.Time `json:"expires_at"`
|
|
20
|
+
CompletedAt time.Time `json:"completed_at"`
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
type backupsResponse struct {
|
|
24
|
+
Backups []*Backup `json:"data"`
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
type CreateBackupRequest struct {
|
|
28
|
+
Organization string `json:"-"`
|
|
29
|
+
Database string `json:"-"`
|
|
30
|
+
Branch string `json:"-"`
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
type ListBackupsRequest struct {
|
|
34
|
+
Organization string
|
|
35
|
+
Database string
|
|
36
|
+
Branch string
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
type GetBackupRequest struct {
|
|
40
|
+
Organization string
|
|
41
|
+
Database string
|
|
42
|
+
Branch string
|
|
43
|
+
Backup string
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
type DeleteBackupRequest struct {
|
|
47
|
+
Organization string
|
|
48
|
+
Database string
|
|
49
|
+
Branch string
|
|
50
|
+
Backup string
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// BackupsService is an interface for communicating with the PlanetScale
|
|
54
|
+
// backup API endpoint.
|
|
55
|
+
type BackupsService interface {
|
|
56
|
+
Create(context.Context, *CreateBackupRequest) (*Backup, error)
|
|
57
|
+
List(context.Context, *ListBackupsRequest) ([]*Backup, error)
|
|
58
|
+
Get(context.Context, *GetBackupRequest) (*Backup, error)
|
|
59
|
+
Delete(context.Context, *DeleteBackupRequest) error
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
type backupsService struct {
|
|
63
|
+
client *Client
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
var _ BackupsService = &backupsService{}
|
|
67
|
+
|
|
68
|
+
func NewBackupsService(client *Client) *backupsService {
|
|
69
|
+
return &backupsService{
|
|
70
|
+
client: client,
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Creates a new backup for a branch.
|
|
75
|
+
func (d *backupsService) Create(ctx context.Context, createReq *CreateBackupRequest) (*Backup, error) {
|
|
76
|
+
path := backupsAPIPath(createReq.Organization, createReq.Database, createReq.Branch)
|
|
77
|
+
req, err := d.client.newRequest(http.MethodPost, path, nil)
|
|
78
|
+
if err != nil {
|
|
79
|
+
return nil, errors.Wrap(err, "error creating http request")
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
backup := &Backup{}
|
|
83
|
+
if err := d.client.do(ctx, req, &backup); err != nil {
|
|
84
|
+
return nil, err
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return backup, nil
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Returns a single backup for a branch.
|
|
91
|
+
func (d *backupsService) Get(ctx context.Context, getReq *GetBackupRequest) (*Backup, error) {
|
|
92
|
+
path := backupAPIPath(getReq.Organization, getReq.Database, getReq.Branch, getReq.Backup)
|
|
93
|
+
req, err := d.client.newRequest(http.MethodGet, path, nil)
|
|
94
|
+
if err != nil {
|
|
95
|
+
return nil, errors.Wrap(err, "error creating http request")
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
backup := &Backup{}
|
|
99
|
+
if err := d.client.do(ctx, req, &backup); err != nil {
|
|
100
|
+
return nil, err
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return backup, nil
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Returns all of the backups for a branch.
|
|
107
|
+
func (d *backupsService) List(ctx context.Context, listReq *ListBackupsRequest) ([]*Backup, error) {
|
|
108
|
+
req, err := d.client.newRequest(http.MethodGet, backupsAPIPath(listReq.Organization, listReq.Database, listReq.Branch), nil)
|
|
109
|
+
if err != nil {
|
|
110
|
+
return nil, errors.Wrap(err, "error creating http request")
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
backups := &backupsResponse{}
|
|
114
|
+
if err := d.client.do(ctx, req, &backups); err != nil {
|
|
115
|
+
return nil, err
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return backups.Backups, nil
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Deletes a branch backup.
|
|
122
|
+
func (d *backupsService) Delete(ctx context.Context, deleteReq *DeleteBackupRequest) error {
|
|
123
|
+
path := backupAPIPath(deleteReq.Organization, deleteReq.Database, deleteReq.Branch, deleteReq.Backup)
|
|
124
|
+
req, err := d.client.newRequest(http.MethodDelete, path, nil)
|
|
125
|
+
if err != nil {
|
|
126
|
+
return errors.Wrap(err, "error creating http request")
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
err = d.client.do(ctx, req, nil)
|
|
130
|
+
return err
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
func backupsAPIPath(org, db, branch string) string {
|
|
134
|
+
return fmt.Sprintf("%s/backups", databaseBranchAPIPath(org, db, branch))
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
func backupAPIPath(org, db, branch, backup string) string {
|
|
138
|
+
return fmt.Sprintf("%s/%s", backupsAPIPath(org, db, branch), backup)
|
|
139
|
+
}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
package planetscale
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"context"
|
|
5
|
+
"fmt"
|
|
6
|
+
"net/http"
|
|
7
|
+
"time"
|
|
8
|
+
|
|
9
|
+
"github.com/pkg/errors"
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
// DatabaseBranch represents a database branch.
|
|
13
|
+
type DatabaseBranch struct {
|
|
14
|
+
Name string `json:"name"`
|
|
15
|
+
Notes string `json:"notes"`
|
|
16
|
+
ParentBranch string `json:"parent_branch"`
|
|
17
|
+
CreatedAt time.Time `json:"created_at"`
|
|
18
|
+
UpdatedAt time.Time `json:"updated_at"`
|
|
19
|
+
Status string `json:"status,omitempty"`
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
type databaseBranchesResponse struct {
|
|
23
|
+
Branches []*DatabaseBranch `json:"data"`
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// CreateDatabaseBranchRequest encapsulates the request for creating a new
|
|
27
|
+
// database branch
|
|
28
|
+
type CreateDatabaseBranchRequest struct {
|
|
29
|
+
Organization string `json:"-"`
|
|
30
|
+
Database string `json:"-"`
|
|
31
|
+
Branch *DatabaseBranch
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// ListDatabaseBranchesRequest encapsulates the request for listing the branches
|
|
35
|
+
// of a database.
|
|
36
|
+
type ListDatabaseBranchesRequest struct {
|
|
37
|
+
Organization string
|
|
38
|
+
Database string
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// GetDatabaseBranchRequest encapsulates the request for getting a single
|
|
42
|
+
// database branch for a database.
|
|
43
|
+
type GetDatabaseBranchRequest struct {
|
|
44
|
+
Organization string
|
|
45
|
+
Database string
|
|
46
|
+
Branch string
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// DeleteDatabaseRequest encapsulates the request for deleting a database branch
|
|
50
|
+
// from a database.
|
|
51
|
+
type DeleteDatabaseBranchRequest struct {
|
|
52
|
+
Organization string
|
|
53
|
+
Database string
|
|
54
|
+
Branch string
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// GetDatabaseBranchStatusRequest encapsulates the request for getting the status
|
|
58
|
+
// of a specific database branch.
|
|
59
|
+
type GetDatabaseBranchStatusRequest struct {
|
|
60
|
+
Organization string
|
|
61
|
+
Database string
|
|
62
|
+
Branch string
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// DiffBranchRequest encapsulates a request for getting the diff for a branch.
|
|
66
|
+
type DiffBranchRequest struct {
|
|
67
|
+
Organization string `json:"-"`
|
|
68
|
+
Database string `json:"-"`
|
|
69
|
+
Branch string `json:"-"`
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// BranchSchemaRequest encapsulates a request for getting a branch's schema.
|
|
73
|
+
type BranchSchemaRequest struct {
|
|
74
|
+
Organization string `json:"-"`
|
|
75
|
+
Database string `json:"-"`
|
|
76
|
+
Branch string `json:"-"`
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// RefreshSchemaRequest reflects the request needed to refresh a schema
|
|
80
|
+
// snapshot on a database branch.
|
|
81
|
+
type RefreshSchemaRequest struct {
|
|
82
|
+
Organization string `json:"-"`
|
|
83
|
+
Database string `json:"-"`
|
|
84
|
+
Branch string `json:"-"`
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// DatabaseBranchesService is an interface for communicating with the PlanetScale
|
|
88
|
+
// Database Branch API endpoint.
|
|
89
|
+
type DatabaseBranchesService interface {
|
|
90
|
+
Create(context.Context, *CreateDatabaseBranchRequest) (*DatabaseBranch, error)
|
|
91
|
+
List(context.Context, *ListDatabaseBranchesRequest) ([]*DatabaseBranch, error)
|
|
92
|
+
Get(context.Context, *GetDatabaseBranchRequest) (*DatabaseBranch, error)
|
|
93
|
+
Delete(context.Context, *DeleteDatabaseBranchRequest) error
|
|
94
|
+
GetStatus(context.Context, *GetDatabaseBranchStatusRequest) (*DatabaseBranchStatus, error)
|
|
95
|
+
Diff(context.Context, *DiffBranchRequest) ([]*Diff, error)
|
|
96
|
+
Schema(context.Context, *BranchSchemaRequest) ([]*Diff, error)
|
|
97
|
+
RefreshSchema(context.Context, *RefreshSchemaRequest) error
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
type databaseBranchesService struct {
|
|
101
|
+
client *Client
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
type DatabaseBranchCredentials struct {
|
|
105
|
+
GatewayHost string `json:"mysql_gateway_host"`
|
|
106
|
+
GatewayPort int `json:"mysql_gateway_port"`
|
|
107
|
+
User string `json:"mysql_gateway_user"`
|
|
108
|
+
Password string `json:"mysql_gateway_pass"`
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// DatabaseBranchStatus represents the status of a PlanetScale database branch.
|
|
112
|
+
type DatabaseBranchStatus struct {
|
|
113
|
+
Ready bool `json:"ready"`
|
|
114
|
+
Credentials DatabaseBranchCredentials `json:"credentials"`
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
var _ DatabaseBranchesService = &databaseBranchesService{}
|
|
118
|
+
|
|
119
|
+
func NewDatabaseBranchesService(client *Client) *databaseBranchesService {
|
|
120
|
+
return &databaseBranchesService{
|
|
121
|
+
client: client,
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
func (d *databaseBranchesService) Diff(ctx context.Context, diffReq *DiffBranchRequest) ([]*Diff, error) {
|
|
126
|
+
path := fmt.Sprintf("%s/diff", databaseBranchAPIPath(diffReq.Organization, diffReq.Database, diffReq.Branch))
|
|
127
|
+
req, err := d.client.newRequest(http.MethodGet, path, nil)
|
|
128
|
+
if err != nil {
|
|
129
|
+
return nil, errors.Wrap(err, "error creating http request")
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
diffs := &diffResponse{}
|
|
133
|
+
if err := d.client.do(ctx, req, &diffs); err != nil {
|
|
134
|
+
return nil, err
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return diffs.Diffs, nil
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// schemaResponse returns the schemas
|
|
141
|
+
type schemaResponse struct {
|
|
142
|
+
Schemas []*Diff `json:"data"`
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
func (d *databaseBranchesService) Schema(ctx context.Context, schemaReq *BranchSchemaRequest) ([]*Diff, error) {
|
|
146
|
+
path := fmt.Sprintf("%s/schema", databaseBranchAPIPath(schemaReq.Organization, schemaReq.Database, schemaReq.Branch))
|
|
147
|
+
req, err := d.client.newRequest(http.MethodGet, path, nil)
|
|
148
|
+
if err != nil {
|
|
149
|
+
return nil, errors.Wrap(err, "error creating http request")
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
schemas := &schemaResponse{}
|
|
153
|
+
if err := d.client.do(ctx, req, &schemas); err != nil {
|
|
154
|
+
return nil, err
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return schemas.Schemas, nil
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Create creates a new branch for an organization's database.
|
|
161
|
+
func (d *databaseBranchesService) Create(ctx context.Context, createReq *CreateDatabaseBranchRequest) (*DatabaseBranch, error) {
|
|
162
|
+
path := databaseBranchesAPIPath(createReq.Organization, createReq.Database)
|
|
163
|
+
|
|
164
|
+
req, err := d.client.newRequest(http.MethodPost, path, createReq.Branch)
|
|
165
|
+
if err != nil {
|
|
166
|
+
return nil, errors.Wrap(err, "error creating request for branch database")
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
dbBranch := &DatabaseBranch{}
|
|
170
|
+
if err := d.client.do(ctx, req, &dbBranch); err != nil {
|
|
171
|
+
return nil, err
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return dbBranch, nil
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Get returns a database branch for an organization's database.
|
|
178
|
+
func (d *databaseBranchesService) Get(ctx context.Context, getReq *GetDatabaseBranchRequest) (*DatabaseBranch, error) {
|
|
179
|
+
path := fmt.Sprintf("%s/%s", databaseBranchesAPIPath(getReq.Organization, getReq.Database), getReq.Branch)
|
|
180
|
+
req, err := d.client.newRequest(http.MethodGet, path, nil)
|
|
181
|
+
if err != nil {
|
|
182
|
+
return nil, errors.Wrap(err, "error creating http request")
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
dbBranch := &DatabaseBranch{}
|
|
186
|
+
if err := d.client.do(ctx, req, &dbBranch); err != nil {
|
|
187
|
+
return nil, err
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return dbBranch, nil
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// List returns all of the branches for an organization's
|
|
194
|
+
// database.
|
|
195
|
+
func (d *databaseBranchesService) List(ctx context.Context, listReq *ListDatabaseBranchesRequest) ([]*DatabaseBranch, error) {
|
|
196
|
+
req, err := d.client.newRequest(http.MethodGet, databaseBranchesAPIPath(listReq.Organization, listReq.Database), nil)
|
|
197
|
+
if err != nil {
|
|
198
|
+
return nil, errors.Wrap(err, "error creating http request")
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
dbBranches := &databaseBranchesResponse{}
|
|
202
|
+
if err := d.client.do(ctx, req, &dbBranches); err != nil {
|
|
203
|
+
return nil, err
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return dbBranches.Branches, nil
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Delete deletes a database branch from an organization's database.
|
|
210
|
+
func (d *databaseBranchesService) Delete(ctx context.Context, deleteReq *DeleteDatabaseBranchRequest) error {
|
|
211
|
+
path := fmt.Sprintf("%s/%s", databaseBranchesAPIPath(deleteReq.Organization, deleteReq.Database), deleteReq.Branch)
|
|
212
|
+
req, err := d.client.newRequest(http.MethodDelete, path, nil)
|
|
213
|
+
if err != nil {
|
|
214
|
+
return errors.Wrap(err, "error creating request for delete branch")
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
err = d.client.do(ctx, req, nil)
|
|
218
|
+
return err
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Status returns the status of a specific database branch
|
|
222
|
+
func (d *databaseBranchesService) GetStatus(ctx context.Context, statusReq *GetDatabaseBranchStatusRequest) (*DatabaseBranchStatus, error) {
|
|
223
|
+
path := fmt.Sprintf("%s/%s/status", databaseBranchesAPIPath(statusReq.Organization, statusReq.Database), statusReq.Branch)
|
|
224
|
+
req, err := d.client.newRequest(http.MethodGet, path, nil)
|
|
225
|
+
if err != nil {
|
|
226
|
+
return nil, errors.Wrap(err, "error creating request for branch status")
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
status := &DatabaseBranchStatus{}
|
|
230
|
+
if err := d.client.do(ctx, req, &status); err != nil {
|
|
231
|
+
return nil, err
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
return status, nil
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// RefreshSchema refreshes the schema for a
|
|
238
|
+
func (d *databaseBranchesService) RefreshSchema(ctx context.Context, refreshReq *RefreshSchemaRequest) error {
|
|
239
|
+
path := fmt.Sprintf("%s/%s/refresh-schema", databaseBranchesAPIPath(refreshReq.Organization, refreshReq.Database), refreshReq.Branch)
|
|
240
|
+
req, err := d.client.newRequest(http.MethodPost, path, nil)
|
|
241
|
+
if err != nil {
|
|
242
|
+
return errors.Wrap(err, "error creating http request")
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if err := d.client.do(ctx, req, nil); err != nil {
|
|
246
|
+
return err
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return nil
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
func databaseBranchesAPIPath(org, db string) string {
|
|
253
|
+
return fmt.Sprintf("%s/%s/branches", databasesAPIPath(org), db)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
func databaseBranchAPIPath(org, db, branch string) string {
|
|
257
|
+
return fmt.Sprintf("%s/%s", databaseBranchesAPIPath(org, db), branch)
|
|
258
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
package planetscale
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"bytes"
|
|
5
|
+
"context"
|
|
6
|
+
"crypto/rand"
|
|
7
|
+
"crypto/rsa"
|
|
8
|
+
"crypto/tls"
|
|
9
|
+
"crypto/x509"
|
|
10
|
+
"crypto/x509/pkix"
|
|
11
|
+
"encoding/pem"
|
|
12
|
+
"errors"
|
|
13
|
+
"fmt"
|
|
14
|
+
"net/http"
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
type CreateCertificateRequest struct {
|
|
18
|
+
Organization string
|
|
19
|
+
DatabaseName string
|
|
20
|
+
Branch string
|
|
21
|
+
|
|
22
|
+
// PrivateKey is used to sign the Certificate Sign Request (CSR).
|
|
23
|
+
PrivateKey *rsa.PrivateKey
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
type CertificatesService interface {
|
|
27
|
+
Create(context.Context, *CreateCertificateRequest) (*Cert, error)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
type Cert struct {
|
|
31
|
+
ClientCert tls.Certificate
|
|
32
|
+
CACert *x509.Certificate
|
|
33
|
+
RemoteAddr string
|
|
34
|
+
Ports RemotePorts
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
type RemotePorts struct {
|
|
38
|
+
Proxy int
|
|
39
|
+
MySQL int
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
type certificatesService struct {
|
|
43
|
+
client *Client
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
var _ CertificatesService = &certificatesService{}
|
|
47
|
+
|
|
48
|
+
func NewCertsService(client *Client) *certificatesService {
|
|
49
|
+
return &certificatesService{
|
|
50
|
+
client: client,
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
func (c *certificatesService) Create(ctx context.Context, r *CreateCertificateRequest) (*Cert, error) {
|
|
55
|
+
cn := fmt.Sprintf("%s/%s/%s", r.Organization, r.DatabaseName, r.Branch)
|
|
56
|
+
subj := pkix.Name{
|
|
57
|
+
CommonName: cn,
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
template := x509.CertificateRequest{
|
|
61
|
+
Version: 1,
|
|
62
|
+
Subject: subj,
|
|
63
|
+
SignatureAlgorithm: x509.SHA256WithRSA,
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
csrBytes, err := x509.CreateCertificateRequest(rand.Reader, &template, r.PrivateKey)
|
|
67
|
+
if err != nil {
|
|
68
|
+
return nil, fmt.Errorf("unable to create csr: %s", err)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
var buf bytes.Buffer
|
|
72
|
+
err = pem.Encode(&buf, &pem.Block{Type: "CERTIFICATE REQUEST", Bytes: csrBytes})
|
|
73
|
+
if err != nil {
|
|
74
|
+
return nil, fmt.Errorf("unable to encode the CSR to PEM: %s", err)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
var certReq = struct {
|
|
78
|
+
CSR string `json:"csr"`
|
|
79
|
+
}{
|
|
80
|
+
CSR: buf.String(),
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
req, err := c.client.newRequest(
|
|
84
|
+
http.MethodPost,
|
|
85
|
+
fmt.Sprintf("%s/%s/branches/%s/create-certificate",
|
|
86
|
+
databasesAPIPath(r.Organization),
|
|
87
|
+
r.DatabaseName,
|
|
88
|
+
r.Branch,
|
|
89
|
+
),
|
|
90
|
+
certReq,
|
|
91
|
+
)
|
|
92
|
+
if err != nil {
|
|
93
|
+
return nil, fmt.Errorf("error creating request for create certificates: %s", err)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
var cr struct {
|
|
97
|
+
Certificate string `json:"certificate"`
|
|
98
|
+
CertificateChain string `json:"certificate_chain"`
|
|
99
|
+
RemoteAddr string `json:"remote_addr"`
|
|
100
|
+
Ports map[string]int `json:"ports"`
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
err = c.client.do(ctx, req, &cr)
|
|
104
|
+
if err != nil {
|
|
105
|
+
return nil, err
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
caCert, err := parseCert(cr.CertificateChain)
|
|
109
|
+
if err != nil {
|
|
110
|
+
return nil, fmt.Errorf("parsing certificate chain failed: %s", err)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
privateKey := pem.EncodeToMemory(
|
|
114
|
+
&pem.Block{
|
|
115
|
+
Type: "RSA PRIVATE KEY",
|
|
116
|
+
Bytes: x509.MarshalPKCS1PrivateKey(r.PrivateKey),
|
|
117
|
+
},
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
clientCert, err := tls.X509KeyPair([]byte(cr.Certificate), privateKey)
|
|
121
|
+
if err != nil {
|
|
122
|
+
return nil, fmt.Errorf("parsing client certificate failed: %s", err)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return &Cert{
|
|
126
|
+
ClientCert: clientCert,
|
|
127
|
+
CACert: caCert,
|
|
128
|
+
RemoteAddr: cr.RemoteAddr,
|
|
129
|
+
Ports: RemotePorts{
|
|
130
|
+
Proxy: cr.Ports["proxy"],
|
|
131
|
+
MySQL: cr.Ports["mysql-tls"],
|
|
132
|
+
},
|
|
133
|
+
}, nil
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
func parseCert(pemCert string) (*x509.Certificate, error) {
|
|
137
|
+
bl, _ := pem.Decode([]byte(pemCert))
|
|
138
|
+
if bl == nil {
|
|
139
|
+
return nil, errors.New("invalid PEM: " + pemCert)
|
|
140
|
+
}
|
|
141
|
+
return x509.ParseCertificate(bl.Bytes)
|
|
142
|
+
}
|