mirror of
https://github.com/SinTan1729/privtracker.git
synced 2024-12-25 06:58:37 -06:00
handlers in separate files
This commit is contained in:
parent
d9d8470b3a
commit
11533d617c
3 changed files with 107 additions and 96 deletions
69
annnounce.go
Normal file
69
annnounce.go
Normal file
|
@ -0,0 +1,69 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/jackpal/bencode-go"
|
||||
)
|
||||
|
||||
type AnnounceRequest struct {
|
||||
InfoHash string `query:"info_hash"`
|
||||
PeerID string `query:"peer_id"`
|
||||
IP string `query:"ip"`
|
||||
Port uint16 `query:"port"`
|
||||
Uploaded uint `query:"uploaded"`
|
||||
Downloaded uint `query:"downloaded"`
|
||||
Left uint `query:"left"`
|
||||
Numwant uint `query:"numwant"`
|
||||
Key string `query:"key"`
|
||||
Compact bool `query:"compact"`
|
||||
SupportCrypto bool `query:"supportcrypto"`
|
||||
Event string `query:"event"`
|
||||
}
|
||||
|
||||
func (req *AnnounceRequest) IsSeeding() bool {
|
||||
return req.Left == 0
|
||||
}
|
||||
|
||||
type AnnounceResponse struct {
|
||||
Interval int `bencode:"interval"`
|
||||
Complete int `bencode:"complete"`
|
||||
Incomplete int `bencode:"incomplete"`
|
||||
Peers []byte `bencode:"peers"`
|
||||
PeersIPv6 []byte `bencode:"peers_ipv6"`
|
||||
}
|
||||
|
||||
func announce(c *fiber.Ctx) error {
|
||||
var req AnnounceRequest
|
||||
err := c.QueryParser(&req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
req.IP = c.IP()
|
||||
if req.Numwant == 0 {
|
||||
req.Numwant = 30
|
||||
}
|
||||
switch req.Event {
|
||||
case "stopped":
|
||||
DeletePeer(c.Params("room"), req.InfoHash, req.IP, req.Port)
|
||||
case "completed":
|
||||
GraduateLeecher(c.Params("room"), req.InfoHash, req.IP, req.Port)
|
||||
default:
|
||||
PutPeer(c.Params("room"), req.InfoHash, req.IP, req.Port, req.IsSeeding())
|
||||
}
|
||||
peersIPv4, peersIPv6, numSeeders, numLeechers := GetPeers(c.Params("room"), req.InfoHash, req.IP, req.Port, req.IsSeeding(), req.Numwant)
|
||||
interval := 120
|
||||
if numSeeders == 0 {
|
||||
interval /= 2
|
||||
} else if numLeechers == 0 {
|
||||
interval *= 2
|
||||
}
|
||||
resp := AnnounceResponse{
|
||||
Interval: interval,
|
||||
Complete: numSeeders,
|
||||
Incomplete: numLeechers,
|
||||
Peers: peersIPv4,
|
||||
PeersIPv6: peersIPv6,
|
||||
}
|
||||
defer c.Response().SetConnectionClose()
|
||||
return bencode.Marshal(c, resp)
|
||||
}
|
96
main.go
96
main.go
|
@ -13,7 +13,6 @@ import (
|
|||
"github.com/gofiber/fiber/v2/middleware/logger"
|
||||
"github.com/gofiber/fiber/v2/middleware/monitor"
|
||||
"github.com/gofiber/fiber/v2/middleware/recover"
|
||||
"github.com/jackpal/bencode-go"
|
||||
"golang.org/x/crypto/acme/autocert"
|
||||
)
|
||||
|
||||
|
@ -118,98 +117,3 @@ func docs(c *fiber.Ctx) error {
|
|||
}
|
||||
return c.Next()
|
||||
}
|
||||
|
||||
type AnnounceRequest struct {
|
||||
InfoHash string `query:"info_hash"`
|
||||
PeerID string `query:"peer_id"`
|
||||
IP string `query:"ip"`
|
||||
Port uint16 `query:"port"`
|
||||
Uploaded uint `query:"uploaded"`
|
||||
Downloaded uint `query:"downloaded"`
|
||||
Left uint `query:"left"`
|
||||
Numwant uint `query:"numwant"`
|
||||
Key string `query:"key"`
|
||||
Compact bool `query:"compact"`
|
||||
SupportCrypto bool `query:"supportcrypto"`
|
||||
Event string `query:"event"`
|
||||
}
|
||||
|
||||
func (req *AnnounceRequest) IsSeeding() bool {
|
||||
return req.Left == 0
|
||||
}
|
||||
|
||||
type AnnounceResponse struct {
|
||||
Interval int `bencode:"interval"`
|
||||
Complete int `bencode:"complete"`
|
||||
Incomplete int `bencode:"incomplete"`
|
||||
Peers []byte `bencode:"peers"`
|
||||
PeersIPv6 []byte `bencode:"peers_ipv6"`
|
||||
}
|
||||
|
||||
func announce(c *fiber.Ctx) error {
|
||||
var req AnnounceRequest
|
||||
err := c.QueryParser(&req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
req.IP = c.IP()
|
||||
if req.Numwant == 0 {
|
||||
req.Numwant = 30
|
||||
}
|
||||
switch req.Event {
|
||||
case "stopped":
|
||||
DeletePeer(c.Params("room"), req.InfoHash, req.IP, req.Port)
|
||||
case "completed":
|
||||
GraduateLeecher(c.Params("room"), req.InfoHash, req.IP, req.Port)
|
||||
default:
|
||||
PutPeer(c.Params("room"), req.InfoHash, req.IP, req.Port, req.IsSeeding())
|
||||
}
|
||||
peersIPv4, peersIPv6, numSeeders, numLeechers := GetPeers(c.Params("room"), req.InfoHash, req.IP, req.Port, req.IsSeeding(), req.Numwant)
|
||||
interval := 120
|
||||
if numSeeders == 0 {
|
||||
interval /= 2
|
||||
} else if numLeechers == 0 {
|
||||
interval *= 2
|
||||
}
|
||||
resp := AnnounceResponse{
|
||||
Interval: interval,
|
||||
Complete: numSeeders,
|
||||
Incomplete: numLeechers,
|
||||
Peers: peersIPv4,
|
||||
PeersIPv6: peersIPv6,
|
||||
}
|
||||
defer c.Response().SetConnectionClose()
|
||||
return bencode.Marshal(c, resp)
|
||||
}
|
||||
|
||||
type ScrapeRequest struct {
|
||||
InfoHash string `query:"info_hash"`
|
||||
}
|
||||
|
||||
type ScrapeResponse struct {
|
||||
Files map[string]Stat `bencode:"files"`
|
||||
}
|
||||
|
||||
type Stat struct {
|
||||
Complete int `bencode:"complete"`
|
||||
Incomplete int `bencode:"incomplete"`
|
||||
// Downloaded uint `bencode:"downloaded"`
|
||||
}
|
||||
|
||||
func scrape(c *fiber.Ctx) error {
|
||||
var req ScrapeRequest
|
||||
err := c.QueryParser(&req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
numSeeders, numLeechers := GetStats(c.Params("room"), req.InfoHash)
|
||||
resp := ScrapeResponse{
|
||||
Files: map[string]Stat{
|
||||
req.InfoHash: {
|
||||
Complete: numSeeders,
|
||||
Incomplete: numLeechers,
|
||||
},
|
||||
},
|
||||
}
|
||||
return bencode.Marshal(c, resp)
|
||||
}
|
||||
|
|
38
scrape.go
Normal file
38
scrape.go
Normal file
|
@ -0,0 +1,38 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/jackpal/bencode-go"
|
||||
)
|
||||
|
||||
type ScrapeRequest struct {
|
||||
InfoHash string `query:"info_hash"`
|
||||
}
|
||||
|
||||
type ScrapeResponse struct {
|
||||
Files map[string]Stat `bencode:"files"`
|
||||
}
|
||||
|
||||
type Stat struct {
|
||||
Complete int `bencode:"complete"`
|
||||
Incomplete int `bencode:"incomplete"`
|
||||
// Downloaded uint `bencode:"downloaded"`
|
||||
}
|
||||
|
||||
func scrape(c *fiber.Ctx) error {
|
||||
var req ScrapeRequest
|
||||
err := c.QueryParser(&req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
numSeeders, numLeechers := GetStats(c.Params("room"), req.InfoHash)
|
||||
resp := ScrapeResponse{
|
||||
Files: map[string]Stat{
|
||||
req.InfoHash: {
|
||||
Complete: numSeeders,
|
||||
Incomplete: numLeechers,
|
||||
},
|
||||
},
|
||||
}
|
||||
return bencode.Marshal(c, resp)
|
||||
}
|
Loading…
Reference in a new issue