mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-29 07:22:24 -05:00
[chore] move s3 storage key prefixing into the storage library itself (#4246)
This is just a useful feature that it seemed more semantically correct to have in the storage library itself! Still, thank you to @vdyotte for the original change :) Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4246 Co-authored-by: kim <grufwub@gmail.com> Co-committed-by: kim <grufwub@gmail.com>
This commit is contained in:
parent
77eddea3af
commit
b13a6437ff
6 changed files with 79 additions and 34 deletions
|
|
@ -78,32 +78,28 @@ type Driver struct {
|
|||
// S3-only parameters
|
||||
Proxy bool
|
||||
Bucket string
|
||||
KeyPrefix string
|
||||
PresignedCache *ttl.Cache[string, PresignedURL]
|
||||
RedirectURL string
|
||||
}
|
||||
|
||||
// Get returns the byte value for key in storage.
|
||||
func (d *Driver) Get(ctx context.Context, key string) ([]byte, error) {
|
||||
key = d.KeyPrefix + key
|
||||
return d.Storage.ReadBytes(ctx, key)
|
||||
}
|
||||
|
||||
// GetStream returns an io.ReadCloser for the value bytes at key in the storage.
|
||||
func (d *Driver) GetStream(ctx context.Context, key string) (io.ReadCloser, error) {
|
||||
key = d.KeyPrefix + key
|
||||
return d.Storage.ReadStream(ctx, key)
|
||||
}
|
||||
|
||||
// Put writes the supplied value bytes at key in the storage
|
||||
func (d *Driver) Put(ctx context.Context, key string, value []byte) (int, error) {
|
||||
key = d.KeyPrefix + key
|
||||
return d.Storage.WriteBytes(ctx, key, value)
|
||||
}
|
||||
|
||||
// PutFile moves the contents of file at path, to storage.Driver{} under given key (with content-type if supported).
|
||||
func (d *Driver) PutFile(ctx context.Context, key, filepath, contentType string) (int64, error) {
|
||||
key = d.KeyPrefix + key
|
||||
|
||||
// Open file at path for reading.
|
||||
file, err := os.Open(filepath)
|
||||
if err != nil {
|
||||
|
|
@ -149,13 +145,11 @@ func (d *Driver) PutFile(ctx context.Context, key, filepath, contentType string)
|
|||
|
||||
// Delete attempts to remove the supplied key (and corresponding value) from storage.
|
||||
func (d *Driver) Delete(ctx context.Context, key string) error {
|
||||
key = d.KeyPrefix + key
|
||||
return d.Storage.Remove(ctx, key)
|
||||
}
|
||||
|
||||
// Has checks if the supplied key is in the storage.
|
||||
func (d *Driver) Has(ctx context.Context, key string) (bool, error) {
|
||||
key = d.KeyPrefix + key
|
||||
stat, err := d.Storage.Stat(ctx, key)
|
||||
return (stat != nil), err
|
||||
}
|
||||
|
|
@ -163,7 +157,6 @@ func (d *Driver) Has(ctx context.Context, key string) (bool, error) {
|
|||
// WalkKeys walks the keys in the storage.
|
||||
func (d *Driver) WalkKeys(ctx context.Context, walk func(string) error) error {
|
||||
return d.Storage.WalkKeys(ctx, storage.WalkKeysOpts{
|
||||
Prefix: d.KeyPrefix,
|
||||
Step: func(entry storage.Entry) error {
|
||||
return walk(entry.Key)
|
||||
},
|
||||
|
|
@ -172,7 +165,7 @@ func (d *Driver) WalkKeys(ctx context.Context, walk func(string) error) error {
|
|||
|
||||
// URL will return a presigned GET object URL, but only if running on S3 storage with proxying disabled.
|
||||
func (d *Driver) URL(ctx context.Context, key string) *PresignedURL {
|
||||
key = d.KeyPrefix + key
|
||||
|
||||
// Check whether S3 *without* proxying is enabled
|
||||
s3, ok := d.Storage.(*s3.S3Storage)
|
||||
if !ok || d.Proxy {
|
||||
|
|
@ -339,6 +332,7 @@ func NewS3Storage() (*Driver, error) {
|
|||
|
||||
// Open the s3 storage implementation
|
||||
s3, err := s3.Open(endpoint, bucket, &s3.Config{
|
||||
KeyPrefix: config.GetStorageS3KeyPrefix(),
|
||||
CoreOpts: minio.Options{
|
||||
Creds: credentials.NewStaticV4(access, secret, ""),
|
||||
Secure: secure,
|
||||
|
|
@ -358,7 +352,6 @@ func NewS3Storage() (*Driver, error) {
|
|||
return &Driver{
|
||||
Proxy: config.GetStorageS3Proxy(),
|
||||
Bucket: config.GetStorageS3BucketName(),
|
||||
KeyPrefix: config.GetStorageS3KeyPrefix(),
|
||||
Storage: s3,
|
||||
PresignedCache: presignedCache,
|
||||
RedirectURL: redirectURL,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue