diff --git a/src/internal/torrents/handlers.go b/src/internal/torrents/handlers.go new file mode 100644 index 0000000..21cae8f --- /dev/null +++ b/src/internal/torrents/handlers.go @@ -0,0 +1,57 @@ +package torrents + +import ( + "encoding/json" + "errors" + "net/http" + + "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/auth" + "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/config" + "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/users" + "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/web" + + "github.com/odwrtw/papi" +) + +// DownloadHandler downloads a movie via polochon +func DownloadHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error { + var data struct { + URL string `json:"url"` + } + err := json.NewDecoder(r.Body).Decode(&data) + if err != nil { + return env.RenderError(w, errors.New("failed to get the url")) + } + + if data.URL == "" { + return env.RenderError(w, errors.New("no given url")) + } + + v := auth.GetCurrentUser(r, env.Log) + user, ok := v.(*users.User) + if !ok { + return env.RenderError(w, errors.New("invalid user type")) + } + + var polochonConfig config.UserPolochon + err = user.GetConfig("polochon", &polochonConfig) + if err != nil { + return env.RenderError(w, errors.New("problem when getting user config")) + } + + client, err := papi.New(polochonConfig.URL) + if err != nil { + return env.RenderError(w, errors.New("problem when getting papi client")) + } + + if polochonConfig.Token != "" { + client.SetToken(polochonConfig.Token) + } + + err = client.AddTorrent(data.URL) + if err != nil { + return env.RenderError(w, err) + } + + return env.RenderOK(w, "Torrent added") +} diff --git a/src/main.go b/src/main.go index c4580eb..cddf6d1 100644 --- a/src/main.go +++ b/src/main.go @@ -4,12 +4,12 @@ import ( "net/http" "os" - "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/movies" - "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/shows" - "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/auth" "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/config" "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/external_medias" + "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/movies" + "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/shows" + "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/torrents" "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/users" "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/web" @@ -71,8 +71,6 @@ func main() { authMiddleware := auth.NewMiddleware(env.Auth, log) - // TODO: refresh sould be handled by admins only - env.Handle("/users/login", users.LoginPOSTHandler).Methods("POST") env.Handle("/users/signup", users.SignupPOSTHandler).Methods("POST") env.Handle("/users/details", users.DetailsHandler).WithRole(users.UserRole).Methods("GET") @@ -89,6 +87,7 @@ func main() { env.Handle("/shows/refresh", extmedias.RefreshShows).WithRole(users.UserRole).Methods("POST") env.Handle("/shows/explore", extmedias.ExploreShows).WithRole(users.UserRole).Methods("GET") env.Handle("/shows/search", shows.SearchShow).WithRole(users.UserRole).Methods("POST") + env.Handle("/download", torrents.DownloadHandler).WithRole(users.UserRole).Methods("POST") n := negroni.Classic() n.Use(authMiddleware)