get items from nats and forward to transmission only
commit
d7d1d3ef5d
|
|
@ -0,0 +1,92 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"local/jbtServiceDiscovery/jbt"
|
||||
"local/logger"
|
||||
natsc "local/nats-client"
|
||||
"local/system/sysconf"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
exit := make(chan bool)
|
||||
config := sysconf.Get("vpntorfeed")
|
||||
go jbt.RegisterDeregister(config.Name, config.Port, exit)
|
||||
logger.Log("Register attempted")
|
||||
|
||||
// get from nats
|
||||
go func() {
|
||||
client := &http.Client{Timeout: time.Second * 30}
|
||||
sub, err := natsc.NewSubscriber(config.DB)
|
||||
if err != nil {
|
||||
exit <- true
|
||||
panic(err)
|
||||
}
|
||||
defer sub.Close()
|
||||
ch, err := sub.Subscription()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
for msg := range ch {
|
||||
logger.Logf("Topic %s received: %s\n", config.DB, magnet)
|
||||
err := doReq(client, magnet)
|
||||
if err != nil {
|
||||
logger.Log(err)
|
||||
}
|
||||
}
|
||||
}()
|
||||
//magnets <- "magnet:?xt=urn:btih:64b2b05f61d2b9ef3213fce9860fb45c844d77fb&dn=checkmyiptorrent&tr=http%3A%2F%2F34.204.227.31%2Fcheckmytorrentipaddress.php"
|
||||
|
||||
<-exit
|
||||
logger.Log("Exit received")
|
||||
}
|
||||
|
||||
func getSessionID() string {
|
||||
body, err := http.Get("http://192.168.0.86:9091/transmission/rpc")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return fmt.Sprintf("%v", body.Header.Get("X-Transmission-Session-Id"))
|
||||
}
|
||||
|
||||
func buildReq(sessionID string) *http.Request {
|
||||
req, _ := http.NewRequest("POST", "http://192.168.0.86:9091/transmission/rpc", nil)
|
||||
req.Header.Add("X-Transmission-Session-Id", sessionID)
|
||||
return req
|
||||
}
|
||||
|
||||
type noopCloser struct {
|
||||
io.Reader
|
||||
}
|
||||
|
||||
func (noopCloser) Close() error { return nil }
|
||||
|
||||
func doReq(client *http.Client, magnet string) error {
|
||||
assert := regexp.MustCompile("^magnet:.xt")
|
||||
if !assert.MatchString(magnet) {
|
||||
return errors.New("not a magnet")
|
||||
}
|
||||
|
||||
sessionID := getSessionID()
|
||||
request := buildReq(sessionID)
|
||||
buf := bytes.NewBufferString("{\"method\":\"torrent-add\", \"arguments\":{\"filename\":\"" + magnet + "\"}}")
|
||||
request.Body = noopCloser{buf}
|
||||
|
||||
resp, err := client.Do(request)
|
||||
defer resp.Body.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
logger.Log(resp.StatusCode, magnet)
|
||||
if resp.StatusCode != 200 {
|
||||
return errors.New("err failed request")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Loading…
Reference in New Issue