[MM-45817] Set cloud cookies whenever user gets logged in (#20692)
Этот коммит содержится в:
@@ -1881,11 +1881,6 @@ func login(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
c.App.AttachSessionCookies(c.AppContext, w, r)
|
c.App.AttachSessionCookies(c.AppContext, w, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
// For context see: https://mattermost.atlassian.net/browse/MM-39583
|
|
||||||
if c.App.Channels().License() != nil && *c.App.Channels().License().Features.Cloud {
|
|
||||||
c.App.AttachCloudSessionCookie(c.AppContext, w, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
userTermsOfService, err := c.App.GetUserTermsOfService(user.Id)
|
userTermsOfService, err := c.App.GetUserTermsOfService(user.Id)
|
||||||
if err != nil && err.StatusCode != http.StatusNotFound {
|
if err != nil && err.StatusCode != http.StatusNotFound {
|
||||||
c.Err = err
|
c.Err = err
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -3610,14 +3611,61 @@ func TestLoginCookies(t *testing.T) {
|
|||||||
|
|
||||||
th.App.Srv().SetLicense(model.NewTestLicense("cloud"))
|
th.App.Srv().SetLicense(model.NewTestLicense("cloud"))
|
||||||
|
|
||||||
|
th.Client.HTTPHeader[model.HeaderRequestedWith] = model.HeaderRequestedWithXML
|
||||||
_, resp, _ := th.Client.Login(th.BasicUser.Email, th.BasicUser.Password)
|
_, resp, _ := th.Client.Login(th.BasicUser.Email, th.BasicUser.Password)
|
||||||
|
|
||||||
val := strings.Split(resp.Header["Set-Cookie"][0], ";")
|
found := false
|
||||||
cloudSessionCookie := strings.Split(val[0], "=")[1]
|
cookies := resp.Header.Values("Set-Cookie")
|
||||||
domain := strings.Split(val[2], "=")[1]
|
for i := range cookies {
|
||||||
|
if strings.Contains(cookies[i], "MMCLOUDURL") {
|
||||||
|
found = true
|
||||||
|
assert.Contains(t, cookies[i], "MMCLOUDURL=testchips;", "should contain MMCLOUDURL")
|
||||||
|
assert.Contains(t, cookies[i], "Domain=mattermost.com;", "should contain Domain=mattermost.com")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert.True(t, found, "Did not find MMCLOUDURL cookie")
|
||||||
|
})
|
||||||
|
|
||||||
assert.Equal(t, "testchips", cloudSessionCookie)
|
t.Run("should return cookie with MMCLOUDURL for cloud installations when doing cws login", func(t *testing.T) {
|
||||||
assert.Equal(t, "mattermost.com", domain)
|
token := model.NewRandomString(64)
|
||||||
|
os.Setenv("CWS_CLOUD_TOKEN", token)
|
||||||
|
|
||||||
|
updateConfig := func(cfg *model.Config) {
|
||||||
|
*cfg.ServiceSettings.SiteURL = "https://testchips.cloud.mattermost.com"
|
||||||
|
}
|
||||||
|
th := SetupAndApplyConfigBeforeLogin(t, updateConfig).InitBasic()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
th.App.Srv().SetLicense(model.NewTestLicense("cloud"))
|
||||||
|
|
||||||
|
form := url.Values{}
|
||||||
|
form.Add("login_id", th.SystemAdminUser.Email)
|
||||||
|
form.Add("cws_token", token)
|
||||||
|
|
||||||
|
th.Client.HTTPClient.CheckRedirect = func(req *http.Request, via []*http.Request) error {
|
||||||
|
return http.ErrUseLastResponse
|
||||||
|
}
|
||||||
|
|
||||||
|
r, _ := th.Client.DoAPIRequestWithHeaders(
|
||||||
|
http.MethodPost,
|
||||||
|
th.Client.APIURL+"/users/login/cws",
|
||||||
|
form.Encode(),
|
||||||
|
map[string]string{
|
||||||
|
"Content-Type": "application/x-www-form-urlencoded",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
defer closeBody(r)
|
||||||
|
|
||||||
|
cookies := r.Cookies()
|
||||||
|
found := false
|
||||||
|
for i := range cookies {
|
||||||
|
if cookies[i].Name == model.SessionCookieCloudUrl {
|
||||||
|
found = true
|
||||||
|
assert.Equal(t, "testchips", cookies[i].Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert.True(t, found, "should have found cookie")
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("should NOT return cookie with MMCLOUDURL for cloud installations without expected format of cloud URL", func(t *testing.T) {
|
t.Run("should NOT return cookie with MMCLOUDURL for cloud installations without expected format of cloud URL", func(t *testing.T) {
|
||||||
|
|||||||
@@ -331,6 +331,11 @@ func (a *App) AttachSessionCookies(c *request.Context, w http.ResponseWriter, r
|
|||||||
http.SetCookie(w, sessionCookie)
|
http.SetCookie(w, sessionCookie)
|
||||||
http.SetCookie(w, userCookie)
|
http.SetCookie(w, userCookie)
|
||||||
http.SetCookie(w, csrfCookie)
|
http.SetCookie(w, csrfCookie)
|
||||||
|
|
||||||
|
// For context see: https://mattermost.atlassian.net/browse/MM-39583
|
||||||
|
if a.Channels().License() != nil && *a.Channels().License().Features.Cloud {
|
||||||
|
a.AttachCloudSessionCookie(c, w, r)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetProtocol(r *http.Request) string {
|
func GetProtocol(r *http.Request) string {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user