func signupCompleteOAuth(c *api.Context, w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) service := params["service"] code := r.URL.Query().Get("code") state := r.URL.Query().Get("state") uri := c.GetSiteURL() + "/signup/" + service + "/complete" if body, team, err := api.AuthorizeOAuthUser(service, code, state, uri); err != nil { c.Err = err return } else { var user *model.User if service == model.USER_AUTH_SERVICE_GITLAB { glu := model.GitLabUserFromJson(body) user = model.UserFromGitLabUser(glu) } else if service == model.USER_AUTH_SERVICE_GOOGLE { gu := model.GoogleUserFromJson(body) user = model.UserFromGoogleUser(gu) } if user == nil { c.Err = model.NewAppError("signupCompleteOAuth", "Could not create user out of "+service+" user object", "") return } if result := <-api.Srv.Store.User().GetByAuth(team.Id, user.AuthData, service); result.Err == nil { c.Err = model.NewAppError("signupCompleteOAuth", "This "+service+" account has already been used to sign up for team "+team.DisplayName, "email="+user.Email) return } if result := <-api.Srv.Store.User().GetByEmail(team.Id, user.Email); result.Err == nil { c.Err = model.NewAppError("signupCompleteOAuth", "Team "+team.DisplayName+" already has a user with the email address attached to your "+service+" account", "email="+user.Email) return } user.TeamId = team.Id page := NewHtmlTemplatePage("signup_user_oauth", "Complete User Sign Up") page.Props["User"] = user.ToJson() page.Props["TeamName"] = team.Name page.Props["TeamDisplayName"] = team.DisplayName page.Render(c, w) } }
func loginCompleteOAuth(c *api.Context, w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) service := params["service"] code := r.URL.Query().Get("code") state := r.URL.Query().Get("state") uri := c.GetSiteURL() + "/login/" + service + "/complete" if body, team, err := api.AuthorizeOAuthUser(service, code, state, uri); err != nil { c.Err = err return } else { authData := "" if service == model.USER_AUTH_SERVICE_GITLAB { glu := model.GitLabUserFromJson(body) authData = glu.GetAuthData() } else if service == model.USER_AUTH_SERVICE_GOOGLE { gu := model.GoogleUserFromJson(body) authData = gu.GetAuthData() } if len(authData) == 0 { c.Err = model.NewAppError("loginCompleteOAuth", "Could not parse auth data out of "+service+" user object", "") return } var user *model.User if result := <-api.Srv.Store.User().GetByAuth(team.Id, authData, service); result.Err != nil { c.Err = result.Err return } else { user = result.Data.(*model.User) api.Login(c, w, r, user, "") if c.Err != nil { return } root(c, w, r) } } }