diff --git a/api/team.go b/api/team.go
index 052d6e6980..2f680dc768 100644
--- a/api/team.go
+++ b/api/team.go
@@ -8,6 +8,7 @@ import (
"fmt"
l4g "github.com/alecthomas/log4go"
"github.com/gorilla/mux"
+ "github.com/mattermost/platform/einterfaces"
"github.com/mattermost/platform/model"
"github.com/mattermost/platform/store"
"github.com/mattermost/platform/utils"
@@ -25,6 +26,7 @@ func InitTeam(r *mux.Router) {
sr := r.PathPrefix("/teams").Subrouter()
sr.Handle("/create", ApiAppHandler(createTeam)).Methods("POST")
sr.Handle("/create_from_signup", ApiAppHandler(createTeamFromSignup)).Methods("POST")
+ sr.Handle("/create_with_ldap", ApiAppHandler(createTeamWithLdap)).Methods("POST")
sr.Handle("/create_with_sso/{service:[A-Za-z]+}", ApiAppHandler(createTeamFromSSO)).Methods("POST")
sr.Handle("/signup", ApiAppHandler(signupTeam)).Methods("POST")
sr.Handle("/all", ApiUserRequired(getAll)).Methods("GET")
@@ -244,6 +246,80 @@ func createTeamFromSignup(c *Context, w http.ResponseWriter, r *http.Request) {
}
}
+func createTeamWithLdap(c *Context, w http.ResponseWriter, r *http.Request) {
+ ldap := einterfaces.GetLdapInterface()
+ if ldap == nil {
+ c.Err = model.NewLocAppError("createTeamWithLdap", "ent.ldap.do_login.licence_disable.app_error", nil, "")
+ return
+ }
+
+ teamSignup := model.TeamSignupFromJson(r.Body)
+
+ if teamSignup == nil {
+ c.SetInvalidParam("createTeam", "teamSignup")
+ return
+ }
+
+ teamSignup.Team.PreSave()
+
+ if err := teamSignup.Team.IsValid(*utils.Cfg.TeamSettings.RestrictTeamNames); err != nil {
+ c.Err = err
+ return
+ }
+
+ if !isTeamCreationAllowed(c, teamSignup.Team.Email) {
+ return
+ }
+
+ teamSignup.Team.Id = ""
+
+ found := FindTeamByName(c, teamSignup.Team.Name, "true")
+ if c.Err != nil {
+ return
+ }
+
+ if found {
+ c.Err = model.NewLocAppError("createTeamFromSignup", "api.team.create_team_from_signup.unavailable.app_error", nil, "d="+teamSignup.Team.Name)
+ return
+ }
+
+ user, err := ldap.GetUser(teamSignup.User.Username)
+ if err != nil {
+ c.Err = err
+ return
+ }
+
+ err = ldap.CheckPassword(teamSignup.User.Username, teamSignup.User.Password)
+ if err != nil {
+ c.Err = err
+ return
+ }
+
+ if result := <-Srv.Store.Team().Save(&teamSignup.Team); result.Err != nil {
+ c.Err = result.Err
+ return
+ } else {
+ rteam := result.Data.(*model.Team)
+
+ if _, err := CreateDefaultChannels(c, rteam.Id); err != nil {
+ c.Err = nil
+ return
+ }
+
+ user.TeamId = rteam.Id
+ ruser, err := CreateUser(rteam, user)
+ if err != nil {
+ c.Err = err
+ return
+ }
+
+ teamSignup.Team = *rteam
+ teamSignup.User = *ruser
+
+ w.Write([]byte(teamSignup.ToJson()))
+ }
+}
+
func createTeam(c *Context, w http.ResponseWriter, r *http.Request) {
team := model.TeamFromJson(r.Body)
rteam := CreateTeam(c, team)
diff --git a/einterfaces/ldap.go b/einterfaces/ldap.go
index d4bfadc213..1c59383224 100644
--- a/einterfaces/ldap.go
+++ b/einterfaces/ldap.go
@@ -9,6 +9,8 @@ import (
type LdapInterface interface {
DoLogin(team *model.Team, id string, password string) (*model.User, *model.AppError)
+ GetUser(id string) (*model.User, *model.AppError)
+ CheckPassword(id string, password string) *model.AppError
}
var theLdapInterface LdapInterface
diff --git a/web/react/components/signup_team.jsx b/web/react/components/signup_team.jsx
index 5e8ae117d0..26c46dad0d 100644
--- a/web/react/components/signup_team.jsx
+++ b/web/react/components/signup_team.jsx
@@ -4,6 +4,7 @@
import ChoosePage from './team_signup_choose_auth.jsx';
import EmailSignUpPage from './team_signup_with_email.jsx';
import SSOSignupPage from './team_signup_with_sso.jsx';
+import LdapSignUpPage from './team_signup_with_ldap.jsx';
import Constants from '../utils/constants.jsx';
import {FormattedMessage} from 'mm-intl';
@@ -24,12 +25,18 @@ export default class TeamSignUp extends React.Component {
count = count + 1;
}
+ if (global.window.mm_config.EnableLdap === 'true') {
+ count = count + 1;
+ }
+
if (count > 1) {
this.state = {page: 'choose'};
} else if (global.window.mm_config.EnableSignUpWithEmail === 'true') {
this.state = {page: 'email'};
} else if (global.window.mm_config.EnableSignUpWithGitLab === 'true') {
this.state = {page: 'gitlab'};
+ } else if (global.window.mm_config.EnableLdap === 'true') {
+ this.state = {page: 'ldap'};
} else {
this.state = {page: 'none'};
}
@@ -133,6 +140,13 @@ export default class TeamSignUp extends React.Component {