// Copyright 2020 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. package storage import ( "fmt" "io" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/obs" "code.gitea.io/gitea/modules/setting" ) const ( MinioStorageType = "minio" LocalStorageType = "local" ) // ObjectStorage represents an object storage to handle a bucket and files type ObjectStorage interface { Save(path string, r io.Reader) (int64, error) Open(path string) (io.ReadCloser, error) DownloadAFile(bucket string, objectName string) (io.ReadCloser, error) Delete(path string) error DeleteDir(dir string) error PresignedGetURL(path string, fileName string) (string, error) PresignedPutURL(path string) (string, error) HasObject(path string) (bool, error) UploadObject(fileName, filePath string) error } // Copy copys a file from source ObjectStorage to dest ObjectStorage func Copy(dstStorage ObjectStorage, dstPath string, srcStorage ObjectStorage, srcPath string) (int64, error) { f, err := srcStorage.Open(srcPath) if err != nil { return 0, err } defer f.Close() return dstStorage.Save(dstPath, f) } var ( // Attachments represents attachments storage Attachments ObjectStorage ObsCli *obs.ObsClient ) // Init init the stoarge func Init() error { var err error switch setting.Attachment.StoreType { case LocalStorageType: Attachments, err = NewLocalStorage(setting.Attachment.Path) log.Info("local storage inited.") case MinioStorageType: minio := setting.Attachment.Minio Attachments, err = NewMinioStorage( minio.Endpoint, minio.AccessKeyID, minio.SecretAccessKey, minio.Bucket, minio.Location, minio.BasePath, minio.UseSSL, ) log.Info("minio storage inited.") default: return fmt.Errorf("Unsupported attachment store type: %s", setting.Attachment.StoreType) } ObsCli, err = obs.New(setting.AccessKeyID, setting.SecretAccessKey, setting.Endpoint) if err != nil { log.Error("obs.New failed:", err) return err } log.Info("obs cli inited.") if err != nil { return err } return nil }