forked from Deuxfleurs/guichet
Add Datalist to help search users or group in LDAP admin page
This commit is contained in:
parent
353f9600f3
commit
3d7b4a9f68
2 changed files with 75 additions and 48 deletions
45
admin.go
45
admin.go
|
@ -132,6 +132,8 @@ type AdminLDAPTplData struct {
|
||||||
HasGroups bool
|
HasGroups bool
|
||||||
Groups []EntryName
|
Groups []EntryName
|
||||||
|
|
||||||
|
ListMemGro map[string]string
|
||||||
|
|
||||||
Error string
|
Error string
|
||||||
Success bool
|
Success bool
|
||||||
}
|
}
|
||||||
|
@ -360,32 +362,30 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
members := []EntryName{}
|
members := []EntryName{}
|
||||||
if len(members_dn) > 0 {
|
mapDnToNameMember := make(map[string]string)
|
||||||
mapDnToName := make(map[string]string)
|
|
||||||
searchRequest = ldap.NewSearchRequest(
|
searchRequest = ldap.NewSearchRequest(
|
||||||
config.UserBaseDN,
|
config.UserBaseDN,
|
||||||
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
|
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
|
||||||
fmt.Sprintf("(objectClass=organizationalPerson)"),
|
fmt.Sprintf("(objectClass=organizationalPerson)"),
|
||||||
[]string{"dn", "displayname", "description"},
|
[]string{"dn", "displayname", "description"},
|
||||||
nil)
|
nil)
|
||||||
sr, err := login.conn.Search(searchRequest)
|
sr, err = login.conn.Search(searchRequest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, ent := range sr.Entries {
|
for _, ent := range sr.Entries {
|
||||||
mapDnToName[ent.DN] = ent.GetAttributeValue("displayname")
|
mapDnToNameMember[ent.DN] = ent.GetAttributeValue("displayname")
|
||||||
if mapDnToName[ent.DN] == "" {
|
if mapDnToNameMember[ent.DN] == "" {
|
||||||
mapDnToName[ent.DN] = ent.GetAttributeValue("description")
|
mapDnToNameMember[ent.DN] = ent.GetAttributeValue("description")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, memdn := range members_dn {
|
for _, memdn := range members_dn {
|
||||||
members = append(members, EntryName{
|
members = append(members, EntryName{
|
||||||
DN: memdn,
|
DN: memdn,
|
||||||
Name: mapDnToName[memdn],
|
Name: mapDnToNameMember[memdn],
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
groups_dn := []string{}
|
groups_dn := []string{}
|
||||||
if gp, ok := props["memberof"]; ok {
|
if gp, ok := props["memberof"]; ok {
|
||||||
|
@ -394,29 +394,27 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
groups := []EntryName{}
|
groups := []EntryName{}
|
||||||
if len(groups_dn) > 0 {
|
mapDnToNameGroup := make(map[string]string)
|
||||||
mapDnToName := make(map[string]string)
|
|
||||||
searchRequest = ldap.NewSearchRequest(
|
searchRequest = ldap.NewSearchRequest(
|
||||||
config.GroupBaseDN,
|
config.GroupBaseDN,
|
||||||
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
|
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
|
||||||
fmt.Sprintf("(objectClass=groupOfNames)"),
|
fmt.Sprintf("(objectClass=groupOfNames)"),
|
||||||
[]string{"dn", "description"},
|
[]string{"dn", "description"},
|
||||||
nil)
|
nil)
|
||||||
sr, err := login.conn.Search(searchRequest)
|
sr, err = login.conn.Search(searchRequest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, ent := range sr.Entries {
|
for _, ent := range sr.Entries {
|
||||||
mapDnToName[ent.DN] = ent.GetAttributeValue("description")
|
mapDnToNameGroup[ent.DN] = ent.GetAttributeValue("description")
|
||||||
}
|
}
|
||||||
for _, grpdn := range groups_dn {
|
for _, grpdn := range groups_dn {
|
||||||
groups = append(groups, EntryName{
|
groups = append(groups, EntryName{
|
||||||
DN: grpdn,
|
DN: grpdn,
|
||||||
Name: mapDnToName[grpdn],
|
Name: mapDnToNameGroup[grpdn],
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Get children
|
// Get children
|
||||||
searchRequest = ldap.NewSearchRequest(
|
searchRequest = ldap.NewSearchRequest(
|
||||||
|
@ -465,6 +463,23 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Get the members or groups existing
|
||||||
|
var ExistList map[string]string
|
||||||
|
if hasMembers {
|
||||||
|
ExistList = mapDnToNameMember
|
||||||
|
//Suppress the members already in the group
|
||||||
|
for _, value := range members {
|
||||||
|
delete(ExistList, value.DN)
|
||||||
|
}
|
||||||
|
} else if hasGroups {
|
||||||
|
ExistList = mapDnToNameGroup
|
||||||
|
//Delete the groups where the user is already a member
|
||||||
|
for _, value := range groups {
|
||||||
|
delete(ExistList, value.DN)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
templateAdminLDAP.Execute(w, &AdminLDAPTplData{
|
templateAdminLDAP.Execute(w, &AdminLDAPTplData{
|
||||||
DN: dn,
|
DN: dn,
|
||||||
|
|
||||||
|
@ -479,6 +494,8 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
|
||||||
HasGroups: len(groups) > 0 || hasGroups,
|
HasGroups: len(groups) > 0 || hasGroups,
|
||||||
Groups: groups,
|
Groups: groups,
|
||||||
|
|
||||||
|
ListMemGro: ExistList,
|
||||||
|
|
||||||
Error: dError,
|
Error: dError,
|
||||||
Success: dSuccess,
|
Success: dSuccess,
|
||||||
})
|
})
|
||||||
|
|
|
@ -146,7 +146,12 @@
|
||||||
<div class="col-md-3"><strong>Ajouter au groupe :</strong>
|
<div class="col-md-3"><strong>Ajouter au groupe :</strong>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-5">
|
<div class="col-md-5">
|
||||||
<input class="form-control" type="text" name="values" placeholder="Utilisateur..." />
|
<input class="form-control" type="text" list="users" name="values" placeholder="Utilisateur..." />
|
||||||
|
<datalist id="users">
|
||||||
|
{{ range $key, $value := .ListMemGro}}
|
||||||
|
<option value={{$key}}>{{$value}}</option>
|
||||||
|
{{end}}
|
||||||
|
</datalist>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-2">
|
<div class="col-md-2">
|
||||||
<input type="submit" value="Ajouter" class="form-control btn btn-success btn-sm" />
|
<input type="submit" value="Ajouter" class="form-control btn btn-success btn-sm" />
|
||||||
|
@ -182,7 +187,12 @@
|
||||||
<div class="col-md-3"><strong>Nouveau groupe :</strong>
|
<div class="col-md-3"><strong>Nouveau groupe :</strong>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-5">
|
<div class="col-md-5">
|
||||||
<input class="form-control" type="text" name="group" placeholder="Groupe..." />
|
<input class="form-control" list="groups" type="text" name="group" placeholder="Groupe..." />
|
||||||
|
<datalist id="groups">
|
||||||
|
{{ range $key, $value := .ListMemGro}}
|
||||||
|
<option value={{$key}}>{{$value}}</option>
|
||||||
|
{{end}}
|
||||||
|
</datalist>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-2">
|
<div class="col-md-2">
|
||||||
<input type="submit" value="Ajouter" class="form-control btn btn-success btn-sm" />
|
<input type="submit" value="Ajouter" class="form-control btn btn-success btn-sm" />
|
||||||
|
|
Loading…
Reference in a new issue