From da2e9e8896e5555cf5ca1e72360975728e8b8418 Mon Sep 17 00:00:00 2001 From: Daniel Valdivia Date: Fri, 3 Apr 2020 14:27:47 -0700 Subject: [PATCH] API: List ARNs (#19) * API: List ARNs * Add Tests --- models/arns_response.go | 60 ++++++++ restapi/admin_arns.go | 75 ++++++++++ restapi/admin_arns_test.go | 54 +++++++ restapi/admin_info.go | 5 +- restapi/configure_mcs.go | 2 + restapi/embedded_spec.go | 68 +++++++++ restapi/operations/admin_api/arn_list.go | 90 ++++++++++++ .../admin_api/arn_list_parameters.go | 62 ++++++++ .../admin_api/arn_list_responses.go | 133 ++++++++++++++++++ .../admin_api/arn_list_urlbuilder.go | 104 ++++++++++++++ restapi/operations/mcs_api.go | 12 ++ swagger.yml | 22 +++ 12 files changed, 685 insertions(+), 2 deletions(-) create mode 100644 models/arns_response.go create mode 100644 restapi/admin_arns.go create mode 100644 restapi/admin_arns_test.go create mode 100644 restapi/operations/admin_api/arn_list.go create mode 100644 restapi/operations/admin_api/arn_list_parameters.go create mode 100644 restapi/operations/admin_api/arn_list_responses.go create mode 100644 restapi/operations/admin_api/arn_list_urlbuilder.go diff --git a/models/arns_response.go b/models/arns_response.go new file mode 100644 index 000000000..6e8790a62 --- /dev/null +++ b/models/arns_response.go @@ -0,0 +1,60 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2020 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 ( + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// ArnsResponse arns response +// +// swagger:model arnsResponse +type ArnsResponse struct { + + // arns + Arns []string `json:"arns"` +} + +// Validate validates this arns response +func (m *ArnsResponse) Validate(formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (m *ArnsResponse) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *ArnsResponse) UnmarshalBinary(b []byte) error { + var res ArnsResponse + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/restapi/admin_arns.go b/restapi/admin_arns.go new file mode 100644 index 000000000..5298ff90c --- /dev/null +++ b/restapi/admin_arns.go @@ -0,0 +1,75 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2020 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 restapi + +import ( + "context" + "log" + "time" + + "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/swag" + "github.com/minio/m3/mcs/models" + "github.com/minio/m3/mcs/restapi/operations" + "github.com/minio/m3/mcs/restapi/operations/admin_api" +) + +func registerAdminArnsHandlers(api *operations.McsAPI) { + // return a list of arns + api.AdminAPIArnListHandler = admin_api.ArnListHandlerFunc(func(params admin_api.ArnListParams, principal *models.Principal) middleware.Responder { + arnsResp, err := getArnsResponse() + if err != nil { + return admin_api.NewArnListDefault(500).WithPayload(&models.Error{Code: 500, Message: swag.String(err.Error())}) + } + return admin_api.NewArnListOK().WithPayload(arnsResp) + }) + +} + +// getArns invokes admin info and returns a list of arns +func getArns(ctx context.Context, client MinioAdmin) (*models.ArnsResponse, error) { + serverInfo, err := client.serverInfo(ctx) + if err != nil { + return nil, err + } + // build response + return &models.ArnsResponse{ + Arns: serverInfo.SQSARN, + }, nil +} + +// getArnsResponse returns a list of active arns in the instance +func getArnsResponse() (*models.ArnsResponse, error) { + mAdmin, err := newMAdminClient() + if err != nil { + log.Println("error creating Madmin Client:", err) + return nil, err + } + // create a minioClient interface implementation + // defining the client to be used + adminClient := adminClient{client: mAdmin} + // 20 seconds timeout + ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) + defer cancel() + // serialize output + arnsList, err := getArns(ctx, adminClient) + if err != nil { + log.Println("error getting arn list:", err) + return nil, err + } + return arnsList, nil +} diff --git a/restapi/admin_arns_test.go b/restapi/admin_arns_test.go new file mode 100644 index 000000000..d2b344484 --- /dev/null +++ b/restapi/admin_arns_test.go @@ -0,0 +1,54 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2020 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 restapi + +import ( + "context" + "errors" + "testing" + + "github.com/minio/minio/pkg/madmin" + asrt "github.com/stretchr/testify/assert" +) + +func TestArnsList(t *testing.T) { + assert := asrt.New(t) + adminClient := adminClientMock{} + // Test-1 : getArns() returns proper arn list + minioServerInfoMock = func(ctx context.Context) (madmin.InfoMessage, error) { + return madmin.InfoMessage{ + SQSARN: []string{"uno"}, + }, nil + } + ctx := context.Background() + arnsList, err := getArns(ctx, adminClient) + assert.NotNil(arnsList, "arn list was returned nil") + if arnsList != nil { + assert.Equal(len(arnsList.Arns), 1, "Incorrect arns count") + } + assert.Nil(err, "Error should have been nil") + + // Test-2 : getArns(ctx) fails for whatever reason + minioServerInfoMock = func(ctx context.Context) (madmin.InfoMessage, error) { + return madmin.InfoMessage{}, errors.New("some reason") + } + + arnsList, err = getArns(ctx, adminClient) + assert.Nil(arnsList, "arn list was not returned nil") + assert.NotNil(err, "An error should have ben returned") + +} diff --git a/restapi/admin_info.go b/restapi/admin_info.go index f67214377..e9e393b38 100644 --- a/restapi/admin_info.go +++ b/restapi/admin_info.go @@ -19,6 +19,7 @@ package restapi import ( "context" "log" + "time" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/swag" @@ -28,7 +29,7 @@ import ( ) func registerAdminInfoHandlers(api *operations.McsAPI) { - // session check + // return usage stats api.AdminAPIAdminInfoHandler = admin_api.AdminInfoHandlerFunc(func(params admin_api.AdminInfoParams, principal *models.Principal) middleware.Responder { infoResp, err := getAdminInfoResponse() if err != nil { @@ -71,7 +72,7 @@ func getAdminInfoResponse() (*models.AdminInfoResponse, error) { // defining the client to be used adminClient := adminClient{client: mAdmin} // 20 seconds timeout - ctx, cancel := context.WithTimeout(context.Background(), 20) + ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) defer cancel() // serialize output usage, err := getAdminInfo(ctx, adminClient) diff --git a/restapi/configure_mcs.go b/restapi/configure_mcs.go index 58dfe5df0..3ee5a9e61 100644 --- a/restapi/configure_mcs.go +++ b/restapi/configure_mcs.go @@ -89,6 +89,8 @@ func configureAPI(api *operations.McsAPI) http.Handler { registerSessionHandlers(api) // Register admin info handlers registerAdminInfoHandlers(api) + // Register admin arns handlers + registerAdminArnsHandlers(api) api.PreServerShutdown = func() {} diff --git a/restapi/embedded_spec.go b/restapi/embedded_spec.go index 9b2bae3dd..e4fa16bb1 100644 --- a/restapi/embedded_spec.go +++ b/restapi/embedded_spec.go @@ -51,6 +51,29 @@ func init() { }, "basePath": "/api/v1", "paths": { + "/admin/arns": { + "get": { + "tags": [ + "AdminAPI" + ], + "summary": "Returns a list of active ARNs in the instance", + "operationId": "ArnList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/arnsResponse" + } + }, + "default": { + "description": "Generic error response.", + "schema": { + "$ref": "#/definitions/error" + } + } + } + } + }, "/admin/info": { "get": { "tags": [ @@ -1028,6 +1051,17 @@ func init() { } } }, + "arnsResponse": { + "type": "object", + "properties": { + "arns": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, "bucket": { "type": "object", "required": [ @@ -1555,6 +1589,29 @@ func init() { }, "basePath": "/api/v1", "paths": { + "/admin/arns": { + "get": { + "tags": [ + "AdminAPI" + ], + "summary": "Returns a list of active ARNs in the instance", + "operationId": "ArnList", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/arnsResponse" + } + }, + "default": { + "description": "Generic error response.", + "schema": { + "$ref": "#/definitions/error" + } + } + } + } + }, "/admin/info": { "get": { "tags": [ @@ -2532,6 +2589,17 @@ func init() { } } }, + "arnsResponse": { + "type": "object", + "properties": { + "arns": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, "bucket": { "type": "object", "required": [ diff --git a/restapi/operations/admin_api/arn_list.go b/restapi/operations/admin_api/arn_list.go new file mode 100644 index 000000000..a221ac6d0 --- /dev/null +++ b/restapi/operations/admin_api/arn_list.go @@ -0,0 +1,90 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2020 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 admin_api + +// 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/m3/mcs/models" +) + +// ArnListHandlerFunc turns a function with the right signature into a arn list handler +type ArnListHandlerFunc func(ArnListParams, *models.Principal) middleware.Responder + +// Handle executing the request and returning a response +func (fn ArnListHandlerFunc) Handle(params ArnListParams, principal *models.Principal) middleware.Responder { + return fn(params, principal) +} + +// ArnListHandler interface for that can handle valid arn list params +type ArnListHandler interface { + Handle(ArnListParams, *models.Principal) middleware.Responder +} + +// NewArnList creates a new http.Handler for the arn list operation +func NewArnList(ctx *middleware.Context, handler ArnListHandler) *ArnList { + return &ArnList{Context: ctx, Handler: handler} +} + +/*ArnList swagger:route GET /admin/arns AdminAPI arnList + +Returns a list of active ARNs in the instance + +*/ +type ArnList struct { + Context *middleware.Context + Handler ArnListHandler +} + +func (o *ArnList) ServeHTTP(rw http.ResponseWriter, r *http.Request) { + route, rCtx, _ := o.Context.RouteInfo(r) + if rCtx != nil { + r = rCtx + } + var Params = NewArnListParams() + + 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/admin_api/arn_list_parameters.go b/restapi/operations/admin_api/arn_list_parameters.go new file mode 100644 index 000000000..da403406e --- /dev/null +++ b/restapi/operations/admin_api/arn_list_parameters.go @@ -0,0 +1,62 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2020 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 admin_api + +// 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/middleware" +) + +// NewArnListParams creates a new ArnListParams object +// no default values defined in spec. +func NewArnListParams() ArnListParams { + + return ArnListParams{} +} + +// ArnListParams contains all the bound params for the arn list operation +// typically these are obtained from a http.Request +// +// swagger:parameters ArnList +type ArnListParams struct { + + // HTTP Request Object + HTTPRequest *http.Request `json:"-"` +} + +// 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 NewArnListParams() beforehand. +func (o *ArnListParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { + var res []error + + o.HTTPRequest = r + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/restapi/operations/admin_api/arn_list_responses.go b/restapi/operations/admin_api/arn_list_responses.go new file mode 100644 index 000000000..38b5f5bf7 --- /dev/null +++ b/restapi/operations/admin_api/arn_list_responses.go @@ -0,0 +1,133 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2020 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 admin_api + +// 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/m3/mcs/models" +) + +// ArnListOKCode is the HTTP code returned for type ArnListOK +const ArnListOKCode int = 200 + +/*ArnListOK A successful response. + +swagger:response arnListOK +*/ +type ArnListOK struct { + + /* + In: Body + */ + Payload *models.ArnsResponse `json:"body,omitempty"` +} + +// NewArnListOK creates ArnListOK with default headers values +func NewArnListOK() *ArnListOK { + + return &ArnListOK{} +} + +// WithPayload adds the payload to the arn list o k response +func (o *ArnListOK) WithPayload(payload *models.ArnsResponse) *ArnListOK { + o.Payload = payload + return o +} + +// SetPayload sets the payload to the arn list o k response +func (o *ArnListOK) SetPayload(payload *models.ArnsResponse) { + o.Payload = payload +} + +// WriteResponse to the client +func (o *ArnListOK) 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 + } + } +} + +/*ArnListDefault Generic error response. + +swagger:response arnListDefault +*/ +type ArnListDefault struct { + _statusCode int + + /* + In: Body + */ + Payload *models.Error `json:"body,omitempty"` +} + +// NewArnListDefault creates ArnListDefault with default headers values +func NewArnListDefault(code int) *ArnListDefault { + if code <= 0 { + code = 500 + } + + return &ArnListDefault{ + _statusCode: code, + } +} + +// WithStatusCode adds the status to the arn list default response +func (o *ArnListDefault) WithStatusCode(code int) *ArnListDefault { + o._statusCode = code + return o +} + +// SetStatusCode sets the status to the arn list default response +func (o *ArnListDefault) SetStatusCode(code int) { + o._statusCode = code +} + +// WithPayload adds the payload to the arn list default response +func (o *ArnListDefault) WithPayload(payload *models.Error) *ArnListDefault { + o.Payload = payload + return o +} + +// SetPayload sets the payload to the arn list default response +func (o *ArnListDefault) SetPayload(payload *models.Error) { + o.Payload = payload +} + +// WriteResponse to the client +func (o *ArnListDefault) 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/admin_api/arn_list_urlbuilder.go b/restapi/operations/admin_api/arn_list_urlbuilder.go new file mode 100644 index 000000000..595fffa54 --- /dev/null +++ b/restapi/operations/admin_api/arn_list_urlbuilder.go @@ -0,0 +1,104 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2020 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 admin_api + +// 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" +) + +// ArnListURL generates an URL for the arn list operation +type ArnListURL struct { + _basePath string +} + +// 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 *ArnListURL) WithBasePath(bp string) *ArnListURL { + 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 *ArnListURL) SetBasePath(bp string) { + o._basePath = bp +} + +// Build a url path and query string +func (o *ArnListURL) Build() (*url.URL, error) { + var _result url.URL + + var _path = "/admin/arns" + + _basePath := o._basePath + if _basePath == "" { + _basePath = "/api/v1" + } + _result.Path = golangswaggerpaths.Join(_basePath, _path) + + return &_result, nil +} + +// Must is a helper function to panic when the url builder returns an error +func (o *ArnListURL) 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 *ArnListURL) String() string { + return o.Must(o.Build()).String() +} + +// BuildFull builds a full url with scheme, host, path and query string +func (o *ArnListURL) BuildFull(scheme, host string) (*url.URL, error) { + if scheme == "" { + return nil, errors.New("scheme is required for a full url on ArnListURL") + } + if host == "" { + return nil, errors.New("host is required for a full url on ArnListURL") + } + + 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 *ArnListURL) StringFull(scheme, host string) string { + return o.Must(o.BuildFull(scheme, host)).String() +} diff --git a/restapi/operations/mcs_api.go b/restapi/operations/mcs_api.go index fcd932e81..cbfc53369 100644 --- a/restapi/operations/mcs_api.go +++ b/restapi/operations/mcs_api.go @@ -75,6 +75,9 @@ func NewMcsAPI(spec *loads.Document) *McsAPI { AdminAPIAdminInfoHandler: admin_api.AdminInfoHandlerFunc(func(params admin_api.AdminInfoParams, principal *models.Principal) middleware.Responder { return middleware.NotImplemented("operation admin_api.AdminInfo has not yet been implemented") }), + AdminAPIArnListHandler: admin_api.ArnListHandlerFunc(func(params admin_api.ArnListParams, principal *models.Principal) middleware.Responder { + return middleware.NotImplemented("operation admin_api.ArnList has not yet been implemented") + }), UserAPIBucketInfoHandler: user_api.BucketInfoHandlerFunc(func(params user_api.BucketInfoParams, principal *models.Principal) middleware.Responder { return middleware.NotImplemented("operation user_api.BucketInfo has not yet been implemented") }), @@ -207,6 +210,8 @@ type McsAPI struct { AdminAPIAddUserHandler admin_api.AddUserHandler // AdminAPIAdminInfoHandler sets the operation handler for the admin info operation AdminAPIAdminInfoHandler admin_api.AdminInfoHandler + // AdminAPIArnListHandler sets the operation handler for the arn list operation + AdminAPIArnListHandler admin_api.ArnListHandler // UserAPIBucketInfoHandler sets the operation handler for the bucket info operation UserAPIBucketInfoHandler user_api.BucketInfoHandler // UserAPIBucketSetPolicyHandler sets the operation handler for the bucket set policy operation @@ -342,6 +347,9 @@ func (o *McsAPI) Validate() error { if o.AdminAPIAdminInfoHandler == nil { unregistered = append(unregistered, "admin_api.AdminInfoHandler") } + if o.AdminAPIArnListHandler == nil { + unregistered = append(unregistered, "admin_api.ArnListHandler") + } if o.UserAPIBucketInfoHandler == nil { unregistered = append(unregistered, "user_api.BucketInfoHandler") } @@ -536,6 +544,10 @@ func (o *McsAPI) initHandlerCache() { if o.handlers["GET"] == nil { o.handlers["GET"] = make(map[string]http.Handler) } + o.handlers["GET"]["/admin/arns"] = admin_api.NewArnList(o.context, o.AdminAPIArnListHandler) + if o.handlers["GET"] == nil { + o.handlers["GET"] = make(map[string]http.Handler) + } o.handlers["GET"]["/buckets/{name}"] = user_api.NewBucketInfo(o.context, o.UserAPIBucketInfoHandler) if o.handlers["PUT"] == nil { o.handlers["PUT"] = make(map[string]http.Handler) diff --git a/swagger.yml b/swagger.yml index 8cb27dc31..43223ad5b 100644 --- a/swagger.yml +++ b/swagger.yml @@ -627,6 +627,21 @@ paths: $ref: "#/definitions/error" tags: - AdminAPI + /admin/arns: + get: + summary: Returns a list of active ARNs in the instance + operationId: ArnList + responses: + 200: + description: A successful response. + schema: + $ref: "#/definitions/arnsResponse" + default: + description: Generic error response. + schema: + $ref: "#/definitions/error" + tags: + - AdminAPI definitions: bucketAccess: type: string @@ -1000,3 +1015,10 @@ definitions: type: integer usage: type: integer + arnsResponse: + type: object + properties: + arns: + type: array + items: + type: string