summaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
Diffstat (limited to 'api')
-rw-r--r--api/api.go4
-rw-r--r--api/channel.go5
-rw-r--r--api/channel_test.go32
3 files changed, 37 insertions, 4 deletions
diff --git a/api/api.go b/api/api.go
index 63a460dc5..3404e0c0b 100644
--- a/api/api.go
+++ b/api/api.go
@@ -25,7 +25,7 @@ type Routes struct {
Channels *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}/channels'
NeedChannel *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}/channels/{channel_id:[A-Za-z0-9]+}'
- NeedChannelName *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}/channels/name/{channel_name:[A-Za-z0-9-]+}'
+ NeedChannelName *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}/channels/name/{channel_name:[A-Za-z0-9_-]+}'
Posts *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}/channels/{channel_id:[A-Za-z0-9]+}/posts'
NeedPost *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}/channels/{channel_id:[A-Za-z0-9]+}/posts/{post_id:[A-Za-z0-9]+}'
@@ -60,7 +60,7 @@ func InitApi() {
BaseRoutes.NeedTeam = BaseRoutes.Teams.PathPrefix("/{team_id:[A-Za-z0-9]+}").Subrouter()
BaseRoutes.Channels = BaseRoutes.NeedTeam.PathPrefix("/channels").Subrouter()
BaseRoutes.NeedChannel = BaseRoutes.Channels.PathPrefix("/{channel_id:[A-Za-z0-9]+}").Subrouter()
- BaseRoutes.NeedChannelName = BaseRoutes.Channels.PathPrefix("/name/{channel_name:[A-Za-z0-9-]+}").Subrouter()
+ BaseRoutes.NeedChannelName = BaseRoutes.Channels.PathPrefix("/name/{channel_name:[A-Za-z0-9_-]+}").Subrouter()
BaseRoutes.Posts = BaseRoutes.NeedChannel.PathPrefix("/posts").Subrouter()
BaseRoutes.NeedPost = BaseRoutes.Posts.PathPrefix("/{post_id:[A-Za-z0-9]+}").Subrouter()
BaseRoutes.Commands = BaseRoutes.NeedTeam.PathPrefix("/commands").Subrouter()
diff --git a/api/channel.go b/api/channel.go
index 6d1604900..e0428f311 100644
--- a/api/channel.go
+++ b/api/channel.go
@@ -476,6 +476,11 @@ func joinChannel(c *Context, channelChannel store.StoreChannel, userChannel stor
channel := cresult.Data.(*model.Channel)
user := uresult.Data.(*model.User)
+ if mresult := <-Srv.Store.Channel().GetMember(channel.Id, user.Id); mresult.Err == nil && mresult.Data != nil {
+ // the user is already in the channel so just return successful
+ return nil, channel
+ }
+
if !c.HasPermissionsToTeam(channel.TeamId, "join") {
return c.Err, nil
}
diff --git a/api/channel_test.go b/api/channel_test.go
index 175b0a14a..5c51e4d93 100644
--- a/api/channel_test.go
+++ b/api/channel_test.go
@@ -462,11 +462,25 @@ func TestJoinChannelById(t *testing.T) {
user3 := th.CreateUser(th.BasicClient)
LinkUserToTeam(user3, team)
- Client.Login(user3.Email, "pwd")
+ Client.Must(Client.Login(user3.Email, "Password1"))
if _, err := Client.JoinChannel(rchannel.Id); err == nil {
t.Fatal("shoudn't be able to join direct channel")
}
+
+ th.LoginBasic()
+
+ if _, err := Client.JoinChannel(channel1.Id); err != nil {
+ t.Fatal("should be able to join public channel that we're a member of")
+ }
+
+ if _, err := Client.JoinChannel(channel3.Id); err != nil {
+ t.Fatal("should be able to join private channel that we're a member of")
+ }
+
+ if _, err := Client.JoinChannel(rchannel.Id); err != nil {
+ t.Fatal("should be able to join direct channel that we're a member of")
+ }
}
func TestJoinChannelByName(t *testing.T) {
@@ -492,11 +506,25 @@ func TestJoinChannelByName(t *testing.T) {
user3 := th.CreateUser(th.BasicClient)
LinkUserToTeam(user3, team)
- Client.Login(user3.Email, "pwd")
+ Client.Must(Client.Login(user3.Email, "Password1"))
if _, err := Client.JoinChannelByName(rchannel.Name); err == nil {
t.Fatal("shoudn't be able to join direct channel")
}
+
+ th.LoginBasic()
+
+ if _, err := Client.JoinChannelByName(channel1.Name); err != nil {
+ t.Fatal("should be able to join public channel that we're a member of")
+ }
+
+ if _, err := Client.JoinChannelByName(channel3.Name); err != nil {
+ t.Fatal("should be able to join private channel that we're a member of")
+ }
+
+ if _, err := Client.JoinChannelByName(rchannel.Name); err != nil {
+ t.Fatal("should be able to join direct channel that we're a member of")
+ }
}
func TestLeaveChannel(t *testing.T) {