MM-21356: Conditionally set user status online (#13538)
* MM-21356: Conditionally set user status online Check for the set_online query param and do not set the status if it is set to false. * Fix some issues * Add a test * Log an error if an invalid value was passed * Logging a warning instead of error Co-authored-by: mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
49308e9163
Коммит
8b24b26cb0
16
api4/post.go
16
api4/post.go
@@ -10,6 +10,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/mattermost/mattermost-server/v5/app"
|
"github.com/mattermost/mattermost-server/v5/app"
|
||||||
|
"github.com/mattermost/mattermost-server/v5/mlog"
|
||||||
"github.com/mattermost/mattermost-server/v5/model"
|
"github.com/mattermost/mattermost-server/v5/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -67,7 +68,20 @@ func createPost(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
c.App.SetStatusOnline(c.App.Session.UserId, false)
|
setOnline := r.URL.Query().Get("set_online")
|
||||||
|
setOnlineBool := true // By default, always set online.
|
||||||
|
var err2 error
|
||||||
|
if setOnline != "" {
|
||||||
|
setOnlineBool, err2 = strconv.ParseBool(setOnline)
|
||||||
|
if err2 != nil {
|
||||||
|
mlog.Warn("Failed to parse set_online URL query parameter from createPost request", mlog.Err(err2))
|
||||||
|
setOnlineBool = true // Set online nevertheless.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if setOnlineBool {
|
||||||
|
c.App.SetStatusOnline(c.App.Session.UserId, false)
|
||||||
|
}
|
||||||
|
|
||||||
c.App.UpdateLastActivityAtIfNeeded(c.App.Session)
|
c.App.UpdateLastActivityAtIfNeeded(c.App.Session)
|
||||||
|
|
||||||
w.WriteHeader(http.StatusCreated)
|
w.WriteHeader(http.StatusCreated)
|
||||||
|
|||||||
@@ -525,6 +525,41 @@ func TestCreatePostSendOutOfChannelMentions(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCreatePostCheckOnlineStatus(t *testing.T) {
|
||||||
|
th := Setup().InitBasic()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
api := Init(th.Server, th.Server.AppOptions, th.Server.Router)
|
||||||
|
session, _ := th.App.GetSession(th.Client.AuthToken)
|
||||||
|
|
||||||
|
handler := api.ApiHandler(createPost)
|
||||||
|
resp := httptest.NewRecorder()
|
||||||
|
post := &model.Post{
|
||||||
|
ChannelId: th.BasicChannel.Id,
|
||||||
|
Message: "some message",
|
||||||
|
}
|
||||||
|
|
||||||
|
req := httptest.NewRequest("POST", "/api/v4/posts?set_online=false", strings.NewReader(post.ToJson()))
|
||||||
|
req.Header.Set(model.HEADER_AUTH, "Bearer "+session.Token)
|
||||||
|
|
||||||
|
handler.ServeHTTP(resp, req)
|
||||||
|
assert.Equal(t, http.StatusCreated, resp.Code)
|
||||||
|
|
||||||
|
_, err := th.App.GetStatus(th.BasicUser.Id)
|
||||||
|
require.NotNil(t, err)
|
||||||
|
assert.Equal(t, "store.sql_status.get.missing.app_error", err.Id)
|
||||||
|
|
||||||
|
req = httptest.NewRequest("POST", "/api/v4/posts", strings.NewReader(post.ToJson()))
|
||||||
|
req.Header.Set(model.HEADER_AUTH, "Bearer "+session.Token)
|
||||||
|
|
||||||
|
handler.ServeHTTP(resp, req)
|
||||||
|
assert.Equal(t, http.StatusCreated, resp.Code)
|
||||||
|
|
||||||
|
st, err := th.App.GetStatus(th.BasicUser.Id)
|
||||||
|
require.Nil(t, err)
|
||||||
|
assert.Equal(t, "online", st.Status)
|
||||||
|
}
|
||||||
|
|
||||||
func TestUpdatePost(t *testing.T) {
|
func TestUpdatePost(t *testing.T) {
|
||||||
th := Setup().InitBasic()
|
th := Setup().InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user