diff --git a/backend/admins/users.go b/backend/admins/users.go index 1eadef0..4a0e08d 100644 --- a/backend/admins/users.go +++ b/backend/admins/users.go @@ -43,7 +43,7 @@ func GetUsersHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error // Fill the users with the polochons for _, u := range users { - if u.PolochonID.Valid == false { + if !u.PolochonID.Valid { continue } u.Polochon = polochonMap[u.PolochonID.String] diff --git a/backend/events/channel.go b/backend/events/channel.go index 59563b4..64f2133 100644 --- a/backend/events/channel.go +++ b/backend/events/channel.go @@ -44,19 +44,19 @@ func (c *Channel) writer() { for { select { case <-pingTicker.C: - c.conn.SetWriteDeadline(time.Now().Add(writeWait)) + _ = c.conn.SetWriteDeadline(time.Now().Add(writeWait)) if err := c.conn.WriteMessage(websocket.PingMessage, nil); err != nil { c.log.Warnf("error writing message: %s", err) return } case e := <-c.serverEventStream: - c.conn.SetWriteDeadline(time.Now().Add(writeWait)) + _ = c.conn.SetWriteDeadline(time.Now().Add(writeWait)) if err := c.conn.WriteJSON(e); err != nil { c.log.Warnf("error writing JSON message: %s", err) return } case err := <-c.serverErrorStream: - c.conn.SetWriteDeadline(time.Now().Add(writeWait)) + _ = c.conn.SetWriteDeadline(time.Now().Add(writeWait)) if err := c.conn.WriteJSON(err); err != nil { c.log.Warnf("error writing JSON error: %s", err) return @@ -71,7 +71,7 @@ func (c *Channel) writer() { // go routine reading messages from the websocket connection func (c *Channel) reader() { // Read loop - c.conn.SetReadDeadline(time.Now().Add(pongWait)) + _ = c.conn.SetReadDeadline(time.Now().Add(pongWait)) for { msg := ClientMessage{} diff --git a/backend/events/handlers.go b/backend/events/handlers.go index 669f86f..de430c2 100644 --- a/backend/events/handlers.go +++ b/backend/events/handlers.go @@ -51,7 +51,7 @@ func WsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error { // The pong handler only postpone the read deadline ws.SetPongHandler(func(string) error { - ws.SetReadDeadline(time.Now().Add(pongWait)) + _ = ws.SetReadDeadline(time.Now().Add(pongWait)) return nil }) diff --git a/backend/events/polochons.go b/backend/events/polochons.go index e91410e..5014385 100644 --- a/backend/events/polochons.go +++ b/backend/events/polochons.go @@ -101,7 +101,10 @@ func (p *PolochonEventers) Unsubscribe(chanl *Channel) { return } - tn.Unsubscribe(chanl) + if err := tn.Unsubscribe(chanl); err != nil { + p.log.Errorf("failed to unsubscribe eventer: %s", err.Error()) + return + } if len(tn.Subscribers()) == 0 { p.log.Debugf("empty subscribers for this polochon, delete it") diff --git a/backend/main.go b/backend/main.go index 281d8f8..c90c5b0 100644 --- a/backend/main.go +++ b/backend/main.go @@ -21,6 +21,13 @@ import ( ) func main() { + if err := run(); err != nil { + // TODO: handle this + panic(err) + } +} + +func run() error { var cfgPath string cfgPath = os.Getenv("CONFIG_FILE") if cfgPath == "" { @@ -35,13 +42,13 @@ func main() { log := logrus.NewEntry(logger) cf, err := config.Load(cfgPath, log) if err != nil { - log.Panic(err) + return err } // Connect to the database db, err := sqlx.Connect("postgres", cf.PGDSN) if err != nil { - log.Panic(err) + return err } backend := &models.Backend{Database: db} @@ -76,16 +83,22 @@ func main() { if cf.PeriodicRefresh.Enabled { // Refresh the library every 6h env.Log.Debugf("Running refresh cron every %s", cf.PeriodicRefresh.Interval) - c.AddFunc(fmt.Sprintf("@every %s", cf.PeriodicRefresh.Interval), func() { + if err := c.AddFunc(fmt.Sprintf("@every %s", cf.PeriodicRefresh.Interval), func() { env.Log.Infof("Running refresh cron!") extmedias.Refresh(env) - }) + }); err != nil { + return err + } env.Log.Debugf("Running Imdb refresh cron every 24h") - c.AddFunc(fmt.Sprintf("@every 24h"), func() { + if err := c.AddFunc(fmt.Sprintf("@every 24h"), func() { env.Log.Infof("Running IMDB refresh cron!") - ratings.Refresh(env) - }) + if err := ratings.Refresh(env); err != nil { + env.Log.Errorf("failed to refresh ratings: %s", err.Error()) + } + }); err != nil { + return err + } } // Start the cron @@ -107,4 +120,6 @@ func main() { n.Use(gzip.Gzip(gzip.DefaultCompression)) n.UseHandler(env.Router) n.Run(":" + cf.Port) + + return nil } diff --git a/backend/models/imdb_ratings.go b/backend/models/imdb_ratings.go index 70bf2c1..9d4ccdc 100644 --- a/backend/models/imdb_ratings.go +++ b/backend/models/imdb_ratings.go @@ -7,8 +7,6 @@ import ( ) const ( - getRatingQueryByImdbID = ` SELECT * FROM imdb_ratings WHERE imdb_id=$1;` - upsertRatingQuery = `INSERT INTO imdb_ratings (imdb_id, rating, votes) VALUES (:imdb_id, :rating, :votes) ON CONFLICT (imdb_id) DO UPDATE diff --git a/backend/models/polochons.go b/backend/models/polochons.go index 54e1235..c284242 100644 --- a/backend/models/polochons.go +++ b/backend/models/polochons.go @@ -15,7 +15,6 @@ const ( polochons (name, url, token, admin_id) VALUES ($1, $2, $3, $4) RETURNING id;` - getPolochonQuery = `SELECT * FROM polochons WHERE name=$1;` getPolochonByIDQuery = `SELECT * FROM polochons WHERE id=$1;` getPolochonsByUserIDQuery = `SELECT * FROM polochons WHERE admin_id=$1 ORDER BY created_at DESC;` updatePolochonQuery = `UPDATE polochons SET @@ -94,7 +93,9 @@ func (p *Polochon) Update(ex *sqlx.DB) error { return err } for rows.Next() { - rows.StructScan(p) + if err := rows.StructScan(p); err != nil { + return err + } } return nil } diff --git a/backend/models/users.go b/backend/models/users.go index 0687c24..7050e7d 100644 --- a/backend/models/users.go +++ b/backend/models/users.go @@ -136,7 +136,9 @@ func (u *User) Update(ex *sqlx.DB) error { return err } for rows.Next() { - rows.StructScan(u) + if err := rows.StructScan(u); err != nil { + return err + } } return nil } diff --git a/backend/polochons/handlers.go b/backend/polochons/handlers.go index 16b2ea0..835ed08 100644 --- a/backend/polochons/handlers.go +++ b/backend/polochons/handlers.go @@ -272,9 +272,10 @@ func GetMovieWishlistHandler(env *web.Env, w http.ResponseWriter, r *http.Reques // Add the movie to the wishlist for _, imdbID := range moviesWishlist.List() { - wishlist.AddMovie(&polochon.WishedMovie{ - ImdbID: imdbID, - }) + err := wishlist.AddMovie(&polochon.WishedMovie{ImdbID: imdbID}) + if err != nil { + return env.RenderError(w, err) + } } } @@ -310,11 +311,14 @@ func GetShowWishlistHandler(env *web.Env, w http.ResponseWriter, r *http.Request // Add the show to the wishlist for _, show := range moviesWishlist.List() { - wishlist.AddShow(&polochon.WishedShow{ + err := wishlist.AddShow(&polochon.WishedShow{ ImdbID: show.ImdbID, Season: show.Season, Episode: show.Episode, }) + if err != nil { + return env.RenderError(w, err) + } } } diff --git a/backend/tokens/tokens.go b/backend/tokens/tokens.go index 934954f..18847c5 100644 --- a/backend/tokens/tokens.go +++ b/backend/tokens/tokens.go @@ -12,7 +12,6 @@ import ( const ( addTokenQuery = `INSERT INTO tokens (token, username, ip, description) VALUES ($1, $2, $3, $4);` - getTokenQuery = `SELECT * FROM tokens WHERE token=$1;` getUserTokenQuery = `SELECT * FROM tokens WHERE username=$1 and token=$2;` getUserTokensQuery = `SELECT * FROM tokens WHERE username=$1;` deleteTokenQuery = `DELETE FROM tokens WHERE username=$1 AND token=$2;` @@ -100,7 +99,9 @@ func (t *Token) Update(db *sqlx.DB) error { return err } for rows.Next() { - rows.StructScan(t) + if err := rows.StructScan(t); err != nil { + return err + } } return nil } diff --git a/backend/web/env.go b/backend/web/env.go index c3d02e0..f1c622d 100644 --- a/backend/web/env.go +++ b/backend/web/env.go @@ -14,14 +14,13 @@ import ( // Env describes an environement object passed to all handlers type Env struct { - Backend DetailerTorrenter - Database *sqlx.DB - Log *logrus.Entry - Router *mux.Router - Render *render.Render - Auth *auth.Authorizer - Config *config.Config - loginRoute string + Backend DetailerTorrenter + Database *sqlx.DB + Log *logrus.Entry + Router *mux.Router + Render *render.Render + Auth *auth.Authorizer + Config *config.Config } // EnvParams represents parameters for NewEnv