Albirew/nyaa-pantsu
Archivé
1
0
Bifurcation 0
Ce dépôt a été archivé le 2022-05-07. Vous pouvez voir ses fichiers ou le cloner, mais pas ouvrir de ticket ou de demandes d'ajout, ni soumettre de changements.
nyaa-pantsu/controllers/torrent/download.go
kilo a78f4117c3 "Torrent file not found" page (#1503)
* Add torrent file missing page instead of old 404

* Make download.go redirect to file missing page instead of 404

* Add files via upload

* Update translation changelog

* add translation string for "torrent file not found" page

* Forgot to create variables

* import templates
2017-09-06 08:20:24 +02:00

56 lignes
1,6 Kio
Go

package torrentController
import (
"fmt"
"io"
"os"
"strconv"
"github.com/NyaaPantsu/nyaa/config"
"github.com/NyaaPantsu/nyaa/templates"
"github.com/NyaaPantsu/nyaa/models/torrents"
"github.com/gin-gonic/gin"
)
// DownloadTorrent : Controller for downloading a torrent
func DownloadTorrent(c *gin.Context) {
hash := c.Param("hash")
if hash == "" && len(config.Get().Torrents.FileStorage) == 0 {
//File not found, send 404
variables := templates.Commonvariables(c)
templates.Render(c, "errors/torrent_file_missing.jet.html", variables)
return
}
//Check if file exists and open
Openfile, err := os.Open(fmt.Sprintf("%s%c%s.torrent", config.Get().Torrents.FileStorage, os.PathSeparator, hash))
if err != nil {
//File not found, send 404
variables := templates.Commonvariables(c)
templates.Render(c, "errors/torrent_file_missing.jet.html", variables)
return
}
defer Openfile.Close() //Close after function return
//Get the file size
FileStat, _ := Openfile.Stat() //Get info from file
FileSize := strconv.FormatInt(FileStat.Size(), 10) //Get file size as a string
torrent, err := torrents.FindRawByHash(hash)
if err != nil {
//File not found, send 404
variables := templates.Commonvariables(c)
templates.Render(c, "errors/torrent_file_missing.jet.html", variables)
return
}
c.Header("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s.torrent\"", torrent.Name))
c.Header("Content-Type", "application/x-bittorrent")
c.Header("Content-Length", FileSize)
//Send the file
// We reset the offset to 0
Openfile.Seek(0, 0)
io.Copy(c.Writer, Openfile) //'Copy' the file to the client
}