serve s3: fix Last-Modified timestamp

This had two problems

1. It was using a single digit for day of month
2. It is supposed to be in UTC

Fixes #8277
This commit is contained in:
Nick Craig-Wood 2024-12-28 17:08:30 +00:00
parent d6f0d1d349
commit a389a2979b

View File

@ -9,6 +9,7 @@ import (
"path" "path"
"strings" "strings"
"sync" "sync"
"time"
"github.com/ncw/swift/v2" "github.com/ncw/swift/v2"
"github.com/rclone/gofakes3" "github.com/rclone/gofakes3"
@ -18,7 +19,6 @@ import (
var ( var (
emptyPrefix = &gofakes3.Prefix{} emptyPrefix = &gofakes3.Prefix{}
timeFormat = "Mon, 2 Jan 2006 15:04:05 GMT"
) )
// s3Backend implements the gofacess3.Backend interface to make an S3 // s3Backend implements the gofacess3.Backend interface to make an S3
@ -98,6 +98,13 @@ func (b *s3Backend) ListBucket(ctx context.Context, bucket string, prefix *gofak
return b.pager(response, page) return b.pager(response, page)
} }
// formatHeaderTime makes an timestamp which is the same as that used by AWS.
//
// This is like RFC1123 always in UTC, but has GMT instead of UTC
func formatHeaderTime(t time.Time) string {
return t.UTC().Format("Mon, 02 Jan 2006 15:04:05") + " GMT"
}
// HeadObject returns the fileinfo for the given object name. // HeadObject returns the fileinfo for the given object name.
// //
// Note that the metadata is not supported yet. // Note that the metadata is not supported yet.
@ -131,7 +138,7 @@ func (b *s3Backend) HeadObject(ctx context.Context, bucketName, objectName strin
hash := getFileHashByte(fobj) hash := getFileHashByte(fobj)
meta := map[string]string{ meta := map[string]string{
"Last-Modified": node.ModTime().Format(timeFormat), "Last-Modified": formatHeaderTime(node.ModTime()),
"Content-Type": fs.MimeType(context.Background(), fobj), "Content-Type": fs.MimeType(context.Background(), fobj),
} }
@ -208,7 +215,7 @@ func (b *s3Backend) GetObject(ctx context.Context, bucketName, objectName string
} }
meta := map[string]string{ meta := map[string]string{
"Last-Modified": node.ModTime().Format(timeFormat), "Last-Modified": formatHeaderTime(node.ModTime()),
"Content-Type": fs.MimeType(context.Background(), fobj), "Content-Type": fs.MimeType(context.Background(), fobj),
} }