Fixes PL-3 Restrict team creation to specific domains

Этот коммит содержится в:
=Corey Hulen
2015-08-25 14:40:16 -07:00
родитель d132de4400
Коммит 67bc12e4b7
4 изменённых файлов: 52 добавлений и 22 удалений

Просмотреть файл

@@ -44,8 +44,7 @@ func signupTeam(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
if utils.Cfg.TeamSettings.DisableTeamCreation { if !isTreamCreationAllowed(c, email) {
c.Err = model.NewAppError("createTeamFromSignup", "Team creation has been disabled. Please ask your systems administrator for details.", "")
return return
} }
@@ -84,11 +83,6 @@ func createTeamFromSignup(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
if utils.Cfg.TeamSettings.DisableTeamCreation {
c.Err = model.NewAppError("createTeamFromSignup", "Team creation has been disabled. Please ask your systems administrator for details.", "")
return
}
props := model.MapFromJson(strings.NewReader(teamSignup.Data)) props := model.MapFromJson(strings.NewReader(teamSignup.Data))
teamSignup.Team.Email = props["email"] teamSignup.Team.Email = props["email"]
teamSignup.User.Email = props["email"] teamSignup.User.Email = props["email"]
@@ -99,6 +93,11 @@ func createTeamFromSignup(c *Context, w http.ResponseWriter, r *http.Request) {
c.Err = err c.Err = err
return return
} }
if !isTreamCreationAllowed(c, teamSignup.Team.Email) {
return
}
teamSignup.Team.Id = "" teamSignup.Team.Id = ""
password := teamSignup.User.Password password := teamSignup.User.Password
@@ -179,8 +178,7 @@ func createTeam(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
if utils.Cfg.TeamSettings.DisableTeamCreation { if !isTreamCreationAllowed(c, team.Email) {
c.Err = model.NewAppError("createTeam", "Team creation has been disabled. Please ask your systems administrator for details.", "")
return return
} }
@@ -211,6 +209,35 @@ func createTeam(c *Context, w http.ResponseWriter, r *http.Request) {
} }
} }
func isTreamCreationAllowed(c *Context, email string) bool {
email = strings.ToLower(email)
if utils.Cfg.TeamSettings.DisableTeamCreation {
c.Err = model.NewAppError("isTreamCreationAllowed", "Team creation has been disabled. Please ask your systems administrator for details.", "")
return false
}
// 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
domains := strings.Fields(strings.TrimSpace(strings.ToLower(strings.Replace(strings.Replace(utils.Cfg.TeamSettings.RestrictCreationToDomains, "@", " ", -1), ",", " ", -1))))
matched := false
for _, d := range domains {
if strings.HasSuffix(email, "@"+d) {
matched = true
break
}
}
if len(utils.Cfg.TeamSettings.RestrictCreationToDomains) > 0 && !matched {
c.Err = model.NewAppError("isTreamCreationAllowed", "Email must be from a specific domain (e.g. @example.com). Please ask your systems administrator for details.", "")
return false
}
return true
}
func findTeamByName(c *Context, w http.ResponseWriter, r *http.Request) { func findTeamByName(c *Context, w http.ResponseWriter, r *http.Request) {
m := model.MapFromJson(r.Body) m := model.MapFromJson(r.Body)

Просмотреть файл

@@ -105,6 +105,7 @@
"ReportProblemLink": "/static/help/configure_links.html", "ReportProblemLink": "/static/help/configure_links.html",
"TourLink": "/static/help/configure_links.html", "TourLink": "/static/help/configure_links.html",
"DefaultThemeColor": "#2389D7", "DefaultThemeColor": "#2389D7",
"DisableTeamCreation": true "DisableTeamCreation": false,
"RestrictCreationToDomains": "mattermost.com, @spinpunch.com"
} }
} }

Просмотреть файл

@@ -95,6 +95,7 @@
"ReportProblemLink": "/static/help/configure_links.html", "ReportProblemLink": "/static/help/configure_links.html",
"TourLink": "/static/help/configure_links.html", "TourLink": "/static/help/configure_links.html",
"DefaultThemeColor": "#2389D7", "DefaultThemeColor": "#2389D7",
"DisableTeamCreation": true "DisableTeamCreation": true,
"RestrictCreationToDomains": ""
} }
} }

Просмотреть файл

@@ -109,17 +109,18 @@ type PrivacySettings struct {
} }
type TeamSettings struct { type TeamSettings struct {
MaxUsersPerTeam int MaxUsersPerTeam int
AllowPublicLink bool AllowPublicLink bool
AllowValetDefault bool AllowValetDefault bool
TermsLink string TermsLink string
PrivacyLink string PrivacyLink string
AboutLink string AboutLink string
HelpLink string HelpLink string
ReportProblemLink string ReportProblemLink string
TourLink string TourLink string
DefaultThemeColor string DefaultThemeColor string
DisableTeamCreation bool DisableTeamCreation bool
RestrictCreationToDomains string
} }
type Config struct { type Config struct {