summaryrefslogtreecommitdiffstats
path: root/roseh.moe.go
diff options
context:
space:
mode:
Diffstat (limited to 'roseh.moe.go')
-rw-r--r--roseh.moe.go12
1 files changed, 12 insertions, 0 deletions
diff --git a/roseh.moe.go b/roseh.moe.go
index 59878c4..02428f3 100644
--- a/roseh.moe.go
+++ b/roseh.moe.go
@@ -261,6 +261,12 @@ func writeHoleFile(part *multipart.Part) (string, error) {
return hole, f.Close()
}
+func decryptedSize(size int64) int64 {
+ size -= 32
+ segments := (size + (blockSize - 1)) / blockSize
+ return size - segments*16
+}
+
var errNoHole = errors.New("no such hole")
func readHoleFile(w http.ResponseWriter, hole string) error {
@@ -277,6 +283,10 @@ func readHoleFile(w http.ResponseWriter, hole string) error {
return err
}
defer f.Close()
+ stat, err := f.Stat()
+ if err != nil {
+ return err
+ }
r := oae2.NewReader(f, encryptionKey, blockSize)
buf := make([]byte, 8)
if _, err := io.ReadFull(r, buf); err != nil {
@@ -289,6 +299,8 @@ func readHoleFile(w http.ResponseWriter, hole string) error {
}
fileName := string(buf)
w.Header().Set("Content-Disposition", "attachment; filename*=UTF-8''"+fileName)
+ fileSize := decryptedSize(stat.Size()) - 8 - int64(fileNameLen)
+ w.Header().Set("Content-Length", strconv.FormatInt(fileSize, 10))
_, err = io.Copy(w, r)
return err
}