X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=fitbit%2Ffitbit.go;h=2c0a04ac3d018b26ff191446429338da52683068;hb=e99826bfa13306dda3897d3490969032b8aa13f5;hp=9f661d6637fc6170f675d0020d23cfcff2af9e09;hpb=ad911fb5b8a17f238e6158b4f9479c5f8c428bff;p=kraftakt.git diff --git a/fitbit/fitbit.go b/fitbit/fitbit.go index 9f661d6..2c0a04a 100644 --- a/fitbit/fitbit.go +++ b/fitbit/fitbit.go @@ -9,7 +9,6 @@ import ( "fmt" "io/ioutil" "net/http" - "net/url" "time" "github.com/octo/gfitsync/app" @@ -22,7 +21,7 @@ var oauth2Config = &oauth2.Config{ ClientID: "@FITBIT_CLIENT_ID@", ClientSecret: "@FITBIT_CLIENT_SECRET@", Endpoint: oauth2fitbit.Endpoint, - RedirectURL: "https://fitbit-gfit-sync.appspot.com/fitbit/grant", + RedirectURL: "https://kraftakt.octo.it/fitbit/grant", Scopes: []string{"activity", "heartrate", "profile"}, } @@ -46,14 +45,9 @@ func ParseToken(ctx context.Context, r *http.Request, u *app.User) error { } func CheckSignature(ctx context.Context, payload []byte, rawSig string) bool { - base64Sig, err := url.QueryUnescape(rawSig) + signatureGot, err := base64.StdEncoding.DecodeString(rawSig) if err != nil { - log.Errorf(ctx, "QueryUnescape(%q) = %v", rawSig, err) - return false - } - signatureGot, err := base64.StdEncoding.DecodeString(base64Sig) - if err != nil { - log.Errorf(ctx, "base64.StdEncoding.DecodeString(%q) = %v", base64Sig, err) + log.Errorf(ctx, "base64.StdEncoding.DecodeString(%q) = %v", rawSig, err) return false } @@ -84,6 +78,14 @@ type Distance struct { Distance float64 `json:"distance"` } +type HeartRateZone struct { + Name string `json:"name"` + Min int `json:"min"` + Max int `json:"max"` + Minutes int `json:"minutes"` + CaloriesOut float64 `json:"caloriesOut"` +} + type ActivitySummary struct { Activities []Activity `json:"activities"` Goals struct { @@ -93,18 +95,22 @@ type ActivitySummary struct { Steps int `json:"steps"` } `json:"goals"` Summary struct { - ActivityCalories int `json:"activityCalories"` - CaloriesBMR int `json:"caloriesBMR"` - CaloriesOut int `json:"caloriesOut"` - MarginalCalories int `json:"marginalCalories"` - Distances []Distance `json:"distances"` - Elevation float64 `json:"elevation"` - Floors int `json:"floors"` - Steps int `json:"steps"` - SedentaryMinutes int `json:"sedentaryMinutes"` - LightlyActiveMinutes int `json:"lightlyActiveMinutes"` - FairlyActiveMinutes int `json:"fairlyActiveMinutes"` - VeryActiveMinutes int `json:"veryActiveMinutes"` + ActiveScore int `json:"activeScore"` + ActivityCalories int `json:"activityCalories"` + CaloriesBMR int `json:"caloriesBMR"` + CaloriesOut float64 `json:"caloriesOut"` + Distances []Distance `json:"distances"` + Elevation float64 `json:"elevation"` + Floors int `json:"floors"` + HeartRateZones []HeartRateZone `json:"heartRateZones"` + CustomHeartRateZones []HeartRateZone `json:"customHeartRateZones"` + MarginalCalories int `json:"marginalCalories"` + RestingHeartRate int `json:"restingHeartRate"` + Steps int `json:"steps"` + SedentaryMinutes int `json:"sedentaryMinutes"` + LightlyActiveMinutes int `json:"lightlyActiveMinutes"` + FairlyActiveMinutes int `json:"fairlyActiveMinutes"` + VeryActiveMinutes int `json:"veryActiveMinutes"` } `json:"summary"` }