[PLT-5639] Show a message when invited addresses are blocked (#6691)
* Show a message when invited addresses are blocked When using the "Send Email Invite" functionality. Emails were sent to domains that were not on the `RestrictCreationToDomains` list. This would lead to users getting a message that they can't create an account if they follow the link in the email. This commit will check the email addresses before the mails are sent and warn the user typing them in which ones are blocked. * Add unit test for domain restrictions on invite * Invite Member: Clear serverError on toggle
Этот коммит содержится в:
коммит произвёл
Harrison Healey
родитель
976030ea25
Коммит
227586e09a
@@ -1449,6 +1449,22 @@ func TestInviteUsersToTeam(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
restrictCreationToDomains := utils.Cfg.TeamSettings.RestrictCreationToDomains
|
||||||
|
defer func() {
|
||||||
|
utils.Cfg.TeamSettings.RestrictCreationToDomains = restrictCreationToDomains
|
||||||
|
}()
|
||||||
|
utils.Cfg.TeamSettings.RestrictCreationToDomains = "@example.com"
|
||||||
|
|
||||||
|
err := app.InviteNewUsersToTeam(emailList, th.BasicTeam.Id, th.BasicUser.Id)
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("Adding users with non-restricted domains was allowed")
|
||||||
|
}
|
||||||
|
if err.Where != "InviteNewUsersToTeam" || err.Message != "api.team.invite_members.invalid_email.app_error" {
|
||||||
|
t.Log(err)
|
||||||
|
t.Fatal("Got wrong error message!")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetTeamInviteInfo(t *testing.T) {
|
func TestGetTeamInviteInfo(t *testing.T) {
|
||||||
|
|||||||
33
app/team.go
33
app/team.go
@@ -55,13 +55,8 @@ func CreateTeamWithUser(team *model.Team, userId string) (*model.Team, *model.Ap
|
|||||||
return rteam, nil
|
return rteam, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func isTeamEmailAllowed(user *model.User) bool {
|
func isTeamEmailAddressAllowed(email string) bool {
|
||||||
email := strings.ToLower(user.Email)
|
email = strings.ToLower(email)
|
||||||
|
|
||||||
if len(user.AuthService) > 0 && len(*user.AuthData) > 0 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// commas and @ signs are optional
|
// commas and @ signs are optional
|
||||||
// can be in the form of "@corp.mattermost.com, mattermost.com mattermost.org" -> corp.mattermost.com mattermost.com mattermost.org
|
// can be in the form of "@corp.mattermost.com, mattermost.com mattermost.org" -> corp.mattermost.com mattermost.com mattermost.org
|
||||||
domains := strings.Fields(strings.TrimSpace(strings.ToLower(strings.Replace(strings.Replace(utils.Cfg.TeamSettings.RestrictCreationToDomains, "@", " ", -1), ",", " ", -1))))
|
domains := strings.Fields(strings.TrimSpace(strings.ToLower(strings.Replace(strings.Replace(utils.Cfg.TeamSettings.RestrictCreationToDomains, "@", " ", -1), ",", " ", -1))))
|
||||||
@@ -81,6 +76,16 @@ func isTeamEmailAllowed(user *model.User) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isTeamEmailAllowed(user *model.User) bool {
|
||||||
|
email := strings.ToLower(user.Email)
|
||||||
|
|
||||||
|
if len(user.AuthService) > 0 && len(*user.AuthData) > 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return isTeamEmailAddressAllowed(email)
|
||||||
|
}
|
||||||
|
|
||||||
func UpdateTeam(team *model.Team) (*model.Team, *model.AppError) {
|
func UpdateTeam(team *model.Team) (*model.Team, *model.AppError) {
|
||||||
var oldTeam *model.Team
|
var oldTeam *model.Team
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
@@ -621,6 +626,20 @@ func InviteNewUsersToTeam(emailList []string, teamId, senderId string) *model.Ap
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var invalidEmailList []string
|
||||||
|
|
||||||
|
for _, email := range emailList {
|
||||||
|
if ! isTeamEmailAddressAllowed(email) {
|
||||||
|
invalidEmailList = append(invalidEmailList, email)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(invalidEmailList) > 0 {
|
||||||
|
s := strings.Join(invalidEmailList, ", ")
|
||||||
|
err := model.NewAppError("InviteNewUsersToTeam", "api.team.invite_members.invalid_email.app_error", map[string]interface{}{"Addresses": s}, "", http.StatusBadRequest)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
tchan := Srv.Store.Team().Get(teamId)
|
tchan := Srv.Store.Team().Get(teamId)
|
||||||
uchan := Srv.Store.User().Get(senderId)
|
uchan := Srv.Store.User().Get(senderId)
|
||||||
|
|
||||||
|
|||||||
@@ -2131,6 +2131,10 @@
|
|||||||
"id": "api.team.invite_members.send.error",
|
"id": "api.team.invite_members.send.error",
|
||||||
"translation": "Failed to send invite email successfully err=%v"
|
"translation": "Failed to send invite email successfully err=%v"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "api.team.invite_members.invalid_email.app_error",
|
||||||
|
"translation": "The following email addresses do not belong to an accepted domain: {{.Addresses}}. Please contact your System Administrator for details."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "api.team.invite_members.sending.info",
|
"id": "api.team.invite_members.sending.info",
|
||||||
"translation": "sending invitation to %v %v"
|
"translation": "sending invitation to %v %v"
|
||||||
|
|||||||
@@ -97,7 +97,8 @@ class InviteMemberModal extends React.Component {
|
|||||||
|
|
||||||
handleToggle(value) {
|
handleToggle(value) {
|
||||||
this.setState({
|
this.setState({
|
||||||
show: value
|
show: value,
|
||||||
|
serverError: null
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user