[MM-58549] Desktop login (#27732)
* desktop oauth and saml login --------- Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
@@ -1979,7 +1979,15 @@ func loginWithDesktopToken(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
session, err := c.App.DoLogin(c.AppContext, w, r, user, deviceId, false, false, false)
|
||||
isOAuthUser := user.IsOAuthUser()
|
||||
isSamlUser := user.IsSAMLUser()
|
||||
|
||||
if !isOAuthUser && !isSamlUser {
|
||||
c.Err = model.NewAppError("loginWithDesktopToken", "api.user.login_with_desktop_token.not_oauth_or_saml_user.app_error", nil, "", http.StatusUnauthorized)
|
||||
return
|
||||
}
|
||||
|
||||
session, err := c.App.DoLogin(c.AppContext, w, r, user, deviceId, false, isOAuthUser, isSamlUser)
|
||||
if err != nil {
|
||||
c.Err = err
|
||||
return
|
||||
|
||||
@@ -7776,3 +7776,75 @@ func TestUserUpdateEvents(t *testing.T) {
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func TestLoginWithDesktopToken(t *testing.T) {
|
||||
th := Setup(t).InitBasic()
|
||||
defer th.TearDown()
|
||||
|
||||
t.Run("login SAML User with desktop token", func(t *testing.T) {
|
||||
samlUser := th.CreateUserWithAuth(model.UserAuthServiceSaml)
|
||||
|
||||
token, appErr := th.App.GenerateAndSaveDesktopToken(time.Now().Unix(), samlUser)
|
||||
assert.Nil(t, appErr)
|
||||
|
||||
user, _, err := th.Client.LoginWithDesktopToken(context.Background(), *token, "")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, samlUser.Id, user.Id)
|
||||
|
||||
sessions, _, err := th.SystemAdminClient.GetSessions(context.Background(), samlUser.Id, "")
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Len(t, sessions, 1)
|
||||
assert.Equal(t, "true", sessions[0].Props["isSaml"])
|
||||
assert.Equal(t, "false", sessions[0].Props["isOAuthUser"])
|
||||
})
|
||||
|
||||
t.Run("login OAuth User with desktop token", func(t *testing.T) {
|
||||
gitlabUser := th.CreateUserWithAuth(model.UserAuthServiceGitlab)
|
||||
|
||||
token, appErr := th.App.GenerateAndSaveDesktopToken(time.Now().Unix(), gitlabUser)
|
||||
assert.Nil(t, appErr)
|
||||
|
||||
user, _, err := th.Client.LoginWithDesktopToken(context.Background(), *token, "")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, gitlabUser.Id, user.Id)
|
||||
|
||||
sessions, _, err := th.SystemAdminClient.GetSessions(context.Background(), gitlabUser.Id, "")
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Len(t, sessions, 1)
|
||||
assert.Equal(t, "false", sessions[0].Props["isSaml"])
|
||||
assert.Equal(t, "true", sessions[0].Props["isOAuthUser"])
|
||||
})
|
||||
|
||||
t.Run("login email user with desktop token", func(t *testing.T) {
|
||||
// Sleep to avoid rate limit error
|
||||
time.Sleep(time.Second)
|
||||
user := th.CreateUser()
|
||||
|
||||
token, appErr := th.App.GenerateAndSaveDesktopToken(time.Now().Unix(), user)
|
||||
assert.Nil(t, appErr)
|
||||
|
||||
_, resp, err := th.Client.LoginWithDesktopToken(context.Background(), *token, "")
|
||||
require.Error(t, err)
|
||||
CheckUnauthorizedStatus(t, resp)
|
||||
})
|
||||
|
||||
t.Run("invalid desktop token on login", func(t *testing.T) {
|
||||
user := th.CreateUser()
|
||||
|
||||
_, appErr := th.App.GenerateAndSaveDesktopToken(time.Now().Unix(), user)
|
||||
assert.Nil(t, appErr)
|
||||
|
||||
invalidToken := "testinvalidToken"
|
||||
token := &invalidToken
|
||||
|
||||
_, _, err := th.Client.LoginWithDesktopToken(context.Background(), *token, "")
|
||||
require.Error(t, err)
|
||||
|
||||
sessions, _, err := th.SystemAdminClient.GetSessions(context.Background(), user.Id, "")
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Len(t, sessions, 0)
|
||||
})
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user