projects
/
kraftakt.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Package fitbit: Append the collection type to the subscriber ID.
[kraftakt.git]
/
fitbit
/
fitbit.go
diff --git
a/fitbit/fitbit.go
b/fitbit/fitbit.go
index
775ab78
..
e960438
100644
(file)
--- a/
fitbit/fitbit.go
+++ b/
fitbit/fitbit.go
@@
-9,6
+9,7
@@
import (
"fmt"
"io/ioutil"
"net/http"
"fmt"
"io/ioutil"
"net/http"
+ "strings"
"time"
"github.com/octo/kraftakt/app"
"time"
"github.com/octo/kraftakt/app"
@@
-32,14
+33,8
@@
func oauthConfig() *oauth2.Config {
}
}
}
}
-const csrfToken = "@CSRFTOKEN@"
-
-func AuthURL() string {
- return oauthConfig().AuthCodeURL(csrfToken, oauth2.AccessTypeOffline)
-}
-
func ParseToken(ctx context.Context, r *http.Request, u *app.User) error {
func ParseToken(ctx context.Context, r *http.Request, u *app.User) error {
- if state := r.FormValue("state"); state !=
csrfToken
{
+ if state := r.FormValue("state"); state !=
u.Sign("Fitbit")
{
return fmt.Errorf("invalid state parameter: %q", state)
}
return fmt.Errorf("invalid state parameter: %q", state)
}
@@
-155,6
+150,10
@@
func NewClient(ctx context.Context, fitbitUserID string, u *app.User) (*Client,
}, nil
}
}, nil
}
+func (c *Client) AuthURL(ctx context.Context) string {
+ return oauthConfig().AuthCodeURL(c.appUser.Sign("Fitbit"), oauth2.AccessTypeOffline)
+}
+
func (c *Client) ActivitySummary(ctx context.Context, date string) (*ActivitySummary, error) {
url := fmt.Sprintf("https://api.fitbit.com/1/user/%s/activities/date/%s.json",
c.fitbitUserID, date)
func (c *Client) ActivitySummary(ctx context.Context, date string) (*ActivitySummary, error) {
url := fmt.Sprintf("https://api.fitbit.com/1/user/%s/activities/date/%s.json",
c.fitbitUserID, date)
@@
-176,14
+175,18
@@
func (c *Client) ActivitySummary(ctx context.Context, date string) (*ActivitySum
return &summary, nil
}
return &summary, nil
}
-func (c *Client) Subscribe(ctx context.Context, collection string) error {
- subscriberID, err := c.appUser.ID(ctx)
- if err != nil {
- return err
- }
+func (c *Client) subscriberID(collection string) string {
+ return fmt.Sprintf("%s:%s", c.appUser.ID, collection)
+}
+func UserFromSubscriberID(ctx context.Context, subscriberID string) (*app.User, error) {
+ uid := strings.Split(subscriberID, ":")[0]
+ return app.UserByID(ctx, uid)
+}
+
+func (c *Client) Subscribe(ctx context.Context, collection string) error {
url := fmt.Sprintf("https://api.fitbit.com/1/user/%s/%s/apiSubscriptions/%s.json",
url := fmt.Sprintf("https://api.fitbit.com/1/user/%s/%s/apiSubscriptions/%s.json",
- c.fitbitUserID, collection,
subscriberID
)
+ c.fitbitUserID, collection,
c.subscriberID(collection)
)
res, err := c.client.Post(url, "", nil)
if err != nil {
return err
res, err := c.client.Post(url, "", nil)
if err != nil {
return err
@@
-195,18
+198,16
@@
func (c *Client) Subscribe(ctx context.Context, collection string) error {
log.Errorf(ctx, "creating %q subscription failed: status %d %q", collection, res.StatusCode, data)
return fmt.Errorf("creating %q subscription failed", collection)
}
log.Errorf(ctx, "creating %q subscription failed: status %d %q", collection, res.StatusCode, data)
return fmt.Errorf("creating %q subscription failed", collection)
}
+ if res.StatusCode == http.StatusConflict {
+ log.Infof(ctx, "creating %q subscription: already exists", collection)
+ }
return nil
}
func (c *Client) Unsubscribe(ctx context.Context, collection string) error {
return nil
}
func (c *Client) Unsubscribe(ctx context.Context, collection string) error {
- subscriberID, err := c.appUser.ID(ctx)
- if err != nil {
- return err
- }
-
url := fmt.Sprintf("https://api.fitbit.com/1/user/%s/%s/apiSubscriptions/%s.json",
url := fmt.Sprintf("https://api.fitbit.com/1/user/%s/%s/apiSubscriptions/%s.json",
- c.fitbitUserID, collection,
subscriberID
)
+ c.fitbitUserID, collection,
c.subscriberID(collection)
)
req, err := http.NewRequest(http.MethodDelete, url, nil)
if err != nil {
return err
req, err := http.NewRequest(http.MethodDelete, url, nil)
if err != nil {
return err
@@
-218,11
+219,14
@@
func (c *Client) Unsubscribe(ctx context.Context, collection string) error {
}
defer res.Body.Close()
}
defer res.Body.Close()
- if res.StatusCode >= 400 && res.StatusCode != http.Status
Conflict
{
+ if res.StatusCode >= 400 && res.StatusCode != http.Status
NotFound
{
data, _ := ioutil.ReadAll(res.Body)
log.Errorf(ctx, "deleting %q subscription failed: status %d %q", collection, res.StatusCode, data)
return fmt.Errorf("deleting %q subscription failed", collection)
}
data, _ := ioutil.ReadAll(res.Body)
log.Errorf(ctx, "deleting %q subscription failed: status %d %q", collection, res.StatusCode, data)
return fmt.Errorf("deleting %q subscription failed", collection)
}
+ if res.StatusCode == http.StatusNotFound {
+ log.Infof(ctx, "deleting %q subscription: not found", collection)
+ }
return nil
}
return nil
}