Put user in backend

This commit is contained in:
Lucas BEE 2019-06-20 12:11:54 +00:00
parent 2ca1097b77
commit 9c429ba3d4
17 changed files with 129 additions and 311 deletions

View File

@ -5,8 +5,8 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"git.quimbo.fr/odwrtw/canape/backend/backend"
"git.quimbo.fr/odwrtw/canape/backend/config" "git.quimbo.fr/odwrtw/canape/backend/config"
"git.quimbo.fr/odwrtw/canape/backend/users"
"git.quimbo.fr/odwrtw/canape/backend/web" "git.quimbo.fr/odwrtw/canape/backend/web"
"github.com/gorilla/mux" "github.com/gorilla/mux"
@ -21,7 +21,7 @@ func GetUsersHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error
log.Debug("Getting users") log.Debug("Getting users")
users, err := users.GetAll(env.Database) users, err := backend.GetAllUsers(env.Database)
if err != nil { if err != nil {
return env.RenderError(w, err) 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) vars := mux.Vars(r)
username := vars["username"] username := vars["username"]
user, err := users.Get(env.Database, username) user, err := backend.GetUser(env.Database, username)
if err != nil { if err != nil {
return err 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")) 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 { if err != nil {
return err return err
} }

View File

@ -6,9 +6,10 @@ import (
"strings" "strings"
"time" "time"
"git.quimbo.fr/odwrtw/canape/backend/backend"
"git.quimbo.fr/odwrtw/canape/backend/tokens"
jwt "github.com/dgrijalva/jwt-go" jwt "github.com/dgrijalva/jwt-go"
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
"git.quimbo.fr/odwrtw/canape/backend/tokens"
"golang.org/x/crypto/bcrypt" "golang.org/x/crypto/bcrypt"
) )
@ -24,20 +25,6 @@ var (
ErrUnauthenticatedUser = fmt.Errorf("Unauthenticated user") 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 // Authorizer handle sesssion
type Authorizer struct { type Authorizer struct {
db *sqlx.DB db *sqlx.DB
@ -46,10 +33,9 @@ type Authorizer struct {
// Params for Authorizer creation // Params for Authorizer creation
type Params struct { type Params struct {
Backend UserBackend Pepper string
Pepper string Cost int
Cost int Secret string
Secret string
} }
// New Authorizer pepper is like a salt but not stored in database, // New Authorizer pepper is like a salt but not stored in database,
@ -71,7 +57,7 @@ func (a *Authorizer) GenHash(password string) (string, error) {
} }
// GenerateJWTToken generates a JWT token for a user // 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 // Create a jwt token
jwtToken := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ jwtToken := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
// Not before // Not before
@ -79,7 +65,7 @@ func (a *Authorizer) GenerateJWTToken(r *http.Request, u User) (*tokens.Token, e
// Issued at // Issued at
"iat": time.Now().Unix(), "iat": time.Now().Unix(),
// Private claims // Private claims
"username": u.GetName(), "username": u.Name,
"isAdmin": u.IsAdmin(), "isAdmin": u.IsAdmin(),
"isActivated": u.IsActivated(), "isActivated": u.IsActivated(),
}) })
@ -92,20 +78,20 @@ func (a *Authorizer) GenerateJWTToken(r *http.Request, u User) (*tokens.Token, e
return &tokens.Token{ return &tokens.Token{
Token: ss, Token: ss,
Username: u.GetName(), Username: u.Name,
IP: getIPFromRequest(r), IP: getIPFromRequest(r),
}, nil }, nil
} }
// Login cheks password and creates a jwt token // Login cheks password and creates a jwt token
func (a *Authorizer) Login(r *http.Request, username, password string) (*tokens.Token, error) { 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 { if err != nil {
return nil, err return nil, err
} }
// Compare the password // 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 { if err != nil {
return nil, ErrInvalidPassword 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 // 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 var tokenStr string
h := req.Header.Get("Authorization") h := req.Header.Get("Authorization")
if h != "" { if h != "" {
@ -165,13 +151,13 @@ func (a *Authorizer) CurrentUser(rw http.ResponseWriter, req *http.Request) (Use
} }
// Get the user // Get the user
u, err := a.Backend.GetUser(tokenClaims.Username) u, err := backend.GetUser(a.db, tokenClaims.Username)
if err != nil { if err != nil {
return nil, err return nil, err
} }
// Check the token in database // 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 { if err != nil {
return nil, ErrInvalidToken return nil, ErrInvalidToken
} }

View File

@ -5,6 +5,7 @@ import (
"net" "net"
"net/http" "net/http"
"git.quimbo.fr/odwrtw/canape/backend/backend"
"github.com/sirupsen/logrus" "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) user, err := m.authorizer.CurrentUser(w, r)
switch err { switch err {
case nil: 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") ctxKey := authContextKey("auth.user")
ctx := context.WithValue(r.Context(), ctxKey, user) ctx := context.WithValue(r.Context(), ctxKey, user)
r = r.WithContext(ctx) 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 // 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") log.Debug("getting user from context")
ctxKey := authContextKey("auth.user") ctxKey := authContextKey("auth.user")
@ -97,7 +98,7 @@ func GetCurrentUser(r *http.Request, log *logrus.Entry) User {
if u == nil { if u == nil {
return nil return nil
} }
user, ok := u.(User) user, ok := u.(*backend.User)
if !ok { if !ok {
panic("invalid user type") panic("invalid user type")
} }

View File

@ -1,9 +1,6 @@
package backend package backend
import ( import (
"git.quimbo.fr/odwrtw/canape/backend/auth"
"git.quimbo.fr/odwrtw/canape/backend/users"
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
polochon "github.com/odwrtw/polochon/lib" polochon "github.com/odwrtw/polochon/lib"
) )
@ -29,9 +26,3 @@ func (b *Backend) Init([]byte) error {
func (b *Backend) Status() (polochon.ModuleStatus, error) { func (b *Backend) Status() (polochon.ModuleStatus, error) {
return polochon.StatusOK, nil 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)
}

View File

@ -1,4 +1,4 @@
package users package backend
import ( import (
"database/sql" "database/sql"
@ -6,12 +6,11 @@ import (
"errors" "errors"
"fmt" "fmt"
"git.quimbo.fr/odwrtw/canape/backend/config"
"git.quimbo.fr/odwrtw/canape/backend/sqly"
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
"github.com/jmoiron/sqlx/types" "github.com/jmoiron/sqlx/types"
"github.com/odwrtw/papi" "github.com/odwrtw/papi"
"git.quimbo.fr/odwrtw/canape/backend/config"
"git.quimbo.fr/odwrtw/canape/backend/sqly"
) )
const ( const (
@ -125,8 +124,8 @@ func (u *User) NewPapiClient() (*papi.Client, error) {
return client, nil return client, nil
} }
// Get returns user with specified name // GetUser returns user with specified name
func Get(q sqlx.Queryer, name string) (*User, error) { func GetUser(q sqlx.Queryer, name string) (*User, error) {
u := &User{} u := &User{}
err := q.QueryRowx(getUserQuery, name).StructScan(u) err := q.QueryRowx(getUserQuery, name).StructScan(u)
if err != nil { if err != nil {
@ -138,8 +137,8 @@ func Get(q sqlx.Queryer, name string) (*User, error) {
return u, nil return u, nil
} }
// GetByID returns user using its id // GetUserByID returns user using its id
func GetByID(q sqlx.Queryer, id string) (*User, error) { func GetUserByID(q sqlx.Queryer, id string) (*User, error) {
u := &User{} u := &User{}
err := q.QueryRowx(getUserByIDQuery, id).StructScan(u) err := q.QueryRowx(getUserByIDQuery, id).StructScan(u)
if err != nil { if err != nil {
@ -151,8 +150,8 @@ func GetByID(q sqlx.Queryer, id string) (*User, error) {
return u, nil return u, nil
} }
// GetAll returns all the users // GetAllUsers returns all the users
func GetAll(db *sqlx.DB) ([]*User, error) { func GetAllUsers(db *sqlx.DB) ([]*User, error) {
users := []*User{} users := []*User{}
err := db.Select(&users, getAllUsersQuery) err := db.Select(&users, getAllUsersQuery)
if err != nil { if err != nil {
@ -203,16 +202,6 @@ func (u *User) Delete(ex *sqlx.DB) error {
return nil 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 // HasRole checks if a user as a role
func (u *User) HasRole(role string) bool { func (u *User) HasRole(role string) bool {
if role == AdminRole && !u.Admin { if role == AdminRole && !u.Admin {

View File

@ -1,12 +1,10 @@
package events package events
import ( import (
"errors"
"net/http" "net/http"
"time" "time"
"git.quimbo.fr/odwrtw/canape/backend/auth" "git.quimbo.fr/odwrtw/canape/backend/auth"
"git.quimbo.fr/odwrtw/canape/backend/users"
"git.quimbo.fr/odwrtw/canape/backend/web" "git.quimbo.fr/odwrtw/canape/backend/web"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
) )
@ -23,11 +21,7 @@ const (
// WsHandler handles the websockets messages // WsHandler handles the websockets messages
func WsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error { func WsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
// Get the user // Get the user
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
upgrader := websocket.Upgrader{ upgrader := websocket.Upgrader{
ReadBufferSize: 1024, ReadBufferSize: 1024,

View File

@ -4,7 +4,7 @@ import (
"reflect" "reflect"
"time" "time"
"git.quimbo.fr/odwrtw/canape/backend/users" "git.quimbo.fr/odwrtw/canape/backend/backend"
"github.com/odwrtw/papi" "github.com/odwrtw/papi"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
@ -12,7 +12,7 @@ import (
// TorrentNotifier is a struct implementing the Notifier interface // TorrentNotifier is a struct implementing the Notifier interface
type TorrentNotifier struct { type TorrentNotifier struct {
*Notifier *Notifier
user *users.User user *backend.User
client *papi.Client client *papi.Client
torrents []papi.Torrent torrents []papi.Torrent
log *logrus.Entry log *logrus.Entry

View File

@ -1,14 +1,12 @@
package extmedias package extmedias
import ( import (
"errors"
"net/http" "net/http"
"git.quimbo.fr/odwrtw/canape/backend/auth" "git.quimbo.fr/odwrtw/canape/backend/auth"
"git.quimbo.fr/odwrtw/canape/backend/backend" "git.quimbo.fr/odwrtw/canape/backend/backend"
"git.quimbo.fr/odwrtw/canape/backend/movies" "git.quimbo.fr/odwrtw/canape/backend/movies"
"git.quimbo.fr/odwrtw/canape/backend/shows" "git.quimbo.fr/odwrtw/canape/backend/shows"
"git.quimbo.fr/odwrtw/canape/backend/users"
"git.quimbo.fr/odwrtw/canape/backend/web" "git.quimbo.fr/odwrtw/canape/backend/web"
polochon "github.com/odwrtw/polochon/lib" polochon "github.com/odwrtw/polochon/lib"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -48,7 +46,7 @@ func RefreshShowsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) e
} }
// GetMovies get some movies // 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{ log := env.Log.WithFields(logrus.Fields{
"source": source, "source": source,
"category": category, "category": category,
@ -107,7 +105,7 @@ func GetMovies(env *web.Env, user *users.User, source string, category string) (
} }
// GetShows get some shows // 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{ log := env.Log.WithFields(logrus.Fields{
"source": source, "source": source,
"category": category, "category": category,
@ -178,11 +176,7 @@ func ExploreMovies(env *web.Env, w http.ResponseWriter, r *http.Request) error {
category = "popular" category = "popular"
} }
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user"))
}
// Get the medias without trying to refresh them // Get the medias without trying to refresh them
movies, err := GetMovies(env, user, source, category) 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" category = "rating"
} }
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user"))
}
// Get the medias without trying to refresh them // Get the medias without trying to refresh them
shows, err := GetShows(env, user, source, category, false) shows, err := GetShows(env, user, source, category, false)

View File

@ -47,10 +47,9 @@ func main() {
// Generate auth params // Generate auth params
authParams := auth.Params{ authParams := auth.Params{
Backend: backend, Pepper: cf.Authorizer.Pepper,
Pepper: cf.Authorizer.Pepper, Cost: cf.Authorizer.Cost,
Cost: cf.Authorizer.Cost, Secret: cf.Authorizer.Secret,
Secret: cf.Authorizer.Secret,
} }
authorizer := auth.New(db, authParams) authorizer := auth.New(db, authParams)

View File

@ -1,7 +1,6 @@
package movies package movies
import ( import (
"errors"
"fmt" "fmt"
"log" "log"
"net/http" "net/http"
@ -10,7 +9,6 @@ import (
"git.quimbo.fr/odwrtw/canape/backend/backend" "git.quimbo.fr/odwrtw/canape/backend/backend"
"git.quimbo.fr/odwrtw/canape/backend/config" "git.quimbo.fr/odwrtw/canape/backend/config"
"git.quimbo.fr/odwrtw/canape/backend/subtitles" "git.quimbo.fr/odwrtw/canape/backend/subtitles"
"git.quimbo.fr/odwrtw/canape/backend/users"
"git.quimbo.fr/odwrtw/canape/backend/web" "git.quimbo.fr/odwrtw/canape/backend/web"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/odwrtw/papi" "github.com/odwrtw/papi"
@ -21,11 +19,7 @@ import (
// PolochonMoviesHandler will returns movies from Polochon // PolochonMoviesHandler will returns movies from Polochon
func PolochonMoviesHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error { func PolochonMoviesHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
// Get the user from the request // Get the user from the request
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, fmt.Errorf("invalid user type"))
}
// Get the polochon movies of the user // Get the polochon movies of the user
movies, err := getPolochonMovies(user, env) movies, err := getPolochonMovies(user, env)
@ -69,11 +63,7 @@ func RefreshMovieHandler(env *web.Env, w http.ResponseWriter, r *http.Request) e
id := vars["id"] id := vars["id"]
// Get the user // Get the user
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return fmt.Errorf("invalid user type")
}
// Create a new papi client // Create a new papi client
client, err := user.NewPapiClient() client, err := user.NewPapiClient()
@ -114,11 +104,7 @@ func SearchMovie(env *web.Env, w http.ResponseWriter, r *http.Request) error {
vars := mux.Vars(r) vars := mux.Vars(r)
search := vars["search"] search := vars["search"]
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user"))
}
// Create a new papi client // Create a new papi client
client, err := user.NewPapiClient() client, err := user.NewPapiClient()
@ -200,11 +186,7 @@ func PolochonDeleteHandler(env *web.Env, w http.ResponseWriter, r *http.Request)
log.Debugf("deleting movie") log.Debugf("deleting movie")
// Get the user // Get the user
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
// Create a new papi client // Create a new papi client
client, err := user.NewPapiClient() client, err := user.NewPapiClient()
@ -221,11 +203,7 @@ func AddToWishlist(env *web.Env, w http.ResponseWriter, r *http.Request) error {
vars := mux.Vars(r) vars := mux.Vars(r)
id := vars["id"] id := vars["id"]
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
if err := backend.AddMovieToWishlist(env.Database, user.ID, id); err != nil { if err := backend.AddMovieToWishlist(env.Database, user.ID, id); err != nil {
return env.RenderError(w, err) 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) vars := mux.Vars(r)
id := vars["id"] id := vars["id"]
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
if err := backend.DeleteMovieFromWishlist(env.Database, user.ID, id); err != nil { if err := backend.DeleteMovieFromWishlist(env.Database, user.ID, id); err != nil {
return env.RenderError(w, err) 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 // GetWishlistHandler returns the wishlisted movies of a user
func GetWishlistHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error { func GetWishlistHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
// Create a new papi client // Create a new papi client
client, err := user.NewPapiClient() client, err := user.NewPapiClient()
@ -320,11 +290,7 @@ func RefreshMovieSubtitlesHandler(env *web.Env, w http.ResponseWriter, r *http.R
id := vars["id"] id := vars["id"]
// Get the user // Get the user
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return fmt.Errorf("invalid user type")
}
// Create a new papi client // Create a new papi client
client, err := user.NewPapiClient() client, err := user.NewPapiClient()
@ -358,11 +324,7 @@ func DownloadVVTSubtitle(env *web.Env, w http.ResponseWriter, r *http.Request) e
lang := vars["lang"] lang := vars["lang"]
// Get the user // Get the user
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return fmt.Errorf("invalid user type")
}
// Create a new papi client // Create a new papi client
client, err := user.NewPapiClient() client, err := user.NewPapiClient()

View File

@ -10,7 +10,6 @@ import (
"git.quimbo.fr/odwrtw/canape/backend/backend" "git.quimbo.fr/odwrtw/canape/backend/backend"
"git.quimbo.fr/odwrtw/canape/backend/subtitles" "git.quimbo.fr/odwrtw/canape/backend/subtitles"
"git.quimbo.fr/odwrtw/canape/backend/users"
"git.quimbo.fr/odwrtw/canape/backend/web" "git.quimbo.fr/odwrtw/canape/backend/web"
"github.com/odwrtw/papi" "github.com/odwrtw/papi"
polochon "github.com/odwrtw/polochon/lib" 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 // 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{} movies := []*Movie{}
// Create a papi client // Create a papi client

View File

@ -6,7 +6,7 @@ import (
"net/http" "net/http"
"git.quimbo.fr/odwrtw/canape/backend/auth" "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" "git.quimbo.fr/odwrtw/canape/backend/web"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -49,11 +49,7 @@ func GetPolochonsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) e
"function": "polochons.GetPolochonsHandler", "function": "polochons.GetPolochonsHandler",
}) })
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, fmt.Errorf("invalid user type"))
}
log.Debug("Getting polochons") log.Debug("Getting polochons")
@ -63,7 +59,7 @@ func GetPolochonsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) e
} }
for _, p := range polochons { for _, p := range polochons {
users, err := users.GetPolochonUsers(env.Database, p.ID) users, err := backend.GetPolochonUsers(env.Database, p.ID)
if err != nil { if err != nil {
return env.RenderError(w, err) return env.RenderError(w, err)
} }
@ -79,11 +75,7 @@ func NewPolochonHandler(env *web.Env, w http.ResponseWriter, r *http.Request) er
"function": "polochons.NewPolochonHandler", "function": "polochons.NewPolochonHandler",
}) })
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, fmt.Errorf("invalid user type"))
}
var data struct { var data struct {
Name string `json:"name"` Name string `json:"name"`
@ -127,11 +119,7 @@ func EditPolochonHandler(env *web.Env, w http.ResponseWriter, r *http.Request) e
}) })
log.Debugf("editing polochon ...") log.Debugf("editing polochon ...")
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, fmt.Errorf("invalid user type"))
}
// Get the polochon // Get the polochon
vars := mux.Vars(r) vars := mux.Vars(r)
@ -199,11 +187,7 @@ func PolochonActivateUser(env *web.Env, w http.ResponseWriter, r *http.Request,
}) })
log.Debugf("editing polochon users ...") log.Debugf("editing polochon users ...")
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, fmt.Errorf("invalid user type"))
}
// Get the polochon // Get the polochon
vars := mux.Vars(r) vars := mux.Vars(r)
@ -220,7 +204,7 @@ func PolochonActivateUser(env *web.Env, w http.ResponseWriter, r *http.Request,
// Get the user // Get the user
userID := vars["user_id"] userID := vars["user_id"]
u, err := users.GetByID(env.Database, userID) u, err := backend.GetUserByID(env.Database, userID)
if err != nil { if err != nil {
return env.RenderError(w, err) return env.RenderError(w, err)
} }

View File

@ -2,6 +2,7 @@ package main
import ( import (
admin "git.quimbo.fr/odwrtw/canape/backend/admins" admin "git.quimbo.fr/odwrtw/canape/backend/admins"
"git.quimbo.fr/odwrtw/canape/backend/backend"
"git.quimbo.fr/odwrtw/canape/backend/events" "git.quimbo.fr/odwrtw/canape/backend/events"
extmedias "git.quimbo.fr/odwrtw/canape/backend/external_medias" extmedias "git.quimbo.fr/odwrtw/canape/backend/external_medias"
"git.quimbo.fr/odwrtw/canape/backend/movies" "git.quimbo.fr/odwrtw/canape/backend/movies"
@ -17,72 +18,72 @@ func setupRoutes(env *web.Env) {
// User's route // User's route
env.Handle("/users/login", users.LoginPOSTHandler).Methods("POST") env.Handle("/users/login", users.LoginPOSTHandler).Methods("POST")
env.Handle("/users/signup", users.SignupPOSTHandler).Methods("POST") env.Handle("/users/signup", users.SignupPOSTHandler).Methods("POST")
env.Handle("/users/details", users.DetailsHandler).WithRole(users.UserRole).Methods("GET") env.Handle("/users/details", users.DetailsHandler).WithRole(backend.UserRole).Methods("GET")
env.Handle("/users/edit", users.EditHandler).WithRole(users.UserRole).Methods("POST") env.Handle("/users/edit", users.EditHandler).WithRole(backend.UserRole).Methods("POST")
env.Handle("/users/tokens", users.GetTokensHandler).WithRole(users.UserRole).Methods("GET") env.Handle("/users/tokens", users.GetTokensHandler).WithRole(backend.UserRole).Methods("GET")
env.Handle("/users/tokens/{token}", users.EditTokenHandler).WithRole(users.UserRole).Methods("POST") env.Handle("/users/tokens/{token}", users.EditTokenHandler).WithRole(backend.UserRole).Methods("POST")
env.Handle("/users/tokens/{token}", users.DeleteTokenHandler).WithRole(users.UserRole).Methods("DELETE") env.Handle("/users/tokens/{token}", users.DeleteTokenHandler).WithRole(backend.UserRole).Methods("DELETE")
env.Handle("/users/modules/status", users.GetModulesStatus).WithRole(users.UserRole).Methods("GET") env.Handle("/users/modules/status", users.GetModulesStatus).WithRole(backend.UserRole).Methods("GET")
env.Handle("/users/polochons", polochons.GetPolochonsHandler).WithRole(users.UserRole).Methods("GET") env.Handle("/users/polochons", polochons.GetPolochonsHandler).WithRole(backend.UserRole).Methods("GET")
// Polochon's route // Polochon's route
env.Handle("/polochons", polochons.GetPublicPolochonsHandler).Methods("GET") env.Handle("/polochons", polochons.GetPublicPolochonsHandler).Methods("GET")
env.Handle("/polochons", polochons.NewPolochonHandler).WithRole(users.UserRole).Methods("POST") env.Handle("/polochons", polochons.NewPolochonHandler).WithRole(backend.UserRole).Methods("POST")
env.Handle("/polochons/{id}", polochons.EditPolochonHandler).WithRole(users.UserRole).Methods("POST") env.Handle("/polochons/{id}", polochons.EditPolochonHandler).WithRole(backend.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.PolochonActivateUserHandler).WithRole(backend.UserRole).Methods("POST")
env.Handle("/polochons/{id}/users/{user_id}", polochons.PolochonDeactivateUserHandler).WithRole(users.UserRole).Methods("DELETE") env.Handle("/polochons/{id}/users/{user_id}", polochons.PolochonDeactivateUserHandler).WithRole(backend.UserRole).Methods("DELETE")
// Movies routes // Movies routes
env.Handle("/movies/polochon", movies.PolochonMoviesHandler).WithRole(users.UserRole).Methods("GET") env.Handle("/movies/polochon", movies.PolochonMoviesHandler).WithRole(backend.UserRole).Methods("GET")
env.Handle("/movies/explore", extmedias.ExploreMovies).WithRole(users.UserRole).Methods("GET") env.Handle("/movies/explore", extmedias.ExploreMovies).WithRole(backend.UserRole).Methods("GET")
env.Handle("/movies/explore/options", extmedias.MovieExplorerOptions).WithRole(users.UserRole).Methods("GET") env.Handle("/movies/explore/options", extmedias.MovieExplorerOptions).WithRole(backend.UserRole).Methods("GET")
env.Handle("/movies/search/{search}", movies.SearchMovie).WithRole(users.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(users.UserRole).Methods("DELETE") 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(users.UserRole).Methods("POST") 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(users.UserRole).Methods("GET") 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(users.UserRole).Methods("POST") env.Handle("/movies/{id:tt[0-9]+}/subtitles/refresh", movies.RefreshMovieSubtitlesHandler).WithRole(backend.UserRole).Methods("POST")
env.Handle("/movies/refresh", extmedias.RefreshMoviesHandler).WithRole(users.AdminRole).Methods("POST") env.Handle("/movies/refresh", extmedias.RefreshMoviesHandler).WithRole(backend.AdminRole).Methods("POST")
// Shows routes // Shows routes
env.Handle("/shows/polochon", shows.PolochonShowsHandler).WithRole(users.UserRole).Methods("GET") env.Handle("/shows/polochon", shows.PolochonShowsHandler).WithRole(backend.UserRole).Methods("GET")
env.Handle("/shows/explore", extmedias.ExploreShows).WithRole(users.UserRole).Methods("GET") env.Handle("/shows/explore", extmedias.ExploreShows).WithRole(backend.UserRole).Methods("GET")
env.Handle("/shows/explore/options", extmedias.ShowExplorerOptions).WithRole(users.UserRole).Methods("GET") env.Handle("/shows/explore/options", extmedias.ShowExplorerOptions).WithRole(backend.UserRole).Methods("GET")
env.Handle("/shows/search/{search}", shows.SearchShow).WithRole(users.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(users.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(users.UserRole).Methods("POST") 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(users.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(users.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(users.UserRole).Methods("GET") 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(users.AdminRole).Methods("POST") 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 // Wishlist routes for shows
env.Handle("/wishlist/shows", shows.GetWishlistHandler).WithRole(users.UserRole).Methods("GET") env.Handle("/wishlist/shows", shows.GetWishlistHandler).WithRole(backend.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.AddToWishlist).WithRole(backend.UserRole).Methods("POST")
env.Handle("/wishlist/shows/{id:tt[0-9]+}", shows.DeleteFromWishlist).WithRole(users.UserRole).Methods("DELETE") env.Handle("/wishlist/shows/{id:tt[0-9]+}", shows.DeleteFromWishlist).WithRole(backend.UserRole).Methods("DELETE")
// Wishlist routes for movies // Wishlist routes for movies
env.Handle("/wishlist/movies", movies.GetWishlistHandler).WithRole(users.UserRole).Methods("GET") env.Handle("/wishlist/movies", movies.GetWishlistHandler).WithRole(backend.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.AddToWishlist).WithRole(backend.UserRole).Methods("POST")
env.Handle("/wishlist/movies/{id:tt[0-9]+}", movies.DeleteFromWishlist).WithRole(users.UserRole).Methods("DELETE") env.Handle("/wishlist/movies/{id:tt[0-9]+}", movies.DeleteFromWishlist).WithRole(backend.UserRole).Methods("DELETE")
// Torrents routes // Torrents routes
env.Handle("/torrents", torrents.DownloadHandler).WithRole(users.UserRole).Methods("POST") env.Handle("/torrents", torrents.DownloadHandler).WithRole(backend.UserRole).Methods("POST")
env.Handle("/torrents", torrents.ListHandler).WithRole(users.UserRole).Methods("GET") env.Handle("/torrents", torrents.ListHandler).WithRole(backend.UserRole).Methods("GET")
env.Handle("/torrents/{id}", torrents.RemoveHandler).WithRole(users.UserRole).Methods("DELETE") env.Handle("/torrents/{id}", torrents.RemoveHandler).WithRole(backend.UserRole).Methods("DELETE")
env.Handle("/torrents/search/{type}/{search}", torrents.SearchHandler).WithRole(users.UserRole).Methods("GET") env.Handle("/torrents/search/{type}/{search}", torrents.SearchHandler).WithRole(backend.UserRole).Methods("GET")
// Route to refresh all movies and shows // 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 // 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 // Admin routes
env.Handle("/admins/users", admin.GetUsersHandler).WithRole(users.AdminRole).Methods("GET") env.Handle("/admins/users", admin.GetUsersHandler).WithRole(backend.AdminRole).Methods("GET")
env.Handle("/admins/users", admin.UpdateUserHandler).WithRole(users.AdminRole).Methods("POST") env.Handle("/admins/users", admin.UpdateUserHandler).WithRole(backend.AdminRole).Methods("POST")
env.Handle("/admins/stats", admin.GetStatsHandler).WithRole(users.AdminRole).Methods("GET") env.Handle("/admins/stats", admin.GetStatsHandler).WithRole(backend.AdminRole).Methods("GET")
env.Handle("/admins/tokens/{username}", admin.GenerateUserToken).WithRole(users.AdminRole).Methods("POST") env.Handle("/admins/tokens/{username}", admin.GenerateUserToken).WithRole(backend.AdminRole).Methods("POST")
env.Handle("/admins/modules", admin.GetModulesStatuses).WithRole(users.AdminRole).Methods("GET") env.Handle("/admins/modules", admin.GetModulesStatuses).WithRole(backend.AdminRole).Methods("GET")
} }

View File

@ -12,7 +12,6 @@ import (
"git.quimbo.fr/odwrtw/canape/backend/auth" "git.quimbo.fr/odwrtw/canape/backend/auth"
"git.quimbo.fr/odwrtw/canape/backend/backend" "git.quimbo.fr/odwrtw/canape/backend/backend"
"git.quimbo.fr/odwrtw/canape/backend/subtitles" "git.quimbo.fr/odwrtw/canape/backend/subtitles"
"git.quimbo.fr/odwrtw/canape/backend/users"
"git.quimbo.fr/odwrtw/canape/backend/web" "git.quimbo.fr/odwrtw/canape/backend/web"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/odwrtw/papi" "github.com/odwrtw/papi"
@ -27,11 +26,7 @@ func GetDetailsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) err
vars := mux.Vars(r) vars := mux.Vars(r)
id := vars["id"] id := vars["id"]
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
client, err := user.NewPapiClient() client, err := user.NewPapiClient()
if err != nil { if err != nil {
@ -77,11 +72,7 @@ func RefreshShowHandler(env *web.Env, w http.ResponseWriter, r *http.Request) er
vars := mux.Vars(r) vars := mux.Vars(r)
id := vars["id"] id := vars["id"]
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
client, err := user.NewPapiClient() client, err := user.NewPapiClient()
if err != nil { if err != nil {
@ -126,11 +117,7 @@ func SearchShow(env *web.Env, w http.ResponseWriter, r *http.Request) error {
vars := mux.Vars(r) vars := mux.Vars(r)
search := vars["search"] search := vars["search"]
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
var shows []*polochon.Show var shows []*polochon.Show
searchers := env.Config.Show.Searchers 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 := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
if err := backend.AddShowToWishlist(env.Database, user.ID, id, data.Season, data.Episode); err != nil { 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) 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) vars := mux.Vars(r)
id := vars["id"] id := vars["id"]
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
if err := backend.DeleteShowFromWishlist(env.Database, user.ID, id); err != nil { if err := backend.DeleteShowFromWishlist(env.Database, user.ID, id); err != nil {
env.Log.Warnf("Error while deleting to db : %s", err) 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 // GetWishlistHandler returns the tracked shows of a user
func GetWishlistHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error { func GetWishlistHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
client, err := user.NewPapiClient() client, err := user.NewPapiClient()
if err != nil { 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 // PolochonShowsHandler will returns shows from Polochon
func PolochonShowsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error { func PolochonShowsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
// Get the polochon's shows // Get the polochon's shows
shows, err := getPolochonShows(env, user) 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"]) season, _ := strconv.Atoi(vars["season"])
episode, _ := strconv.Atoi(vars["episode"]) episode, _ := strconv.Atoi(vars["episode"])
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
client, err := user.NewPapiClient() client, err := user.NewPapiClient()
if err != nil { if err != nil {
@ -367,11 +334,7 @@ func RefreshEpisodeSubtitlesHandler(env *web.Env, w http.ResponseWriter, r *http
episode, _ := strconv.Atoi(vars["episode"]) episode, _ := strconv.Atoi(vars["episode"])
// Get the user // Get the user
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return fmt.Errorf("invalid user type")
}
// Create a new papi client // Create a new papi client
client, err := user.NewPapiClient() 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"]) episode, _ := strconv.Atoi(vars["episode"])
// Get the user // Get the user
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return fmt.Errorf("invalid user type")
}
// Create a new papi client // Create a new papi client
client, err := user.NewPapiClient() client, err := user.NewPapiClient()

View File

@ -8,7 +8,6 @@ import (
"strings" "strings"
"git.quimbo.fr/odwrtw/canape/backend/backend" "git.quimbo.fr/odwrtw/canape/backend/backend"
"git.quimbo.fr/odwrtw/canape/backend/users"
"git.quimbo.fr/odwrtw/canape/backend/web" "git.quimbo.fr/odwrtw/canape/backend/web"
"github.com/odwrtw/papi" "github.com/odwrtw/papi"
polochon "github.com/odwrtw/polochon/lib" 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 // 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{} shows := []*Show{}
client, err := user.NewPapiClient() client, err := user.NewPapiClient()

View File

@ -7,7 +7,6 @@ import (
"sort" "sort"
"git.quimbo.fr/odwrtw/canape/backend/auth" "git.quimbo.fr/odwrtw/canape/backend/auth"
"git.quimbo.fr/odwrtw/canape/backend/users"
"git.quimbo.fr/odwrtw/canape/backend/web" "git.quimbo.fr/odwrtw/canape/backend/web"
"github.com/gorilla/mux" "github.com/gorilla/mux"
polochon "github.com/odwrtw/polochon/lib" 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")) return env.RenderError(w, errors.New("no given url"))
} }
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
client, err := user.NewPapiClient() client, err := user.NewPapiClient()
if err != nil { 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 // ListHandler lists torrents of a polochon
func ListHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error { func ListHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
client, err := user.NewPapiClient() client, err := user.NewPapiClient()
if err != nil { 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 // RemoveHandler removes a torrents via polochon
func RemoveHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error { func RemoveHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
v := auth.GetCurrentUser(r, env.Log) user := auth.GetCurrentUser(r, env.Log)
user, ok := v.(*users.User)
if !ok {
return env.RenderError(w, errors.New("invalid user type"))
}
// Get the torrent ID from the URL // Get the torrent ID from the URL
vars := mux.Vars(r) vars := mux.Vars(r)

View File

@ -7,6 +7,7 @@ import (
"net/http" "net/http"
"git.quimbo.fr/odwrtw/canape/backend/auth" "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/config"
"git.quimbo.fr/odwrtw/canape/backend/tokens" "git.quimbo.fr/odwrtw/canape/backend/tokens"
"git.quimbo.fr/odwrtw/canape/backend/web" "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")) return e.RenderError(w, fmt.Errorf("Passwords missmatch"))
} }
user := User{Name: data.Username} user := backend.User{Name: data.Username}
var err error var err error
user.Hash, err = e.Auth.GenHash(data.Password) 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) token, err := e.Auth.Login(r, data.Username, data.Password)
if err != nil { 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 e.RenderError(w, fmt.Errorf("Error invalid user or password"))
} }
return err return err
@ -91,11 +92,7 @@ func LoginPOSTHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error
// DetailsHandler show user details // DetailsHandler show user details
func DetailsHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error { func DetailsHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error {
v := auth.GetCurrentUser(r, e.Log) user := auth.GetCurrentUser(r, e.Log)
user, ok := v.(*User)
if !ok {
return fmt.Errorf("invalid user type")
}
var polochonConfig config.UserPolochon var polochonConfig config.UserPolochon
if user.PolochonID.Valid && user.PolochonID.String != "" { 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 // EditHandler allow editing user info and configuration
func EditHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error { func EditHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error {
v := auth.GetCurrentUser(r, e.Log) user := auth.GetCurrentUser(r, e.Log)
user, ok := v.(*User)
if !ok {
return fmt.Errorf("invalid user type")
}
var data struct { var data struct {
PolochonID string `json:"polochon_id"` 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 // GetTokensHandler lists the tokens of a user
func GetTokensHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error { func GetTokensHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error {
v := auth.GetCurrentUser(r, e.Log) user := auth.GetCurrentUser(r, e.Log)
user, ok := v.(*User)
if !ok {
return fmt.Errorf("invalid user type")
}
tokens, err := tokens.GetUserTokens(e.Database, user.Name) tokens, err := tokens.GetUserTokens(e.Database, user.Name)
if err != nil { if err != nil {
@ -188,11 +177,7 @@ func DeleteTokenHandler(e *web.Env, w http.ResponseWriter, r *http.Request) erro
vars := mux.Vars(r) vars := mux.Vars(r)
token := vars["token"] token := vars["token"]
v := auth.GetCurrentUser(r, e.Log) user := auth.GetCurrentUser(r, e.Log)
user, ok := v.(*User)
if !ok {
return fmt.Errorf("invalid user type")
}
if err := tokens.DeleteToken(e.Database, user.Name, token); err != nil { if err := tokens.DeleteToken(e.Database, user.Name, token); err != nil {
return err return err
@ -206,11 +191,7 @@ func EditTokenHandler(e *web.Env, w http.ResponseWriter, r *http.Request) error
vars := mux.Vars(r) vars := mux.Vars(r)
token := vars["token"] token := vars["token"]
v := auth.GetCurrentUser(r, e.Log) user := auth.GetCurrentUser(r, e.Log)
user, ok := v.(*User)
if !ok {
return fmt.Errorf("invalid user type")
}
t, err := tokens.GetUserToken(e.Database, user.Name, token) t, err := tokens.GetUserToken(e.Database, user.Name, token)
if err != nil { 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 // GetModulesStatus returns the status of the modules
func GetModulesStatus(e *web.Env, w http.ResponseWriter, r *http.Request) error { func GetModulesStatus(e *web.Env, w http.ResponseWriter, r *http.Request) error {
// Get the user from the request // Get the user from the request
v := auth.GetCurrentUser(r, e.Log) user := auth.GetCurrentUser(r, e.Log)
user, ok := v.(*User)
if !ok {
return e.RenderError(w, fmt.Errorf("invalid user type"))
}
// Create a papi client // Create a papi client
client, err := user.NewPapiClient() client, err := user.NewPapiClient()