func (c *DBTokenCache) PutToken(t *goauth2.Token) error { if t.AccessToken == "" { return ErrEmptyAccessToken } var email string if t.Extra == nil || t.Extra["email"] == "" { conf, err := c.scheme.loadConfig() if err != nil { return err } transport := &goauth2.Transport{Config: &conf} transport.Token = t client := transport.Client() response, err := client.Get(c.scheme.InfoUrl) if err != nil { return err } defer response.Body.Close() email, err = c.scheme.Parser.Parse(response) if email == "" { return ErrEmptyUserEmail } user, err := auth.GetUserByEmail(email) if err != nil { if err != auth.ErrUserNotFound { return err } registrationEnabled, _ := config.GetBool("auth:user-registration") if !registrationEnabled { return err } user = &auth.User{Email: email} err := user.Create() if err != nil { return err } } err = user.CreateOnGandalf() if err != nil { log.Errorf("Ignored error trying to create user on gandalf: %s", err.Error()) } t.Extra = make(map[string]string) t.Extra["email"] = email } return makeToken(t).save() }