From 8ddfedb5f6acf2eb66fd34d99e1834ccf4abff1c Mon Sep 17 00:00:00 2001 From: Giuseppe Lo Presti Date: Thu, 27 Jul 2023 14:04:53 +0200 Subject: [PATCH] archiver: allow to override the archive type via query parameter --- internal/http/services/archiver/handler.go | 29 ++++++++++++++++------ 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/internal/http/services/archiver/handler.go b/internal/http/services/archiver/handler.go index 4ca94eb2308..2a267eeaae9 100644 --- a/internal/http/services/archiver/handler.go +++ b/internal/http/services/archiver/handler.go @@ -23,6 +23,7 @@ import ( "errors" "fmt" "net/http" + "path/filepath" "regexp" "time" @@ -102,7 +103,7 @@ func New(ctx context.Context, conf map[string]interface{}) (global.Service, erro func (c *Config) ApplyDefaults() { if c.Prefix == "" { - c.Prefix = "download_archive" + c.Prefix = "archiver" } if c.Name == "" { @@ -229,13 +230,27 @@ func (s *svc) Handler() http.Handler { return } - userAgent := ua.Parse(r.Header.Get("User-Agent")) + archTypeParams, ok := v["arch_type"] // optional, either "tar" or "zip" + var archType string + if ok { + archType = archTypeParams[0] + } + if !ok || archType != "tar" && archType != "zip" { + // in case of missing or bogus arch_type, detect it via user-agent + userAgent := ua.Parse(r.Header.Get("User-Agent")) + if userAgent.OS == ua.Windows { + archType = "zip" + } else { + archType = "tar" + } + } - archName := s.config.Name - if userAgent.OS == ua.Windows { - archName += ".zip" + var archName string + if len(files) == 1 { + archName = filepath.Base(files[0]) + "." + archType } else { - archName += ".tar" + // TODO(lopresti) we may want to generate a meaningful name out of the list + archName = s.config.Name + "." + archType } log.Debug().Msg("Requested the following files/folders to archive: " + render.Render(files)) @@ -244,7 +259,7 @@ func (s *svc) Handler() http.Handler { rw.Header().Set("Content-Transfer-Encoding", "binary") // create the archive - if userAgent.OS == ua.Windows { + if archType == "zip" { err = arch.CreateZip(ctx, rw) } else { err = arch.CreateTar(ctx, rw)