"net/http"
"time"
- "github.com/octo/gfitsync/app"
+ "github.com/octo/kraftakt/app"
"golang.org/x/oauth2"
oauth2fitbit "golang.org/x/oauth2/fitbit"
"google.golang.org/appengine/log"
)
var oauth2Config = &oauth2.Config{
- ClientID: "@FITBIT_CLIENT_ID@",
- ClientSecret: "@FITBIT_CLIENT_SECRET@",
+ ClientID: app.Config.FitbitClientID,
+ ClientSecret: app.Config.FitbitClientSecret,
Endpoint: oauth2fitbit.Endpoint,
RedirectURL: "https://kraftakt.octo.it/fitbit/grant",
- Scopes: []string{"activity", "heartrate", "profile"},
+ Scopes: []string{
+ "activity",
+ "heartrate",
+ "profile",
+ "sleep",
+ },
}
const csrfToken = "@CSRFTOKEN@"
}
type Activity struct {
- ActivityID int `json:"activityId"`
- ActivityParentID int `json:"activityParentId"`
- Calories int `json:"calories"`
- Description string `json:"description"`
- Distance float64 `json:"distance"`
- Duration int `json:"duration"`
- HasStartTime bool `json:"hasStartTime"`
- IsFavorite bool `json:"isFavorite"`
- LogID int `json:"logId"`
- Name string `json:"name"`
- StartTime string `json:"startTime"`
- Steps int `json:"steps"`
+ ActivityID int `json:"activityId"`
+ ActivityParentID int `json:"activityParentId"`
+ ActivityParentName string `json:"activityParentName"`
+ Calories int `json:"calories"`
+ Description string `json:"description"`
+ Distance float64 `json:"distance"`
+ Duration int `json:"duration"`
+ HasStartTime bool `json:"hasStartTime"`
+ IsFavorite bool `json:"isFavorite"`
+ LastModified time.Time `json:"lastModified"`
+ LogID int `json:"logId"`
+ Name string `json:"name"`
+ StartTime string `json:"startTime"`
+ StartDate string `json:"startDate"`
+ Steps int `json:"steps"`
}
type Distance struct {
}
defer res.Body.Close()
- if res.StatusCode >= 400 {
+ if res.StatusCode >= 400 && res.StatusCode != http.StatusConflict {
data, _ := ioutil.ReadAll(res.Body)
log.Errorf(ctx, "creating subscription failed: status %d %q", res.StatusCode, data)
return fmt.Errorf("creating subscription failed")