commit d7d1d3ef5d01ff44cbd7929b7049cbf7aa620e92 Author: Bel LaPointe Date: Tue Jun 19 09:46:49 2018 -0600 get items from nats and forward to transmission only diff --git a/main.go b/main.go new file mode 100644 index 0000000..8cc5084 --- /dev/null +++ b/main.go @@ -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 +}