var templates *template.Template
func init() {
+ http.Handle("/login", AuthenticatedHandler(loginHandler))
http.Handle("/fitbit/connect", AuthenticatedHandler(fitbitConnectHandler))
http.Handle("/fitbit/grant", AuthenticatedHandler(fitbitGrantHandler))
http.Handle("/fitbit/disconnect", AuthenticatedHandler(fitbitDisconnectHandler))
return templates.ExecuteTemplate(w, templateName, &templateData)
}
+func loginHandler(_ context.Context, w http.ResponseWriter, r *http.Request, _ *app.User) error {
+ // essentially a nop; all the heavy lifting (i.e. logging in) has been done by the AuthenticatedHandler wrapper.
+ redirectURL := r.URL
+ redirectURL.Path = "/"
+ redirectURL.RawQuery = ""
+ redirectURL.Fragment = ""
+ http.Redirect(w, r, redirectURL.String(), http.StatusTemporaryRedirect)
+ return nil
+}
+
func fitbitConnectHandler(_ context.Context, w http.ResponseWriter, r *http.Request, _ *app.User) error {
http.Redirect(w, r, fitbit.AuthURL(), http.StatusTemporaryRedirect)
return nil
}
var errs appengine.MultiError
- if err := c.Unsubscribe(ctx); err != nil {
- errs = append(errs, fmt.Errorf("Unsubscribe() = %v", err))
+
+ for _, collection := range []string{"activities", "sleep"} {
+ if err := c.Unsubscribe(ctx, collection); err != nil {
+ errs = append(errs, fmt.Errorf("Unsubscribe(%q) = %v", collection, err))
+ }
+ log.Infof(ctx, "Successfully unsubscribed from %q", collection)
}
if err := c.DeleteToken(ctx); err != nil {