1// Copyright (C) 2020 Storj Labs, Inc. 2// See LICENSE for copying information. 3 4package consoleapi 5 6import ( 7 "encoding/json" 8 "net/http" 9 10 "github.com/zeebo/errs" 11 "go.uber.org/zap" 12 13 "storj.io/common/uuid" 14 "storj.io/storj/satellite/console" 15) 16 17var ( 18 // ErrBucketsAPI - console buckets api error type. 19 ErrBucketsAPI = errs.Class("console api buckets") 20) 21 22// Buckets is an api controller that exposes all buckets related functionality. 23type Buckets struct { 24 log *zap.Logger 25 service *console.Service 26} 27 28// NewBuckets is a constructor for api buckets controller. 29func NewBuckets(log *zap.Logger, service *console.Service) *Buckets { 30 return &Buckets{ 31 log: log, 32 service: service, 33 } 34} 35 36// AllBucketNames returns all bucket names for a specific project. 37func (b *Buckets) AllBucketNames(w http.ResponseWriter, r *http.Request) { 38 ctx := r.Context() 39 var err error 40 defer mon.Task()(&ctx)(&err) 41 42 w.Header().Set("Content-Type", "application/json") 43 44 projectIDString := r.URL.Query().Get("projectID") 45 46 projectID, err := uuid.FromString(projectIDString) 47 if err != nil { 48 b.serveJSONError(w, http.StatusInternalServerError, err) 49 return 50 } 51 52 bucketNames, err := b.service.GetAllBucketNames(ctx, projectID) 53 if err != nil { 54 if console.ErrUnauthorized.Has(err) { 55 b.serveJSONError(w, http.StatusUnauthorized, err) 56 return 57 } 58 59 b.serveJSONError(w, http.StatusInternalServerError, err) 60 return 61 } 62 63 err = json.NewEncoder(w).Encode(bucketNames) 64 if err != nil { 65 b.log.Error("failed to write json all bucket names response", zap.Error(ErrBucketsAPI.Wrap(err))) 66 } 67} 68 69// serveJSONError writes JSON error to response output stream. 70func (b *Buckets) serveJSONError(w http.ResponseWriter, status int, err error) { 71 serveJSONError(b.log, w, status, err) 72} 73