From 12a595ed749a21d62514402316202d298b139b59 Mon Sep 17 00:00:00 2001 From: Nugraha Date: Mon, 9 Jan 2023 13:14:19 +0700 Subject: [PATCH] all: option to remove bucket name from prefix default value for option to remove bucket name is `false` --- main.go | 1 + obs.go | 13 +++++++++++-- server_s3.go | 8 +++++--- server_storj.go | 8 +++++--- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/main.go b/main.go index d092af6..8b07cf4 100644 --- a/main.go +++ b/main.go @@ -117,6 +117,7 @@ func main() { "server_mode", serverMode, // Generic OBS "obs_bucket", defaultObsOpts.BucketName, + "obs_remove_bucket_name", defaultObsOpts.RemoveBucketName, "obs_redirect_secure", defaultObsOpts.RedirectSecure, "obs_host_redirect", defaultObsOpts.HostRedirect, "obs_redirect_code", defaultObsOpts.RedirectCode, diff --git a/obs.go b/obs.go index fa72375..2b2401f 100644 --- a/obs.go +++ b/obs.go @@ -16,11 +16,14 @@ type obsOptions struct { RedirectCode int // HTTP redirect status code URLExpiry time.Duration HostRedirect string + + RemoveBucketName bool } var defaultObsOpts = obsOptions{ - URLExpiry: maxURLExpiry, - RedirectCode: http.StatusMovedPermanently, // 301 + URLExpiry: maxURLExpiry, + RedirectCode: http.StatusMovedPermanently, // 301 + RemoveBucketName: false, } func (opts *obsOptions) Bind(fs *flag.FlagSet) (err error) { @@ -64,5 +67,11 @@ func (opts *obsOptions) Bind(fs *flag.FlagSet) (err error) { vObsUrlExpiry = obsUrlExpiry } fs.DurationVar(&opts.URLExpiry, "obs-url-expiry", vObsUrlExpiry, "OBS Redirection URL expiry") + + var vObsRemoveBucketName = opts.RemoveBucketName + if sObsRemoveBucketName := os.Getenv("OBS_REMOVE_BUCKET_NAME"); sObsRemoveBucketName != "" { + vObsRemoveBucketName, _ = strconv.ParseBool(sObsRemoveBucketName) + } + fs.BoolVar(&opts.RemoveBucketName, "obs-remove-bucket-name", vObsRemoveBucketName, "OBS Remove Bucket name from prefix") return } diff --git a/server_s3.go b/server_s3.go index be8d46e..5048c95 100644 --- a/server_s3.go +++ b/server_s3.go @@ -73,9 +73,11 @@ func (s *serverS3) handle(ctx *fasthttp.RequestCtx) { path := ctx.Path() _path := bytes.TrimLeft(path, "/") - if _, _pathWithoutBucketName, found := bytes.Cut(_path, []byte(`/`)); found { - // no need to check `isVirtualHostStyle` since this is our own implementation of handling request URI - _path = _pathWithoutBucketName + if s.opts.RemoveBucketName { + if _, _pathWithoutBucketName, found := bytes.Cut(_path, []byte(`/`)); found { + // no need to check `isVirtualHostStyle` since this is our own implementation of handling request URI + _path = _pathWithoutBucketName + } } objectName := unsafeByteSliceToString(_path) diff --git a/server_storj.go b/server_storj.go index 225f789..41359a2 100644 --- a/server_storj.go +++ b/server_storj.go @@ -62,9 +62,11 @@ func (s *serverStorj) handle(ctx *fasthttp.RequestCtx) { bucketName := s.opts.BucketName path := ctx.Path() _path := bytes.TrimLeft(path, "/") - if _, _pathWithoutBucketName, found := bytes.Cut(_path, []byte(`/`)); found { - // no need to check `isVirtualHostStyle` since this is our own implementation of handling request URI - _path = _pathWithoutBucketName + if s.opts.RemoveBucketName { + if _, _pathWithoutBucketName, found := bytes.Cut(_path, []byte(`/`)); found { + // no need to check `isVirtualHostStyle` since this is our own implementation of handling request URI + _path = _pathWithoutBucketName + } } objectName := unsafeByteSliceToString(_path)