initial commit

This commit is contained in:
idk
2020-09-12 09:59:22 -04:00
commit b12e5c05db
5 changed files with 189 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
tracker/keys.i2pkeys
tracker/tracker

13
go.mod Normal file
View File

@ -0,0 +1,13 @@
module github.com/eyedeekay/tracker
go 1.14
require (
github.com/eyedeekay/sam3 v0.32.3
github.com/gorilla/websocket v1.4.2
github.com/justinas/alice v1.2.0
github.com/vvampirius/retracker v0.0.0-20171226134001-fdbec17ad537
github.com/zeebo/bencode v1.0.0 // indirect
)
replace github.com/vvampirius/retracker v0.0.0-20171226134001-fdbec17ad537 => github.com/eyedeekay/retracker v0.0.0-20191208024817-1068d9dccb6d

13
go.sum Normal file
View File

@ -0,0 +1,13 @@
github.com/eyedeekay/retracker v0.0.0-20191208024817-1068d9dccb6d h1:OrYEqYkav2QZdBSwXQ8iqsnbZv0KQkWXbnCl7WZsH4c=
github.com/eyedeekay/retracker v0.0.0-20191208024817-1068d9dccb6d/go.mod h1:YCuBD/+cyrDyP54x/snTfObZgpjJ61TVRG1r5mEov+w=
github.com/eyedeekay/sam3 v0.32.3 h1:PW1vQoo2H7c3Q4l2DngJqpSdsdJprMCk9NOkUHtcdmM=
github.com/eyedeekay/sam3 v0.32.3/go.mod h1:qRA9KIIVxbrHlkj+ZB+OoxFGFgdKeGp1vSgPw26eOVU=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/justinas/alice v1.2.0 h1:+MHSA/vccVCF4Uq37S42jwlkvI2Xzl7zTPCN5BnZNVo=
github.com/justinas/alice v1.2.0/go.mod h1:fN5HRH/reO/zrUflLfTN43t3vXvKzvZIENsNEe7i7qA=
github.com/vvampirius/retracker v0.0.0-20171226134001-fdbec17ad537 h1:tzwfH/icuZbxYWB2YL94pB+TsgYDtV++E5OAtVok//k=
github.com/vvampirius/retracker v0.0.0-20171226134001-fdbec17ad537/go.mod h1:dleUEOn/BmkTNbOn5w6w3XXg8pL4OaOCMH066oaL7cE=
github.com/zeebo/bencode v0.0.0-20171107213702-3bb23f1b4385/go.mod h1:Ct7CkrWIQuLWAy9M3atFHYq4kG9Ao/SsY5cdtCXmp9Y=
github.com/zeebo/bencode v1.0.0 h1:zgop0Wu1nu4IexAZeCZ5qbsjU4O1vMrfCrVgUjbHVuA=
github.com/zeebo/bencode v1.0.0/go.mod h1:Ct7CkrWIQuLWAy9M3atFHYq4kG9Ao/SsY5cdtCXmp9Y=

115
serve.go Normal file
View File

@ -0,0 +1,115 @@
package samcore
import (
"net/http"
//"fmt"
"log"
"github.com/gorilla/websocket"
"github.com/justinas/alice"
"github.com/vvampirius/retracker/core/common"
Receiver "github.com/vvampirius/retracker/core/receiver"
Storage "github.com/vvampirius/retracker/core/storage"
)
import (
"github.com/eyedeekay/sam3"
"github.com/eyedeekay/sam3/i2pkeys"
"os"
)
var upgrader = websocket.Upgrader{
ReadBufferSize: 4096,
WriteBufferSize: 4096,
EnableCompression: true,
CheckOrigin: func(r *http.Request) bool {
return true
},
}
func Sammy() (*sam3.StreamListener, error) {
if sam, err := sam3.NewSAM("127.0.0.1:7656"); err != nil {
return nil, err
} else {
if file, err := os.Open("./keys.i2pkeys"); err == nil {
if keys, err := i2pkeys.LoadKeysIncompat(file); err != nil {
return nil, err
} else {
if stream, err := sam.NewStreamSession("serverTun", keys, sam3.Options_Fat); err != nil {
return nil, err
} else {
return stream.Listen()
}
}
} else {
if keys, err := sam.NewKeys(); err != nil {
return nil, err
} else {
if file, err := os.Create("./keys.i2pkeys"); err != nil {
return nil, err
} else {
if err := i2pkeys.StoreKeysIncompat(keys, file); err != nil {
return nil, err
}
if stream, err := sam.NewStreamSession("serverTun", keys, sam3.Options_Fat); err != nil {
return nil, err
} else {
return stream.Listen()
}
}
}
}
}
}
type Core struct {
Config *common.Config
Storage *Storage.Storage
Receiver *Receiver.Receiver
}
func wsMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
return
}
for {
messageType, p, err := conn.ReadMessage()
if err != nil {
log.Println(err)
return
}
if err := conn.WriteMessage(messageType, p); err != nil {
log.Println(err)
return
}
}
})
}
func New(config *common.Config) (*Core, error) {
storage := Storage.New(config)
core := Core{
Config: config,
Storage: storage,
Receiver: Receiver.New(config, storage),
}
ln, err := Sammy()
if err != nil {
return nil, err
}
ws := alice.New(wsMiddleware)
http.Handle("/announce", ws.Then(http.HandlerFunc(core.Receiver.Announce.HttpHandler)))
http.Handle("/a", ws.Then(http.HandlerFunc(core.Receiver.Announce.HttpHandler)))
http.Handle("/ws/announce", ws.Then(http.HandlerFunc(core.Receiver.Announce.HttpHandler)))
http.Handle("/ws/a", ws.Then(http.HandlerFunc(core.Receiver.Announce.HttpHandler)))
http.Handle("/announce/ws", ws.Then(http.HandlerFunc(core.Receiver.Announce.HttpHandler)))
http.Handle("/a/ws", ws.Then(http.HandlerFunc(core.Receiver.Announce.HttpHandler)))
if err := http.Serve(ln, nil); err != nil { // set listen port
return nil, err
}
//TODO: do it with context
return &core, nil
}

45
tracker/main.go Normal file
View File

@ -0,0 +1,45 @@
package main
import (
"flag"
"fmt"
Core "github.com/eyedeekay/tracker"
"github.com/vvampirius/retracker/core/common"
"os"
"syscall"
)
const VERSION = 0.2
func PrintRepo() {
fmt.Fprintln(os.Stderr, "\n# https://github.com/vvampirius/retracker")
}
func main() {
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
flag.PrintDefaults()
PrintRepo()
}
listen := flag.String("l", ":80", "Listen address:port")
age := flag.Float64("a", 180, "Keep 'n' minutes peer in memory")
debug := flag.Bool("d", false, "Debug mode")
xrealip := flag.Bool("x", false, "Get RemoteAddr from X-Real-IP header")
ver := flag.Bool("v", false, "Show version")
flag.Parse()
if *ver {
fmt.Println(VERSION)
PrintRepo()
syscall.Exit(0)
}
config := common.Config{
Listen: *listen,
Debug: *debug,
Age: *age,
XRealIP: *xrealip,
}
Core.New(&config)
}