func (this *GoogleController) TestHighLoad(ctx framework.WebContext) framework.WebResult { n := randomizer.Int63() email := fmt.Sprintf("*****@*****.**", n) name := fmt.Sprintf("User %d", n) dto := &contracts.User{Email: email, Name: name} credentials := &contracts.UserAuthCredentials{ Type: framework.AuthType_Google, AccessToken: fmt.Sprintf("Access token for user %s", name), RefreshToken: fmt.Sprintf("Refresh token for user %s", name), Expiry: time.Now().Add(1 * time.Hour), } _, err := this.userService.SaveWithCredentials(dto, credentials) if err != nil { log.Println(err) return ctx.Error(err) } session := ctx.Session() session.SetUser(&framework.SessionUser{ UserId: email, AuthType: framework.AuthType_Google, AuthData: credentials.AccessToken, }) return ctx.Text("OK") }
// Function that handles the callback from the Google server func (this *FacebookController) AuthCallback(ctx framework.WebContext) framework.WebResult { //Get the code from the response code, _ := ctx.Param("code") t := &oauth.Transport{Config: this.oauthCfg} // Exchange the received code for a token t.Exchange(code) //now get user data based on the Transport which has the token resp, err := t.Client().Get(this.profileInfoURL) if err != nil { log.Println(err) return ctx.FrameworkError(framework.ToError(framework.Error_Web_UnableToAuthenticate, err)) } userprofile := make(map[string]interface{}) decoder := json.NewDecoder(resp.Body) err = decoder.Decode(&userprofile) if err != nil { log.Println(err) return ctx.FrameworkError(framework.ToError(framework.Error_Web_UnableToAuthenticate, err)) } fmt.Println(userprofile) email := userprofile["email"].(string) name := userprofile["name"].(string) userDto := &contracts.User{Email: email, Name: name} userCredentialsDto := &contracts.UserAuthCredentials{ Type: framework.AuthType_Facebook, AccessToken: t.Token.AccessToken, RefreshToken: t.Token.RefreshToken, Expiry: t.Token.Expiry, } user, err2 := this.userService.SaveWithCredentials(userDto, userCredentialsDto) if err2 != nil { return ctx.Error(err2) } ctx.Session().SetUser(&framework.SessionUser{ UserId: user.Email, AuthType: framework.AuthType_Facebook, AuthData: t.AccessToken, }) return ctx.Template(userInfoTemplate, fmt.Sprintf("Name: %s Email: %s", name, email)) }
func (this *GoogleController) HandleRoot(ctx framework.WebContext) framework.WebResult { session := ctx.Session() if sessionUser := session.User(); sessionUser == nil { return ctx.Template(notAuthenticatedTemplate, nil) } else { email := sessionUser.UserId user, _ := this.userService.Get(email) return ctx.Template(authenticatedTemplate, user.Name) } }