package main import ( "encoding/json" "fmt" "io" "math/rand" "net/http" "strings" "time" "github.com/daniwalter001/jackett_fiber/types/rd" "github.com/gofiber/fiber/v2" ) var keys = []string{ "TUCIGWCX5VJCPB5YPAD64NB25TZFFGAWGDVHELHZDLNUJEGX45BA", "T5Y37CBYWLSOR7DUGM4TWHCEI5FDJ63H2JIBMRGTZHOURSDWI3ZQ"} var rdApikey = keys[rand.Intn(len(keys))] func bearer() string { return fmt.Sprintf("Bearer %s", rdApikey) } func checkTorrentFileinRD(hash string) (rd.AvailabilityResponse, rd.RdError) { if len(hash) == 0 { return rd.AvailabilityResponse{}, rd.RdError{} } api := fmt.Sprintf("https://api.real-debrid.com/rest/1.0/torrents/instantAvailability/%s", hash) request := fiber.Get(api).Timeout(5 * time.Second) request.Set("Authorization", bearer()) status, data, err := request.Bytes() if err != nil { return rd.AvailabilityResponse{}, rd.RdError{} } if status >= 400 { var resErr rd.RdError json.Unmarshal(data, &resErr) return rd.AvailabilityResponse{}, resErr } var resJson rd.AvailabilityResponse json.Unmarshal(data, &resJson) return resJson, rd.RdError{} } func addTorrentFileinRD2(magnet string) (rd.AddTorrentResponse, rd.RdError) { if len(magnet) == 0 { return rd.AddTorrentResponse{}, rd.RdError{Error: "magnet not defined"} } url := "https://api.real-debrid.com/rest/1.0/torrents/addMagnet" payload := strings.NewReader(fmt.Sprintf("magnet=%s", magnet)) req, _ := http.NewRequest("POST", url, payload) req.Header.Add("Content-Type", "application/x-www-form-urlencoded") req.Header.Add("User-Agent", "insomnia/8.6.1") req.Header.Add("Authorization", bearer()) res, _ := http.DefaultClient.Do(req) body, _ := io.ReadAll(res.Body) if res.StatusCode >= 400 { var resErr rd.RdError json.Unmarshal(body, &resErr) return rd.AddTorrentResponse{}, resErr } var resJson rd.AddTorrentResponse json.Unmarshal(body, &resJson) defer res.Body.Close() return resJson, rd.RdError{} } func getTorrentInfofromRD(id string) (rd.TorrentInfoResponse, rd.RdError) { if len(id) == 0 { return rd.TorrentInfoResponse{}, rd.RdError{} } api := fmt.Sprintf("https://api.real-debrid.com/rest/1.0/torrents/info/%s", id) request := fiber.Get(api).Timeout(5 * time.Second) request.Set("Authorization", bearer()) status, data, err := request.Bytes() if err != nil { return rd.TorrentInfoResponse{}, rd.RdError{} } if status != fiber.StatusOK { var resErr rd.RdError json.Unmarshal(data, &resErr) return rd.TorrentInfoResponse{}, resErr } var resJson rd.TorrentInfoResponse json.Unmarshal(data, &resJson) return resJson, rd.RdError{} } func selectFilefromRD(id string, files string) (bool, rd.RdError) { if len(id) == 0 { return false, rd.RdError{Error: "id not defined"} } if len(files) == 0 { files = "all" } api := fmt.Sprintf("https://api.real-debrid.com/rest/1.0/torrents/selectFiles/%s", id) payload := strings.NewReader(fmt.Sprintf("files=%s", files)) req, _ := http.NewRequest("POST", api, payload) req.Header.Add("Content-Type", "application/x-www-form-urlencoded") req.Header.Add("User-Agent", "insomnia/8.6.1") req.Header.Add("Authorization", bearer()) res, _ := http.DefaultClient.Do(req) body, _ := io.ReadAll(res.Body) if res.StatusCode >= 400 { var resErr rd.RdError json.Unmarshal(body, &resErr) return false, resErr } defer res.Body.Close() return true, rd.RdError{} } func unrestrictLinkfromRD(link string) (rd.UnrestrictLinkResponse, rd.RdError) { if len(link) == 0 { return rd.UnrestrictLinkResponse{}, rd.RdError{} } api := "https://api.real-debrid.com/rest/1.0/unrestrict/link" payload := strings.NewReader(fmt.Sprintf("link=%s", link)) req, _ := http.NewRequest("POST", api, payload) req.Header.Add("Content-Type", "application/x-www-form-urlencoded") req.Header.Add("User-Agent", "insomnia/8.6.1") req.Header.Add("Authorization", bearer()) res, _ := http.DefaultClient.Do(req) body, _ := io.ReadAll(res.Body) if res.StatusCode >= 400 { var resErr rd.RdError json.Unmarshal(body, &resErr) return rd.UnrestrictLinkResponse{}, resErr } var resJson rd.UnrestrictLinkResponse json.Unmarshal(body, &resJson) defer res.Body.Close() return resJson, rd.RdError{} }