get the proper magnet and infohash for upload
Cette révision appartient à :
Parent
4340579bcd
révision
eeab38b90d
2 fichiers modifiés avec 23 ajouts et 5 suppressions
|
@ -1,17 +1,22 @@
|
||||||
package router
|
package router
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/hex"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"github.com/ewhal/nyaa/util"
|
"github.com/ewhal/nyaa/util"
|
||||||
"github.com/ewhal/nyaa/util/metainfo"
|
"github.com/ewhal/nyaa/util/metainfo"
|
||||||
"github.com/zeebo/bencode"
|
"github.com/zeebo/bencode"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// UploadForm serializing HTTP form for torrent upload
|
// UploadForm serializing HTTP form for torrent upload
|
||||||
type UploadForm struct {
|
type UploadForm struct {
|
||||||
Name string
|
Name string
|
||||||
Magnet string
|
Magnet string
|
||||||
|
Infohash string
|
||||||
Category string
|
Category string
|
||||||
Description string
|
Description string
|
||||||
}
|
}
|
||||||
|
@ -85,8 +90,23 @@ func (f *UploadForm) ExtractInfo(r *http.Request) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// generate magnet
|
// generate magnet
|
||||||
f.Magnet = util.InfoHashToMagnet(torrent.Infohash(), f.Name)
|
binInfoHash := torrent.Infohash()
|
||||||
|
f.Infohash = hex.EncodeToString(binInfoHash[:])
|
||||||
|
f.Magnet = util.InfoHashToMagnet(f.Infohash, f.Name)
|
||||||
|
} else {
|
||||||
|
magnetUrl, parseErr := url.Parse(f.Magnet)
|
||||||
|
if parseErr != nil {
|
||||||
|
return metainfo.ErrInvalidTorrentFile
|
||||||
|
}
|
||||||
|
fmt.Println(magnetUrl)
|
||||||
|
exactTopic := magnetUrl.Query().Get("xt")
|
||||||
|
if !strings.HasPrefix(exactTopic, "urn:btih:") {
|
||||||
|
return metainfo.ErrInvalidTorrentFile
|
||||||
|
} else {
|
||||||
|
f.Infohash = strings.ToUpper(strings.TrimPrefix(exactTopic, "urn:btih:"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,13 @@
|
||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/hex"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/url"
|
"net/url"
|
||||||
)
|
)
|
||||||
|
|
||||||
// convert a binary infohash to a magnet uri given a display name and tracker urls
|
// convert a binary infohash to a magnet uri given a display name and tracker urls
|
||||||
func InfoHashToMagnet(ih [20]byte, name string, trackers ...url.URL) (str string) {
|
func InfoHashToMagnet(ih string, name string, trackers ...url.URL) (str string) {
|
||||||
str = hex.EncodeToString(ih[:])
|
str = fmt.Sprintf("magnet:?xt=urn:btih:%s", ih)
|
||||||
str = fmt.Sprintf("magnet:?xt=urn:btih:%s", str)
|
|
||||||
if len(name) > 0 {
|
if len(name) > 0 {
|
||||||
str += fmt.Sprintf("&dn=%s", name)
|
str += fmt.Sprintf("&dn=%s", name)
|
||||||
}
|
}
|
||||||
|
|
Référencer dans un nouveau ticket