-type fitbitNotification struct {
- CollectionType string `json:"collectionType"`
- Date string `json:"date"`
- OwnerID string `json:"ownerId"`
- OwnerType string `json:"ownerType"`
- SubscriptionID string `json:"subscriptionId"`
-}
-
-func (n *fitbitNotification) URLValues() url.Values {
- return url.Values{
- "CollectionType": []string{n.CollectionType},
- "Date": []string{n.Date},
- "OwnerID": []string{n.OwnerID},
- "OwnerType": []string{n.OwnerType},
- "SubscriptionID": []string{n.SubscriptionID},
- }
-}
-
-func (n *fitbitNotification) URL() string {
- return fmt.Sprintf("https://api.fitbit.com/1/user/%s/%s/date/%s.json",
- n.OwnerID, n.CollectionType, n.Date)
-}
-
-func checkSignature(ctx context.Context, payload []byte, rawSig string) bool {
- base64Sig, err := url.QueryUnescape(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)
- return false
- }
-
- mac := hmac.New(sha1.New, []byte(oauthConfig.ClientSecret+"&"))
- mac.Write(payload)
- signatureWant := mac.Sum(nil)
-
- return hmac.Equal(signatureGot, signatureWant)
-}
-