|
|
|
@ -19,7 +19,7 @@ var ( |
|
|
|
|
getLDAPConfig = multildap.GetConfig |
|
|
|
|
newLDAP = multildap.New |
|
|
|
|
|
|
|
|
|
logger = log.New("LDAP.debug") |
|
|
|
|
ldapLogger = log.New("LDAP.debug") |
|
|
|
|
|
|
|
|
|
errOrganizationNotFound = func(orgId int64) error { |
|
|
|
|
return fmt.Errorf("unable to find organization with ID '%d'", orgId) |
|
|
|
@ -117,7 +117,6 @@ func (hs *HTTPServer) GetLDAPStatus(c *models.ReqContext) Response { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ldapConfig, err := getLDAPConfig(hs.Cfg) |
|
|
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
return Error(http.StatusBadRequest, "Failed to obtain the LDAP configuration. Please verify the configuration and try again", err) |
|
|
|
|
} |
|
|
|
@ -129,7 +128,6 @@ func (hs *HTTPServer) GetLDAPStatus(c *models.ReqContext) Response { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
statuses, err := ldap.Ping() |
|
|
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
return Error(http.StatusBadRequest, "Failed to connect to the LDAP server(s)", err) |
|
|
|
|
} |
|
|
|
@ -187,12 +185,11 @@ func (hs *HTTPServer) PostSyncUserWithLDAP(c *models.ReqContext) Response { |
|
|
|
|
|
|
|
|
|
ldapServer := newLDAP(ldapConfig.Servers) |
|
|
|
|
user, _, err := ldapServer.User(query.Result.Login) |
|
|
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
if errors.Is(err, multildap.ErrDidNotFindUser) { // User was not in the LDAP server - we need to take action:
|
|
|
|
|
if setting.AdminUser == query.Result.Login { // User is *the* Grafana Admin. We cannot disable it.
|
|
|
|
|
errMsg := fmt.Sprintf(`Refusing to sync grafana super admin "%s" - it would be disabled`, query.Result.Login) |
|
|
|
|
logger.Error(errMsg) |
|
|
|
|
ldapLogger.Error(errMsg) |
|
|
|
|
return Error(http.StatusBadRequest, errMsg, err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -210,7 +207,7 @@ func (hs *HTTPServer) PostSyncUserWithLDAP(c *models.ReqContext) Response { |
|
|
|
|
return Error(http.StatusBadRequest, "User not found in LDAP. Disabled the user without updating information", nil) // should this be a success?
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
logger.Debug("Failed to sync the user with LDAP", "err", err) |
|
|
|
|
ldapLogger.Debug("Failed to sync the user with LDAP", "err", err) |
|
|
|
|
return Error(http.StatusBadRequest, "Something went wrong while finding the user in LDAP", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -221,7 +218,6 @@ func (hs *HTTPServer) PostSyncUserWithLDAP(c *models.ReqContext) Response { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
err = bus.Dispatch(upsertCmd) |
|
|
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
return Error(http.StatusInternalServerError, "Failed to update the user", err) |
|
|
|
|
} |
|
|
|
@ -236,7 +232,6 @@ func (hs *HTTPServer) GetUserFromLDAP(c *models.ReqContext) Response { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ldapConfig, err := getLDAPConfig(hs.Cfg) |
|
|
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
return Error(http.StatusBadRequest, "Failed to obtain the LDAP configuration", err) |
|
|
|
|
} |
|
|
|
@ -255,7 +250,7 @@ func (hs *HTTPServer) GetUserFromLDAP(c *models.ReqContext) Response { |
|
|
|
|
return Error(http.StatusNotFound, "No user was found in the LDAP server(s) with that username", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
logger.Debug("user found", "user", user) |
|
|
|
|
ldapLogger.Debug("user found", "user", user) |
|
|
|
|
|
|
|
|
|
name, surname := splitName(user.Name) |
|
|
|
|
|
|
|
|
@ -304,16 +299,14 @@ func (hs *HTTPServer) GetUserFromLDAP(c *models.ReqContext) Response { |
|
|
|
|
|
|
|
|
|
u.OrgRoles = orgRoles |
|
|
|
|
|
|
|
|
|
logger.Debug("mapping org roles", "orgsRoles", u.OrgRoles) |
|
|
|
|
ldapLogger.Debug("mapping org roles", "orgsRoles", u.OrgRoles) |
|
|
|
|
err = u.FetchOrgs() |
|
|
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
return Error(http.StatusBadRequest, "An organization was not found - Please verify your LDAP configuration", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cmd := &models.GetTeamsForLDAPGroupCommand{Groups: user.Groups} |
|
|
|
|
err = bus.Dispatch(cmd) |
|
|
|
|
|
|
|
|
|
if err != nil && !errors.Is(err, bus.ErrHandlerNotFound) { |
|
|
|
|
return Error(http.StatusBadRequest, "Unable to find the teams for this user", err) |
|
|
|
|
} |
|
|
|
|