mirror of
https://github.com/grafana/grafana.git
synced 2025-07-29 16:12:14 +08:00
LDAP: Add API endpoint to query the LDAP server(s) status (#18868)
* LDAP: Add API endpoint to query the LDAP server(s) status| This endpoint returns the current status(es) of the configured LDAP server(s). The status of each server is verified by dialling and if no error is returned we assume the server is operational. This is the last piece I'll produce as an API before moving into #18759 and see the view come to life.
This commit is contained in:
@ -86,25 +86,75 @@ func (user *LDAPUserDTO) FetchOrgs() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// LDAPServerDTO is a serializer for LDAP server statuses
|
||||
type LDAPServerDTO struct {
|
||||
Host string `json:"host"`
|
||||
Port int `json:"port"`
|
||||
Available bool `json:"available"`
|
||||
Error string `json:"error"`
|
||||
}
|
||||
|
||||
// ReloadLDAPCfg reloads the LDAP configuration
|
||||
func (server *HTTPServer) ReloadLDAPCfg() Response {
|
||||
if !ldap.IsEnabled() {
|
||||
return Error(400, "LDAP is not enabled", nil)
|
||||
return Error(http.StatusBadRequest, "LDAP is not enabled", nil)
|
||||
}
|
||||
|
||||
err := ldap.ReloadConfig()
|
||||
if err != nil {
|
||||
return Error(500, "Failed to reload ldap config.", err)
|
||||
return Error(http.StatusInternalServerError, "Failed to reload ldap config.", err)
|
||||
}
|
||||
return Success("LDAP config reloaded")
|
||||
}
|
||||
|
||||
// GetUserFromLDAP finds an user based on a username in LDAP. This helps illustrate how would the particular user be mapped in Grafana when synced.
|
||||
func (server *HTTPServer) GetUserFromLDAP(c *models.ReqContext) Response {
|
||||
// GetLDAPStatus attempts to connect to all the configured LDAP servers and returns information on whenever they're availabe or not.
|
||||
func (server *HTTPServer) GetLDAPStatus(c *models.ReqContext) Response {
|
||||
if !ldap.IsEnabled() {
|
||||
return Error(http.StatusBadRequest, "LDAP is not enabled", nil)
|
||||
}
|
||||
|
||||
ldapConfig, err := getLDAPConfig()
|
||||
|
||||
if err != nil {
|
||||
return Error(400, "Failed to obtain the LDAP configuration. Please ", err)
|
||||
return Error(http.StatusBadRequest, "Failed to obtain the LDAP configuration. Please verify the configuration and try again.", err)
|
||||
}
|
||||
|
||||
ldap := newLDAP(ldapConfig.Servers)
|
||||
|
||||
statuses, err := ldap.Ping()
|
||||
|
||||
if err != nil {
|
||||
return Error(http.StatusBadRequest, "Failed to connect to the LDAP server(s)", err)
|
||||
}
|
||||
|
||||
serverDTOs := []*LDAPServerDTO{}
|
||||
for _, status := range statuses {
|
||||
s := &LDAPServerDTO{
|
||||
Host: status.Host,
|
||||
Available: status.Available,
|
||||
Port: status.Port,
|
||||
}
|
||||
|
||||
if status.Error != nil {
|
||||
s.Error = status.Error.Error()
|
||||
}
|
||||
|
||||
serverDTOs = append(serverDTOs, s)
|
||||
}
|
||||
|
||||
return JSON(http.StatusOK, serverDTOs)
|
||||
}
|
||||
|
||||
// GetUserFromLDAP finds an user based on a username in LDAP. This helps illustrate how would the particular user be mapped in Grafana when synced.
|
||||
func (server *HTTPServer) GetUserFromLDAP(c *models.ReqContext) Response {
|
||||
if !ldap.IsEnabled() {
|
||||
return Error(http.StatusBadRequest, "LDAP is not enabled", nil)
|
||||
}
|
||||
|
||||
ldapConfig, err := getLDAPConfig()
|
||||
|
||||
if err != nil {
|
||||
return Error(http.StatusBadRequest, "Failed to obtain the LDAP configuration. Please ", err)
|
||||
}
|
||||
|
||||
ldap := newLDAP(ldapConfig.Servers)
|
||||
|
Reference in New Issue
Block a user