func addUserToTeam(team *model.Team, user *model.User, userArg string) { if user == nil { CommandPrintErrorln("Can't find user '" + userArg + "'") return } if err := api.JoinUserToTeam(team, user); err != nil { CommandPrintErrorln("Unable to add '" + userArg + "' to " + team.Name) } }
func cmdCreateUser() { if flagCmdCreateUser { if len(flagEmail) == 0 { fmt.Fprintln(os.Stderr, "flag needs an argument: -email") flag.Usage() os.Exit(1) } if len(flagPassword) == 0 { fmt.Fprintln(os.Stderr, "flag needs an argument: -password") flag.Usage() os.Exit(1) } var team *model.Team user := &model.User{} user.Email = flagEmail user.Password = flagPassword if len(flagUsername) == 0 { splits := strings.Split(strings.Replace(flagEmail, "@", " ", -1), " ") user.Username = splits[0] } else { user.Username = flagUsername } if len(flagTeamName) > 0 { if result := <-api.Srv.Store.Team().GetByName(flagTeamName); result.Err != nil { l4g.Error("%v", result.Err) flushLogAndExit(1) } else { team = result.Data.(*model.Team) } } ruser, err := api.CreateUser(user) if err != nil { if err.Id != "store.sql_user.save.email_exists.app_error" { l4g.Error("%v", err) flushLogAndExit(1) } } if team != nil { err = api.JoinUserToTeam(team, ruser) if err != nil { l4g.Error("%v", err) flushLogAndExit(1) } } os.Exit(0) } }
func TestIncomingWebhook(t *testing.T) { Setup() team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "*****@*****.**", Type: model.TEAM_OPEN} team = ApiClient.Must(ApiClient.CreateTeam(team)).Data.(*model.Team) user := &model.User{Email: model.NewId() + "*****@*****.**", Nickname: "Corey Hulen", Password: "******"} user = ApiClient.Must(ApiClient.CreateUser(user, "")).Data.(*model.User) store.Must(api.Srv.Store.User().VerifyEmail(user.Id)) api.JoinUserToTeam(team, user) c := &api.Context{} c.RequestId = model.NewId() c.IpAddress = "cmd_line" api.UpdateUserRoles(c, user, model.ROLE_SYSTEM_ADMIN) ApiClient.Login(user.Email, "pwd") ApiClient.SetTeamId(team.Id) channel1 := &model.Channel{DisplayName: "Test API Name", Name: "a" + model.NewId() + "a", Type: model.CHANNEL_OPEN, TeamId: team.Id} channel1 = ApiClient.Must(ApiClient.CreateChannel(channel1)).Data.(*model.Channel) if utils.Cfg.ServiceSettings.EnableIncomingWebhooks { hook1 := &model.IncomingWebhook{ChannelId: channel1.Id} hook1 = ApiClient.Must(ApiClient.CreateIncomingWebhook(hook1)).Data.(*model.IncomingWebhook) payload := "payload={\"text\": \"test text\"}" if _, err := ApiClient.PostToWebhook(hook1.Id, payload); err != nil { t.Fatal(err) } payload = "payload={\"text\": \"\"}" if _, err := ApiClient.PostToWebhook(hook1.Id, payload); err == nil { t.Fatal("should have errored - no text to post") } payload = "payload={\"text\": \"test text\", \"channel\": \"junk\"}" if _, err := ApiClient.PostToWebhook(hook1.Id, payload); err == nil { t.Fatal("should have errored - bad channel") } payload = "payload={\"text\": \"test text\"}" if _, err := ApiClient.PostToWebhook("abc123", payload); err == nil { t.Fatal("should have errored - bad hook") } } else { if _, err := ApiClient.PostToWebhook("123", "123"); err == nil { t.Fatal("should have failed - webhooks turned off") } } }
func cmdJoinTeam() { if flagCmdJoinTeam { if len(flagTeamName) == 0 { fmt.Fprintln(os.Stderr, "flag needs an argument: -team_name") flag.Usage() os.Exit(1) } if len(flagEmail) == 0 { fmt.Fprintln(os.Stderr, "flag needs an argument: -email") flag.Usage() os.Exit(1) } var team *model.Team if result := <-api.Srv.Store.Team().GetByName(flagTeamName); result.Err != nil { l4g.Error("%v", result.Err) flushLogAndExit(1) } else { team = result.Data.(*model.Team) } var user *model.User if result := <-api.Srv.Store.User().GetByEmail(flagEmail); result.Err != nil { l4g.Error("%v", result.Err) flushLogAndExit(1) } else { user = result.Data.(*model.User) } err := api.JoinUserToTeam(team, user) if err != nil { l4g.Error("%v", err) flushLogAndExit(1) } os.Exit(0) } }
func TestGetAccessToken(t *testing.T) { Setup() team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "*****@*****.**", Type: model.TEAM_OPEN} rteam, _ := ApiClient.CreateTeam(&team) user := model.User{Email: strings.ToLower(model.NewId()) + "*****@*****.**", Password: "******"} ruser := ApiClient.Must(ApiClient.CreateUser(&user, "")).Data.(*model.User) api.JoinUserToTeam(rteam.Data.(*model.Team), ruser) store.Must(api.Srv.Store.User().VerifyEmail(ruser.Id)) app := &model.OAuthApp{Name: "TestApp" + model.NewId(), Homepage: "https://nowhere.com", Description: "test", CallbackUrls: []string{"https://nowhere.com"}} utils.Cfg.ServiceSettings.EnableOAuthServiceProvider = false data := url.Values{"grant_type": []string{"junk"}, "client_id": []string{"12345678901234567890123456"}, "client_secret": []string{"12345678901234567890123456"}, "code": []string{"junk"}, "redirect_uri": []string{app.CallbackUrls[0]}} if _, err := ApiClient.GetAccessToken(data); err == nil { t.Fatal("should have failed - oauth providing turned off") } utils.Cfg.ServiceSettings.EnableOAuthServiceProvider = true ApiClient.Must(ApiClient.LoginById(ruser.Id, "passwd1")) ApiClient.SetTeamId(rteam.Data.(*model.Team).Id) *utils.Cfg.ServiceSettings.EnableOnlyAdminIntegrations = false utils.SetDefaultRolesBasedOnConfig() app = ApiClient.Must(ApiClient.RegisterApp(app)).Data.(*model.OAuthApp) *utils.Cfg.ServiceSettings.EnableOnlyAdminIntegrations = true utils.SetDefaultRolesBasedOnConfig() redirect := ApiClient.Must(ApiClient.AllowOAuth(model.AUTHCODE_RESPONSE_TYPE, app.Id, app.CallbackUrls[0], "all", "123")).Data.(map[string]string)["redirect"] rurl, _ := url.Parse(redirect) teamId := rteam.Data.(*model.Team).Id ApiClient.Logout() data = url.Values{"grant_type": []string{"junk"}, "client_id": []string{app.Id}, "client_secret": []string{app.ClientSecret}, "code": []string{rurl.Query().Get("code")}, "redirect_uri": []string{app.CallbackUrls[0]}} if _, err := ApiClient.GetAccessToken(data); err == nil { t.Fatal("should have failed - bad grant type") } data.Set("grant_type", model.ACCESS_TOKEN_GRANT_TYPE) data.Set("client_id", "") if _, err := ApiClient.GetAccessToken(data); err == nil { t.Fatal("should have failed - missing client id") } data.Set("client_id", "junk") if _, err := ApiClient.GetAccessToken(data); err == nil { t.Fatal("should have failed - bad client id") } data.Set("client_id", app.Id) data.Set("client_secret", "") if _, err := ApiClient.GetAccessToken(data); err == nil { t.Fatal("should have failed - missing client secret") } data.Set("client_secret", "junk") if _, err := ApiClient.GetAccessToken(data); err == nil { t.Fatal("should have failed - bad client secret") } data.Set("client_secret", app.ClientSecret) data.Set("code", "") if _, err := ApiClient.GetAccessToken(data); err == nil { t.Fatal("should have failed - missing code") } data.Set("code", "junk") if _, err := ApiClient.GetAccessToken(data); err == nil { t.Fatal("should have failed - bad code") } data.Set("code", rurl.Query().Get("code")) data.Set("redirect_uri", "junk") if _, err := ApiClient.GetAccessToken(data); err == nil { t.Fatal("should have failed - non-matching redirect uri") } // reset data for successful request data.Set("grant_type", model.ACCESS_TOKEN_GRANT_TYPE) data.Set("client_id", app.Id) data.Set("client_secret", app.ClientSecret) data.Set("code", rurl.Query().Get("code")) data.Set("redirect_uri", app.CallbackUrls[0]) token := "" if result, err := ApiClient.GetAccessToken(data); err != nil { t.Fatal(err) } else { rsp := result.Data.(*model.AccessResponse) if len(rsp.AccessToken) == 0 { t.Fatal("access token not returned") } else { token = rsp.AccessToken } if rsp.TokenType != model.ACCESS_TOKEN_TYPE { t.Fatal("access token type incorrect") } } if result, err := ApiClient.DoApiGet("/teams/"+teamId+"/users/0/100?access_token="+token, "", ""); err != nil { t.Fatal(err) } else { userMap := model.UserMapFromJson(result.Body) if len(userMap) == 0 { t.Fatal("user map empty - did not get results correctly") } } if _, err := ApiClient.DoApiGet("/teams/"+teamId+"/users/0/100", "", ""); err == nil { t.Fatal("should have failed - no access token provided") } if _, err := ApiClient.DoApiGet("/teams/"+teamId+"/users/0/100?access_token=junk", "", ""); err == nil { t.Fatal("should have failed - bad access token provided") } ApiClient.SetOAuthToken(token) if result, err := ApiClient.DoApiGet("/teams/"+teamId+"/users/0/100", "", ""); err != nil { t.Fatal(err) } else { userMap := model.UserMapFromJson(result.Body) if len(userMap) == 0 { t.Fatal("user map empty - did not get results correctly") } } if _, err := ApiClient.GetAccessToken(data); err == nil { t.Fatal("should have failed - tried to reuse auth code") } ApiClient.ClearOAuthToken() }