)
const (
- csrfToken = "@CSRFTOKEN@"
- userID = "me"
+ userID = "me"
dataTypeNameCalories = "com.google.calories.expended"
dataTypeNameDistance = "com.google.distance.delta"
}
}
+func AuthURL(ctx context.Context, u *app.User) string {
+ return oauthConfig().AuthCodeURL(u.Sign("Google"), oauth2.AccessTypeOffline)
+}
+
func Application(ctx context.Context) *fitness.Application {
return &fitness.Application{
Name: "Kraftakt",
}
}
-func AuthURL() string {
- return oauthConfig().AuthCodeURL(csrfToken, oauth2.AccessTypeOffline)
-}
-
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("Google") {
return fmt.Errorf("invalid state parameter: %q", state)
}
type Client struct {
*fitness.Service
+ appUser *app.User
}
func NewClient(ctx context.Context, u *app.User) (*Client, error) {
return &Client{
Service: service,
+ appUser: u,
}, nil
}
+func (c *Client) DeleteToken(ctx context.Context) error {
+ return c.appUser.DeleteToken(ctx, "Google")
+}
+
func DataStreamID(dataSource *fitness.DataSource) string {
fields := []string{
dataSource.Type,