From 78d4d4c89ed5dde3fb7c6d5efbeef7248908dde3 Mon Sep 17 00:00:00 2001 From: Javier Adriel Date: Mon, 18 Jul 2022 17:51:07 -0500 Subject: [PATCH] Add endpoint to get api key from subnet (#2175) --- models/api_key.go | 67 +++++++++ models/subnet_api_key_request.go | 88 ++++++++++++ pkg/subnet/subnet.go | 10 ++ pkg/subnet/utils.go | 4 + restapi/admin_subnet.go | 28 ++++ restapi/embedded_spec.go | 78 ++++++++++ restapi/operations/console_api.go | 12 ++ restapi/operations/subnet/subnet_api_key.go | 88 ++++++++++++ .../subnet/subnet_api_key_parameters.go | 99 +++++++++++++ .../subnet/subnet_api_key_responses.go | 133 ++++++++++++++++++ .../subnet/subnet_api_key_urlbuilder.go | 117 +++++++++++++++ swagger-console.yml | 25 ++++ 12 files changed, 749 insertions(+) create mode 100644 models/api_key.go create mode 100644 models/subnet_api_key_request.go create mode 100644 restapi/operations/subnet/subnet_api_key.go create mode 100644 restapi/operations/subnet/subnet_api_key_parameters.go create mode 100644 restapi/operations/subnet/subnet_api_key_responses.go create mode 100644 restapi/operations/subnet/subnet_api_key_urlbuilder.go diff --git a/models/api_key.go b/models/api_key.go new file mode 100644 index 000000000..3c7f01f7c --- /dev/null +++ b/models/api_key.go @@ -0,0 +1,67 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// APIKey api key +// +// swagger:model apiKey +type APIKey struct { + + // api key + APIKey string `json:"apiKey,omitempty"` +} + +// Validate validates this api key +func (m *APIKey) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this api key based on context it is used +func (m *APIKey) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (m *APIKey) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *APIKey) UnmarshalBinary(b []byte) error { + var res APIKey + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/models/subnet_api_key_request.go b/models/subnet_api_key_request.go new file mode 100644 index 000000000..a372bea36 --- /dev/null +++ b/models/subnet_api_key_request.go @@ -0,0 +1,88 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + + "github.com/go-openapi/errors" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" + "github.com/go-openapi/validate" +) + +// SubnetAPIKeyRequest subnet Api key request +// +// swagger:model subnetApiKeyRequest +type SubnetAPIKeyRequest struct { + + // token + // Required: true + Token *string `json:"token"` +} + +// Validate validates this subnet Api key request +func (m *SubnetAPIKeyRequest) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateToken(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *SubnetAPIKeyRequest) validateToken(formats strfmt.Registry) error { + + if err := validate.Required("token", "body", m.Token); err != nil { + return err + } + + return nil +} + +// ContextValidate validates this subnet Api key request based on context it is used +func (m *SubnetAPIKeyRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (m *SubnetAPIKeyRequest) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *SubnetAPIKeyRequest) UnmarshalBinary(b []byte) error { + var res SubnetAPIKeyRequest + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/pkg/subnet/subnet.go b/pkg/subnet/subnet.go index 2b90a1777..3ee39adb7 100644 --- a/pkg/subnet/subnet.go +++ b/pkg/subnet/subnet.go @@ -165,3 +165,13 @@ func ParseLicense(client http.ClientI, license string) (*licverifier.LicenseInfo return licenseInfo, nil } + +func GetAPIKey(client http.ClientI, token string) (string, error) { + resp, err := subnetGetReq(client, subnetAPIKeyURL(), subnetAuthHeaders(token)) + if err != nil { + return "", err + } + respJSON := gjson.Parse(resp) + apiKey := respJSON.Get("api_key").String() + return apiKey, nil +} diff --git a/pkg/subnet/utils.go b/pkg/subnet/utils.go index 496c3f576..1895de15a 100644 --- a/pkg/subnet/utils.go +++ b/pkg/subnet/utils.go @@ -56,6 +56,10 @@ func subnetMFAURL() string { return subnetBaseURL() + "/api/auth/mfa-login" } +func subnetAPIKeyURL() string { + return subnetBaseURL() + "/api/auth/api-key" +} + func GenerateRegToken(clusterRegInfo mc.ClusterRegistrationInfo) (string, error) { token, e := json.Marshal(clusterRegInfo) if e != nil { diff --git a/restapi/admin_subnet.go b/restapi/admin_subnet.go index b8e67b96d..c73c7e6cb 100644 --- a/restapi/admin_subnet.go +++ b/restapi/admin_subnet.go @@ -75,6 +75,14 @@ func registerSubnetHandlers(api *operations.ConsoleAPI) { } return subnetApi.NewSubnetRegTokenOK().WithPayload(resp) }) + + api.SubnetSubnetAPIKeyHandler = subnetApi.SubnetAPIKeyHandlerFunc(func(params subnetApi.SubnetAPIKeyParams, session *models.Principal) middleware.Responder { + resp, err := GetSubnetAPIKeyResponse(session, params) + if err != nil { + return subnetApi.NewSubnetAPIKeyDefault(int(err.Code)).WithPayload(err) + } + return subnetApi.NewSubnetAPIKeyOK().WithPayload(resp) + }) } func SubnetRegisterWithAPIKey(ctx context.Context, minioClient MinioAdmin, apiKey string) (bool, error) { @@ -361,3 +369,23 @@ func GetSubnetRegTokenResponse(session *models.Principal, params subnetApi.Subne RegToken: token, }, nil } + +func GetSubnetAPIKeyResponse(session *models.Principal, params subnetApi.SubnetAPIKeyParams) (*models.APIKey, *models.Error) { + ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) + defer cancel() + mAdmin, err := NewMinioAdminClient(session) + if err != nil { + return nil, ErrorWithContext(ctx, err) + } + adminClient := AdminClient{Client: mAdmin} + subnetHTTPClient, err := GetSubnetHTTPClient(ctx, adminClient) + if err != nil { + return nil, ErrorWithContext(ctx, err) + } + token := params.HTTPRequest.URL.Query().Get("token") + apiKey, err := subnet.GetAPIKey(subnetHTTPClient, token) + if err != nil { + return nil, ErrorWithContext(ctx, err) + } + return &models.APIKey{APIKey: apiKey}, nil +} diff --git a/restapi/embedded_spec.go b/restapi/embedded_spec.go index 4852adcd9..67baaf72d 100644 --- a/restapi/embedded_spec.go +++ b/restapi/embedded_spec.go @@ -3707,6 +3707,37 @@ func init() { } } }, + "/subnet/apikey": { + "get": { + "tags": [ + "Subnet" + ], + "summary": "Subnet api key", + "operationId": "SubnetApiKey", + "parameters": [ + { + "type": "string", + "name": "token", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/apiKey" + } + }, + "default": { + "description": "Generic error response.", + "schema": { + "$ref": "#/definitions/error" + } + } + } + } + }, "/subnet/info": { "get": { "tags": [ @@ -4562,6 +4593,14 @@ func init() { } } }, + "apiKey": { + "type": "object", + "properties": { + "apiKey": { + "type": "string" + } + } + }, "arnsResponse": { "type": "object", "properties": { @@ -10802,6 +10841,37 @@ func init() { } } }, + "/subnet/apikey": { + "get": { + "tags": [ + "Subnet" + ], + "summary": "Subnet api key", + "operationId": "SubnetApiKey", + "parameters": [ + { + "type": "string", + "name": "token", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/apiKey" + } + }, + "default": { + "description": "Generic error response.", + "schema": { + "$ref": "#/definitions/error" + } + } + } + } + }, "/subnet/info": { "get": { "tags": [ @@ -11783,6 +11853,14 @@ func init() { } } }, + "apiKey": { + "type": "object", + "properties": { + "apiKey": { + "type": "string" + } + } + }, "arnsResponse": { "type": "object", "properties": { diff --git a/restapi/operations/console_api.go b/restapi/operations/console_api.go index f4652e188..3be7cd71c 100644 --- a/restapi/operations/console_api.go +++ b/restapi/operations/console_api.go @@ -426,6 +426,9 @@ func NewConsoleAPI(spec *loads.Document, openIDProviders oauth2.OpenIDPCfg) *Con SiteReplicationSiteReplicationRemoveHandler: site_replication.SiteReplicationRemoveHandlerFunc(func(params site_replication.SiteReplicationRemoveParams, principal *models.Principal) middleware.Responder { return middleware.NotImplemented("operation site_replication.SiteReplicationRemove has not yet been implemented") }), + SubnetSubnetAPIKeyHandler: subnet.SubnetAPIKeyHandlerFunc(func(params subnet.SubnetAPIKeyParams, principal *models.Principal) middleware.Responder { + return middleware.NotImplemented("operation subnet.SubnetAPIKey has not yet been implemented") + }), SubnetSubnetInfoHandler: subnet.SubnetInfoHandlerFunc(func(params subnet.SubnetInfoParams, principal *models.Principal) middleware.Responder { return middleware.NotImplemented("operation subnet.SubnetInfo has not yet been implemented") }), @@ -746,6 +749,8 @@ type ConsoleAPI struct { SiteReplicationSiteReplicationInfoAddHandler site_replication.SiteReplicationInfoAddHandler // SiteReplicationSiteReplicationRemoveHandler sets the operation handler for the site replication remove operation SiteReplicationSiteReplicationRemoveHandler site_replication.SiteReplicationRemoveHandler + // SubnetSubnetAPIKeyHandler sets the operation handler for the subnet Api key operation + SubnetSubnetAPIKeyHandler subnet.SubnetAPIKeyHandler // SubnetSubnetInfoHandler sets the operation handler for the subnet info operation SubnetSubnetInfoHandler subnet.SubnetInfoHandler // SubnetSubnetLoginHandler sets the operation handler for the subnet login operation @@ -1197,6 +1202,9 @@ func (o *ConsoleAPI) Validate() error { if o.SiteReplicationSiteReplicationRemoveHandler == nil { unregistered = append(unregistered, "site_replication.SiteReplicationRemoveHandler") } + if o.SubnetSubnetAPIKeyHandler == nil { + unregistered = append(unregistered, "subnet.SubnetAPIKeyHandler") + } if o.SubnetSubnetInfoHandler == nil { unregistered = append(unregistered, "subnet.SubnetInfoHandler") } @@ -1789,6 +1797,10 @@ func (o *ConsoleAPI) initHandlerCache() { if o.handlers["GET"] == nil { o.handlers["GET"] = make(map[string]http.Handler) } + o.handlers["GET"]["/subnet/apikey"] = subnet.NewSubnetAPIKey(o.context, o.SubnetSubnetAPIKeyHandler) + if o.handlers["GET"] == nil { + o.handlers["GET"] = make(map[string]http.Handler) + } o.handlers["GET"]["/subnet/info"] = subnet.NewSubnetInfo(o.context, o.SubnetSubnetInfoHandler) if o.handlers["POST"] == nil { o.handlers["POST"] = make(map[string]http.Handler) diff --git a/restapi/operations/subnet/subnet_api_key.go b/restapi/operations/subnet/subnet_api_key.go new file mode 100644 index 000000000..9d817d363 --- /dev/null +++ b/restapi/operations/subnet/subnet_api_key.go @@ -0,0 +1,88 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// + +package subnet + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the generate command + +import ( + "net/http" + + "github.com/go-openapi/runtime/middleware" + + "github.com/minio/console/models" +) + +// SubnetAPIKeyHandlerFunc turns a function with the right signature into a subnet Api key handler +type SubnetAPIKeyHandlerFunc func(SubnetAPIKeyParams, *models.Principal) middleware.Responder + +// Handle executing the request and returning a response +func (fn SubnetAPIKeyHandlerFunc) Handle(params SubnetAPIKeyParams, principal *models.Principal) middleware.Responder { + return fn(params, principal) +} + +// SubnetAPIKeyHandler interface for that can handle valid subnet Api key params +type SubnetAPIKeyHandler interface { + Handle(SubnetAPIKeyParams, *models.Principal) middleware.Responder +} + +// NewSubnetAPIKey creates a new http.Handler for the subnet Api key operation +func NewSubnetAPIKey(ctx *middleware.Context, handler SubnetAPIKeyHandler) *SubnetAPIKey { + return &SubnetAPIKey{Context: ctx, Handler: handler} +} + +/* SubnetAPIKey swagger:route GET /subnet/apikey Subnet subnetApiKey + +Subnet api key + +*/ +type SubnetAPIKey struct { + Context *middleware.Context + Handler SubnetAPIKeyHandler +} + +func (o *SubnetAPIKey) ServeHTTP(rw http.ResponseWriter, r *http.Request) { + route, rCtx, _ := o.Context.RouteInfo(r) + if rCtx != nil { + *r = *rCtx + } + var Params = NewSubnetAPIKeyParams() + uprinc, aCtx, err := o.Context.Authorize(r, route) + if err != nil { + o.Context.Respond(rw, r, route.Produces, route, err) + return + } + if aCtx != nil { + *r = *aCtx + } + var principal *models.Principal + if uprinc != nil { + principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise + } + + if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params + o.Context.Respond(rw, r, route.Produces, route, err) + return + } + + res := o.Handler.Handle(Params, principal) // actually handle the request + o.Context.Respond(rw, r, route.Produces, route, res) + +} diff --git a/restapi/operations/subnet/subnet_api_key_parameters.go b/restapi/operations/subnet/subnet_api_key_parameters.go new file mode 100644 index 000000000..3b455d6aa --- /dev/null +++ b/restapi/operations/subnet/subnet_api_key_parameters.go @@ -0,0 +1,99 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// + +package subnet + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "net/http" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/validate" +) + +// NewSubnetAPIKeyParams creates a new SubnetAPIKeyParams object +// +// There are no default values defined in the spec. +func NewSubnetAPIKeyParams() SubnetAPIKeyParams { + + return SubnetAPIKeyParams{} +} + +// SubnetAPIKeyParams contains all the bound params for the subnet Api key operation +// typically these are obtained from a http.Request +// +// swagger:parameters SubnetApiKey +type SubnetAPIKeyParams struct { + + // HTTP Request Object + HTTPRequest *http.Request `json:"-"` + + /* + Required: true + In: query + */ + Token string +} + +// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface +// for simple values it will use straight method calls. +// +// To ensure default values, the struct must have been initialized with NewSubnetAPIKeyParams() beforehand. +func (o *SubnetAPIKeyParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { + var res []error + + o.HTTPRequest = r + + qs := runtime.Values(r.URL.Query()) + + qToken, qhkToken, _ := qs.GetOK("token") + if err := o.bindToken(qToken, qhkToken, route.Formats); err != nil { + res = append(res, err) + } + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +// bindToken binds and validates parameter Token from query. +func (o *SubnetAPIKeyParams) bindToken(rawData []string, hasKey bool, formats strfmt.Registry) error { + if !hasKey { + return errors.Required("token", "query", rawData) + } + var raw string + if len(rawData) > 0 { + raw = rawData[len(rawData)-1] + } + + // Required: true + // AllowEmptyValue: false + + if err := validate.RequiredString("token", "query", raw); err != nil { + return err + } + o.Token = raw + + return nil +} diff --git a/restapi/operations/subnet/subnet_api_key_responses.go b/restapi/operations/subnet/subnet_api_key_responses.go new file mode 100644 index 000000000..a3c7c35c9 --- /dev/null +++ b/restapi/operations/subnet/subnet_api_key_responses.go @@ -0,0 +1,133 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// + +package subnet + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "net/http" + + "github.com/go-openapi/runtime" + + "github.com/minio/console/models" +) + +// SubnetAPIKeyOKCode is the HTTP code returned for type SubnetAPIKeyOK +const SubnetAPIKeyOKCode int = 200 + +/*SubnetAPIKeyOK A successful response. + +swagger:response subnetApiKeyOK +*/ +type SubnetAPIKeyOK struct { + + /* + In: Body + */ + Payload *models.APIKey `json:"body,omitempty"` +} + +// NewSubnetAPIKeyOK creates SubnetAPIKeyOK with default headers values +func NewSubnetAPIKeyOK() *SubnetAPIKeyOK { + + return &SubnetAPIKeyOK{} +} + +// WithPayload adds the payload to the subnet Api key o k response +func (o *SubnetAPIKeyOK) WithPayload(payload *models.APIKey) *SubnetAPIKeyOK { + o.Payload = payload + return o +} + +// SetPayload sets the payload to the subnet Api key o k response +func (o *SubnetAPIKeyOK) SetPayload(payload *models.APIKey) { + o.Payload = payload +} + +// WriteResponse to the client +func (o *SubnetAPIKeyOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.WriteHeader(200) + if o.Payload != nil { + payload := o.Payload + if err := producer.Produce(rw, payload); err != nil { + panic(err) // let the recovery middleware deal with this + } + } +} + +/*SubnetAPIKeyDefault Generic error response. + +swagger:response subnetApiKeyDefault +*/ +type SubnetAPIKeyDefault struct { + _statusCode int + + /* + In: Body + */ + Payload *models.Error `json:"body,omitempty"` +} + +// NewSubnetAPIKeyDefault creates SubnetAPIKeyDefault with default headers values +func NewSubnetAPIKeyDefault(code int) *SubnetAPIKeyDefault { + if code <= 0 { + code = 500 + } + + return &SubnetAPIKeyDefault{ + _statusCode: code, + } +} + +// WithStatusCode adds the status to the subnet Api key default response +func (o *SubnetAPIKeyDefault) WithStatusCode(code int) *SubnetAPIKeyDefault { + o._statusCode = code + return o +} + +// SetStatusCode sets the status to the subnet Api key default response +func (o *SubnetAPIKeyDefault) SetStatusCode(code int) { + o._statusCode = code +} + +// WithPayload adds the payload to the subnet Api key default response +func (o *SubnetAPIKeyDefault) WithPayload(payload *models.Error) *SubnetAPIKeyDefault { + o.Payload = payload + return o +} + +// SetPayload sets the payload to the subnet Api key default response +func (o *SubnetAPIKeyDefault) SetPayload(payload *models.Error) { + o.Payload = payload +} + +// WriteResponse to the client +func (o *SubnetAPIKeyDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.WriteHeader(o._statusCode) + if o.Payload != nil { + payload := o.Payload + if err := producer.Produce(rw, payload); err != nil { + panic(err) // let the recovery middleware deal with this + } + } +} diff --git a/restapi/operations/subnet/subnet_api_key_urlbuilder.go b/restapi/operations/subnet/subnet_api_key_urlbuilder.go new file mode 100644 index 000000000..3c74d10d4 --- /dev/null +++ b/restapi/operations/subnet/subnet_api_key_urlbuilder.go @@ -0,0 +1,117 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// + +package subnet + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the generate command + +import ( + "errors" + "net/url" + golangswaggerpaths "path" +) + +// SubnetAPIKeyURL generates an URL for the subnet Api key operation +type SubnetAPIKeyURL struct { + Token string + + _basePath string + // avoid unkeyed usage + _ struct{} +} + +// WithBasePath sets the base path for this url builder, only required when it's different from the +// base path specified in the swagger spec. +// When the value of the base path is an empty string +func (o *SubnetAPIKeyURL) WithBasePath(bp string) *SubnetAPIKeyURL { + o.SetBasePath(bp) + return o +} + +// SetBasePath sets the base path for this url builder, only required when it's different from the +// base path specified in the swagger spec. +// When the value of the base path is an empty string +func (o *SubnetAPIKeyURL) SetBasePath(bp string) { + o._basePath = bp +} + +// Build a url path and query string +func (o *SubnetAPIKeyURL) Build() (*url.URL, error) { + var _result url.URL + + var _path = "/subnet/apikey" + + _basePath := o._basePath + if _basePath == "" { + _basePath = "/api/v1" + } + _result.Path = golangswaggerpaths.Join(_basePath, _path) + + qs := make(url.Values) + + tokenQ := o.Token + if tokenQ != "" { + qs.Set("token", tokenQ) + } + + _result.RawQuery = qs.Encode() + + return &_result, nil +} + +// Must is a helper function to panic when the url builder returns an error +func (o *SubnetAPIKeyURL) Must(u *url.URL, err error) *url.URL { + if err != nil { + panic(err) + } + if u == nil { + panic("url can't be nil") + } + return u +} + +// String returns the string representation of the path with query string +func (o *SubnetAPIKeyURL) String() string { + return o.Must(o.Build()).String() +} + +// BuildFull builds a full url with scheme, host, path and query string +func (o *SubnetAPIKeyURL) BuildFull(scheme, host string) (*url.URL, error) { + if scheme == "" { + return nil, errors.New("scheme is required for a full url on SubnetAPIKeyURL") + } + if host == "" { + return nil, errors.New("host is required for a full url on SubnetAPIKeyURL") + } + + base, err := o.Build() + if err != nil { + return nil, err + } + + base.Scheme = scheme + base.Host = host + return base, nil +} + +// StringFull returns the string representation of a complete url +func (o *SubnetAPIKeyURL) StringFull(scheme, host string) string { + return o.Must(o.BuildFull(scheme, host)).String() +} diff --git a/swagger-console.yml b/swagger-console.yml index 72dabb640..790e1ed8a 100644 --- a/swagger-console.yml +++ b/swagger-console.yml @@ -2319,6 +2319,26 @@ paths: $ref: "#/definitions/error" tags: - Subnet + /subnet/apikey: + get: + summary: Subnet api key + operationId: SubnetApiKey + parameters: + - name: token + in: query + required: true + type: string + responses: + 200: + description: A successful response. + schema: + $ref: "#/definitions/apiKey" + default: + description: Generic error response. + schema: + $ref: "#/definitions/error" + tags: + - Subnet /subnet/register: post: summary: Register cluster with Subnet @@ -4583,6 +4603,11 @@ definitions: type: string expires_at: type: string + apiKey: + type: object + properties: + apiKey: + type: string policyArgs: type: object