Put user in backend
This commit is contained in:
parent
2ca1097b77
commit
9c429ba3d4
@ -5,8 +5,8 @@ import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"git.quimbo.fr/odwrtw/canape/backend/backend"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/config"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/users"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/web"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
@ -21,7 +21,7 @@ func GetUsersHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error
|
||||
|
||||
log.Debug("Getting users")
|
||||
|
||||
users, err := users.GetAll(env.Database)
|
||||
users, err := backend.GetAllUsers(env.Database)
|
||||
if err != nil {
|
||||
return env.RenderError(w, err)
|
||||
}
|
||||
@ -39,7 +39,7 @@ func GenerateUserToken(env *web.Env, w http.ResponseWriter, r *http.Request) err
|
||||
vars := mux.Vars(r)
|
||||
username := vars["username"]
|
||||
|
||||
user, err := users.Get(env.Database, username)
|
||||
user, err := backend.GetUser(env.Database, username)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -79,7 +79,7 @@ func UpdateUserHandler(env *web.Env, w http.ResponseWriter, r *http.Request) err
|
||||
return env.RenderError(w, fmt.Errorf("Empty user id"))
|
||||
}
|
||||
|
||||
user, err := users.GetByID(env.Database, data.ID)
|
||||
user, err := backend.GetUserByID(env.Database, data.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -6,9 +6,10 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.quimbo.fr/odwrtw/canape/backend/backend"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/tokens"
|
||||
jwt "github.com/dgrijalva/jwt-go"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/tokens"
|
||||
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
@ -24,20 +25,6 @@ var (
|
||||
ErrUnauthenticatedUser = fmt.Errorf("Unauthenticated user")
|
||||
)
|
||||
|
||||
// UserBackend interface for user backend
|
||||
type UserBackend interface {
|
||||
GetUser(username string) (User, error)
|
||||
}
|
||||
|
||||
// User interface for user
|
||||
type User interface {
|
||||
GetName() string
|
||||
GetHash() string
|
||||
HasRole(string) bool
|
||||
IsAdmin() bool
|
||||
IsActivated() bool
|
||||
}
|
||||
|
||||
// Authorizer handle sesssion
|
||||
type Authorizer struct {
|
||||
db *sqlx.DB
|
||||
@ -46,7 +33,6 @@ type Authorizer struct {
|
||||
|
||||
// Params for Authorizer creation
|
||||
type Params struct {
|
||||
Backend UserBackend
|
||||
Pepper string
|
||||
Cost int
|
||||
Secret string
|
||||
@ -71,7 +57,7 @@ func (a *Authorizer) GenHash(password string) (string, error) {
|
||||
}
|
||||
|
||||
// GenerateJWTToken generates a JWT token for a user
|
||||
func (a *Authorizer) GenerateJWTToken(r *http.Request, u User) (*tokens.Token, error) {
|
||||
func (a *Authorizer) GenerateJWTToken(r *http.Request, u *backend.User) (*tokens.Token, error) {
|
||||
// Create a jwt token
|
||||
jwtToken := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
|
||||
// Not before
|
||||
@ -79,7 +65,7 @@ func (a *Authorizer) GenerateJWTToken(r *http.Request, u User) (*tokens.Token, e
|
||||
// Issued at
|
||||
"iat": time.Now().Unix(),
|
||||
// Private claims
|
||||
"username": u.GetName(),
|
||||
"username": u.Name,
|
||||
"isAdmin": u.IsAdmin(),
|
||||
"isActivated": u.IsActivated(),
|
||||
})
|
||||
@ -92,20 +78,20 @@ func (a *Authorizer) GenerateJWTToken(r *http.Request, u User) (*tokens.Token, e
|
||||
|
||||
return &tokens.Token{
|
||||
Token: ss,
|
||||
Username: u.GetName(),
|
||||
Username: u.Name,
|
||||
IP: getIPFromRequest(r),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Login cheks password and creates a jwt token
|
||||
func (a *Authorizer) Login(r *http.Request, username, password string) (*tokens.Token, error) {
|
||||
u, err := a.Backend.GetUser(username)
|
||||
u, err := backend.GetUser(a.db, username)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Compare the password
|
||||
err = bcrypt.CompareHashAndPassword([]byte(u.GetHash()), []byte(password+a.Pepper))
|
||||
err = bcrypt.CompareHashAndPassword([]byte(u.Hash), []byte(password+a.Pepper))
|
||||
if err != nil {
|
||||
return nil, ErrInvalidPassword
|
||||
}
|
||||
@ -123,7 +109,7 @@ func (a *Authorizer) Login(r *http.Request, username, password string) (*tokens.
|
||||
}
|
||||
|
||||
// CurrentUser returns the logged in username from session and verifies the token
|
||||
func (a *Authorizer) CurrentUser(rw http.ResponseWriter, req *http.Request) (User, error) {
|
||||
func (a *Authorizer) CurrentUser(rw http.ResponseWriter, req *http.Request) (*backend.User, error) {
|
||||
var tokenStr string
|
||||
h := req.Header.Get("Authorization")
|
||||
if h != "" {
|
||||
@ -165,13 +151,13 @@ func (a *Authorizer) CurrentUser(rw http.ResponseWriter, req *http.Request) (Use
|
||||
}
|
||||
|
||||
// Get the user
|
||||
u, err := a.Backend.GetUser(tokenClaims.Username)
|
||||
u, err := backend.GetUser(a.db, tokenClaims.Username)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Check the token in database
|
||||
token, err := tokens.GetUserToken(a.db, u.GetName(), tokenStr)
|
||||
token, err := tokens.GetUserToken(a.db, u.Name, tokenStr)
|
||||
if err != nil {
|
||||
return nil, ErrInvalidToken
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"net"
|
||||
"net/http"
|
||||
|
||||
"git.quimbo.fr/odwrtw/canape/backend/backend"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
@ -29,7 +30,7 @@ func (m *Middleware) ServeHTTP(w http.ResponseWriter, r *http.Request, next http
|
||||
user, err := m.authorizer.CurrentUser(w, r)
|
||||
switch err {
|
||||
case nil:
|
||||
m.log.Debugf("setting user %s in the context", user.GetName())
|
||||
m.log.Debugf("setting user %s in the context", user.Name)
|
||||
ctxKey := authContextKey("auth.user")
|
||||
ctx := context.WithValue(r.Context(), ctxKey, user)
|
||||
r = r.WithContext(ctx)
|
||||
@ -89,7 +90,7 @@ func (m *MiddlewareRole) ServeHTTP(w http.ResponseWriter, r *http.Request, next
|
||||
}
|
||||
|
||||
// GetCurrentUser gets the current user from the request context
|
||||
func GetCurrentUser(r *http.Request, log *logrus.Entry) User {
|
||||
func GetCurrentUser(r *http.Request, log *logrus.Entry) *backend.User {
|
||||
log.Debug("getting user from context")
|
||||
|
||||
ctxKey := authContextKey("auth.user")
|
||||
@ -97,7 +98,7 @@ func GetCurrentUser(r *http.Request, log *logrus.Entry) User {
|
||||
if u == nil {
|
||||
return nil
|
||||
}
|
||||
user, ok := u.(User)
|
||||
user, ok := u.(*backend.User)
|
||||
if !ok {
|
||||
panic("invalid user type")
|
||||
}
|
||||
|
@ -1,9 +1,6 @@
|
||||
package backend
|
||||
|
||||
import (
|
||||
"git.quimbo.fr/odwrtw/canape/backend/auth"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/users"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
polochon "github.com/odwrtw/polochon/lib"
|
||||
)
|
||||
@ -29,9 +26,3 @@ func (b *Backend) Init([]byte) error {
|
||||
func (b *Backend) Status() (polochon.ModuleStatus, error) {
|
||||
return polochon.StatusOK, nil
|
||||
}
|
||||
|
||||
// GetUser gets the username from the UserBackend
|
||||
// Implements the UserBackend interface
|
||||
func (b *Backend) GetUser(username string) (auth.User, error) {
|
||||
return users.Get(b.Database, username)
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
package users
|
||||
package backend
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
@ -6,12 +6,11 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"git.quimbo.fr/odwrtw/canape/backend/config"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/sqly"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"github.com/jmoiron/sqlx/types"
|
||||
"github.com/odwrtw/papi"
|
||||
|
||||
"git.quimbo.fr/odwrtw/canape/backend/config"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/sqly"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -125,8 +124,8 @@ func (u *User) NewPapiClient() (*papi.Client, error) {
|
||||
return client, nil
|
||||
}
|
||||
|
||||
// Get returns user with specified name
|
||||
func Get(q sqlx.Queryer, name string) (*User, error) {
|
||||
// GetUser returns user with specified name
|
||||
func GetUser(q sqlx.Queryer, name string) (*User, error) {
|
||||
u := &User{}
|
||||
err := q.QueryRowx(getUserQuery, name).StructScan(u)
|
||||
if err != nil {
|
||||
@ -138,8 +137,8 @@ func Get(q sqlx.Queryer, name string) (*User, error) {
|
||||
return u, nil
|
||||
}
|
||||
|
||||
// GetByID returns user using its id
|
||||
func GetByID(q sqlx.Queryer, id string) (*User, error) {
|
||||
// GetUserByID returns user using its id
|
||||
func GetUserByID(q sqlx.Queryer, id string) (*User, error) {
|
||||
u := &User{}
|
||||
err := q.QueryRowx(getUserByIDQuery, id).StructScan(u)
|
||||
if err != nil {
|
||||
@ -151,8 +150,8 @@ func GetByID(q sqlx.Queryer, id string) (*User, error) {
|
||||
return u, nil
|
||||
}
|
||||
|
||||
// GetAll returns all the users
|
||||
func GetAll(db *sqlx.DB) ([]*User, error) {
|
||||
// GetAllUsers returns all the users
|
||||
func GetAllUsers(db *sqlx.DB) ([]*User, error) {
|
||||
users := []*User{}
|
||||
err := db.Select(&users, getAllUsersQuery)
|
||||
if err != nil {
|
||||
@ -203,16 +202,6 @@ func (u *User) Delete(ex *sqlx.DB) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetHash implements auth.User interface
|
||||
func (u *User) GetHash() string {
|
||||
return u.Hash
|
||||
}
|
||||
|
||||
// GetName implements auth.User interface
|
||||
func (u *User) GetName() string {
|
||||
return u.Name
|
||||
}
|
||||
|
||||
// HasRole checks if a user as a role
|
||||
func (u *User) HasRole(role string) bool {
|
||||
if role == AdminRole && !u.Admin {
|
@ -1,12 +1,10 @@
|
||||
package events
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"git.quimbo.fr/odwrtw/canape/backend/auth"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/users"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/web"
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
@ -23,11 +21,7 @@ const (
|
||||
// WsHandler handles the websockets messages
|
||||
func WsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
// Get the user
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
upgrader := websocket.Upgrader{
|
||||
ReadBufferSize: 1024,
|
||||
|
@ -4,7 +4,7 @@ import (
|
||||
"reflect"
|
||||
"time"
|
||||
|
||||
"git.quimbo.fr/odwrtw/canape/backend/users"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/backend"
|
||||
"github.com/odwrtw/papi"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
@ -12,7 +12,7 @@ import (
|
||||
// TorrentNotifier is a struct implementing the Notifier interface
|
||||
type TorrentNotifier struct {
|
||||
*Notifier
|
||||
user *users.User
|
||||
user *backend.User
|
||||
client *papi.Client
|
||||
torrents []papi.Torrent
|
||||
log *logrus.Entry
|
||||
|
@ -1,14 +1,12 @@
|
||||
package extmedias
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
|
||||
"git.quimbo.fr/odwrtw/canape/backend/auth"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/backend"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/movies"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/shows"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/users"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/web"
|
||||
polochon "github.com/odwrtw/polochon/lib"
|
||||
"github.com/sirupsen/logrus"
|
||||
@ -48,7 +46,7 @@ func RefreshShowsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) e
|
||||
}
|
||||
|
||||
// GetMovies get some movies
|
||||
func GetMovies(env *web.Env, user *users.User, source string, category string) ([]*movies.Movie, error) {
|
||||
func GetMovies(env *web.Env, user *backend.User, source string, category string) ([]*movies.Movie, error) {
|
||||
log := env.Log.WithFields(logrus.Fields{
|
||||
"source": source,
|
||||
"category": category,
|
||||
@ -107,7 +105,7 @@ func GetMovies(env *web.Env, user *users.User, source string, category string) (
|
||||
}
|
||||
|
||||
// GetShows get some shows
|
||||
func GetShows(env *web.Env, user *users.User, source string, category string, force bool) ([]*shows.Show, error) {
|
||||
func GetShows(env *web.Env, user *backend.User, source string, category string, force bool) ([]*shows.Show, error) {
|
||||
log := env.Log.WithFields(logrus.Fields{
|
||||
"source": source,
|
||||
"category": category,
|
||||
@ -178,11 +176,7 @@ func ExploreMovies(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
category = "popular"
|
||||
}
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Get the medias without trying to refresh them
|
||||
movies, err := GetMovies(env, user, source, category)
|
||||
@ -212,11 +206,7 @@ func ExploreShows(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
category = "rating"
|
||||
}
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Get the medias without trying to refresh them
|
||||
shows, err := GetShows(env, user, source, category, false)
|
||||
|
@ -47,7 +47,6 @@ func main() {
|
||||
|
||||
// Generate auth params
|
||||
authParams := auth.Params{
|
||||
Backend: backend,
|
||||
Pepper: cf.Authorizer.Pepper,
|
||||
Cost: cf.Authorizer.Cost,
|
||||
Secret: cf.Authorizer.Secret,
|
||||
|
@ -1,7 +1,6 @@
|
||||
package movies
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
@ -10,7 +9,6 @@ import (
|
||||
"git.quimbo.fr/odwrtw/canape/backend/backend"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/config"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/subtitles"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/users"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/web"
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/odwrtw/papi"
|
||||
@ -21,11 +19,7 @@ import (
|
||||
// PolochonMoviesHandler will returns movies from Polochon
|
||||
func PolochonMoviesHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
// Get the user from the request
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, fmt.Errorf("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Get the polochon movies of the user
|
||||
movies, err := getPolochonMovies(user, env)
|
||||
@ -69,11 +63,7 @@ func RefreshMovieHandler(env *web.Env, w http.ResponseWriter, r *http.Request) e
|
||||
id := vars["id"]
|
||||
|
||||
// Get the user
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return fmt.Errorf("invalid user type")
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Create a new papi client
|
||||
client, err := user.NewPapiClient()
|
||||
@ -114,11 +104,7 @@ func SearchMovie(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
vars := mux.Vars(r)
|
||||
search := vars["search"]
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Create a new papi client
|
||||
client, err := user.NewPapiClient()
|
||||
@ -200,11 +186,7 @@ func PolochonDeleteHandler(env *web.Env, w http.ResponseWriter, r *http.Request)
|
||||
log.Debugf("deleting movie")
|
||||
|
||||
// Get the user
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Create a new papi client
|
||||
client, err := user.NewPapiClient()
|
||||
@ -221,11 +203,7 @@ func AddToWishlist(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
vars := mux.Vars(r)
|
||||
id := vars["id"]
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
if err := backend.AddMovieToWishlist(env.Database, user.ID, id); err != nil {
|
||||
return env.RenderError(w, err)
|
||||
@ -239,11 +217,7 @@ func DeleteFromWishlist(env *web.Env, w http.ResponseWriter, r *http.Request) er
|
||||
vars := mux.Vars(r)
|
||||
id := vars["id"]
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
if err := backend.DeleteMovieFromWishlist(env.Database, user.ID, id); err != nil {
|
||||
return env.RenderError(w, err)
|
||||
@ -254,11 +228,7 @@ func DeleteFromWishlist(env *web.Env, w http.ResponseWriter, r *http.Request) er
|
||||
|
||||
// GetWishlistHandler returns the wishlisted movies of a user
|
||||
func GetWishlistHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Create a new papi client
|
||||
client, err := user.NewPapiClient()
|
||||
@ -320,11 +290,7 @@ func RefreshMovieSubtitlesHandler(env *web.Env, w http.ResponseWriter, r *http.R
|
||||
id := vars["id"]
|
||||
|
||||
// Get the user
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return fmt.Errorf("invalid user type")
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Create a new papi client
|
||||
client, err := user.NewPapiClient()
|
||||
@ -358,11 +324,7 @@ func DownloadVVTSubtitle(env *web.Env, w http.ResponseWriter, r *http.Request) e
|
||||
lang := vars["lang"]
|
||||
|
||||
// Get the user
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return fmt.Errorf("invalid user type")
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Create a new papi client
|
||||
client, err := user.NewPapiClient()
|
||||
|
@ -10,7 +10,6 @@ import (
|
||||
|
||||
"git.quimbo.fr/odwrtw/canape/backend/backend"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/subtitles"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/users"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/web"
|
||||
"github.com/odwrtw/papi"
|
||||
polochon "github.com/odwrtw/polochon/lib"
|
||||
@ -251,7 +250,7 @@ func (m *Movie) PosterURL() string {
|
||||
}
|
||||
|
||||
// getPolochonMovies returns an array of the user's polochon movies
|
||||
func getPolochonMovies(user *users.User, env *web.Env) ([]*Movie, error) {
|
||||
func getPolochonMovies(user *backend.User, env *web.Env) ([]*Movie, error) {
|
||||
movies := []*Movie{}
|
||||
|
||||
// Create a papi client
|
||||
|
@ -6,7 +6,7 @@ import (
|
||||
"net/http"
|
||||
|
||||
"git.quimbo.fr/odwrtw/canape/backend/auth"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/users"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/backend"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/web"
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/sirupsen/logrus"
|
||||
@ -49,11 +49,7 @@ func GetPolochonsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) e
|
||||
"function": "polochons.GetPolochonsHandler",
|
||||
})
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, fmt.Errorf("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
log.Debug("Getting polochons")
|
||||
|
||||
@ -63,7 +59,7 @@ func GetPolochonsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) e
|
||||
}
|
||||
|
||||
for _, p := range polochons {
|
||||
users, err := users.GetPolochonUsers(env.Database, p.ID)
|
||||
users, err := backend.GetPolochonUsers(env.Database, p.ID)
|
||||
if err != nil {
|
||||
return env.RenderError(w, err)
|
||||
}
|
||||
@ -79,11 +75,7 @@ func NewPolochonHandler(env *web.Env, w http.ResponseWriter, r *http.Request) er
|
||||
"function": "polochons.NewPolochonHandler",
|
||||
})
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, fmt.Errorf("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
var data struct {
|
||||
Name string `json:"name"`
|
||||
@ -127,11 +119,7 @@ func EditPolochonHandler(env *web.Env, w http.ResponseWriter, r *http.Request) e
|
||||
})
|
||||
log.Debugf("editing polochon ...")
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, fmt.Errorf("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Get the polochon
|
||||
vars := mux.Vars(r)
|
||||
@ -199,11 +187,7 @@ func PolochonActivateUser(env *web.Env, w http.ResponseWriter, r *http.Request,
|
||||
})
|
||||
log.Debugf("editing polochon users ...")
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, fmt.Errorf("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Get the polochon
|
||||
vars := mux.Vars(r)
|
||||
@ -220,7 +204,7 @@ func PolochonActivateUser(env *web.Env, w http.ResponseWriter, r *http.Request,
|
||||
|
||||
// Get the user
|
||||
userID := vars["user_id"]
|
||||
u, err := users.GetByID(env.Database, userID)
|
||||
u, err := backend.GetUserByID(env.Database, userID)
|
||||
if err != nil {
|
||||
return env.RenderError(w, err)
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
admin "git.quimbo.fr/odwrtw/canape/backend/admins"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/backend"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/events"
|
||||
extmedias "git.quimbo.fr/odwrtw/canape/backend/external_medias"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/movies"
|
||||
@ -17,72 +18,72 @@ func setupRoutes(env *web.Env) {
|
||||
// User's route
|
||||
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")
|
||||
env.Handle("/users/edit", users.EditHandler).WithRole(users.UserRole).Methods("POST")
|
||||
env.Handle("/users/tokens", users.GetTokensHandler).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/users/tokens/{token}", users.EditTokenHandler).WithRole(users.UserRole).Methods("POST")
|
||||
env.Handle("/users/tokens/{token}", users.DeleteTokenHandler).WithRole(users.UserRole).Methods("DELETE")
|
||||
env.Handle("/users/modules/status", users.GetModulesStatus).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/users/polochons", polochons.GetPolochonsHandler).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/users/details", users.DetailsHandler).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/users/edit", users.EditHandler).WithRole(backend.UserRole).Methods("POST")
|
||||
env.Handle("/users/tokens", users.GetTokensHandler).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/users/tokens/{token}", users.EditTokenHandler).WithRole(backend.UserRole).Methods("POST")
|
||||
env.Handle("/users/tokens/{token}", users.DeleteTokenHandler).WithRole(backend.UserRole).Methods("DELETE")
|
||||
env.Handle("/users/modules/status", users.GetModulesStatus).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/users/polochons", polochons.GetPolochonsHandler).WithRole(backend.UserRole).Methods("GET")
|
||||
|
||||
// Polochon's route
|
||||
env.Handle("/polochons", polochons.GetPublicPolochonsHandler).Methods("GET")
|
||||
env.Handle("/polochons", polochons.NewPolochonHandler).WithRole(users.UserRole).Methods("POST")
|
||||
env.Handle("/polochons/{id}", polochons.EditPolochonHandler).WithRole(users.UserRole).Methods("POST")
|
||||
env.Handle("/polochons/{id}/users/{user_id}", polochons.PolochonActivateUserHandler).WithRole(users.UserRole).Methods("POST")
|
||||
env.Handle("/polochons/{id}/users/{user_id}", polochons.PolochonDeactivateUserHandler).WithRole(users.UserRole).Methods("DELETE")
|
||||
env.Handle("/polochons", polochons.NewPolochonHandler).WithRole(backend.UserRole).Methods("POST")
|
||||
env.Handle("/polochons/{id}", polochons.EditPolochonHandler).WithRole(backend.UserRole).Methods("POST")
|
||||
env.Handle("/polochons/{id}/users/{user_id}", polochons.PolochonActivateUserHandler).WithRole(backend.UserRole).Methods("POST")
|
||||
env.Handle("/polochons/{id}/users/{user_id}", polochons.PolochonDeactivateUserHandler).WithRole(backend.UserRole).Methods("DELETE")
|
||||
|
||||
// Movies routes
|
||||
env.Handle("/movies/polochon", movies.PolochonMoviesHandler).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/movies/explore", extmedias.ExploreMovies).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/movies/explore/options", extmedias.MovieExplorerOptions).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/movies/search/{search}", movies.SearchMovie).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/movies/{id:tt[0-9]+}", movies.PolochonDeleteHandler).WithRole(users.UserRole).Methods("DELETE")
|
||||
env.Handle("/movies/{id:tt[0-9]+}/refresh", movies.RefreshMovieHandler).WithRole(users.UserRole).Methods("POST")
|
||||
env.Handle("/movies/{id:tt[0-9]+}/subtitles/{lang}", movies.DownloadVVTSubtitle).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/movies/{id:tt[0-9]+}/subtitles/refresh", movies.RefreshMovieSubtitlesHandler).WithRole(users.UserRole).Methods("POST")
|
||||
env.Handle("/movies/refresh", extmedias.RefreshMoviesHandler).WithRole(users.AdminRole).Methods("POST")
|
||||
env.Handle("/movies/polochon", movies.PolochonMoviesHandler).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/movies/explore", extmedias.ExploreMovies).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/movies/explore/options", extmedias.MovieExplorerOptions).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/movies/search/{search}", movies.SearchMovie).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/movies/{id:tt[0-9]+}", movies.PolochonDeleteHandler).WithRole(backend.UserRole).Methods("DELETE")
|
||||
env.Handle("/movies/{id:tt[0-9]+}/refresh", movies.RefreshMovieHandler).WithRole(backend.UserRole).Methods("POST")
|
||||
env.Handle("/movies/{id:tt[0-9]+}/subtitles/{lang}", movies.DownloadVVTSubtitle).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/movies/{id:tt[0-9]+}/subtitles/refresh", movies.RefreshMovieSubtitlesHandler).WithRole(backend.UserRole).Methods("POST")
|
||||
env.Handle("/movies/refresh", extmedias.RefreshMoviesHandler).WithRole(backend.AdminRole).Methods("POST")
|
||||
|
||||
// Shows routes
|
||||
env.Handle("/shows/polochon", shows.PolochonShowsHandler).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/shows/explore", extmedias.ExploreShows).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/shows/explore/options", extmedias.ShowExplorerOptions).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/shows/search/{search}", shows.SearchShow).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/shows/{id:tt[0-9]+}", shows.GetDetailsHandler).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/shows/{id:tt[0-9]+}/refresh", shows.RefreshShowHandler).WithRole(users.UserRole).Methods("POST")
|
||||
env.Handle("/shows/{id:tt[0-9]+}/seasons/{season:[0-9]+}/episodes/{episode:[0-9]+}", shows.RefreshEpisodeHandler).WithRole(users.UserRole).Methods("POST")
|
||||
env.Handle("/shows/{id:tt[0-9]+}/seasons/{season:[0-9]+}/episodes/{episode:[0-9]+}/subtitles/refresh", shows.RefreshEpisodeSubtitlesHandler).WithRole(users.UserRole).Methods("POST")
|
||||
env.Handle("/shows/{id:tt[0-9]+}/seasons/{season:[0-9]+}/episodes/{episode:[0-9]+}/subtitles/{lang}", shows.DownloadVVTSubtitle).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/shows/refresh", extmedias.RefreshShowsHandler).WithRole(users.AdminRole).Methods("POST")
|
||||
env.Handle("/shows/polochon", shows.PolochonShowsHandler).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/shows/explore", extmedias.ExploreShows).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/shows/explore/options", extmedias.ShowExplorerOptions).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/shows/search/{search}", shows.SearchShow).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/shows/{id:tt[0-9]+}", shows.GetDetailsHandler).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/shows/{id:tt[0-9]+}/refresh", shows.RefreshShowHandler).WithRole(backend.UserRole).Methods("POST")
|
||||
env.Handle("/shows/{id:tt[0-9]+}/seasons/{season:[0-9]+}/episodes/{episode:[0-9]+}", shows.RefreshEpisodeHandler).WithRole(backend.UserRole).Methods("POST")
|
||||
env.Handle("/shows/{id:tt[0-9]+}/seasons/{season:[0-9]+}/episodes/{episode:[0-9]+}/subtitles/refresh", shows.RefreshEpisodeSubtitlesHandler).WithRole(backend.UserRole).Methods("POST")
|
||||
env.Handle("/shows/{id:tt[0-9]+}/seasons/{season:[0-9]+}/episodes/{episode:[0-9]+}/subtitles/{lang}", shows.DownloadVVTSubtitle).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/shows/refresh", extmedias.RefreshShowsHandler).WithRole(backend.AdminRole).Methods("POST")
|
||||
|
||||
env.Handle("/ratings/refresh", ratings.RefreshHandler).WithRole(users.AdminRole).Methods("POST")
|
||||
env.Handle("/ratings/refresh", ratings.RefreshHandler).WithRole(backend.AdminRole).Methods("POST")
|
||||
|
||||
// Wishlist routes for shows
|
||||
env.Handle("/wishlist/shows", shows.GetWishlistHandler).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/wishlist/shows/{id:tt[0-9]+}", shows.AddToWishlist).WithRole(users.UserRole).Methods("POST")
|
||||
env.Handle("/wishlist/shows/{id:tt[0-9]+}", shows.DeleteFromWishlist).WithRole(users.UserRole).Methods("DELETE")
|
||||
env.Handle("/wishlist/shows", shows.GetWishlistHandler).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/wishlist/shows/{id:tt[0-9]+}", shows.AddToWishlist).WithRole(backend.UserRole).Methods("POST")
|
||||
env.Handle("/wishlist/shows/{id:tt[0-9]+}", shows.DeleteFromWishlist).WithRole(backend.UserRole).Methods("DELETE")
|
||||
|
||||
// Wishlist routes for movies
|
||||
env.Handle("/wishlist/movies", movies.GetWishlistHandler).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/wishlist/movies/{id:tt[0-9]+}", movies.AddToWishlist).WithRole(users.UserRole).Methods("POST")
|
||||
env.Handle("/wishlist/movies/{id:tt[0-9]+}", movies.DeleteFromWishlist).WithRole(users.UserRole).Methods("DELETE")
|
||||
env.Handle("/wishlist/movies", movies.GetWishlistHandler).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/wishlist/movies/{id:tt[0-9]+}", movies.AddToWishlist).WithRole(backend.UserRole).Methods("POST")
|
||||
env.Handle("/wishlist/movies/{id:tt[0-9]+}", movies.DeleteFromWishlist).WithRole(backend.UserRole).Methods("DELETE")
|
||||
|
||||
// Torrents routes
|
||||
env.Handle("/torrents", torrents.DownloadHandler).WithRole(users.UserRole).Methods("POST")
|
||||
env.Handle("/torrents", torrents.ListHandler).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/torrents/{id}", torrents.RemoveHandler).WithRole(users.UserRole).Methods("DELETE")
|
||||
env.Handle("/torrents/search/{type}/{search}", torrents.SearchHandler).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/torrents", torrents.DownloadHandler).WithRole(backend.UserRole).Methods("POST")
|
||||
env.Handle("/torrents", torrents.ListHandler).WithRole(backend.UserRole).Methods("GET")
|
||||
env.Handle("/torrents/{id}", torrents.RemoveHandler).WithRole(backend.UserRole).Methods("DELETE")
|
||||
env.Handle("/torrents/search/{type}/{search}", torrents.SearchHandler).WithRole(backend.UserRole).Methods("GET")
|
||||
|
||||
// Route to refresh all movies and shows
|
||||
env.Handle("/refresh", extmedias.RefreshHandler).WithRole(users.AdminRole).Methods("POST")
|
||||
env.Handle("/refresh", extmedias.RefreshHandler).WithRole(backend.AdminRole).Methods("POST")
|
||||
|
||||
// Route to handle websocket events
|
||||
env.Handle("/events", events.WsHandler).WithRole(users.UserRole).Methods("GET")
|
||||
env.Handle("/events", events.WsHandler).WithRole(backend.UserRole).Methods("GET")
|
||||
|
||||
// Admin routes
|
||||
env.Handle("/admins/users", admin.GetUsersHandler).WithRole(users.AdminRole).Methods("GET")
|
||||
env.Handle("/admins/users", admin.UpdateUserHandler).WithRole(users.AdminRole).Methods("POST")
|
||||
env.Handle("/admins/stats", admin.GetStatsHandler).WithRole(users.AdminRole).Methods("GET")
|
||||
env.Handle("/admins/tokens/{username}", admin.GenerateUserToken).WithRole(users.AdminRole).Methods("POST")
|
||||
env.Handle("/admins/modules", admin.GetModulesStatuses).WithRole(users.AdminRole).Methods("GET")
|
||||
env.Handle("/admins/users", admin.GetUsersHandler).WithRole(backend.AdminRole).Methods("GET")
|
||||
env.Handle("/admins/users", admin.UpdateUserHandler).WithRole(backend.AdminRole).Methods("POST")
|
||||
env.Handle("/admins/stats", admin.GetStatsHandler).WithRole(backend.AdminRole).Methods("GET")
|
||||
env.Handle("/admins/tokens/{username}", admin.GenerateUserToken).WithRole(backend.AdminRole).Methods("POST")
|
||||
env.Handle("/admins/modules", admin.GetModulesStatuses).WithRole(backend.AdminRole).Methods("GET")
|
||||
}
|
||||
|
@ -12,7 +12,6 @@ import (
|
||||
"git.quimbo.fr/odwrtw/canape/backend/auth"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/backend"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/subtitles"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/users"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/web"
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/odwrtw/papi"
|
||||
@ -27,11 +26,7 @@ func GetDetailsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) err
|
||||
vars := mux.Vars(r)
|
||||
id := vars["id"]
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
client, err := user.NewPapiClient()
|
||||
if err != nil {
|
||||
@ -77,11 +72,7 @@ func RefreshShowHandler(env *web.Env, w http.ResponseWriter, r *http.Request) er
|
||||
vars := mux.Vars(r)
|
||||
id := vars["id"]
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
client, err := user.NewPapiClient()
|
||||
if err != nil {
|
||||
@ -126,11 +117,7 @@ func SearchShow(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
vars := mux.Vars(r)
|
||||
search := vars["search"]
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
var shows []*polochon.Show
|
||||
searchers := env.Config.Show.Searchers
|
||||
@ -200,11 +187,7 @@ func AddToWishlist(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
}
|
||||
}
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
if err := backend.AddShowToWishlist(env.Database, user.ID, id, data.Season, data.Episode); err != nil {
|
||||
env.Log.Warnf("Error while adding to db : %s", err)
|
||||
@ -219,11 +202,7 @@ func DeleteFromWishlist(env *web.Env, w http.ResponseWriter, r *http.Request) er
|
||||
vars := mux.Vars(r)
|
||||
id := vars["id"]
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
if err := backend.DeleteShowFromWishlist(env.Database, user.ID, id); err != nil {
|
||||
env.Log.Warnf("Error while deleting to db : %s", err)
|
||||
@ -235,11 +214,7 @@ func DeleteFromWishlist(env *web.Env, w http.ResponseWriter, r *http.Request) er
|
||||
|
||||
// GetWishlistHandler returns the tracked shows of a user
|
||||
func GetWishlistHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
client, err := user.NewPapiClient()
|
||||
if err != nil {
|
||||
@ -279,11 +254,7 @@ func GetWishlistHandler(env *web.Env, w http.ResponseWriter, r *http.Request) er
|
||||
|
||||
// PolochonShowsHandler will returns shows from Polochon
|
||||
func PolochonShowsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Get the polochon's shows
|
||||
shows, err := getPolochonShows(env, user)
|
||||
@ -317,11 +288,7 @@ func RefreshEpisodeHandler(env *web.Env, w http.ResponseWriter, r *http.Request)
|
||||
season, _ := strconv.Atoi(vars["season"])
|
||||
episode, _ := strconv.Atoi(vars["episode"])
|
||||
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
client, err := user.NewPapiClient()
|
||||
if err != nil {
|
||||
@ -367,11 +334,7 @@ func RefreshEpisodeSubtitlesHandler(env *web.Env, w http.ResponseWriter, r *http
|
||||
episode, _ := strconv.Atoi(vars["episode"])
|
||||
|
||||
// Get the user
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return fmt.Errorf("invalid user type")
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Create a new papi client
|
||||
client, err := user.NewPapiClient()
|
||||
@ -412,11 +375,7 @@ func DownloadVVTSubtitle(env *web.Env, w http.ResponseWriter, r *http.Request) e
|
||||
episode, _ := strconv.Atoi(vars["episode"])
|
||||
|
||||
// Get the user
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return fmt.Errorf("invalid user type")
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Create a new papi client
|
||||
client, err := user.NewPapiClient()
|
||||
|
@ -8,7 +8,6 @@ import (
|
||||
"strings"
|
||||
|
||||
"git.quimbo.fr/odwrtw/canape/backend/backend"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/users"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/web"
|
||||
"github.com/odwrtw/papi"
|
||||
polochon "github.com/odwrtw/polochon/lib"
|
||||
@ -198,7 +197,7 @@ func (s *Show) imgFile(imgType string) string {
|
||||
}
|
||||
|
||||
// getPolochonShows returns all the Shows from the polochon of a user
|
||||
func getPolochonShows(env *web.Env, user *users.User) ([]*Show, error) {
|
||||
func getPolochonShows(env *web.Env, user *backend.User) ([]*Show, error) {
|
||||
shows := []*Show{}
|
||||
|
||||
client, err := user.NewPapiClient()
|
||||
|
@ -7,7 +7,6 @@ import (
|
||||
"sort"
|
||||
|
||||
"git.quimbo.fr/odwrtw/canape/backend/auth"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/users"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/web"
|
||||
"github.com/gorilla/mux"
|
||||
polochon "github.com/odwrtw/polochon/lib"
|
||||
@ -28,11 +27,7 @@ func DownloadHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error
|
||||
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"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
client, err := user.NewPapiClient()
|
||||
if err != nil {
|
||||
@ -49,11 +44,7 @@ func DownloadHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error
|
||||
|
||||
// ListHandler lists torrents of a polochon
|
||||
func ListHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
client, err := user.NewPapiClient()
|
||||
if err != nil {
|
||||
@ -70,11 +61,7 @@ func ListHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
|
||||
// RemoveHandler removes a torrents via polochon
|
||||
func RemoveHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
v := auth.GetCurrentUser(r, env.Log)
|
||||
user, ok := v.(*users.User)
|
||||
if !ok {
|
||||
return env.RenderError(w, errors.New("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, env.Log)
|
||||
|
||||
// Get the torrent ID from the URL
|
||||
vars := mux.Vars(r)
|
||||
|
@ -7,6 +7,7 @@ import (
|
||||
"net/http"
|
||||
|
||||
"git.quimbo.fr/odwrtw/canape/backend/auth"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/backend"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/config"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/tokens"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/web"
|
||||
@ -37,7 +38,7 @@ func SignupPOSTHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error
|
||||
return e.RenderError(w, fmt.Errorf("Passwords missmatch"))
|
||||
}
|
||||
|
||||
user := User{Name: data.Username}
|
||||
user := backend.User{Name: data.Username}
|
||||
|
||||
var err error
|
||||
user.Hash, err = e.Auth.GenHash(data.Password)
|
||||
@ -71,7 +72,7 @@ func LoginPOSTHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error
|
||||
|
||||
token, err := e.Auth.Login(r, data.Username, data.Password)
|
||||
if err != nil {
|
||||
if err == auth.ErrInvalidPassword || err == ErrUnknownUser {
|
||||
if err == auth.ErrInvalidPassword || err == backend.ErrUnknownUser {
|
||||
return e.RenderError(w, fmt.Errorf("Error invalid user or password"))
|
||||
}
|
||||
return err
|
||||
@ -91,11 +92,7 @@ func LoginPOSTHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error
|
||||
|
||||
// DetailsHandler show user details
|
||||
func DetailsHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
v := auth.GetCurrentUser(r, e.Log)
|
||||
user, ok := v.(*User)
|
||||
if !ok {
|
||||
return fmt.Errorf("invalid user type")
|
||||
}
|
||||
user := auth.GetCurrentUser(r, e.Log)
|
||||
|
||||
var polochonConfig config.UserPolochon
|
||||
if user.PolochonID.Valid && user.PolochonID.String != "" {
|
||||
@ -115,11 +112,7 @@ func DetailsHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
|
||||
// EditHandler allow editing user info and configuration
|
||||
func EditHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
v := auth.GetCurrentUser(r, e.Log)
|
||||
user, ok := v.(*User)
|
||||
if !ok {
|
||||
return fmt.Errorf("invalid user type")
|
||||
}
|
||||
user := auth.GetCurrentUser(r, e.Log)
|
||||
|
||||
var data struct {
|
||||
PolochonID string `json:"polochon_id"`
|
||||
@ -169,11 +162,7 @@ func EditHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
|
||||
// GetTokensHandler lists the tokens of a user
|
||||
func GetTokensHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
v := auth.GetCurrentUser(r, e.Log)
|
||||
user, ok := v.(*User)
|
||||
if !ok {
|
||||
return fmt.Errorf("invalid user type")
|
||||
}
|
||||
user := auth.GetCurrentUser(r, e.Log)
|
||||
|
||||
tokens, err := tokens.GetUserTokens(e.Database, user.Name)
|
||||
if err != nil {
|
||||
@ -188,11 +177,7 @@ func DeleteTokenHandler(e *web.Env, w http.ResponseWriter, r *http.Request) erro
|
||||
vars := mux.Vars(r)
|
||||
token := vars["token"]
|
||||
|
||||
v := auth.GetCurrentUser(r, e.Log)
|
||||
user, ok := v.(*User)
|
||||
if !ok {
|
||||
return fmt.Errorf("invalid user type")
|
||||
}
|
||||
user := auth.GetCurrentUser(r, e.Log)
|
||||
|
||||
if err := tokens.DeleteToken(e.Database, user.Name, token); err != nil {
|
||||
return err
|
||||
@ -206,11 +191,7 @@ func EditTokenHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error
|
||||
vars := mux.Vars(r)
|
||||
token := vars["token"]
|
||||
|
||||
v := auth.GetCurrentUser(r, e.Log)
|
||||
user, ok := v.(*User)
|
||||
if !ok {
|
||||
return fmt.Errorf("invalid user type")
|
||||
}
|
||||
user := auth.GetCurrentUser(r, e.Log)
|
||||
|
||||
t, err := tokens.GetUserToken(e.Database, user.Name, token)
|
||||
if err != nil {
|
||||
@ -235,11 +216,7 @@ func EditTokenHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error
|
||||
// GetModulesStatus returns the status of the modules
|
||||
func GetModulesStatus(e *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
// Get the user from the request
|
||||
v := auth.GetCurrentUser(r, e.Log)
|
||||
user, ok := v.(*User)
|
||||
if !ok {
|
||||
return e.RenderError(w, fmt.Errorf("invalid user type"))
|
||||
}
|
||||
user := auth.GetCurrentUser(r, e.Log)
|
||||
|
||||
// Create a papi client
|
||||
client, err := user.NewPapiClient()
|
||||
|
Loading…
x
Reference in New Issue
Block a user