diff --git a/pkg/download/handler.go b/pkg/download/handler.go index cdbc4ab9..70652313 100644 --- a/pkg/download/handler.go +++ b/pkg/download/handler.go @@ -55,8 +55,11 @@ func RegisterHandlers(r *mux.Router, opts *HandlerOpts) { r.Handle(PathVersionZip, LogEntryHandler(ZipHandler, opts)).Methods(http.MethodGet) } -func getRedirectURL(base, path string) string { - url, _ := url.Parse(base) +func getRedirectURL(base, path string) (string, error) { + url, err := url.Parse(base) + if err != nil { + return "", err + } url.Path = path - return url.String() + return url.String(), nil } diff --git a/pkg/download/version_info.go b/pkg/download/version_info.go index 7b9ea857..b0dd802e 100644 --- a/pkg/download/version_info.go +++ b/pkg/download/version_info.go @@ -26,7 +26,13 @@ func InfoHandler(dp Protocol, lggr log.Entry, df *mode.DownloadFile) http.Handle severityLevel := errors.Expect(err, errors.KindNotFound, errors.KindRedirect) lggr.SystemErr(errors.E(op, err, errors.M(mod), errors.V(ver), severityLevel)) if errors.Kind(err) == errors.KindRedirect { - http.Redirect(w, r, getRedirectURL(df.URL(mod), r.URL.Path), errors.KindRedirect) + url, err := getRedirectURL(df.URL(mod), r.URL.Path) + if err != nil { + lggr.SystemErr(err) + w.WriteHeader(errors.Kind(err)) + return + } + http.Redirect(w, r, url, errors.KindRedirect) return } w.WriteHeader(errors.Kind(err)) diff --git a/pkg/download/version_module.go b/pkg/download/version_module.go index 67e5a238..46806894 100644 --- a/pkg/download/version_module.go +++ b/pkg/download/version_module.go @@ -28,7 +28,14 @@ func ModuleHandler(dp Protocol, lggr log.Entry, df *mode.DownloadFile) http.Hand err = errors.E(op, err, severityLevel) lggr.SystemErr(err) if errors.Kind(err) == errors.KindRedirect { - http.Redirect(w, r, getRedirectURL(df.URL(mod), r.URL.Path), errors.KindRedirect) + url, err := getRedirectURL(df.URL(mod), r.URL.Path) + if err != nil { + err = errors.E(op, errors.M(mod), errors.V(ver), err) + lggr.SystemErr(err) + w.WriteHeader(errors.Kind(err)) + return + } + http.Redirect(w, r, url, errors.KindRedirect) return } w.WriteHeader(errors.Kind(err)) diff --git a/pkg/download/version_zip.go b/pkg/download/version_zip.go index c0dcf1d7..f3f650dc 100644 --- a/pkg/download/version_zip.go +++ b/pkg/download/version_zip.go @@ -28,7 +28,13 @@ func ZipHandler(dp Protocol, lggr log.Entry, df *mode.DownloadFile) http.Handler err = errors.E(op, err, severityLevel) lggr.SystemErr(err) if errors.Kind(err) == errors.KindRedirect { - http.Redirect(w, r, getRedirectURL(df.URL(mod), r.URL.Path), errors.KindRedirect) + url, err := getRedirectURL(df.URL(mod), r.URL.Path) + if err != nil { + lggr.SystemErr(err) + w.WriteHeader(errors.Kind(err)) + return + } + http.Redirect(w, r, url, errors.KindRedirect) return } w.WriteHeader(errors.Kind(err)) diff --git a/pkg/storage/fs/cataloger.go b/pkg/storage/fs/cataloger.go index a1c3e1d6..368f73cf 100644 --- a/pkg/storage/fs/cataloger.go +++ b/pkg/storage/fs/cataloger.go @@ -60,6 +60,9 @@ func (s *storageImpl) Catalog(ctx context.Context, token string, pageSize int) ( } return nil }) + if err != nil && err != io.EOF { + return nil, "", errors.E(op, err, errors.KindUnexpected) + } return res, resToken, nil } diff --git a/pkg/storage/minio/minio.go b/pkg/storage/minio/minio.go index dddb274a..03d699ef 100644 --- a/pkg/storage/minio/minio.go +++ b/pkg/storage/minio/minio.go @@ -31,6 +31,9 @@ func NewStorage(conf *config.MinioConfig, timeout time.Duration) (storage.Backen region := conf.Region useSSL := conf.EnableSSL minioCore, err := minio.NewCore(endpoint, accessKeyID, secretAccessKey, useSSL) + if err != nil { + return nil, errors.E(op, err) + } minioClient, err := minio.New(endpoint, accessKeyID, secretAccessKey, useSSL) if err != nil { return nil, errors.E(op, err) @@ -39,7 +42,10 @@ func NewStorage(conf *config.MinioConfig, timeout time.Duration) (storage.Backen err = minioClient.MakeBucket(bucketName, region) if err != nil { // Check to see if we already own this bucket - exists, _ := minioClient.BucketExists(bucketName) + exists, err := minioClient.BucketExists(bucketName) + if err != nil { + return nil, errors.E(op, err) + } if !exists { // MakeBucket Error takes priority return nil, errors.E(op, err)