8 "github.com/octo/gfitsync/app"
10 oauth2google "golang.org/x/oauth2/google"
11 fitness "google.golang.org/api/fitness/v1"
14 var oauthConfig = &oauth2.Config{
15 ClientID: "@GOOGLE_CLIENT_ID@",
16 ClientSecret: "@GOOGLE_CLIENT_SECRET@",
17 Endpoint: oauth2google.Endpoint,
18 RedirectURL: "https://fitbit-gfit-sync.appspot.com/google/grant",
20 fitness.FitnessActivityWriteScope,
21 fitness.FitnessBodyWriteScope,
25 const csrfToken = "@CSRFTOKEN@"
27 func AuthURL() string {
28 return oauthConfig.AuthCodeURL(csrfToken, oauth2.AccessTypeOffline)
31 func ParseToken(ctx context.Context, r *http.Request, u *app.User) error {
32 if state := r.FormValue("state"); state != csrfToken {
33 return fmt.Errorf("invalid state parameter: %q", state)
36 tok, err := oauthConfig.Exchange(ctx, r.FormValue("code"))
41 return u.SetToken(ctx, "Google", tok)
48 func NewClient(ctx context.Context, u *app.User) (*Client, error) {
49 c, err := u.OAuthClient(ctx, "Google", oauthConfig)
54 service, err := fitness.New(c)