From 8fe94877b4492d728c6772b12032695234ae1442 Mon Sep 17 00:00:00 2001 From: Michael van Tricht Date: Fri, 2 Dec 2016 14:44:43 +0100 Subject: [PATCH] Check for content-type application/json. Hopefully fixes #3. --- assets/views.go | 2 +- src/backend/watcher.go | 36 +++++++++++++++++++++++++++--------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/assets/views.go b/assets/views.go index ffb38fa..a718615 100644 --- a/assets/views.go +++ b/assets/views.go @@ -188,7 +188,7 @@ func assetsViewsGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "assets/views.go", size: 20480, mode: os.FileMode(420), modTime: time.Unix(1480592811, 0)} + info := bindataFileInfo{name: "assets/views.go", size: 20480, mode: os.FileMode(420), modTime: time.Unix(1480686259, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/src/backend/watcher.go b/src/backend/watcher.go index bc3f157..7941692 100644 --- a/src/backend/watcher.go +++ b/src/backend/watcher.go @@ -51,10 +51,11 @@ type action struct { } type cardResult struct { - Error error - Date string - Complete bool - Points float64 + Error error + Date string + Complete bool + Points float64 + TrelloError bool } func Start() { @@ -79,12 +80,16 @@ func runBoards() { func Run(boardID string) { log.Printf("Checking board ID #%s", boardID) board, err := getBoard(boardID) - board.ID = boardID - log.Printf("Board name: %s", board.Name) - lastListID := getLastList(board) if err != nil { log.Fatalln(err) } + if board == nil { + log.Println("Something went wrong requesting a board from Trello.") + return + } + board.ID = boardID + log.Printf("Board name: %s", board.Name) + lastListID := getLastList(board) resultChannel := make(chan *cardResult) for _, card := range board.Cards { go determineCardComplete(card, lastListID, resultChannel) @@ -95,6 +100,10 @@ func Run(boardID string) { if response.Error != nil { log.Fatalln(response.Error) } + if response.TrelloError { + log.Println("Something went wrong requesting a card from Trello.") + return + } if response.Complete { board.CardsCompleted++ board.PointsCompleted += response.Points @@ -122,12 +131,15 @@ func getBoard(id string) (*board, error) { resp, err := http.Get(url) defer resp.Body.Close() if err != nil { - return &board{}, err + return nil, err + } + if resp.Header.Get("Content-Type") != "application/json; charset=utf-8" { + return nil, nil } r := new(board) err = json.NewDecoder(resp.Body).Decode(r) if err != nil { - return &board{}, err + return nil, err } return r, nil } @@ -166,6 +178,12 @@ func determineCardComplete(card card, listID string, res chan *cardResult) { } return } + if resp.Header.Get("Content-Type") != "application/json; charset=utf-8" { + res <- &cardResult{ + TrelloError: true, + } + return + } var actions []action err = json.NewDecoder(resp.Body).Decode(&actions) if err != nil {